From 72b21c69e32c73abf3a18b0e962746e64faebba4 Mon Sep 17 00:00:00 2001 From: Jason Maskell Date: Thu, 12 May 2016 10:58:15 +0200 Subject: Restructuring starts. Got some initial CMake problems sorted. Need to extend. --- .gitignore | 2 + CMakeLists.txt | 126 + GenerateProjects.bat | 46 + cmake/CompileFXToH.cmake | 21 + cmake/FindDirectX.cmake | 226 + compiler/cmake/NvWaveWorks.cmake | 232 + sample/d3d11/Effects11/Binary/EffectBinaryFormat.h | 666 -- sample/d3d11/Effects11/Binary/EffectStateBase11.h | 49 - sample/d3d11/Effects11/Binary/EffectStates11.h | 236 - sample/d3d11/Effects11/Binary/SOParser.h | 311 - sample/d3d11/Effects11/Effect.h | 1226 --- sample/d3d11/Effects11/EffectAPI.cpp | 29 - sample/d3d11/Effects11/EffectLoad.cpp | 3982 ---------- sample/d3d11/Effects11/EffectLoad.h | 149 - sample/d3d11/Effects11/EffectNonRuntime.cpp | 2963 ------- sample/d3d11/Effects11/EffectReflection.cpp | 2151 ----- sample/d3d11/Effects11/EffectRuntime.cpp | 694 -- sample/d3d11/Effects11/EffectVariable.inl | 4573 ----------- sample/d3d11/Effects11/Inc/d3dx11dbg.h | 66 - sample/d3d11/Effects11/Inc/d3dx11effect.h | 1566 ---- sample/d3d11/Effects11/Inc/d3dxGlobal.h | 1337 ---- sample/d3d11/Effects11/d3dx11dbg.cpp | 62 - sample/d3d11/Effects11/d3dxGlobal.cpp | 351 - sample/d3d11/Effects11/pchfx.h | 44 - sample/d3d11/Media/UI/DXUTShared.fx | 69 - sample/d3d11/Media/UI/Font.dds | Bin 76128 -> 0 bytes sample/d3d11/Media/UI/arrow.x | 1050 --- sample/d3d11/Media/UI/dxutcontrols.dds | Bin 262272 -> 0 bytes sample/d3d11/Media/ocean_surface_d3d11.fxo | Bin 49887 -> 0 bytes sample/d3d11/Media/sample_d3d11.fxo | Bin 82321 -> 0 bytes sample/d3d11/common.fx | 235 - sample/d3d11/common/DXUT.cpp | 5846 -------------- sample/d3d11/common/DXUT.h | 373 - sample/d3d11/common/DXUTDevice11.cpp | 1154 --- sample/d3d11/common/DXUTDevice11.h | 210 - sample/d3d11/common/DXUTDevice9.cpp | 1177 --- sample/d3d11/common/DXUTDevice9.h | 207 - sample/d3d11/common/DXUTcamera.cpp | 1525 ---- sample/d3d11/common/DXUTcamera.h | 517 -- sample/d3d11/common/DXUTgui.cpp | 7241 ----------------- sample/d3d11/common/DXUTgui.h | 1383 ---- sample/d3d11/common/DXUTmisc.cpp | 1785 ----- sample/d3d11/common/DXUTmisc.h | 594 -- sample/d3d11/common/DXUTres.cpp | 8338 -------------------- sample/d3d11/common/DXUTres.h | 18 - sample/d3d11/common/DXUTsettingsdlg.cpp | 2853 ------- sample/d3d11/common/DXUTsettingsdlg.h | 248 - sample/d3d11/common/SDKmisc.cpp | 1684 ---- sample/d3d11/common/SDKmisc.h | 368 - sample/d3d11/common/directx.ico | Bin 25214 -> 0 bytes sample/d3d11/common/dxerr.cpp | 3657 --------- sample/d3d11/common/dxerr.h | 78 - sample/d3d11/distance_field.cpp | 292 - sample/d3d11/distance_field.h | 80 - sample/d3d11/ocean_surface.cpp | 324 - sample/d3d11/ocean_surface.fx | 791 -- sample/d3d11/ocean_surface.h | 89 - sample/d3d11/resource.h | 44 - sample/d3d11/sample.fx | 759 -- sample/d3d11/sample_d3d11.cpp | 1307 --- sample/d3d11/sample_d3d11.rc | 106 - sample/d3d11/terrain.cpp | 1524 ---- sample/d3d11/terrain.h | 174 - sample/d3d11/util.cpp | 63 - sample/d3d11/win64/debug/cudart64_55.dll | Bin 298272 -> 0 bytes .../win64/debug/gfsdk_waveworks_debug.win64.dll | Bin 2072576 -> 0 bytes sample/d3d11/win64/debug/sample_d3d11_debug.exe | Bin 3253760 -> 0 bytes sample/d3d11/win64/debug/sample_d3d11_debug.ilk | Bin 4746980 -> 0 bytes sample/deploy_sample_d3d11.xpj | 51 - sample/deploy_sample_opengl.xpj | 51 - sample/deploy_sample_xpj.bat | 68 - sample/media/SunsetFair.dds | Bin 16777349 -> 0 bytes sample/media/foam.dds | Bin 1048703 -> 0 bytes sample/media/foam_intensity_perlin2.dds | Bin 5592533 -> 0 bytes sample/media/foam_intensity_perlin2_rgb.dds | Bin 22369748 -> 0 bytes sample/media/lichen1_normal.dds | Bin 4194431 -> 0 bytes sample/media/nvidia_logo.dds | Bin 32128 -> 0 bytes sample/media/reflect_cube.dds | Bin 524408 -> 0 bytes sample/media/rock_bump4.dds | Bin 5592532 -> 0 bytes sample/media/rock_bump6.dds | Bin 5592532 -> 0 bytes sample/media/sand_diffuse.dds | Bin 699192 -> 0 bytes sample/media/sky.dds | Bin 18780128 -> 0 bytes sample/media/sky_cube.dds | Bin 4194512 -> 0 bytes sample/media/terrain_grass.dds | Bin 699192 -> 0 bytes sample/media/terrain_rock4.dds | Bin 1398256 -> 0 bytes sample/media/terrain_slope.dds | Bin 699192 -> 0 bytes sample/media/water_bump.dds | Bin 349652 -> 0 bytes sample/opengl/AntTweakBar/AntTweakBar.dll | Bin 643072 -> 0 bytes sample/opengl/AntTweakBar/AntTweakBar.h | 378 - sample/opengl/AntTweakBar/AntTweakBar.lib | Bin 14662 -> 0 bytes sample/opengl/AntTweakBar/AntTweakBar64.dll | Bin 775680 -> 0 bytes sample/opengl/AntTweakBar/AntTweakBar64.lib | Bin 14024 -> 0 bytes sample/opengl/GFSDK_WaveWorks_Attributes.fxh | 329 - sample/opengl/GFSDK_WaveWorks_Common.fxh | 77 - sample/opengl/GFSDK_WaveWorks_Quadtree.fxh | 145 - sample/opengl/math_code.cpp | 488 -- sample/opengl/math_code.h | 49 - sample/opengl/ocean_surface.cpp | Bin 64730 -> 0 bytes sample/opengl/ocean_surface.h | 345 - sample/opengl/sample_opengl.cpp | 850 -- sample/opengl/water.glsl | 170 - sample/opengl/win64/debug/AntTweakBar64.dll | Bin 775680 -> 0 bytes sample/opengl/win64/debug/cudart64_55.dll | Bin 298272 -> 0 bytes .../win64/debug/gfsdk_waveworks_debug.win64.dll | Bin 2072576 -> 0 bytes sample/opengl/win64/debug/sample_opengl_debug.exe | Bin 821248 -> 0 bytes sample/opengl/win64/debug/sample_opengl_debug.ilk | Bin 1879108 -> 0 bytes src/Quadtree.cpp | 26 +- src/generated/Attributes_map.h | 63 - src/generated/CalcGradient_glsl_ps.h | 33 - src/generated/CalcGradient_glsl_vs.h | 28 - src/generated/CalcGradient_map.h | 21 - src/generated/CalcGradient_nvsf.fx | 63 - src/generated/CalcGradient_ps_3_0.h | 207 - src/generated/CalcGradient_ps_4_0.h | 213 - src/generated/CalcGradient_vs_3_0.h | 47 - src/generated/CalcGradient_vs_4_0.h | 89 - src/generated/Common_map.h | 4 - src/generated/ComputeColumns_cs_5_0.h | 3228 -------- src/generated/ComputeH0_cs_5_0.h | 316 - src/generated/ComputeRows_cs_5_0.h | 3605 --------- src/generated/FoamGeneration_glsl_ps.h | 31 - src/generated/FoamGeneration_glsl_vs.h | 26 - src/generated/FoamGeneration_map.h | 18 - src/generated/FoamGeneration_nvsf.fx | 61 - src/generated/FoamGeneration_ps_3_0.h | 192 - src/generated/FoamGeneration_ps_4_0.h | 245 - src/generated/FoamGeneration_vs_3_0.h | 47 - src/generated/FoamGeneration_vs_4_0.h | 89 - src/generated/Quadtree_SM4_sig.h | 65 - src/generated/Quadtree_SM5_sig.h | 67 - src/generated/Quadtree_map.h | 25 - src/shader/Quadtree.fxh | 2 +- src/shader/Quadtree_SM4_sig.fx | 4 +- src/shader/Quadtree_SM5_sig.fx | 4 +- 134 files changed, 671 insertions(+), 78420 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 GenerateProjects.bat create mode 100644 cmake/CompileFXToH.cmake create mode 100644 cmake/FindDirectX.cmake create mode 100644 compiler/cmake/NvWaveWorks.cmake delete mode 100644 sample/d3d11/Effects11/Binary/EffectBinaryFormat.h delete mode 100644 sample/d3d11/Effects11/Binary/EffectStateBase11.h delete mode 100644 sample/d3d11/Effects11/Binary/EffectStates11.h delete mode 100644 sample/d3d11/Effects11/Binary/SOParser.h delete mode 100644 sample/d3d11/Effects11/Effect.h delete mode 100644 sample/d3d11/Effects11/EffectAPI.cpp delete mode 100644 sample/d3d11/Effects11/EffectLoad.cpp delete mode 100644 sample/d3d11/Effects11/EffectLoad.h delete mode 100644 sample/d3d11/Effects11/EffectNonRuntime.cpp delete mode 100644 sample/d3d11/Effects11/EffectReflection.cpp delete mode 100644 sample/d3d11/Effects11/EffectRuntime.cpp delete mode 100644 sample/d3d11/Effects11/EffectVariable.inl delete mode 100644 sample/d3d11/Effects11/Inc/d3dx11dbg.h delete mode 100644 sample/d3d11/Effects11/Inc/d3dx11effect.h delete mode 100644 sample/d3d11/Effects11/Inc/d3dxGlobal.h delete mode 100644 sample/d3d11/Effects11/d3dx11dbg.cpp delete mode 100644 sample/d3d11/Effects11/d3dxGlobal.cpp delete mode 100644 sample/d3d11/Effects11/pchfx.h delete mode 100644 sample/d3d11/Media/UI/DXUTShared.fx delete mode 100644 sample/d3d11/Media/UI/Font.dds delete mode 100644 sample/d3d11/Media/UI/arrow.x delete mode 100644 sample/d3d11/Media/UI/dxutcontrols.dds delete mode 100644 sample/d3d11/Media/ocean_surface_d3d11.fxo delete mode 100644 sample/d3d11/Media/sample_d3d11.fxo delete mode 100644 sample/d3d11/common.fx delete mode 100644 sample/d3d11/common/DXUT.cpp delete mode 100644 sample/d3d11/common/DXUT.h delete mode 100644 sample/d3d11/common/DXUTDevice11.cpp delete mode 100644 sample/d3d11/common/DXUTDevice11.h delete mode 100644 sample/d3d11/common/DXUTDevice9.cpp delete mode 100644 sample/d3d11/common/DXUTDevice9.h delete mode 100644 sample/d3d11/common/DXUTcamera.cpp delete mode 100644 sample/d3d11/common/DXUTcamera.h delete mode 100644 sample/d3d11/common/DXUTgui.cpp delete mode 100644 sample/d3d11/common/DXUTgui.h delete mode 100644 sample/d3d11/common/DXUTmisc.cpp delete mode 100644 sample/d3d11/common/DXUTmisc.h delete mode 100644 sample/d3d11/common/DXUTres.cpp delete mode 100644 sample/d3d11/common/DXUTres.h delete mode 100644 sample/d3d11/common/DXUTsettingsdlg.cpp delete mode 100644 sample/d3d11/common/DXUTsettingsdlg.h delete mode 100644 sample/d3d11/common/SDKmisc.cpp delete mode 100644 sample/d3d11/common/SDKmisc.h delete mode 100644 sample/d3d11/common/directx.ico delete mode 100644 sample/d3d11/common/dxerr.cpp delete mode 100644 sample/d3d11/common/dxerr.h delete mode 100644 sample/d3d11/distance_field.cpp delete mode 100644 sample/d3d11/distance_field.h delete mode 100644 sample/d3d11/ocean_surface.cpp delete mode 100644 sample/d3d11/ocean_surface.fx delete mode 100644 sample/d3d11/ocean_surface.h delete mode 100644 sample/d3d11/resource.h delete mode 100644 sample/d3d11/sample.fx delete mode 100644 sample/d3d11/sample_d3d11.cpp delete mode 100644 sample/d3d11/sample_d3d11.rc delete mode 100644 sample/d3d11/terrain.cpp delete mode 100644 sample/d3d11/terrain.h delete mode 100644 sample/d3d11/util.cpp delete mode 100644 sample/d3d11/win64/debug/cudart64_55.dll delete mode 100644 sample/d3d11/win64/debug/gfsdk_waveworks_debug.win64.dll delete mode 100644 sample/d3d11/win64/debug/sample_d3d11_debug.exe delete mode 100644 sample/d3d11/win64/debug/sample_d3d11_debug.ilk delete mode 100644 sample/deploy_sample_d3d11.xpj delete mode 100644 sample/deploy_sample_opengl.xpj delete mode 100644 sample/deploy_sample_xpj.bat delete mode 100644 sample/media/SunsetFair.dds delete mode 100644 sample/media/foam.dds delete mode 100644 sample/media/foam_intensity_perlin2.dds delete mode 100644 sample/media/foam_intensity_perlin2_rgb.dds delete mode 100644 sample/media/lichen1_normal.dds delete mode 100644 sample/media/nvidia_logo.dds delete mode 100644 sample/media/reflect_cube.dds delete mode 100644 sample/media/rock_bump4.dds delete mode 100644 sample/media/rock_bump6.dds delete mode 100644 sample/media/sand_diffuse.dds delete mode 100644 sample/media/sky.dds delete mode 100644 sample/media/sky_cube.dds delete mode 100644 sample/media/terrain_grass.dds delete mode 100644 sample/media/terrain_rock4.dds delete mode 100644 sample/media/terrain_slope.dds delete mode 100644 sample/media/water_bump.dds delete mode 100644 sample/opengl/AntTweakBar/AntTweakBar.dll delete mode 100644 sample/opengl/AntTweakBar/AntTweakBar.h delete mode 100644 sample/opengl/AntTweakBar/AntTweakBar.lib delete mode 100644 sample/opengl/AntTweakBar/AntTweakBar64.dll delete mode 100644 sample/opengl/AntTweakBar/AntTweakBar64.lib delete mode 100644 sample/opengl/GFSDK_WaveWorks_Attributes.fxh delete mode 100644 sample/opengl/GFSDK_WaveWorks_Common.fxh delete mode 100644 sample/opengl/GFSDK_WaveWorks_Quadtree.fxh delete mode 100644 sample/opengl/math_code.cpp delete mode 100644 sample/opengl/math_code.h delete mode 100644 sample/opengl/ocean_surface.cpp delete mode 100644 sample/opengl/ocean_surface.h delete mode 100644 sample/opengl/sample_opengl.cpp delete mode 100644 sample/opengl/water.glsl delete mode 100644 sample/opengl/win64/debug/AntTweakBar64.dll delete mode 100644 sample/opengl/win64/debug/cudart64_55.dll delete mode 100644 sample/opengl/win64/debug/gfsdk_waveworks_debug.win64.dll delete mode 100644 sample/opengl/win64/debug/sample_opengl_debug.exe delete mode 100644 sample/opengl/win64/debug/sample_opengl_debug.ilk delete mode 100644 src/generated/Attributes_map.h delete mode 100644 src/generated/CalcGradient_glsl_ps.h delete mode 100644 src/generated/CalcGradient_glsl_vs.h delete mode 100644 src/generated/CalcGradient_map.h delete mode 100644 src/generated/CalcGradient_nvsf.fx delete mode 100644 src/generated/CalcGradient_ps_3_0.h delete mode 100644 src/generated/CalcGradient_ps_4_0.h delete mode 100644 src/generated/CalcGradient_vs_3_0.h delete mode 100644 src/generated/CalcGradient_vs_4_0.h delete mode 100644 src/generated/Common_map.h delete mode 100644 src/generated/ComputeColumns_cs_5_0.h delete mode 100644 src/generated/ComputeH0_cs_5_0.h delete mode 100644 src/generated/ComputeRows_cs_5_0.h delete mode 100644 src/generated/FoamGeneration_glsl_ps.h delete mode 100644 src/generated/FoamGeneration_glsl_vs.h delete mode 100644 src/generated/FoamGeneration_map.h delete mode 100644 src/generated/FoamGeneration_nvsf.fx delete mode 100644 src/generated/FoamGeneration_ps_3_0.h delete mode 100644 src/generated/FoamGeneration_ps_4_0.h delete mode 100644 src/generated/FoamGeneration_vs_3_0.h delete mode 100644 src/generated/FoamGeneration_vs_4_0.h delete mode 100644 src/generated/Quadtree_SM4_sig.h delete mode 100644 src/generated/Quadtree_SM5_sig.h delete mode 100644 src/generated/Quadtree_map.h diff --git a/.gitignore b/.gitignore index 5388fcd..ff7a5b1 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,5 @@ test/gl2/win64/debug/cudart64_55.dll *.exe *.out *.app +compiler/vc12win64-cmake/ +src/generated/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..7116a55 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,126 @@ +cmake_minimum_required(VERSION 3.3) + +project(WaveWorks CXX) + +CMAKE_POLICY(SET CMP0057 NEW) # Enable IN_LIST + +SET(GW_DEPS_ROOT $ENV{GW_DEPS_ROOT}) + +IF(NOT EXISTS ${GW_DEPS_ROOT}/CMakeModules) + MESSAGE(FATAL_ERROR "Could not find CMakeModules at ${GW_DEPS_ROOT}") +ENDIF() + +LIST(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake) +LIST(APPEND CMAKE_MODULE_PATH ${GW_DEPS_ROOT}/CMakeModules) + +MESSAGE(${CMAKE_MODULE_PATH}) + +# TODO: Fail if we didn't find deps + +IF(CMAKE_CONFIGURATION_TYPES) + SET(CMAKE_CONFIGURATION_TYPES debug release) + SET(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING + "Reset config to what we need" + FORCE) + + SET(CMAKE_SHARED_LINKER_FLAGS_CHECKED "") + SET(CMAKE_SHARED_LINKER_FLAGS_PROFILE "") + +ENDIF() + +SET(GW_DEPS_ROOT $ENV{GW_DEPS_ROOT}) + +# Handle different platforms. So far, Windows, PS4, XBone, Linux... More? +IF(NOT DEFINED TARGET_BUILD_PLATFORM) # Not defined, default to Windows + SET(TARGET_BUILD_PLATFORM "Windows") +ENDIF() + +SET(PLATFORM_LIST Windows PS4 XBoxOne OSX Android) + +IF (NOT ${TARGET_BUILD_PLATFORM} IN_LIST PLATFORM_LIST) + MESSAGE(FATAL_ERROR "Invalid platform:" ${TARGET_BUILD_PLATFORM}) +ENDIF() + +IF(TARGET_BUILD_PLATFORM STREQUAL "Windows") + SET(CMAKE_CXX_FLAGS "/Wall /wd4514 /wd4820 /wd4127 /wd4710 /wd4711 /d2Zi+ /WX /W4 /GF /GS- /GR- /Gd /fp:fast") + + SET(CMAKE_CXX_FLAGS_DEBUG "/Od /MTd /RTCu") + SET(CMAKE_CXX_FLAGS_CHECKED "/Ox /MT") + SET(CMAKE_CXX_FLAGS_PROFILE "/Ox /MT") + SET(CMAKE_CXX_FLAGS_RELEASE "/Ox /MT") + + IF(CMAKE_CL_64) + ADD_DEFINITIONS(-DWIN64) + ENDIF(CMAKE_CL_64) + + +ELSEIF(TARGET_BUILD_PLATFORM STREQUAL "PS4") + SET(CMAKE_CXX_FLAGS "-fdiagnostics-show-option -fno-rtti -fno-exceptions -ffast-math -ffunction-sections -fdata-sections -Werror -ferror-limit=0 -Wall -Wextra -fstrict-aliasing -Wstrict-aliasing=2 -pedantic -Weverything -Wno-documentation-deprecated-sync -Wno-documentation-unknown-command -Wno-float-equal -Wno-padded -Wno-weak-vtables -Wno-cast-align -Wno-conversion -Wno-missing-noreturn -Wno-missing-variable-declarations -Wno-shift-sign-overflow -Wno-covered-switch-default -Wno-exit-time-destructors -Wno-global-constructors -Wno-missing-prototypes -Wno-unreachable-code -Wno-unused-macros -Wno-unused-member-function -Wno-used-but-marked-unused -Wno-weak-template-vtables -Wno-deprecated") + + SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") + SET(CMAKE_CXX_FLAGS_CHECKED "-O2") + SET(CMAKE_CXX_FLAGS_PROFILE "-O2") + SET(CMAKE_CXX_FLAGS_RELEASE "-O2") + +ELSEIF(TARGET_BUILD_PLATFORM STREQUAL "XBoxOne") + SET(CMAKE_CXX_FLAGS "/Wall /wd4512 /wd4324 /wd4127 /wd4505 /wd4100 /wd4714 /WX /W4 /GF /GR- /Gd /fp:fast /Zp16 /favor:AMD64 /MDd") + + SET(CMAKE_CXX_FLAGS_DEBUG "/Od") + SET(CMAKE_CXX_FLAGS_CHECKED "/Ox") + SET(CMAKE_CXX_FLAGS_PROFILE "/Ox /Oi /Zi") + SET(CMAKE_CXX_FLAGS_RELEASE "/0x /Oi") + + SET(CMAKE_SHARED_LINKER_FLAGS "/IGNORE:4221") + + +ENDIF() + + +# Default to appending "DEBUG", "PROFILE", etc to produced artifacts +IF(NOT DEFINED APPEND_CONFIG_NAME) + SET(APPEND_CONFIG_NAME ON) +ENDIF() + +IF (APPEND_CONFIG_NAME) + MESSAGE("Appending config to output names") + + SET(CMAKE_DEBUG_POSTFIX "_debug") + SET(CMAKE_RELEASE_POSTFIX "") +ENDIF() + +IF (TARGET_BUILD_PLATFORM STREQUAL "Windows") + IF(CMAKE_CL_64) + SET(LIBPATH_SUFFIX "win64") + ELSE(CMAKE_CL_64) + SET(LIBPATH_SUFFIX "Win32") + ENDIF(CMAKE_CL_64) + + SET(CMAKE_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}.${LIBPATH_SUFFIX}") + SET(CMAKE_RELEASE_POSTFIX "${CMAKE_RELEASE_POSTFIX}.${LIBPATH_SUFFIX}") +ENDIF() + + +IF(NOT DEFINED WW_OUTPUT_DIR) + # If there's no output dir set, default to something somewhat sensible. + SET(WW_OUTPUT_DIR ${CMAKE_SOURCE_DIR}/Lib/cmake/) +ENDIF() + +# Only set this once, to avoid cascading sets. +IF(NOT DEFINED FINAL_OUTPUT_DIR) + # We assume that WW_OUTPUT_DIR is a RELATIVE path. + SET(FINAL_OUTPUT_DIR ${CMAKE_SOURCE_DIR}/${WW_OUTPUT_DIR}) +ENDIF() + +MESSAGE("Final Output Directory: " ${FINAL_OUTPUT_DIR}) + +# Override the default output directories for all configurations. +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${FINAL_OUTPUT_DIR}) +SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${FINAL_OUTPUT_DIR}) +SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${FINAL_OUTPUT_DIR}) + +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${FINAL_OUTPUT_DIR}) +SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${FINAL_OUTPUT_DIR}) +SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${FINAL_OUTPUT_DIR}) + +# Include all of the projects +INCLUDE(compiler/cmake/NvWaveWorks.cmake) diff --git a/GenerateProjects.bat b/GenerateProjects.bat new file mode 100644 index 0000000..1c6ceb0 --- /dev/null +++ b/GenerateProjects.bat @@ -0,0 +1,46 @@ +REM @echo off + +REM Make sure the various variables that we need are set + +IF NOT DEFINED GW_DEPS_ROOT GOTO GW_DEPS_ROOT_UNDEFINED + +IF NOT DEFINED CUDA_BIN_PATH GOTO CUDA_ROOT_UNDEFINED + +REM Generate projects here + +rmdir /s /q compiler\vc12win64-cmake\ +mkdir compiler\vc12win64-cmake\ +pushd compiler\vc12win64-cmake\ +cmake ..\.. -G "Visual Studio 12 2013" -Ax64 -DTARGET_BUILD_PLATFORM=Windows -DWW_OUTPUT_DIR=bin\vc12win64-cmake\ +popd + +REM rmdir /s /q compiler\vc12-ps4-cmake\ +REM mkdir compiler\vc12-ps4-cmake\ +REM pushd compiler\vc12-ps4-cmake\ +REM cmake ..\.. -G "Visual Studio 12 2013" -DTARGET_BUILD_PLATFORM=PS4 -DPX_OUTPUT_DIR=lib\PS4\VS2013\ -DCMAKE_TOOLCHAIN_FILE="%GW_DEPS_ROOT%\CMakeModules\PS4Toolchain.txt" -DCMAKE_GENERATOR_PLATFORM=ORBIS +REM popd + +REM rmdir /s /q compiler\vc11xbone-cmake\ +REM mkdir compiler\vc11xbone-cmake\ +REM pushd compiler\vc11xbone-cmake\ +REM cmake ..\.. -G "Visual Studio 11 2012" -DTARGET_BUILD_PLATFORM=XBoxOne -DPX_OUTPUT_DIR=lib\XboxOne\VS2012\ -DCMAKE_TOOLCHAIN_FILE="%GW_DEPS_ROOT%\CMakeModules\XBoneToolchain.txt" -DCMAKE_GENERATOR_PLATFORM=Durango + +REM Because XBone build is a bit wonky, delete these meta projects. + +REM del ZERO_CHECK.* +REM del ALL_BUILD.* + +REM popd + +GOTO :End + +:GW_DEPS_ROOT_UNDEFINED +ECHO GW_DEPS_ROOT has to be defined, pointing to the root of the dependency tree. +PAUSE +GOTO END + +:CUDA_ROOT_UNDEFINED +ECHO CUDA_BIN_PATH has to be defined, pointing to the bin folder of your local CUDA install. +PAUSE + +:End diff --git a/cmake/CompileFXToH.cmake b/cmake/CompileFXToH.cmake new file mode 100644 index 0000000..02817e8 --- /dev/null +++ b/cmake/CompileFXToH.cmake @@ -0,0 +1,21 @@ +FUNCTION(CompileFXToH FILE OUTPUT_DIR TARGET INCLUDE_DIR INCLUDE_DIR2 ENTRYPOINT OPTIONS) + + GET_FILENAME_COMPONENT(FILE_WE ${FILE} NAME_WE) + +# "/I${SHADER_SRC_DIR} /EGFSDK_WAVEWORKS_VERTEX_INPUT_Sig /Tvs_4_0 ${SHADER_SRC_DIR}\Quadtree_SM4_sig.fx /Fh ${WW_SOURCE_DIR}\generated\Quadtree_SM4_sig.h" + + ADD_CUSTOM_TARGET(${TARGET} ALL) + + ADD_CUSTOM_COMMAND( + PRE_BUILD +# TARGET ${TARGET} + OUTPUT ${OUTPUT_DIR}/${FILE_WE}.h + COMMAND ${DirectX_FXC_EXECUTABLE} /I${INCLUDE_DIR} /I${INCLUDE_DIR2} /E${ENTRYPOINT} ${OPTIONS} ${FILE} /Fh ${OUTPUT_DIR}/${FILE_WE}.h + MAIN_DEPENDENCY ${FILE} + COMMENT "FXC Compile ${FILE}" + VERBATIM + ) + + #ADD_DEPENDENCIES(${TARGET} ${OUTPUT_DIR}/generated/${FILE_WE}.h) + +ENDFUNCTION(CompileFXToH) diff --git a/cmake/FindDirectX.cmake b/cmake/FindDirectX.cmake new file mode 100644 index 0000000..34dbdd8 --- /dev/null +++ b/cmake/FindDirectX.cmake @@ -0,0 +1,226 @@ +# - try to find DirectX include directories and libraries +# +# Once done this will define: +# +# DirectX_XYZ_FOUND - system has the XYZ API +# DirectX_XYZ_INCLUDE_FOUND - system has the include for the XYZ API +# DirectX_XYZ_INCLUDE_DIR - include directory for the XYZ API +# DirectX_XYZ_LIBRARY - path/name for the XYZ library +# +# Where XYZ can be any of: +# +# DDRAW +# D3D +# D3DX +# D3D8 +# D3DX8 +# D3D9 +# D3DX9 +# D3D10 +# D3D10_1 +# D3DX10 +# D3D11 +# D3D11_1 +# D3D11_2 +# D3DX11 +# D2D1 +# + + +include (CheckIncludeFileCXX) +include (FindPackageMessage) + + +if (WIN32) + + if (CMAKE_SIZEOF_VOID_P EQUAL 8) + set (DirectX_ARCHITECTURE x64) + else () + set (DirectX_ARCHITECTURE x86) + endif () + + # Can't use "$ENV{ProgramFiles(x86)}" to avoid violating CMP0053. See + # http://public.kitware.com/pipermail/cmake-developers/2014-October/023190.html + set (ProgramFiles_x86 "ProgramFiles(x86)") + if ("$ENV{${ProgramFiles_x86}}") + set (ProgramFiles "$ENV{${ProgramFiles_x86}}") + else () + set (ProgramFiles "$ENV{ProgramFiles}") + endif () + + find_path (DirectX_ROOT_DIR + Include/d3d9.h + PATHS + "$ENV{DXSDK_DIR}" + "${ProgramFiles}/Microsoft DirectX SDK (June 2010)" + "${ProgramFiles}/Microsoft DirectX SDK (February 2010)" + "${ProgramFiles}/Microsoft DirectX SDK (March 2009)" + "${ProgramFiles}/Microsoft DirectX SDK (August 2008)" + "${ProgramFiles}/Microsoft DirectX SDK (June 2008)" + "${ProgramFiles}/Microsoft DirectX SDK (March 2008)" + "${ProgramFiles}/Microsoft DirectX SDK (November 2007)" + "${ProgramFiles}/Microsoft DirectX SDK (August 2007)" + "${ProgramFiles}/Microsoft DirectX SDK" + DOC "DirectX SDK root directory" + ) + if (DirectX_ROOT_DIR) + set (DirectX_INC_SEARCH_PATH "${DirectX_ROOT_DIR}/Include") + set (DirectX_LIB_SEARCH_PATH "${DirectX_ROOT_DIR}/Lib/${DirectX_ARCHITECTURE}") + set (DirectX_BIN_SEARCH_PATH "${DirectX_ROOT_DIR}/Utilities/bin/x86") + endif () + + # With VS 2011 and Windows 8 SDK, the DirectX SDK is included as part of + # the Windows SDK. + # + # See also: + # - http://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx + if (DEFINED MSVC_VERSION AND NOT ${MSVC_VERSION} LESS 1700) + set (USE_WINSDK_HEADERS TRUE) + endif () + + # Find a header in the DirectX SDK + macro (find_dxsdk_header var_name header) + set (include_dir_var "DirectX_${var_name}_INCLUDE_DIR") + set (include_found_var "DirectX_${var_name}_INCLUDE_FOUND") + find_path (${include_dir_var} ${header} + HINTS ${DirectX_INC_SEARCH_PATH} + DOC "The directory where ${header} resides" + CMAKE_FIND_ROOT_PATH_BOTH + ) + if (${include_dir_var}) + set (${include_found_var} TRUE) + find_package_message (${var_name}_INC "Found ${header} header: ${${include_dir_var}}/${header}" "[${${include_dir_var}}]") + endif () + mark_as_advanced (${include_found_var}) + endmacro () + + # Find a library in the DirectX SDK + macro (find_dxsdk_library var_name library) + # DirectX SDK + set (library_var "DirectX_${var_name}_LIBRARY") + find_library (${library_var} ${library} + HINTS ${DirectX_LIB_SEARCH_PATH} + DOC "The directory where ${library} resides" + CMAKE_FIND_ROOT_PATH_BOTH + ) + if (${library_var}) + find_package_message (${var_name}_LIB "Found ${library} library: ${${library_var}}" "[${${library_var}}]") + endif () + mark_as_advanced (${library_var}) + endmacro () + + # Find a header in the Windows SDK + macro (find_winsdk_header var_name header) + if (USE_WINSDK_HEADERS) + # Windows SDK + set (include_dir_var "DirectX_${var_name}_INCLUDE_DIR") + set (include_found_var "DirectX_${var_name}_INCLUDE_FOUND") + check_include_file_cxx (${header} ${include_found_var}) + set (${include_dir_var}) + mark_as_advanced (${include_found_var}) + else () + find_dxsdk_header (${var_name} ${header}) + endif () + endmacro () + + # Find a library in the Windows SDK + macro (find_winsdk_library var_name library) + if (USE_WINSDK_HEADERS) + # XXX: We currently just assume the library exists + set (library_var "DirectX_${var_name}_LIBRARY") + set (${library_var} ${library}) + mark_as_advanced (${library_var}) + else () + find_dxsdk_library (${var_name} ${library}) + endif () + endmacro () + + # Combine header and library variables into an API found variable + macro (find_combined var_name inc_var_name lib_var_name) + if (DirectX_${inc_var_name}_INCLUDE_FOUND AND DirectX_${lib_var_name}_LIBRARY) + set (DirectX_${var_name}_FOUND 1) + find_package_message (${var_name} "Found ${var_name} API" "[${DirectX_${lib_var_name}_LIBRARY}][${DirectX_${inc_var_name}_INCLUDE_DIR}]") + endif () + endmacro () + + find_winsdk_header (DDRAW ddraw.h) + find_winsdk_library (DDRAW ddraw) + find_combined (DDRAW DDRAW DDRAW) + + if (CMAKE_GENERATOR_TOOLSET MATCHES "_xp$") + set (WINDOWS_XP TRUE) + endif () + + if (WINDOWS_XP) + # Windows 7 SDKs, used by XP toolset, do not include d3d.h + find_dxsdk_header (D3D d3d.h) + else () + find_winsdk_header (D3D d3d.h) + endif () + find_combined (D3D D3D DDRAW) + + find_dxsdk_header (D3DX d3dx.h) + find_combined (D3DX D3DX D3DX) + + find_dxsdk_header (D3D8 d3d8.h) + find_dxsdk_library (D3D8 d3d8) + find_combined (D3D8 D3D8 D3D8) + + find_dxsdk_header (D3DX8 d3dx8.h) + find_dxsdk_library (D3DX8 d3dx8) + find_combined (D3DX8 D3DX8 D3DX8) + + find_winsdk_header (D3D9 d3d9.h) + find_winsdk_library (D3D9 d3d9) + find_combined (D3D9 D3D9 D3D9) + + find_dxsdk_header (D3DX9 d3dx9.h) + find_dxsdk_library (D3DX9 d3dx9) + find_combined (D3DX9 D3DX9 D3DX9) + + if (NOT WINDOWS_XP) + find_winsdk_header (DXGI dxgi.h) + find_winsdk_header (DXGI1_2 dxgi1_2.h) + find_winsdk_header (DXGI1_3 dxgi1_3.h) + find_winsdk_header (DXGI1_4 dxgi1_4.h) + find_winsdk_library (DXGI dxgi) + + find_winsdk_header (D3D10 d3d10.h) + find_winsdk_library (D3D10 d3d10) + find_combined (D3D10 D3D10 D3D10) + + find_winsdk_header (D3D10_1 d3d10_1.h) + find_winsdk_library (D3D10_1 d3d10_1) + find_combined (D3D10_1 D3D10_1 D3D10_1) + + find_dxsdk_header (D3DX10 d3dx10.h) + find_dxsdk_library (D3DX10 d3dx10) + find_combined (D3DX10 D3DX10 D3DX10) + + find_winsdk_header (D3D11 d3d11.h) + find_winsdk_library (D3D11 d3d11) + find_combined (D3D11 D3D11 D3D11) + find_winsdk_header (D3D11_1 d3d11_1.h) + find_combined (D3D11_1 D3D11_1 D3D11) + find_winsdk_header (D3D11_2 d3d11_2.h) + find_combined (D3D11_2 D3D11_2 D3D11) + find_winsdk_header (D3D11_3 d3d11_3.h) + find_combined (D3D11_3 D3D11_3 D3D11) + + find_dxsdk_header (D3DX11 d3dx11.h) + find_dxsdk_library (D3DX11 d3dx11) + find_combined (D3DX11 D3DX11 D3DX11) + + find_winsdk_header (D2D1 d2d1.h) + find_winsdk_library (D2D1 d2d1) + find_combined (D2D1 D2D1 D2D1) + find_winsdk_header (D2D1_1 d2d1_1.h) + find_combined (D2D1_1 D2D1_1 D2D1) + endif () + + find_program (DirectX_FXC_EXECUTABLE fxc + HINTS ${DirectX_BIN_SEARCH_PATH} + DOC "Path to fxc.exe executable." + ) + +endif () diff --git a/compiler/cmake/NvWaveWorks.cmake b/compiler/cmake/NvWaveWorks.cmake new file mode 100644 index 0000000..387dc84 --- /dev/null +++ b/compiler/cmake/NvWaveWorks.cmake @@ -0,0 +1,232 @@ +# +# Build NvWaveWorks (PROJECT not SOLUTION) +# + +SET(GW_DEPS_ROOT $ENV{GW_DEPS_ROOT}) + +FIND_PACKAGE(CUDA REQUIRED) + + +SET(WW_SOURCE_DIR ${PROJECT_SOURCE_DIR}/src) +SET(SHADER_SRC_DIR ${WW_SOURCE_DIR}/shader) +SET(DISTRO_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include) +SET(GEN_SRC_DIR ${WW_SOURCE_DIR}/generated) + +IF(TARGET_BUILD_PLATFORM STREQUAL "Windows") + + FIND_PACKAGE(DirectX REQUIRED) + + SET(WW_PLATFORM_INCLUDES + ) + + SET(WW_PLATFORM_SRC_FILES + ) + + + # Use generator expressions to set config specific preprocessor definitions + SET(WW_COMPILE_DEFS + # Common to all configurations + _LIB;NVWAVEWORKS_LIB_DLL_EXPORTS;WIN32; + + $<$:PROFILE;_DEV;> + $<$:NDEBUG;> + ) + + SET(WW_LIBTYPE SHARED) + +ELSEIF(TARGET_BUILD_PLATFORM STREQUAL "PS4") + + SET(WW_PLATFORM_INCLUDES + $ENV{SCE_ORBIS_SDK_DIR}/target/include + ) + + SET(WW_COMPILE_DEFS + + # Common to all configurations + _LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;PX_PHYSX_STATIC_LIB; + + $<$:_DEBUG;PX_DEBUG=1;PX_CHECKED=1;PX_SUPPORT_PVD=1;> + $<$:NDEBUG;PX_SUPPORT_PVD=0;> + ) + + SET(WW_LIBTYPE STATIC) + +ELSEIF(TARGET_BUILD_PLATFORM STREQUAL "XBoxOne") + SET(WW_PLATFORM_INCLUDES + ) + + # Use generator expressions to set config specific preprocessor definitions + SET(WW_COMPILE_DEFS + + # Common to all configurations + PX_PHYSX_CORE_EXPORTS;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WINAPI_FAMILY=WINAPI_FAMILY_TV_TITLE;PX_PHYSX_STATIC_LIB; + + $<$:_DEBUG;PX_DEBUG=1;PX_CHECKED=1;PX_SUPPORT_PVD=1;> + $<$:NDEBUG;PX_SUPPORT_PVD=0;> + ) + + SET(WW_LIBTYPE STATIC) + + +ELSEIF(TARGET_BUILD_PLATFORM STREQUAL "Unix") +ENDIF() + +SET(CPP_FILES + ${WW_SOURCE_DIR}/CustomMemory.cpp + ${WW_SOURCE_DIR}/D3DX_Replacement_code.cpp + ${WW_SOURCE_DIR}/Entrypoints.cpp + + ${WW_SOURCE_DIR}/FFT_Simulation_CPU.cpp + ${WW_SOURCE_DIR}/FFT_Simulation_CUDA.cpp + ${WW_SOURCE_DIR}/FFT_Simulation_DirectCompute.cpp + ${WW_SOURCE_DIR}/FFT_Simulation_Manager_CPU.cpp + ${WW_SOURCE_DIR}/FFT_Simulation_Manager_CUDA.cpp + ${WW_SOURCE_DIR}/FFT_Simulation_Manager_DirectCompute.cpp + + ${WW_SOURCE_DIR}/GFX_Timer.cpp + ${WW_SOURCE_DIR}/GLFunctions.cpp + ${WW_SOURCE_DIR}/Mesh.cpp + ${WW_SOURCE_DIR}/Quadtree.cpp + ${WW_SOURCE_DIR}/Savestate.cpp + ${WW_SOURCE_DIR}/Simulation.cpp + ${WW_SOURCE_DIR}/Simulation_Util.cpp +) + +SET(H_FILES + ${WW_SOURCE_DIR}/CustomMemory.h + ${WW_SOURCE_DIR}/D3DX_Replacement_code.h + ${WW_SOURCE_DIR}/FFT_API_Support.h + ${WW_SOURCE_DIR}/FFT_Simulation.h + ${WW_SOURCE_DIR}/FFT_Simulation_CPU_impl.h + ${WW_SOURCE_DIR}/FFT_Simulation_CUDA_impl.h + ${WW_SOURCE_DIR}/FFT_Simulation_DirectCompute_impl.h + ${WW_SOURCE_DIR}/FFT_Simulation_Manager.h + ${WW_SOURCE_DIR}/FFT_Simulation_Manager_CPU_impl.h + ${WW_SOURCE_DIR}/FFT_Simulation_Manager_CUDA_impl.h + ${WW_SOURCE_DIR}/FFT_Simulation_Manager_DirectCompute_impl.h + ${WW_SOURCE_DIR}/Float16_Util.h + ${WW_SOURCE_DIR}/GFX_Timer_impl.h + ${WW_SOURCE_DIR}/Graphics_Context.h + ${WW_SOURCE_DIR}/internal.h + ${WW_SOURCE_DIR}/Mesh.h + ${WW_SOURCE_DIR}/Quadtree_impl.h + ${WW_SOURCE_DIR}/Savestate_impl.h + ${WW_SOURCE_DIR}/Simulation_impl.h + ${WW_SOURCE_DIR}/Simulation_Util.h + ${WW_SOURCE_DIR}/Spectrum_Util.h +) + +SET(DISTRO_INCLUDE_FILES + ${DISTRO_INCLUDE_DIR}/GFSDK_WaveWorks.h + ${DISTRO_INCLUDE_DIR}/GFSDK_WaveWorks_Common.h + ${DISTRO_INCLUDE_DIR}/GFSDK_WaveWorks_D3D_Util.h + ${DISTRO_INCLUDE_DIR}/GFSDK_WaveWorks_GUID.h + ${DISTRO_INCLUDE_DIR}/GFSDK_WaveWorks_Types.h +) + +SET(HLSL_FILES + ${SHADER_SRC_DIR}/Attributes.fxh + ${SHADER_SRC_DIR}/Common.fxh + ${SHADER_SRC_DIR}/Quadtree.fxh + + ${SHADER_SRC_DIR}/CalcGradient.fx + ${SHADER_SRC_DIR}/CalcGradient_SM3.fx + ${SHADER_SRC_DIR}/CalcGradient_SM4.fx + + ${SHADER_SRC_DIR}/FoamGeneration.fx + ${SHADER_SRC_DIR}/FoamGeneration_SM3.fx + ${SHADER_SRC_DIR}/FoamGeneration_SM4.fx + + ${SHADER_SRC_DIR}/Quadtree_SM4_sig.fx + ${SHADER_SRC_DIR}/Quadtree_SM5_sig.fx + + ${WW_SOURCE_DIR}/FFT_Simulation_DirectCompute_shader.hlsl +) + +SET(CUDA_FILES + ${WW_SOURCE_DIR}/FFT_Simulation_CUDA_kernel.cu +) + + +INCLUDE(cmake/CompileFXToH.cmake) + +#ADD_CUSTOM_TARGET(fx ALL) + +#FUNCTION(CompileFXToH FILE OUTPUT_DIR TARGET INCLUDE_DIR ENTRYPOINT OPTIONS) + +CompileFXToH(${SHADER_SRC_DIR}/Quadtree_SM4_sig.fx ${GEN_SRC_DIR} fx1 ${SHADER_SRC_DIR} ${DISTRO_INCLUDE_DIR} GFSDK_WAVEWORKS_VERTEX_INPUT_Sig /Tvs_4_0) +CompileFXToH(${SHADER_SRC_DIR}/Quadtree_SM5_sig.fx ${GEN_SRC_DIR} fx2 ${SHADER_SRC_DIR} ${DISTRO_INCLUDE_DIR} GFSDK_WAVEWORKS_VERTEX_INPUT_Sig /Tvs_5_0) + +ADD_LIBRARY(WaveWorks ${WW_LIBTYPE} + ${WW_PLATFORM_SRC_FILES} + + ${CPP_FILES} + ${H_FILES} + ${DISTRO_INCLUDE_FILES} + + ${WW_SOURCE_DIR}/generated/Quadtree_SM4_sig.h + ${SHADER_SRC_DIR}/Quadtree_SM4_sig.fx + + ${WW_SOURCE_DIR}/generated/Quadtree_SM5_sig.h + ${SHADER_SRC_DIR}/Quadtree_SM5_sig.fx + +# ${HLSL_FILES} +# ${CUDA_FILES} +) + +SOURCE_GROUP("src" FILES ${CPP_FILES} ${H_FILES}) +SOURCE_GROUP("include" FILES ${DISTRO_INCLUDE_FILES}) +#SOURCE_GROUP("header" FILES ${H_FILES}) +#SOURCE_GROUP("hlsl" FILES ${HLSL_FILES}) +#SOURCE_GROUP("cuda" FILES ${CUDA_FILES}) + + + +# Target specific compile options + + +TARGET_INCLUDE_DIRECTORIES(WaveWorks + PRIVATE ${WW_PLATFORM_INCLUDES} + PRIVATE ${CUDA_INCLUDE_DIRS} + PRIVATE ${GEN_SRC_DIR} + + PRIVATE ${PROJECT_SOURCE_DIR}/include + PRIVATE ${SHADER_SRC_DIR} +) + +TARGET_COMPILE_DEFINITIONS(WaveWorks + + # Common to all configurations + PRIVATE ${WW_COMPILE_DEFS} +) + + + +#TODO: Link flags + +IF(TARGET_BUILD_PLATFORM STREQUAL "Windows") + # Add linked libraries +# TARGET_LINK_LIBRARIES(WaveWorks PUBLIC ${NVTOOLSEXT_LIBRARIES} LowLevel LowLevelAABB LowLevelCloth LowLevelDynamics LowLevelParticles WaveWorksCommon WaveWorksGpu PxFoundation PxPvdSDK PxTask SceneQuery SimulationController) + + IF(CMAKE_CL_64) + SET(LIBPATH_SUFFIX "win64") + ELSE(CMAKE_CL_64) + SET(LIBPATH_SUFFIX "Win32") + ENDIF(CMAKE_CL_64) + + SET_TARGET_PROPERTIES(WaveWorks PROPERTIES + LINK_FLAGS_DEBUG "/DELAYLOAD:nvcuda.dll /MAP /DELAYLOAD:PxFoundationDEBUG_${LIBPATH_SUFFIX}.dll /DELAYLOAD:WaveWorks3CommonDEBUG_${LIBPATH_SUFFIX}.dll /DEBUG" + LINK_FLAGS_RELEASE "/DELAYLOAD:nvcuda.dll /MAP /DELAYLOAD:WaveWorks3Common_${LIBPATH_SUFFIX}.dll /DELAYLOAD:PxFoundation_${LIBPATH_SUFFIX}.dll /INCREMENTAL:NO" + ) + +ELSEIF(TARGET_BUILD_PLATFORM STREQUAL "PS4") +# TARGET_LINK_LIBRARIES(WaveWorks PUBLIC LowLevel LowLevelAABB LowLevelCloth LowLevelDynamics LowLevelParticles WaveWorksCommon PxFoundation PxPvdSDK PxTask SceneQuery SimulationController) + +ELSEIF(TARGET_BUILD_PLATFORM STREQUAL "XBoxOne") + +# TARGET_LINK_LIBRARIES(WaveWorks PUBLIC LowLevel LowLevelAABB LowLevelCloth LowLevelDynamics LowLevelParticles WaveWorksCommon PxFoundation PxPvdSDK PxTask SceneQuery SimulationController) + +ELSEIF(TARGET_BUILD_PLATFORM STREQUAL "Unix") +ENDIF() + + diff --git a/sample/d3d11/Effects11/Binary/EffectBinaryFormat.h b/sample/d3d11/Effects11/Binary/EffectBinaryFormat.h deleted file mode 100644 index 50c5ce3..0000000 --- a/sample/d3d11/Effects11/Binary/EffectBinaryFormat.h +++ /dev/null @@ -1,666 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: Effect.h -// Content: D3DX11 Effects Binary Format -// This is the binary file interface shared between the Effects -// compiler and runtime. -// -////////////////////////////////////////////////////////////////////////////// - -#pragma once - -namespace D3DX11Effects -{ - - -////////////////////////////////////////////////////////////////////////// -// Version Control -////////////////////////////////////////////////////////////////////////// - -#define D3D10_FXL_VERSION(_Major,_Minor) (('F' << 24) | ('X' << 16) | ((_Major) << 8) | (_Minor)) - -struct EVersionTag -{ - const char* m_pName; - DWORD m_Version; - UINT m_Tag; -}; - -// versions must be listed in ascending order -static CONST EVersionTag g_EffectVersions[] = -{ - { "fx_4_0", D3D10_FXL_VERSION(4,0), 0xFEFF1001 }, - { "fx_4_1", D3D10_FXL_VERSION(4,1), 0xFEFF1011 }, - { "fx_5_0", D3D10_FXL_VERSION(5,0), 0xFEFF2001 }, -}; -#define NUM_EFFECT10_VERSIONS ( sizeof(g_EffectVersions) / sizeof(EVersionTag) ) - - -////////////////////////////////////////////////////////////////////////// -// Reflection & Type structures -////////////////////////////////////////////////////////////////////////// - -// Enumeration of the possible left-hand side values of an assignment, -// divided up categorically by the type of block they may appear in -enum ELhsType -{ - ELHS_Invalid, - - // Pass block assignment types - - ELHS_PixelShaderBlock, // SBlock *pValue points to the block to apply - ELHS_VertexShaderBlock, - ELHS_GeometryShaderBlock, - ELHS_RenderTargetView, - ELHS_DepthStencilView, - - ELHS_RasterizerBlock, - ELHS_DepthStencilBlock, - ELHS_BlendBlock, - - ELHS_GenerateMips, // This is really a call to D3D::GenerateMips - - // Various SAssignment.Value.* - - ELHS_DS_StencilRef, // SAssignment.Value.pdValue - ELHS_B_BlendFactor, // D3D10_BLEND_CONFIG.BlendFactor, points to a float4 - ELHS_B_SampleMask, // D3D10_BLEND_CONFIG.SampleMask - - ELHS_GeometryShaderSO, // When setting SO assignments, GeometryShaderSO precedes the actual GeometryShader assn - - ELHS_ComputeShaderBlock, - ELHS_HullShaderBlock, - ELHS_DomainShaderBlock, - - // Rasterizer - - ELHS_FillMode = 0x20000, - ELHS_CullMode, - ELHS_FrontCC, - ELHS_DepthBias, - ELHS_DepthBiasClamp, - ELHS_SlopeScaledDepthBias, - ELHS_DepthClipEnable, - ELHS_ScissorEnable, - ELHS_MultisampleEnable, - ELHS_AntialiasedLineEnable, - - // Sampler - - ELHS_Filter = 0x30000, - ELHS_AddressU, - ELHS_AddressV, - ELHS_AddressW, - ELHS_MipLODBias, - ELHS_MaxAnisotropy, - ELHS_ComparisonFunc, - ELHS_BorderColor, - ELHS_MinLOD, - ELHS_MaxLOD, - ELHS_Texture, - - // DepthStencil - - ELHS_DepthEnable = 0x40000, - ELHS_DepthWriteMask, - ELHS_DepthFunc, - ELHS_StencilEnable, - ELHS_StencilReadMask, - ELHS_StencilWriteMask, - ELHS_FrontFaceStencilFailOp, - ELHS_FrontFaceStencilDepthFailOp, - ELHS_FrontFaceStencilPassOp, - ELHS_FrontFaceStencilFunc, - ELHS_BackFaceStencilFailOp, - ELHS_BackFaceStencilDepthFailOp, - ELHS_BackFaceStencilPassOp, - ELHS_BackFaceStencilFunc, - - // BlendState - - ELHS_AlphaToCoverage = 0x50000, - ELHS_BlendEnable, - ELHS_SrcBlend, - ELHS_DestBlend, - ELHS_BlendOp, - ELHS_SrcBlendAlpha, - ELHS_DestBlendAlpha, - ELHS_BlendOpAlpha, - ELHS_RenderTargetWriteMask, -}; - - - -enum EBlockType -{ - EBT_Invalid, - EBT_DepthStencil, - EBT_Blend, - EBT_Rasterizer, - EBT_Sampler, - EBT_Pass -}; - -enum EVarType -{ - EVT_Invalid, - EVT_Numeric, - EVT_Object, - EVT_Struct, - EVT_Interface, -}; - -enum EScalarType -{ - EST_Invalid, - EST_Float, - EST_Int, - EST_UInt, - EST_Bool, - EST_Count -}; - -enum ENumericLayout -{ - ENL_Invalid, - ENL_Scalar, - ENL_Vector, - ENL_Matrix, - ENL_Count -}; - -enum EObjectType -{ - EOT_Invalid, - EOT_String, - EOT_Blend, - EOT_DepthStencil, - EOT_Rasterizer, - EOT_PixelShader, - EOT_VertexShader, - EOT_GeometryShader, // Regular geometry shader - EOT_GeometryShaderSO, // Geometry shader with a attached StreamOut decl - EOT_Texture, - EOT_Texture1D, - EOT_Texture1DArray, - EOT_Texture2D, - EOT_Texture2DArray, - EOT_Texture2DMS, - EOT_Texture2DMSArray, - EOT_Texture3D, - EOT_TextureCube, - EOT_ConstantBuffer, - EOT_RenderTargetView, - EOT_DepthStencilView, - EOT_Sampler, - EOT_Buffer, - EOT_TextureCubeArray, - EOT_Count, - EOT_PixelShader5, - EOT_VertexShader5, - EOT_GeometryShader5, - EOT_ComputeShader5, - EOT_HullShader5, - EOT_DomainShader5, - EOT_RWTexture1D, - EOT_RWTexture1DArray, - EOT_RWTexture2D, - EOT_RWTexture2DArray, - EOT_RWTexture3D, - EOT_RWBuffer, - EOT_ByteAddressBuffer, - EOT_RWByteAddressBuffer, - EOT_StructuredBuffer, - EOT_RWStructuredBuffer, - EOT_RWStructuredBufferAlloc, - EOT_RWStructuredBufferConsume, - EOT_AppendStructuredBuffer, - EOT_ConsumeStructuredBuffer, -}; - -D3DX11INLINE BOOL IsObjectTypeHelper(EVarType InVarType, - EObjectType InObjType, - EObjectType TargetObjType) -{ - return (InVarType == EVT_Object) && (InObjType == TargetObjType); -} - -D3DX11INLINE BOOL IsSamplerHelper(EVarType InVarType, - EObjectType InObjType) -{ - return (InVarType == EVT_Object) && (InObjType == EOT_Sampler); -} - -D3DX11INLINE BOOL IsStateBlockObjectHelper(EVarType InVarType, - EObjectType InObjType) -{ - return (InVarType == EVT_Object) && ((InObjType == EOT_Blend) || (InObjType == EOT_DepthStencil) || (InObjType == EOT_Rasterizer) || IsSamplerHelper(InVarType, InObjType)); -} - -D3DX11INLINE BOOL IsShaderHelper(EVarType InVarType, - EObjectType InObjType) -{ - return (InVarType == EVT_Object) && ((InObjType == EOT_VertexShader) || - (InObjType == EOT_VertexShader5) || - (InObjType == EOT_HullShader5) || - (InObjType == EOT_DomainShader5) || - (InObjType == EOT_ComputeShader5) || - (InObjType == EOT_GeometryShader) || - (InObjType == EOT_GeometryShaderSO) || - (InObjType == EOT_GeometryShader5) || - (InObjType == EOT_PixelShader) || - (InObjType == EOT_PixelShader5)); -} - -D3DX11INLINE BOOL IsShader5Helper(EVarType InVarType, - EObjectType InObjType) -{ - return (InVarType == EVT_Object) && ((InObjType == EOT_VertexShader5) || - (InObjType == EOT_HullShader5) || - (InObjType == EOT_DomainShader5) || - (InObjType == EOT_ComputeShader5) || - (InObjType == EOT_GeometryShader5) || - (InObjType == EOT_PixelShader5)); -} - -D3DX11INLINE BOOL IsInterfaceHelper(EVarType InVarType, - EObjectType InObjType) -{ - return (InVarType == EVT_Interface); -} - -D3DX11INLINE BOOL IsShaderResourceHelper(EVarType InVarType, - EObjectType InObjType) -{ - return (InVarType == EVT_Object) && ((InObjType == EOT_Texture) || - (InObjType == EOT_Texture1D) || - (InObjType == EOT_Texture1DArray) || - (InObjType == EOT_Texture2D) || - (InObjType == EOT_Texture2DArray) || - (InObjType == EOT_Texture2DMS) || - (InObjType == EOT_Texture2DMSArray) || - (InObjType == EOT_Texture3D) || - (InObjType == EOT_TextureCube) || - (InObjType == EOT_TextureCubeArray) || - (InObjType == EOT_Buffer) || - (InObjType == EOT_StructuredBuffer) || - (InObjType == EOT_ByteAddressBuffer)); -} - -D3DX11INLINE BOOL IsUnorderedAccessViewHelper(EVarType InVarType, - EObjectType InObjType) -{ - return (InVarType == EVT_Object) && - ((InObjType == EOT_RWTexture1D) || - (InObjType == EOT_RWTexture1DArray) || - (InObjType == EOT_RWTexture2D) || - (InObjType == EOT_RWTexture2DArray) || - (InObjType == EOT_RWTexture3D) || - (InObjType == EOT_RWBuffer) || - (InObjType == EOT_RWByteAddressBuffer) || - (InObjType == EOT_RWStructuredBuffer) || - (InObjType == EOT_RWStructuredBufferAlloc) || - (InObjType == EOT_RWStructuredBufferConsume) || - (InObjType == EOT_AppendStructuredBuffer) || - (InObjType == EOT_ConsumeStructuredBuffer)); -} - -D3DX11INLINE BOOL IsRenderTargetViewHelper(EVarType InVarType, - EObjectType InObjType) -{ - return (InVarType == EVT_Object) && (InObjType == EOT_RenderTargetView); -} - -D3DX11INLINE BOOL IsDepthStencilViewHelper(EVarType InVarType, - EObjectType InObjType) -{ - return (InVarType == EVT_Object) && (InObjType == EOT_DepthStencilView); -} - -D3DX11INLINE BOOL IsObjectAssignmentHelper(ELhsType LhsType) -{ - switch(LhsType) - { - case ELHS_VertexShaderBlock: - case ELHS_HullShaderBlock: - case ELHS_DepthStencilView: - case ELHS_GeometryShaderBlock: - case ELHS_PixelShaderBlock: - case ELHS_ComputeShaderBlock: - case ELHS_DepthStencilBlock: - case ELHS_RasterizerBlock: - case ELHS_BlendBlock: - case ELHS_Texture: - case ELHS_RenderTargetView: - case ELHS_DomainShaderBlock: - return TRUE; - } - return FALSE; -} - - - - -// Effect file format structures ///////////////////////////////////////////// -// File format: -// File header (SBinaryHeader Header) -// Unstructured data block (BYTE[Header.cbUnstructured)) -// Structured data block -// ConstantBuffer (SBinaryConstantBuffer CB) * Header.Effect.cCBs -// UINT NumAnnotations -// Annotation data (SBinaryAnnotation) * (NumAnnotations) *this structure is variable sized -// Variable data (SBinaryNumericVariable Var) * (CB.cVariables) -// UINT NumAnnotations -// Annotation data (SBinaryAnnotation) * (NumAnnotations) *this structure is variable sized -// Object variables (SBinaryObjectVariable Var) * (Header.cObjectVariables) *this structure is variable sized -// UINT NumAnnotations -// Annotation data (SBinaryAnnotation) * (NumAnnotations) *this structure is variable sized -// Interface variables (SBinaryInterfaceVariable Var) * (Header.cInterfaceVariables) *this structure is variable sized -// UINT NumAnnotations -// Annotation data (SBinaryAnnotation) * (NumAnnotations) *this structure is variable sized -// Groups (SBinaryGroup Group) * Header.cGroups -// UINT NumAnnotations -// Annotation data (SBinaryAnnotation) * (NumAnnotations) *this structure is variable sized -// Techniques (SBinaryTechnique Technique) * Group.cTechniques -// UINT NumAnnotations -// Annotation data (SBinaryAnnotation) * (NumAnnotations) *this structure is variable sized -// Pass (SBinaryPass Pass) * Technique.cPasses -// UINT NumAnnotations -// Annotation data (SBinaryAnnotation) * (NumAnnotations) *this structure is variable sized -// Pass assignments (SBinaryAssignment) * Pass.cAssignments - -struct SBinaryHeader -{ - struct SVarCounts - { - UINT cCBs; - UINT cNumericVariables; - UINT cObjectVariables; - }; - - UINT Tag; // should be equal to c_EffectFileTag - // this is used to identify ASCII vs Binary files - - SVarCounts Effect; - SVarCounts Pool; - - UINT cTechniques; - UINT cbUnstructured; - - UINT cStrings; - UINT cShaderResources; - - UINT cDepthStencilBlocks; - UINT cBlendStateBlocks; - UINT cRasterizerStateBlocks; - UINT cSamplers; - UINT cRenderTargetViews; - UINT cDepthStencilViews; - - UINT cTotalShaders; - UINT cInlineShaders; // of the aforementioned shaders, the number that are defined inline within pass blocks - - D3DX11INLINE bool RequiresPool() const - { - return (Pool.cCBs != 0) || - (Pool.cNumericVariables != 0) || - (Pool.cObjectVariables != 0); - } -}; - -struct SBinaryHeader5 : public SBinaryHeader -{ - UINT cGroups; - UINT cUnorderedAccessViews; - UINT cInterfaceVariables; - UINT cInterfaceVariableElements; - UINT cClassInstanceElements; -}; - -// Constant buffer definition -struct SBinaryConstantBuffer -{ - // private flags - static const UINT c_IsTBuffer = (1 << 0); - static const UINT c_IsSingle = (1 << 1); - - UINT oName; // Offset to constant buffer name - UINT Size; // Size, in bytes - UINT Flags; - UINT cVariables; // # of variables inside this buffer - UINT ExplicitBindPoint; // Defined if the effect file specifies a bind point using the register keyword - // otherwise, -1 -}; - -struct SBinaryAnnotation -{ - UINT oName; // Offset to variable name - UINT oType; // Offset to type information (SBinaryType) - - // For numeric annotations: - // UINT oDefaultValue; // Offset to default initializer value - // - // For string annotations: - // UINT oStringOffsets[Elements]; // Elements comes from the type data at oType -}; - -struct SBinaryNumericVariable -{ - UINT oName; // Offset to variable name - UINT oType; // Offset to type information (SBinaryType) - UINT oSemantic; // Offset to semantic information - UINT Offset; // Offset in parent constant buffer - UINT oDefaultValue; // Offset to default initializer value - UINT Flags; // Explicit bind point -}; - -struct SBinaryInterfaceVariable -{ - UINT oName; // Offset to variable name - UINT oType; // Offset to type information (SBinaryType) - UINT oDefaultValue; // Offset to default initializer array (SBinaryInterfaceInitializer[Elements]) - UINT Flags; -}; - -struct SBinaryInterfaceInitializer -{ - UINT oInstanceName; - UINT ArrayIndex; -}; - -struct SBinaryObjectVariable -{ - UINT oName; // Offset to variable name - UINT oType; // Offset to type information (SBinaryType) - UINT oSemantic; // Offset to semantic information - UINT ExplicitBindPoint; // Used when a variable has been explicitly bound (register(XX)). -1 if not - - // Initializer data: - // - // The type structure pointed to by oType gives you Elements, - // VarType (must be EVT_Object), and ObjectType - // - // For ObjectType == EOT_Blend, EOT_DepthStencil, EOT_Rasterizer, EOT_Sampler - // struct - // { - // UINT cAssignments; - // SBinaryAssignment Assignments[cAssignments]; - // } Blocks[Elements] - // - // For EObjectType == EOT_Texture*, EOT_Buffer - // - // - // For EObjectType == EOT_*Shader, EOT_String - // UINT oData[Elements]; // offsets to a shader data block or a NULL-terminated string - // - // For EObjectType == EOT_GeometryShaderSO - // SBinaryGSSOInitializer[Elements] - // - // For EObjectType == EOT_*Shader5 - // SBinaryShaderData5[Elements] -}; - -struct SBinaryGSSOInitializer -{ - UINT oShader; // Offset to shader bytecode data block - UINT oSODecl; // Offset to StreamOutput decl string -}; - -struct SBinaryShaderData5 -{ - UINT oShader; // Offset to shader bytecode data block - UINT oSODecls[4]; // Offset to StreamOutput decl strings - UINT cSODecls; // Count of valid oSODecls entries. - UINT RasterizedStream; // Which stream is used for rasterization - UINT cInterfaceBindings; // Count of interface bindings. - UINT oInterfaceBindings; // Offset to SBinaryInterfaceInitializer[cInterfaceBindings]. -}; - -struct SBinaryType -{ - UINT oTypeName; // Offset to friendly type name ("float4", "VS_OUTPUT") - EVarType VarType; // Numeric, Object, or Struct - UINT Elements; // # of array elements (0 for non-arrays) - UINT TotalSize; // Size in bytes; not necessarily Stride * Elements for arrays - // because of possible gap left in final register - UINT Stride; // If an array, this is the spacing between elements. - // For unpacked arrays, always divisible by 16-bytes (1 register). - // No support for packed arrays - UINT PackedSize; // Size, in bytes, of this data typed when fully packed - - struct SBinaryMember - { - UINT oName; // Offset to structure member name ("m_pFoo") - UINT oSemantic; // Offset to semantic ("POSITION0") - UINT Offset; // Offset, in bytes, relative to start of parent structure - UINT oType; // Offset to member's type descriptor - }; - - // the data that follows depends on the VarType: - // Numeric: SType::SNumericType - // Object: EObjectType - // Struct: - // struct - // { - // UINT cMembers; - // SBinaryMembers Members[cMembers]; - // } MemberInfo - // struct - // { - // UINT oBaseClassType; // Offset to type information (SBinaryType) - // UINT cInterfaces; - // UINT oInterfaceTypes[cInterfaces]; - // } SBinaryTypeInheritance - // Interface: (nothing) -}; - -struct SBinaryNumericType -{ - ENumericLayout NumericLayout : 3; // scalar (1x1), vector (1xN), matrix (NxN) - EScalarType ScalarType : 5; // float32, int32, int8, etc. - UINT Rows : 3; // 1 <= Rows <= 4 - UINT Columns : 3; // 1 <= Columns <= 4 - UINT IsColumnMajor : 1; // applies only to matrices - UINT IsPackedArray : 1; // if this is an array, indicates whether elements should be greedily packed -}; - -struct SBinaryTypeInheritance -{ - UINT oBaseClass; // Offset to base class type info or 0 if no base class. - UINT cInterfaces; - - // Followed by UINT[cInterfaces] with offsets to the type - // info of each interface. -}; - -struct SBinaryGroup -{ - UINT oName; - UINT cTechniques; -}; - -struct SBinaryTechnique -{ - UINT oName; - UINT cPasses; -}; - -struct SBinaryPass -{ - UINT oName; - UINT cAssignments; -}; - -enum ECompilerAssignmentType -{ - ECAT_Invalid, // Assignment-specific data (always in the unstructured blob) - ECAT_Constant, // -N SConstant structures - ECAT_Variable, // -NULL terminated string with variable name ("foo") - ECAT_ConstIndex, // -SConstantIndex structure - ECAT_VariableIndex, // -SVariableIndex structure - ECAT_ExpressionIndex, // -SIndexedObjectExpression structure - ECAT_Expression, // -Data block containing FXLVM code - ECAT_InlineShader, // -Data block containing shader - ECAT_InlineShader5, // -Data block containing shader with extended 5.0 data (SBinaryShaderData5) -}; - -struct SBinaryAssignment -{ - UINT iState; // index into g_lvGeneral - UINT Index; // the particular index to assign to (see g_lvGeneral to find the # of valid indices) - ECompilerAssignmentType AssignmentType; - UINT oInitializer; // Offset of assignment-specific data - - //struct SConstantAssignment - //{ - // UINT NumConstants; // number of constants to follow - // SCompilerConstant Constants[NumConstants]; - //}; - - struct SConstantIndex - { - UINT oArrayName; - UINT Index; - }; - - struct SVariableIndex - { - UINT oArrayName; - UINT oIndexVarName; - }; - - struct SIndexedObjectExpression - { - UINT oArrayName; - UINT oCode; - }; - - struct SInlineShader - { - UINT oShader; - UINT oSODecl; - }; - - //struct SExpression or SInlineShader - //{ - // UINT DataSize; - // BYTE Data[DataSize]; - //} - -}; - -struct SBinaryConstant -{ - EScalarType Type; - union - { - BOOL bValue; - INT iValue; - float fValue; - }; -}; - - -} // end namespace D3DX11Effects diff --git a/sample/d3d11/Effects11/Binary/EffectStateBase11.h b/sample/d3d11/Effects11/Binary/EffectStateBase11.h deleted file mode 100644 index 3727da2..0000000 --- a/sample/d3d11/Effects11/Binary/EffectStateBase11.h +++ /dev/null @@ -1,49 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: EffectStateBase11.h -// Content: D3DX11 Effects States Header -// -////////////////////////////////////////////////////////////////////////////// - -#pragma once - -namespace D3DX11Effects -{ - -////////////////////////////////////////////////////////////////////////// -// Effect HLSL states and late resolve lists -////////////////////////////////////////////////////////////////////////// - -struct RValue -{ - const char *m_pName; - UINT m_Value; -}; - -#define RVALUE_END() { NULL, 0U } -#define RVALUE_ENTRY(prefix, x) { #x, (UINT)prefix##x } - -enum ELhsType; - -struct LValue -{ - const char *m_pName; // name of the LHS side of expression - EBlockType m_BlockType; // type of block it can appear in - D3D10_SHADER_VARIABLE_TYPE m_Type; // data type allows - UINT m_Cols; // number of [m_Type]'s required (1 for a scalar, 4 for a vector) - UINT m_Indices; // max index allowable (if LHS is an array; otherwise this is 1) - BOOL m_VectorScalar; // can be both vector and scalar (setting as a scalar sets all m_Indices values simultaneously) - CONST RValue *m_pRValue; // pointer to table of allowable RHS "late resolve" values - ELhsType m_LhsType; // ELHS_* enum value that corresponds to this entry - UINT m_Offset; // offset into the given block type where this value should be written - UINT m_Stride; // for vectors, byte stride between two consecutive values. if 0, m_Type's size is used -}; - -#define LVALUE_END() { NULL, D3D10_SVT_UINT, 0, 0, 0, NULL } - -extern CONST LValue g_lvGeneral[]; -extern CONST UINT g_lvGeneralCount; - -} // end namespace D3DX11Effects diff --git a/sample/d3d11/Effects11/Binary/EffectStates11.h b/sample/d3d11/Effects11/Binary/EffectStates11.h deleted file mode 100644 index 3bb3087..0000000 --- a/sample/d3d11/Effects11/Binary/EffectStates11.h +++ /dev/null @@ -1,236 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: EffectStates11.h -// Content: D3DX11 Effects States Header -// This file defines properties of states which can appear in -// state blocks and pass blocks. -// -////////////////////////////////////////////////////////////////////////////// - -#pragma once - -#include - -namespace D3DX11Effects -{ - -////////////////////////////////////////////////////////////////////////// -// Effect HLSL late resolve lists (state values) -////////////////////////////////////////////////////////////////////////// - -static CONST RValue g_rvNULL[] = -{ - { "NULL", 0 }, - RVALUE_END() -}; - - -static CONST RValue g_rvBOOL[] = -{ - { "FALSE", 0 }, - { "TRUE", 1 }, - RVALUE_END() -}; - -static CONST RValue g_rvDEPTH_WRITE_MASK[] = -{ - { "ZERO", D3D10_DEPTH_WRITE_MASK_ZERO }, - { "ALL", D3D10_DEPTH_WRITE_MASK_ALL }, - RVALUE_END() -}; - -static CONST RValue g_rvFILL[] = -{ - { "WIREFRAME", D3D10_FILL_WIREFRAME }, - { "SOLID", D3D10_FILL_SOLID }, - RVALUE_END() -}; - -static CONST RValue g_rvFILTER[] = -{ - RVALUE_ENTRY(D3D10_FILTER_, MIN_MAG_MIP_POINT ), - RVALUE_ENTRY(D3D10_FILTER_, MIN_MAG_POINT_MIP_LINEAR ), - RVALUE_ENTRY(D3D10_FILTER_, MIN_POINT_MAG_LINEAR_MIP_POINT ), - RVALUE_ENTRY(D3D10_FILTER_, MIN_POINT_MAG_MIP_LINEAR ), - RVALUE_ENTRY(D3D10_FILTER_, MIN_LINEAR_MAG_MIP_POINT ), - RVALUE_ENTRY(D3D10_FILTER_, MIN_LINEAR_MAG_POINT_MIP_LINEAR ), - RVALUE_ENTRY(D3D10_FILTER_, MIN_MAG_LINEAR_MIP_POINT ), - RVALUE_ENTRY(D3D10_FILTER_, MIN_MAG_MIP_LINEAR ), - RVALUE_ENTRY(D3D10_FILTER_, ANISOTROPIC ), - RVALUE_ENTRY(D3D10_FILTER_, COMPARISON_MIN_MAG_MIP_POINT ), - RVALUE_ENTRY(D3D10_FILTER_, COMPARISON_MIN_MAG_POINT_MIP_LINEAR ), - RVALUE_ENTRY(D3D10_FILTER_, COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT ), - RVALUE_ENTRY(D3D10_FILTER_, COMPARISON_MIN_POINT_MAG_MIP_LINEAR ), - RVALUE_ENTRY(D3D10_FILTER_, COMPARISON_MIN_LINEAR_MAG_MIP_POINT ), - RVALUE_ENTRY(D3D10_FILTER_, COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR ), - RVALUE_ENTRY(D3D10_FILTER_, COMPARISON_MIN_MAG_LINEAR_MIP_POINT ), - RVALUE_ENTRY(D3D10_FILTER_, COMPARISON_MIN_MAG_MIP_LINEAR ), - RVALUE_ENTRY(D3D10_FILTER_, COMPARISON_ANISOTROPIC ), - RVALUE_ENTRY(D3D10_FILTER_, TEXT_1BIT ), - RVALUE_END() -}; - -static CONST RValue g_rvBLEND[] = -{ - { "ZERO", D3D10_BLEND_ZERO }, - { "ONE", D3D10_BLEND_ONE }, - { "SRC_COLOR", D3D10_BLEND_SRC_COLOR }, - { "INV_SRC_COLOR", D3D10_BLEND_INV_SRC_COLOR }, - { "SRC_ALPHA", D3D10_BLEND_SRC_ALPHA }, - { "INV_SRC_ALPHA", D3D10_BLEND_INV_SRC_ALPHA }, - { "DEST_ALPHA", D3D10_BLEND_DEST_ALPHA }, - { "INV_DEST_ALPHA", D3D10_BLEND_INV_DEST_ALPHA }, - { "DEST_COLOR", D3D10_BLEND_DEST_COLOR }, - { "INV_DEST_COLOR", D3D10_BLEND_INV_DEST_COLOR }, - { "SRC_ALPHA_SAT", D3D10_BLEND_SRC_ALPHA_SAT }, - { "BLEND_FACTOR", D3D10_BLEND_BLEND_FACTOR }, - { "INV_BLEND_FACTOR", D3D10_BLEND_INV_BLEND_FACTOR }, - { "SRC1_COLOR", D3D10_BLEND_SRC1_COLOR }, - { "INV_SRC1_COLOR", D3D10_BLEND_INV_SRC1_COLOR }, - { "SRC1_ALPHA", D3D10_BLEND_SRC1_ALPHA }, - { "INV_SRC1_ALPHA", D3D10_BLEND_INV_SRC1_ALPHA }, - - RVALUE_END() -}; - -static CONST RValue g_rvTADDRESS[] = -{ - { "CLAMP", D3D10_TEXTURE_ADDRESS_CLAMP }, - { "WRAP", D3D10_TEXTURE_ADDRESS_WRAP }, - { "MIRROR", D3D10_TEXTURE_ADDRESS_MIRROR }, - { "BORDER", D3D10_TEXTURE_ADDRESS_BORDER }, - { "MIRROR_ONCE", D3D10_TEXTURE_ADDRESS_MIRROR_ONCE }, - RVALUE_END() -}; - -static CONST RValue g_rvCULL[] = -{ - { "NONE", D3D10_CULL_NONE }, - { "FRONT", D3D10_CULL_FRONT }, - { "BACK", D3D10_CULL_BACK }, - RVALUE_END() -}; - -static CONST RValue g_rvCMP[] = -{ - { "NEVER", D3D10_COMPARISON_NEVER }, - { "LESS", D3D10_COMPARISON_LESS }, - { "EQUAL", D3D10_COMPARISON_EQUAL }, - { "LESS_EQUAL", D3D10_COMPARISON_LESS_EQUAL }, - { "GREATER", D3D10_COMPARISON_GREATER }, - { "NOT_EQUAL", D3D10_COMPARISON_NOT_EQUAL }, - { "GREATER_EQUAL", D3D10_COMPARISON_GREATER_EQUAL }, - { "ALWAYS", D3D10_COMPARISON_ALWAYS }, - RVALUE_END() -}; - -static CONST RValue g_rvSTENCILOP[] = -{ - { "KEEP", D3D10_STENCIL_OP_KEEP }, - { "ZERO", D3D10_STENCIL_OP_ZERO }, - { "REPLACE", D3D10_STENCIL_OP_REPLACE }, - { "INCR_SAT", D3D10_STENCIL_OP_INCR_SAT }, - { "DECR_SAT", D3D10_STENCIL_OP_DECR_SAT }, - { "INVERT", D3D10_STENCIL_OP_INVERT }, - { "INCR", D3D10_STENCIL_OP_INCR }, - { "DECR", D3D10_STENCIL_OP_DECR }, - RVALUE_END() -}; - -static CONST RValue g_rvBLENDOP[] = -{ - { "ADD", D3D10_BLEND_OP_ADD }, - { "SUBTRACT", D3D10_BLEND_OP_SUBTRACT }, - { "REV_SUBTRACT", D3D10_BLEND_OP_REV_SUBTRACT }, - { "MIN", D3D10_BLEND_OP_MIN }, - { "MAX", D3D10_BLEND_OP_MAX }, - RVALUE_END() -}; - - -////////////////////////////////////////////////////////////////////////// -// Effect HLSL states -////////////////////////////////////////////////////////////////////////// - -#define strideof( s, m ) offsetof_fx(s,m[1]) - offsetof_fx(s,m[0]) - -CONST LValue g_lvGeneral[] = -{ - // RObjects - { "RasterizerState", EBT_Pass, D3D10_SVT_RASTERIZER, 1, 1, FALSE, NULL, ELHS_RasterizerBlock, offsetof_fx(SPassBlock, BackingStore.pRasterizerBlock), 0 }, - { "DepthStencilState", EBT_Pass, D3D10_SVT_DEPTHSTENCIL, 1, 1, FALSE, NULL, ELHS_DepthStencilBlock, offsetof_fx(SPassBlock, BackingStore.pDepthStencilBlock), 0 }, - { "BlendState", EBT_Pass, D3D10_SVT_BLEND, 1, 1, FALSE, NULL, ELHS_BlendBlock, offsetof_fx(SPassBlock, BackingStore.pBlendBlock), 0 }, - { "RenderTargetView", EBT_Pass, D3D10_SVT_RENDERTARGETVIEW, 1, 8, FALSE, NULL, ELHS_RenderTargetView, offsetof_fx(SPassBlock, BackingStore.pRenderTargetViews), 0 }, - { "DepthStencilView", EBT_Pass, D3D10_SVT_DEPTHSTENCILVIEW, 1, 8, FALSE, NULL, ELHS_DepthStencilView, offsetof_fx(SPassBlock, BackingStore.pDepthStencilView), 0 }, - { "GenerateMips", EBT_Pass, D3D10_SVT_TEXTURE, 1, 1, FALSE, NULL, ELHS_GenerateMips, 0, 0 }, - // Shaders - { "VertexShader", EBT_Pass, D3D10_SVT_VERTEXSHADER, 1, 1, FALSE, g_rvNULL, ELHS_VertexShaderBlock, offsetof_fx(SPassBlock, BackingStore.pVertexShaderBlock), 0 }, - { "PixelShader", EBT_Pass, D3D10_SVT_PIXELSHADER, 1, 1, FALSE, g_rvNULL, ELHS_PixelShaderBlock, offsetof_fx(SPassBlock, BackingStore.pPixelShaderBlock), 0 }, - { "GeometryShader", EBT_Pass, D3D10_SVT_GEOMETRYSHADER, 1, 1, FALSE, g_rvNULL, ELHS_GeometryShaderBlock, offsetof_fx(SPassBlock, BackingStore.pGeometryShaderBlock), 0 }, - // RObject config assignments - { "DS_StencilRef", EBT_Pass, D3D10_SVT_UINT, 1, 1, FALSE, NULL, ELHS_DS_StencilRef, offsetof_fx(SPassBlock, BackingStore.StencilRef), 0 }, - { "AB_BlendFactor", EBT_Pass, D3D10_SVT_FLOAT, 4, 1, FALSE, NULL, ELHS_B_BlendFactor, offsetof_fx(SPassBlock, BackingStore.BlendFactor), 0 }, - { "AB_SampleMask", EBT_Pass, D3D10_SVT_UINT, 1, 1, FALSE, NULL, ELHS_B_SampleMask, offsetof_fx(SPassBlock, BackingStore.SampleMask), 0 }, - - { "FillMode", EBT_Rasterizer, D3D10_SVT_UINT, 1, 1, FALSE, g_rvFILL, ELHS_FillMode, offsetof_fx(SRasterizerBlock, BackingStore.FillMode), 0 }, - { "CullMode", EBT_Rasterizer, D3D10_SVT_UINT, 1, 1, FALSE, g_rvCULL, ELHS_CullMode, offsetof_fx(SRasterizerBlock, BackingStore.CullMode), 0 }, - { "FrontCounterClockwise", EBT_Rasterizer, D3D10_SVT_BOOL, 1, 1, FALSE, g_rvBOOL, ELHS_FrontCC, offsetof_fx(SRasterizerBlock, BackingStore.FrontCounterClockwise), 0 }, - { "DepthBias", EBT_Rasterizer, D3D10_SVT_UINT, 1, 1, FALSE, NULL, ELHS_DepthBias, offsetof_fx(SRasterizerBlock, BackingStore.DepthBias), 0 }, - { "DepthBiasClamp", EBT_Rasterizer, D3D10_SVT_FLOAT, 1, 1, FALSE, NULL, ELHS_DepthBiasClamp, offsetof_fx(SRasterizerBlock, BackingStore.DepthBiasClamp), 0 }, - { "SlopeScaledDepthBias", EBT_Rasterizer, D3D10_SVT_FLOAT, 1, 1, FALSE, NULL, ELHS_SlopeScaledDepthBias, offsetof_fx(SRasterizerBlock, BackingStore.SlopeScaledDepthBias), 0 }, - { "DepthClipEnable", EBT_Rasterizer, D3D10_SVT_BOOL, 1, 1, FALSE, g_rvBOOL, ELHS_DepthClipEnable, offsetof_fx(SRasterizerBlock, BackingStore.DepthClipEnable), 0 }, - { "ScissorEnable", EBT_Rasterizer, D3D10_SVT_BOOL, 1, 1, FALSE, g_rvBOOL, ELHS_ScissorEnable, offsetof_fx(SRasterizerBlock, BackingStore.ScissorEnable), 0 }, - { "MultisampleEnable", EBT_Rasterizer, D3D10_SVT_BOOL, 1, 1, FALSE, g_rvBOOL, ELHS_MultisampleEnable, offsetof_fx(SRasterizerBlock, BackingStore.MultisampleEnable), 0 }, - { "AntialiasedLineEnable", EBT_Rasterizer, D3D10_SVT_BOOL, 1, 1, FALSE, g_rvBOOL, ELHS_AntialiasedLineEnable, offsetof_fx(SRasterizerBlock, BackingStore.AntialiasedLineEnable), 0 }, - - { "DepthEnable", EBT_DepthStencil, D3D10_SVT_BOOL, 1, 1, FALSE, g_rvBOOL, ELHS_DepthEnable, offsetof_fx(SDepthStencilBlock, BackingStore.DepthEnable), 0 }, - { "DepthWriteMask", EBT_DepthStencil, D3D10_SVT_UINT, 1, 1, FALSE, g_rvDEPTH_WRITE_MASK, ELHS_DepthWriteMask, offsetof_fx(SDepthStencilBlock, BackingStore.DepthWriteMask), 0 }, - { "DepthFunc", EBT_DepthStencil, D3D10_SVT_UINT, 1, 1, FALSE, g_rvCMP, ELHS_DepthFunc, offsetof_fx(SDepthStencilBlock, BackingStore.DepthFunc), 0 }, - { "StencilEnable", EBT_DepthStencil, D3D10_SVT_BOOL, 1, 1, FALSE, g_rvBOOL, ELHS_StencilEnable, offsetof_fx(SDepthStencilBlock, BackingStore.StencilEnable), 0 }, - { "StencilReadMask", EBT_DepthStencil, D3D10_SVT_UINT8, 1, 1, FALSE, NULL, ELHS_StencilReadMask, offsetof_fx(SDepthStencilBlock, BackingStore.StencilReadMask), 0 }, - { "StencilWriteMask", EBT_DepthStencil, D3D10_SVT_UINT8, 1, 1, FALSE, NULL, ELHS_StencilWriteMask, offsetof_fx(SDepthStencilBlock, BackingStore.StencilWriteMask), 0 }, - { "FrontFaceStencilFail", EBT_DepthStencil, D3D10_SVT_UINT, 1, 1, FALSE, g_rvSTENCILOP, ELHS_FrontFaceStencilFailOp, offsetof_fx(SDepthStencilBlock, BackingStore.FrontFace.StencilFailOp), 0 }, - { "FrontFaceStencilDepthFail", EBT_DepthStencil, D3D10_SVT_UINT, 1, 1, FALSE, g_rvSTENCILOP, ELHS_FrontFaceStencilDepthFailOp,offsetof_fx(SDepthStencilBlock, BackingStore.FrontFace.StencilDepthFailOp), 0 }, - { "FrontFaceStencilPass", EBT_DepthStencil, D3D10_SVT_UINT, 1, 1, FALSE, g_rvSTENCILOP, ELHS_FrontFaceStencilPassOp, offsetof_fx(SDepthStencilBlock, BackingStore.FrontFace.StencilPassOp), 0 }, - { "FrontFaceStencilFunc", EBT_DepthStencil, D3D10_SVT_UINT, 1, 1, FALSE, g_rvCMP, ELHS_FrontFaceStencilFunc, offsetof_fx(SDepthStencilBlock, BackingStore.FrontFace.StencilFunc), 0 }, - { "BackFaceStencilFail", EBT_DepthStencil, D3D10_SVT_UINT, 1, 1, FALSE, g_rvSTENCILOP, ELHS_BackFaceStencilFailOp, offsetof_fx(SDepthStencilBlock, BackingStore.BackFace.StencilFailOp), 0 }, - { "BackFaceStencilDepthFail", EBT_DepthStencil, D3D10_SVT_UINT, 1, 1, FALSE, g_rvSTENCILOP, ELHS_BackFaceStencilDepthFailOp,offsetof_fx(SDepthStencilBlock, BackingStore.BackFace.StencilDepthFailOp), 0 }, - { "BackFaceStencilPass", EBT_DepthStencil, D3D10_SVT_UINT, 1, 1, FALSE, g_rvSTENCILOP, ELHS_BackFaceStencilPassOp, offsetof_fx(SDepthStencilBlock, BackingStore.BackFace.StencilPassOp), 0 }, - { "BackFaceStencilFunc", EBT_DepthStencil, D3D10_SVT_UINT, 1, 1, FALSE, g_rvCMP, ELHS_BackFaceStencilFunc, offsetof_fx(SDepthStencilBlock, BackingStore.BackFace.StencilFunc), 0 }, - - { "AlphaToCoverageEnable", EBT_Blend, D3D10_SVT_BOOL, 1, 1, FALSE, g_rvBOOL, ELHS_AlphaToCoverage, offsetof_fx(SBlendBlock, BackingStore.AlphaToCoverageEnable), 0 }, - { "BlendEnable", EBT_Blend, D3D10_SVT_BOOL, 1, 8, FALSE, g_rvBOOL, ELHS_BlendEnable, offsetof_fx(SBlendBlock, BackingStore.RenderTarget[0].BlendEnable), strideof(SBlendBlock, BackingStore.RenderTarget) }, - { "SrcBlend", EBT_Blend, D3D10_SVT_UINT, 1, 8, TRUE, g_rvBLEND, ELHS_SrcBlend, offsetof_fx(SBlendBlock, BackingStore.RenderTarget[0].SrcBlend), strideof(SBlendBlock, BackingStore.RenderTarget) }, - { "DestBlend", EBT_Blend, D3D10_SVT_UINT, 1, 8, TRUE, g_rvBLEND, ELHS_DestBlend, offsetof_fx(SBlendBlock, BackingStore.RenderTarget[0].DestBlend), strideof(SBlendBlock, BackingStore.RenderTarget) }, - { "BlendOp", EBT_Blend, D3D10_SVT_UINT, 1, 8, TRUE, g_rvBLENDOP, ELHS_BlendOp, offsetof_fx(SBlendBlock, BackingStore.RenderTarget[0].BlendOp), strideof(SBlendBlock, BackingStore.RenderTarget) }, - { "SrcBlendAlpha", EBT_Blend, D3D10_SVT_UINT, 1, 8, TRUE, g_rvBLEND, ELHS_SrcBlendAlpha, offsetof_fx(SBlendBlock, BackingStore.RenderTarget[0].SrcBlendAlpha), strideof(SBlendBlock, BackingStore.RenderTarget) }, - { "DestBlendAlpha", EBT_Blend, D3D10_SVT_UINT, 1, 8, TRUE, g_rvBLEND, ELHS_DestBlendAlpha, offsetof_fx(SBlendBlock, BackingStore.RenderTarget[0].DestBlendAlpha), strideof(SBlendBlock, BackingStore.RenderTarget) }, - { "BlendOpAlpha", EBT_Blend, D3D10_SVT_UINT, 1, 8, TRUE, g_rvBLENDOP, ELHS_BlendOpAlpha, offsetof_fx(SBlendBlock, BackingStore.RenderTarget[0].BlendOpAlpha), strideof(SBlendBlock, BackingStore.RenderTarget) }, - { "RenderTargetWriteMask", EBT_Blend, D3D10_SVT_UINT8, 1, 8, FALSE, NULL, ELHS_RenderTargetWriteMask, offsetof_fx(SBlendBlock, BackingStore.RenderTarget[0].RenderTargetWriteMask), strideof(SBlendBlock, BackingStore.RenderTarget) }, - - { "Filter", EBT_Sampler, D3D10_SVT_UINT, 1, 1, FALSE, g_rvFILTER, ELHS_Filter, offsetof_fx(SSamplerBlock, BackingStore.SamplerDesc.Filter), 0 }, - { "AddressU", EBT_Sampler, D3D10_SVT_UINT, 1, 1, FALSE, g_rvTADDRESS, ELHS_AddressU, offsetof_fx(SSamplerBlock, BackingStore.SamplerDesc.AddressU), 0 }, - { "AddressV", EBT_Sampler, D3D10_SVT_UINT, 1, 1, FALSE, g_rvTADDRESS, ELHS_AddressV, offsetof_fx(SSamplerBlock, BackingStore.SamplerDesc.AddressV), 0 }, - { "AddressW", EBT_Sampler, D3D10_SVT_UINT, 1, 1, FALSE, g_rvTADDRESS, ELHS_AddressW, offsetof_fx(SSamplerBlock, BackingStore.SamplerDesc.AddressW), 0 }, - { "MipLODBias", EBT_Sampler, D3D10_SVT_FLOAT, 1, 1, FALSE, NULL, ELHS_MipLODBias, offsetof_fx(SSamplerBlock, BackingStore.SamplerDesc.MipLODBias), 0 }, - { "MaxAnisotropy", EBT_Sampler, D3D10_SVT_UINT, 1, 1, FALSE, NULL, ELHS_MaxAnisotropy, offsetof_fx(SSamplerBlock, BackingStore.SamplerDesc.MaxAnisotropy), 0 }, - { "ComparisonFunc", EBT_Sampler, D3D10_SVT_UINT, 1, 1, FALSE, g_rvCMP, ELHS_ComparisonFunc, offsetof_fx(SSamplerBlock, BackingStore.SamplerDesc.ComparisonFunc), 0 }, - { "BorderColor", EBT_Sampler, D3D10_SVT_FLOAT, 4, 1, FALSE, NULL, ELHS_BorderColor, offsetof_fx(SSamplerBlock, BackingStore.SamplerDesc.BorderColor), 0 }, - { "MinLOD", EBT_Sampler, D3D10_SVT_FLOAT, 1, 1, FALSE, NULL, ELHS_MinLOD, offsetof_fx(SSamplerBlock, BackingStore.SamplerDesc.MinLOD), 0 }, - { "MaxLOD", EBT_Sampler, D3D10_SVT_FLOAT, 1, 1, FALSE, NULL, ELHS_MaxLOD, offsetof_fx(SSamplerBlock, BackingStore.SamplerDesc.MaxLOD), 0 }, - { "Texture", EBT_Sampler, D3D10_SVT_TEXTURE, 1, 1, FALSE, g_rvNULL, ELHS_Texture, offsetof_fx(SSamplerBlock, BackingStore.pTexture), 0 }, - - // D3D11 - { "HullShader", EBT_Pass, D3D11_SVT_HULLSHADER, 1, 1, FALSE, g_rvNULL, ELHS_HullShaderBlock, offsetof_fx(SPassBlock, BackingStore.pHullShaderBlock), 0 }, - { "DomainShader", EBT_Pass, D3D11_SVT_DOMAINSHADER, 1, 1, FALSE, g_rvNULL, ELHS_DomainShaderBlock, offsetof_fx(SPassBlock, BackingStore.pDomainShaderBlock), 0 }, - { "ComputeShader", EBT_Pass, D3D11_SVT_COMPUTESHADER, 1, 1, FALSE, g_rvNULL, ELHS_ComputeShaderBlock, offsetof_fx(SPassBlock, BackingStore.pComputeShaderBlock), 0 }, -}; - -#define NUM_STATES (sizeof(g_lvGeneral) / sizeof(LValue)) -#define MAX_VECTOR_SCALAR_INDEX 8 - -CONST UINT g_lvGeneralCount = NUM_STATES; - -} // end namespace D3DX11Effects diff --git a/sample/d3d11/Effects11/Binary/SOParser.h b/sample/d3d11/Effects11/Binary/SOParser.h deleted file mode 100644 index 1fb95a9..0000000 --- a/sample/d3d11/Effects11/Binary/SOParser.h +++ /dev/null @@ -1,311 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: SOParser.h -// Content: D3DX11 Effects Stream Out Decl Parser -// -////////////////////////////////////////////////////////////////////////////// - -#pragma once - -namespace D3DX11Effects -{ - - -////////////////////////////////////////////////////////////////////////// -// CSOParser -////////////////////////////////////////////////////////////////////////// - -class CSOParser -{ - - CEffectVector m_vDecls; // Set of parsed decl entries - D3D11_SO_DECLARATION_ENTRY m_newEntry; // Currently parsing entry - LPSTR m_SemanticString[D3D11_SO_BUFFER_SLOT_COUNT]; // Copy of strings - - static const UINT MAX_ERROR_SIZE = 254; - char m_pError[ MAX_ERROR_SIZE + 1 ]; // Error buffer - -public: - CSOParser() - { - ZeroMemory(&m_newEntry, sizeof(m_newEntry)); - ZeroMemory(m_SemanticString, sizeof(m_SemanticString)); - m_pError[0] = 0; - } - - ~CSOParser() - { - for( UINT Stream = 0; Stream < D3D11_SO_STREAM_COUNT; Stream++ ) - { - SAFE_DELETE_ARRAY( m_SemanticString[Stream] ); - } - } - - // Parse a single string, assuming stream 0 - HRESULT Parse( __in_z LPCSTR pString ) - { - m_vDecls.Clear(); - return Parse( 0, pString ); - } - - // Parse all 4 streams - HRESULT Parse( __in_z LPSTR pStreams[D3D11_SO_STREAM_COUNT] ) - { - HRESULT hr = S_OK; - m_vDecls.Clear(); - for( UINT iDecl=0; iDecl < D3D11_SO_STREAM_COUNT; ++iDecl ) - { - hr = Parse( iDecl, pStreams[iDecl] ); - if( FAILED(hr) ) - { - char pStream[16]; - StringCchPrintfA( pStream, 16, " in stream %d.", iDecl ); - pStream[15] = 0; - StringCchCatA( m_pError, MAX_ERROR_SIZE, pStream ); - return hr; - } - } - return hr; - } - - // Return resulting declarations - D3D11_SO_DECLARATION_ENTRY *GetDeclArray() - { - return &m_vDecls[0]; - } - - char* GetErrorString() - { - return m_pError; - } - - UINT GetDeclCount() const - { - return m_vDecls.GetSize(); - } - - // Return resulting buffer strides - void GetStrides( UINT strides[4] ) - { - UINT len = GetDeclCount(); - strides[0] = strides[1] = strides[2] = strides[3] = 0; - - for( UINT i=0; i < len; i++ ) - { - strides[m_vDecls[i].OutputSlot] += m_vDecls[i].ComponentCount * sizeof(float); - } - } - -protected: - - // Parse a single string "[ :] [][.]; [[ :] [][.][;]]" - HRESULT Parse( UINT Stream, __in_z LPCSTR pString ) - { - HRESULT hr = S_OK; - - m_pError[0] = 0; - - if( pString == NULL ) - return S_OK; - - UINT len = (UINT)strlen( pString ); - if( len == 0 ) - return S_OK; - - SAFE_DELETE_ARRAY( m_SemanticString[Stream] ); - VN( m_SemanticString[Stream] = NEW char[len + 1] ); - StringCchCopyA( m_SemanticString[Stream], len + 1, pString ); - - LPSTR pSemantic = m_SemanticString[Stream]; - - while( TRUE ) - { - // Each decl entry is delimited by a semi-colon - LPSTR pSemi = strchr( pSemantic, ';' ); - - // strip leading and trailing spaces - LPSTR pEnd; - if( pSemi != NULL ) - { - *pSemi = '\0'; - pEnd = pSemi - 1; - } - else - { - pEnd = pSemantic + strlen( pSemantic ); - } - while( isspace( (unsigned char)*pSemantic ) ) - pSemantic++; - while( pEnd > pSemantic && isspace( (unsigned char)*pEnd ) ) - { - *pEnd = '\0'; - pEnd--; - } - - if( *pSemantic != '\0' ) - { - VH( AddSemantic( pSemantic ) ); - m_newEntry.Stream = Stream; - - VH( m_vDecls.Add( m_newEntry ) ); - } - if( pSemi == NULL ) - break; - pSemantic = pSemi + 1; - } - -lExit: - return hr; - } - - // Parse a single decl "[ :] [][.]" - HRESULT AddSemantic( __inout_z LPSTR pSemantic ) - { - HRESULT hr = S_OK; - - D3DXASSERT( pSemantic ); - - ZeroMemory( &m_newEntry, sizeof(m_newEntry) ); - VH( ConsumeOutputSlot( &pSemantic ) ); - VH( ConsumeRegisterMask( pSemantic ) ); - VH( ConsumeSemanticIndex( pSemantic ) ); - - // pSenantic now contains only the SemanticName (all other fields were consumed) - if( strcmp( "$SKIP", pSemantic ) != 0 ) - { - m_newEntry.SemanticName = pSemantic; - } - -lExit: - return hr; - } - - // Parse optional mask "[.]" - HRESULT ConsumeRegisterMask( __inout_z LPSTR pSemantic ) - { - HRESULT hr = S_OK; - const char *pFullMask1 = "xyzw"; - const char *pFullMask2 = "rgba"; - SIZE_T stringLength; - SIZE_T startComponent = 0; - LPCSTR p; - - D3DXASSERT( pSemantic ); - - pSemantic = strchr( pSemantic, '.' ); - - if( pSemantic == NULL ) - { - m_newEntry.ComponentCount = 4; - return S_OK; - } - - *pSemantic = '\0'; - pSemantic++; - - stringLength = strlen( pSemantic ); - p = strstr(pFullMask1, pSemantic ); - if( p ) - { - startComponent = (UINT)( p - pFullMask1 ); - } - else - { - p = strstr( pFullMask2, pSemantic ); - if( p ) - startComponent = (UINT)( p - pFullMask2 ); - else - { - StringCchPrintfA( m_pError, MAX_ERROR_SIZE, "ID3D11Effect::ParseSODecl - invalid mask declaration '%s'", pSemantic ); - VH( E_FAIL ); - } - - } - - if( stringLength == 0 ) - stringLength = 4; - - m_newEntry.StartComponent = (BYTE)startComponent; - m_newEntry.ComponentCount = (BYTE)stringLength; - -lExit: - return hr; - } - - // Parse optional output slot "[ :]" - HRESULT ConsumeOutputSlot( __deref_inout_z LPSTR* ppSemantic ) - { - D3DXASSERT( ppSemantic && *ppSemantic ); - - HRESULT hr = S_OK; - LPSTR pColon = strchr( *ppSemantic, ':' ); - - if( pColon == NULL ) - return S_OK; - - if( pColon == *ppSemantic ) - { - StringCchCopyA( m_pError, MAX_ERROR_SIZE, - "ID3D11Effect::ParseSODecl - Invalid output slot" ); - VH( E_FAIL ); - } - - *pColon = '\0'; - int outputSlot = atoi( *ppSemantic ); - if( outputSlot < 0 || outputSlot > 255 ) - { - StringCchCopyA( m_pError, MAX_ERROR_SIZE, - "ID3D11Effect::ParseSODecl - Invalid output slot" ); - VH( E_FAIL ); - } - m_newEntry.OutputSlot = (BYTE)outputSlot; - - while( *ppSemantic < pColon ) - { - if( !isdigit( (unsigned char)**ppSemantic ) ) - { - StringCchPrintfA( m_pError, MAX_ERROR_SIZE, "ID3D11Effect::ParseSODecl - Non-digit '%c' in output slot", **ppSemantic ); - VH( E_FAIL ); - } - (*ppSemantic)++; - } - - // skip the colon (which is now '\0') - (*ppSemantic)++; - - while( isspace( (unsigned char)**ppSemantic ) ) - (*ppSemantic)++; - -lExit: - return hr; - } - - // Parse optional index "[]" - HRESULT ConsumeSemanticIndex( __inout_z LPSTR pSemantic ) - { - D3DXASSERT( pSemantic ); - - UINT uLen = (UINT)strlen( pSemantic ); - - // Grab semantic index - while( uLen > 0 && isdigit( (unsigned char)pSemantic[uLen - 1] ) ) - uLen--; - - if( isdigit( (unsigned char)pSemantic[uLen] ) ) - { - m_newEntry.SemanticIndex = atoi( pSemantic + uLen ); - pSemantic[uLen] = '\0'; - } - else - { - m_newEntry.SemanticIndex = 0; - } - - return S_OK; - } -}; - - -} // end namespace D3DX11Effects diff --git a/sample/d3d11/Effects11/Effect.h b/sample/d3d11/Effects11/Effect.h deleted file mode 100644 index ec0dafa..0000000 --- a/sample/d3d11/Effects11/Effect.h +++ /dev/null @@ -1,1226 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: Effect.h -// Content: D3DX11 Effects Header for ID3DX11Effect Implementation -// -////////////////////////////////////////////////////////////////////////////// - -#pragma once - -#include "EffectBinaryFormat.h" - -using namespace D3DX11Core; - -namespace D3DX11Effects -{ - -////////////////////////////////////////////////////////////////////////// -// Forward defines -////////////////////////////////////////////////////////////////////////// - -struct SBaseBlock; -struct SShaderBlock; -struct SPassBlock; -struct SClassInstance; -struct SInterface; -struct SShaderResource; -struct SUnorderedAccessView; -struct SRenderTargetView; -struct SDepthStencilView; -struct SSamplerBlock; -struct SDepthStencilBlock; -struct SBlendBlock; -struct SRasterizerBlock; -struct SString; -struct SD3DShaderVTable; -struct SClassInstanceGlobalVariable; - -struct SAssignment; -struct SVariable; -struct SGlobalVariable; -struct SAnnotation; -struct SConstantBuffer; - -class CEffect; -class CEffectLoader; - -enum ELhsType; - -// Allows the use of 32-bit and 64-bit timers depending on platform type -typedef SIZE_T Timer; - -////////////////////////////////////////////////////////////////////////// -// Reflection & Type structures -////////////////////////////////////////////////////////////////////////// - -// CEffectMatrix is used internally instead of float arrays -struct CEffectMatrix -{ - union - { - struct - { - float _11, _12, _13, _14; - float _21, _22, _23, _24; - float _31, _32, _33, _34; - float _41, _42, _43, _44; - - }; - float m[4][4]; - }; -}; - -struct CEffectVector4 -{ - float x; - float y; - float z; - float w; -}; - -union UDataPointer -{ - void *pGeneric; - BYTE *pNumeric; - float *pNumericFloat; - UINT *pNumericDword; - int *pNumericInt; - BOOL *pNumericBool; - SString *pString; - SShaderBlock *pShader; - SBaseBlock *pBlock; - SBlendBlock *pBlend; - SDepthStencilBlock *pDepthStencil; - SRasterizerBlock *pRasterizer; - SInterface *pInterface; - SShaderResource *pShaderResource; - SUnorderedAccessView *pUnorderedAccessView; - SRenderTargetView *pRenderTargetView; - SDepthStencilView *pDepthStencilView; - SSamplerBlock *pSampler; - CEffectVector4 *pVector; - CEffectMatrix *pMatrix; - UINT_PTR Offset; -}; - -enum EMemberDataType -{ - MDT_ClassInstance, - MDT_BlendState, - MDT_DepthStencilState, - MDT_RasterizerState, - MDT_SamplerState, - MDT_Buffer, - MDT_ShaderResourceView, -}; - -struct SMemberDataPointer -{ - EMemberDataType Type; - union - { - IUnknown *pGeneric; - ID3D11ClassInstance *pD3DClassInstance; - ID3D11BlendState *pD3DEffectsManagedBlendState; - ID3D11DepthStencilState *pD3DEffectsManagedDepthStencilState; - ID3D11RasterizerState *pD3DEffectsManagedRasterizerState; - ID3D11SamplerState *pD3DEffectsManagedSamplerState; - ID3D11Buffer *pD3DEffectsManagedConstantBuffer; - ID3D11ShaderResourceView*pD3DEffectsManagedTextureBuffer; - } Data; -}; - -struct SType : public ID3DX11EffectType -{ - static const UINT_PTR c_InvalidIndex = (UINT) -1; - static const UINT c_ScalarSize = sizeof(UINT); - - // packing rule constants - static const UINT c_ScalarsPerRegister = 4; - static const UINT c_RegisterSize = c_ScalarsPerRegister * c_ScalarSize; // must be a power of 2!! - - EVarType VarType; // numeric, object, struct - UINT Elements; // # of array elements (0 for non-arrays) - char *pTypeName; // friendly name of the type: "VS_OUTPUT", "float4", etc. - - // *Size and stride values are always 0 for object types - // *Annotations adhere to packing rules (even though they do not reside in constant buffers) - // for consistency's sake - // - // Packing rules: - // *Structures and array elements are always register aligned - // *Single-row values (or, for column major matrices, single-column) are greedily - // packed unless doing so would span a register boundary, in which case they are - // register aligned - - UINT TotalSize; // Total size of this data type in a constant buffer from - // start to finish (padding in between elements is included, - // but padding at the end is not since that would require - // knowledge of the following data type). - - UINT Stride; // Number of bytes to advance between elements. - // Typically a multiple of 16 for arrays, vectors, matrices. - // For scalars and small vectors/matrices, this can be 4 or 8. - - UINT PackedSize; // Size, in bytes, of this data typed when fully packed - - union - { - SBinaryNumericType NumericType; - EObjectType ObjectType; // not all values of EObjectType are valid here (e.g. constant buffer) - struct - { - SVariable *pMembers; // array of type instances describing structure members - UINT Members; - bool ImplementsInterface; // true if this type implements an interface - bool HasSuperClass; // true if this type has a parent class - } StructType; - void* InterfaceType; // nothing for interfaces - }; - - - SType() : - VarType(EVT_Invalid), - Elements(0), - pTypeName(NULL), - TotalSize(0), - Stride(0), - PackedSize(0) - { - C_ASSERT( sizeof(NumericType) <= sizeof(StructType) ); - C_ASSERT( sizeof(ObjectType) <= sizeof(StructType) ); - C_ASSERT( sizeof(InterfaceType) <= sizeof(StructType) ); - ZeroMemory( &StructType, sizeof(StructType) ); - } - - BOOL IsEqual(SType *pOtherType) const; - - BOOL IsObjectType(EObjectType ObjType) const - { - return IsObjectTypeHelper(VarType, ObjectType, ObjType); - } - BOOL IsShader() const - { - return IsShaderHelper(VarType, ObjectType); - } - BOOL BelongsInConstantBuffer() const - { - return (VarType == EVT_Numeric) || (VarType == EVT_Struct); - } - BOOL IsStateBlockObject() const - { - return IsStateBlockObjectHelper(VarType, ObjectType); - } - BOOL IsClassInstance() const - { - return (VarType == EVT_Struct) && StructType.ImplementsInterface; - } - BOOL IsInterface() const - { - return IsInterfaceHelper(VarType, ObjectType); - } - BOOL IsShaderResource() const - { - return IsShaderResourceHelper(VarType, ObjectType); - } - BOOL IsUnorderedAccessView() const - { - return IsUnorderedAccessViewHelper(VarType, ObjectType); - } - BOOL IsSampler() const - { - return IsSamplerHelper(VarType, ObjectType); - } - BOOL IsRenderTargetView() const - { - return IsRenderTargetViewHelper(VarType, ObjectType); - } - BOOL IsDepthStencilView() const - { - return IsDepthStencilViewHelper(VarType, ObjectType); - } - - UINT GetTotalUnpackedSize(BOOL IsSingleElement) const; - UINT GetTotalPackedSize(BOOL IsSingleElement) const; - HRESULT GetDescHelper(D3DX11_EFFECT_TYPE_DESC *pDesc, BOOL IsSingleElement) const; - - STDMETHOD_(BOOL, IsValid)() { return TRUE; } - STDMETHOD(GetDesc)(D3DX11_EFFECT_TYPE_DESC *pDesc) { return GetDescHelper(pDesc, FALSE); } - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeByName)(LPCSTR Name); - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeBySemantic)(LPCSTR Semantic); - STDMETHOD_(LPCSTR, GetMemberName)(UINT Index); - STDMETHOD_(LPCSTR, GetMemberSemantic)(UINT Index); -}; - -// Represents a type structure for a single element. -// It seems pretty trivial, but it has a different virtual table which enables -// us to accurately represent a type that consists of a single element -struct SSingleElementType : public ID3DX11EffectType -{ - SType *pType; - - STDMETHOD_(BOOL, IsValid)() { return TRUE; } - STDMETHOD(GetDesc)(D3DX11_EFFECT_TYPE_DESC *pDesc) { return ((SType*)pType)->GetDescHelper(pDesc, TRUE); } - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeByIndex)(UINT Index) { return ((SType*)pType)->GetMemberTypeByIndex(Index); } - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeByName)(LPCSTR Name) { return ((SType*)pType)->GetMemberTypeByName(Name); } - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeBySemantic)(LPCSTR Semantic) { return ((SType*)pType)->GetMemberTypeBySemantic(Semantic); } - STDMETHOD_(LPCSTR, GetMemberName)(UINT Index) { return ((SType*)pType)->GetMemberName(Index); } - STDMETHOD_(LPCSTR, GetMemberSemantic)(UINT Index) { return ((SType*)pType)->GetMemberSemantic(Index); } -}; - -////////////////////////////////////////////////////////////////////////// -// Block definitions -////////////////////////////////////////////////////////////////////////// - -void * GetBlockByIndex(EVarType VarType, EObjectType ObjectType, void *pBaseBlock, UINT Index); - -struct SBaseBlock -{ - EBlockType BlockType; - - BOOL IsUserManaged:1; - - UINT AssignmentCount; - SAssignment *pAssignments; - - SBaseBlock(); - - BOOL ApplyAssignments(CEffect *pEffect); - - D3DX11INLINE SSamplerBlock *AsSampler() const - { - D3DXASSERT( BlockType == EBT_Sampler ); - return (SSamplerBlock*) this; - } - - D3DX11INLINE SDepthStencilBlock *AsDepthStencil() const - { - D3DXASSERT( BlockType == EBT_DepthStencil ); - return (SDepthStencilBlock*) this; - } - - D3DX11INLINE SBlendBlock *AsBlend() const - { - D3DXASSERT( BlockType == EBT_Blend ); - return (SBlendBlock*) this; - } - - D3DX11INLINE SRasterizerBlock *AsRasterizer() const - { - D3DXASSERT( BlockType == EBT_Rasterizer ); - return (SRasterizerBlock*) this; - } - - D3DX11INLINE SPassBlock *AsPass() const - { - D3DXASSERT( BlockType == EBT_Pass ); - return (SPassBlock*) this; - } -}; - -struct STechnique : public ID3DX11EffectTechnique -{ - char *pName; - - UINT PassCount; - SPassBlock *pPasses; - - UINT AnnotationCount; - SAnnotation *pAnnotations; - - BOOL InitiallyValid; - BOOL HasDependencies; - - STechnique(); - - STDMETHOD_(BOOL, IsValid)(); - STDMETHOD(GetDesc)(D3DX11_TECHNIQUE_DESC *pDesc); - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(LPCSTR Name); - - STDMETHOD_(ID3DX11EffectPass*, GetPassByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectPass*, GetPassByName)(LPCSTR Name); - - STDMETHOD(ComputeStateBlockMask)(D3DX11_STATE_BLOCK_MASK *pStateBlockMask); -}; - -struct SGroup : public ID3DX11EffectGroup -{ - char *pName; - - UINT TechniqueCount; - STechnique *pTechniques; - - UINT AnnotationCount; - SAnnotation *pAnnotations; - - BOOL InitiallyValid; - BOOL HasDependencies; - - SGroup(); - - STDMETHOD_(BOOL, IsValid)(); - STDMETHOD(GetDesc)(D3DX11_GROUP_DESC *pDesc); - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(LPCSTR Name); - - STDMETHOD_(ID3DX11EffectTechnique*, GetTechniqueByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectTechnique*, GetTechniqueByName)(LPCSTR Name); -}; - -struct SPassBlock : SBaseBlock, public ID3DX11EffectPass -{ - struct - { - ID3D11BlendState* pBlendState; - FLOAT BlendFactor[4]; - UINT SampleMask; - ID3D11DepthStencilState *pDepthStencilState; - UINT StencilRef; - union - { - D3D11_SO_DECLARATION_ENTRY *pEntry; - char *pEntryDesc; - } GSSODesc; - - // Pass assignments can write directly into these - SBlendBlock *pBlendBlock; - SDepthStencilBlock *pDepthStencilBlock; - SRasterizerBlock *pRasterizerBlock; - UINT RenderTargetViewCount; - SRenderTargetView *pRenderTargetViews[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT]; - SDepthStencilView *pDepthStencilView; - SShaderBlock *pVertexShaderBlock; - SShaderBlock *pPixelShaderBlock; - SShaderBlock *pGeometryShaderBlock; - SShaderBlock *pComputeShaderBlock; - SShaderBlock *pDomainShaderBlock; - SShaderBlock *pHullShaderBlock; - } BackingStore; - - char *pName; - - UINT AnnotationCount; - SAnnotation *pAnnotations; - - CEffect *pEffect; - - BOOL InitiallyValid; // validity of all state objects and shaders in pass upon BindToDevice - BOOL HasDependencies; // if pass expressions or pass state blocks have dependencies on variables (if true, IsValid != InitiallyValid possibly) - - SPassBlock(); - - void ApplyPassAssignments(); - BOOL CheckShaderDependencies( SShaderBlock* pBlock ); - BOOL CheckDependencies(); - - template - HRESULT GetShaderDescHelper(D3DX11_PASS_SHADER_DESC *pDesc); - - STDMETHOD_(BOOL, IsValid)(); - STDMETHOD(GetDesc)(D3DX11_PASS_DESC *pDesc); - - STDMETHOD(GetVertexShaderDesc)(D3DX11_PASS_SHADER_DESC *pDesc); - STDMETHOD(GetGeometryShaderDesc)(D3DX11_PASS_SHADER_DESC *pDesc); - STDMETHOD(GetPixelShaderDesc)(D3DX11_PASS_SHADER_DESC *pDesc); - STDMETHOD(GetHullShaderDesc)(D3DX11_PASS_SHADER_DESC *pDesc); - STDMETHOD(GetDomainShaderDesc)(D3DX11_PASS_SHADER_DESC *pDesc); - STDMETHOD(GetComputeShaderDesc)(D3DX11_PASS_SHADER_DESC *pDesc); - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(LPCSTR Name); - - STDMETHOD(Apply)(UINT Flags, ID3D11DeviceContext* pContext); - - STDMETHOD(ComputeStateBlockMask)(D3DX11_STATE_BLOCK_MASK *pStateBlockMask); -}; - -struct SDepthStencilBlock : SBaseBlock -{ - ID3D11DepthStencilState *pDSObject; - D3D11_DEPTH_STENCIL_DESC BackingStore; - BOOL IsValid; - - SDepthStencilBlock(); -}; - -struct SBlendBlock : SBaseBlock -{ - ID3D11BlendState *pBlendObject; - D3D11_BLEND_DESC BackingStore; - BOOL IsValid; - - SBlendBlock(); -}; - -struct SRasterizerBlock : SBaseBlock -{ - ID3D11RasterizerState *pRasterizerObject; - D3D11_RASTERIZER_DESC BackingStore; - BOOL IsValid; - - SRasterizerBlock(); -}; - -struct SSamplerBlock : SBaseBlock -{ - ID3D11SamplerState *pD3DObject; - struct - { - D3D11_SAMPLER_DESC SamplerDesc; - // Sampler "TEXTURE" assignments can write directly into this - SShaderResource *pTexture; - } BackingStore; - - SSamplerBlock(); -}; - -struct SInterface -{ - SClassInstanceGlobalVariable* pClassInstance; - - SInterface() - { - pClassInstance = NULL; - } -}; - -struct SShaderResource -{ - ID3D11ShaderResourceView *pShaderResource; - - SShaderResource() - { - pShaderResource = NULL; - } - -}; - -struct SUnorderedAccessView -{ - ID3D11UnorderedAccessView *pUnorderedAccessView; - - SUnorderedAccessView() - { - pUnorderedAccessView = NULL; - } - -}; - -struct SRenderTargetView -{ - ID3D11RenderTargetView *pRenderTargetView; - - SRenderTargetView(); -}; - -struct SDepthStencilView -{ - ID3D11DepthStencilView *pDepthStencilView; - - SDepthStencilView(); -}; - - -template struct SShaderDependency -{ - UINT StartIndex; - UINT Count; - - T *ppFXPointers; // Array of ptrs to FX objects (CBs, SShaderResources, etc) - D3DTYPE *ppD3DObjects; // Array of ptrs to matching D3D objects - - SShaderDependency() - { - StartIndex = Count = 0; - - ppD3DObjects = NULL; - ppFXPointers = NULL; - } -}; - -typedef SShaderDependency SShaderCBDependency; -typedef SShaderDependency SShaderSamplerDependency; -typedef SShaderDependency SShaderResourceDependency; -typedef SShaderDependency SUnorderedAccessViewDependency; -typedef SShaderDependency SInterfaceDependency; - -// Shader VTables are used to eliminate branching in ApplyShaderBlock. -// The effect owns three D3DShaderVTables, one for PS, one for VS, and one for GS. -struct SD3DShaderVTable -{ - void ( __stdcall ID3D11DeviceContext::*pSetShader)(ID3D11DeviceChild* pShader, ID3D11ClassInstance*const* ppClassInstances, UINT NumClassInstances); - void ( __stdcall ID3D11DeviceContext::*pSetConstantBuffers)(UINT StartConstantSlot, UINT NumBuffers, ID3D11Buffer *const *pBuffers); - void ( __stdcall ID3D11DeviceContext::*pSetSamplers)(UINT Offset, UINT NumSamplers, ID3D11SamplerState*const* pSamplers); - void ( __stdcall ID3D11DeviceContext::*pSetShaderResources)(UINT Offset, UINT NumResources, ID3D11ShaderResourceView *const *pResources); - HRESULT ( __stdcall ID3D11Device::*pCreateShader)(const void *pShaderBlob, SIZE_T ShaderBlobSize, ID3D11ClassLinkage* pClassLinkage, ID3D11DeviceChild **ppShader); -}; - - -struct SShaderBlock -{ - enum ESigType - { - ST_Input, - ST_Output, - ST_PatchConstant, - }; - - struct SInterfaceParameter - { - char *pName; - UINT Index; - }; - - // this data is classified as reflection-only and will all be discarded at runtime - struct SReflectionData - { - BYTE *pBytecode; - UINT BytecodeLength; - char *pStreamOutDecls[4]; // set with ConstructGSWithSO - UINT RasterizedStream; // set with ConstructGSWithSO - BOOL IsNullGS; - ID3D11ShaderReflection *pReflection; - UINT InterfaceParameterCount; // set with BindInterfaces (used for function interface parameters) - SInterfaceParameter *pInterfaceParameters; // set with BindInterfaces (used for function interface parameters) - }; - - BOOL IsValid; - SD3DShaderVTable *pVT; - - // This value is NULL if the shader is NULL or was never initialized - SReflectionData *pReflectionData; - - ID3D11DeviceChild *pD3DObject; - - UINT CBDepCount; - SShaderCBDependency *pCBDeps; - - UINT SampDepCount; - SShaderSamplerDependency *pSampDeps; - - UINT InterfaceDepCount; - SInterfaceDependency *pInterfaceDeps; - - UINT ResourceDepCount; - SShaderResourceDependency *pResourceDeps; - - UINT UAVDepCount; - SUnorderedAccessViewDependency *pUAVDeps; - - UINT TBufferDepCount; - SConstantBuffer **ppTbufDeps; - - ID3DBlob *pInputSignatureBlob; // The input signature is separated from the bytecode because it - // is always available, even after Optimize() has been called. - - SShaderBlock(SD3DShaderVTable *pVirtualTable = NULL); - - EObjectType GetShaderType(); - - HRESULT OnDeviceBind(); - - // Public API helpers - HRESULT ComputeStateBlockMask(D3DX11_STATE_BLOCK_MASK *pStateBlockMask); - - HRESULT GetShaderDesc(D3DX11_EFFECT_SHADER_DESC *pDesc, BOOL IsInline); - - HRESULT GetVertexShader(ID3D11VertexShader **ppVS); - HRESULT GetGeometryShader(ID3D11GeometryShader **ppGS); - HRESULT GetPixelShader(ID3D11PixelShader **ppPS); - HRESULT GetHullShader(ID3D11HullShader **ppPS); - HRESULT GetDomainShader(ID3D11DomainShader **ppPS); - HRESULT GetComputeShader(ID3D11ComputeShader **ppPS); - - HRESULT GetSignatureElementDesc(ESigType SigType, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc); -}; - - - -struct SString -{ - char *pString; - - SString(); -}; - - - -////////////////////////////////////////////////////////////////////////// -// Global Variable & Annotation structure/interface definitions -////////////////////////////////////////////////////////////////////////// - -// -// This is a general structure that can describe -// annotations, variables, and structure members -// -struct SVariable -{ - // For annotations/variables/variable members: - // 1) If numeric, pointer to data (for variables: points into backing store, - // for annotations, points into reflection heap) - // OR - // 2) If object, pointer to the block. If object array, subsequent array elements are found in - // contiguous blocks; the Nth block is found by (( *) pBlock) + N - // (this is because variables that are arrays of objects have their blocks allocated contiguously) - // - // For structure members: - // Offset of this member (in bytes) from parent structure (structure members must be numeric/struct) - UDataPointer Data; - union - { - UINT MemberDataOffsetPlus4; // 4 added so that 0 == NULL can represent "unused" - SMemberDataPointer *pMemberData; - }; - - SType *pType; - char *pName; - char *pSemantic; - UINT ExplicitBindPoint; - - SVariable() - { - ZeroMemory(this, sizeof(*this)); - ExplicitBindPoint = -1; - } -}; - -// Template definitions for all of the various ID3DX11EffectVariable specializations -#include "EffectVariable.inl" - - -//////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectShaderVariable (SAnonymousShader implementation) -//////////////////////////////////////////////////////////////////////////////// - -struct SAnonymousShader : public TUncastableVariable, public ID3DX11EffectType -{ - SShaderBlock *pShaderBlock; - - SAnonymousShader(SShaderBlock *pBlock = NULL); - - // ID3DX11EffectShaderVariable interface - STDMETHOD_(BOOL, IsValid)(); - STDMETHOD_(ID3DX11EffectType*, GetType)(); - STDMETHOD(GetDesc)(D3DX11_EFFECT_VARIABLE_DESC *pDesc); - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(LPCSTR Name); - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(LPCSTR Name); - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(LPCSTR Semantic); - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(UINT Index); - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(); - - // other casts are handled by TUncastableVariable - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(); - - STDMETHOD(SetRawValue)(CONST void *pData, UINT Offset, UINT Count); - STDMETHOD(GetRawValue)(__out_bcount(Count) void *pData, UINT Offset, UINT Count); - - STDMETHOD(GetShaderDesc)(UINT ShaderIndex, D3DX11_EFFECT_SHADER_DESC *pDesc); - - STDMETHOD(GetVertexShader)(UINT ShaderIndex, ID3D11VertexShader **ppVS); - STDMETHOD(GetGeometryShader)(UINT ShaderIndex, ID3D11GeometryShader **ppGS); - STDMETHOD(GetPixelShader)(UINT ShaderIndex, ID3D11PixelShader **ppPS); - STDMETHOD(GetHullShader)(UINT ShaderIndex, ID3D11HullShader **ppPS); - STDMETHOD(GetDomainShader)(UINT ShaderIndex, ID3D11DomainShader **ppPS); - STDMETHOD(GetComputeShader)(UINT ShaderIndex, ID3D11ComputeShader **ppPS); - - STDMETHOD(GetInputSignatureElementDesc)(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc); - STDMETHOD(GetOutputSignatureElementDesc)(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc); - STDMETHOD(GetPatchConstantSignatureElementDesc)(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc); - - // ID3DX11EffectType interface - STDMETHOD(GetDesc)(D3DX11_EFFECT_TYPE_DESC *pDesc); - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeByName)(LPCSTR Name); - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeBySemantic)(LPCSTR Semantic); - - STDMETHOD_(LPCSTR, GetMemberName)(UINT Index); - STDMETHOD_(LPCSTR, GetMemberSemantic)(UINT Index); -}; - -//////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectConstantBuffer (SConstantBuffer implementation) -//////////////////////////////////////////////////////////////////////////////// - -struct SConstantBuffer : public TUncastableVariable, public ID3DX11EffectType -{ - ID3D11Buffer *pD3DObject; - SShaderResource TBuffer; // NULL iff IsTbuffer == FALSE - - BYTE *pBackingStore; - UINT Size; // in bytes - - char *pName; - - UINT AnnotationCount; - SAnnotation *pAnnotations; - - UINT VariableCount; // # of variables contained in this cbuffer - SGlobalVariable *pVariables; // array of size [VariableCount], points into effect's contiguous variable list - UINT ExplicitBindPoint; // Used when a CB has been explicitly bound (register(bXX)). -1 if not - - BOOL IsDirty:1; // Set when any member is updated; cleared on CB apply - BOOL IsTBuffer:1; // TRUE iff TBuffer.pShaderResource != NULL - BOOL IsUserManaged:1; // Set if you don't want effects to update this buffer - BOOL IsEffectOptimized:1;// Set if the effect has been optimized - BOOL IsUsedByExpression:1;// Set if used by any expressions - BOOL IsUserPacked:1; // Set if the elements have user-specified offsets - BOOL IsSingle:1; // Set to true if you want to share this CB with cloned Effects - BOOL IsNonUpdatable:1; // Set to true if you want to share this CB with cloned Effects - - union - { - // These are used to store the original ID3D11Buffer* for use in UndoSetConstantBuffer - UINT MemberDataOffsetPlus4; // 4 added so that 0 == NULL can represent "unused" - SMemberDataPointer *pMemberData; - }; - - CEffect *pEffect; - - SConstantBuffer() - { - pD3DObject = NULL; - ZeroMemory(&TBuffer, sizeof(TBuffer)); - ExplicitBindPoint = -1; - pBackingStore = NULL; - Size = 0; - pName = NULL; - VariableCount = 0; - pVariables = NULL; - AnnotationCount = 0; - pAnnotations = NULL; - IsDirty = FALSE; - IsTBuffer = FALSE; - IsUserManaged = FALSE; - IsEffectOptimized = FALSE; - IsUsedByExpression = FALSE; - IsUserPacked = FALSE; - IsSingle = FALSE; - IsNonUpdatable = FALSE; - pEffect = NULL; - } - - bool ClonedSingle() const; - - // ID3DX11EffectConstantBuffer interface - STDMETHOD_(BOOL, IsValid)(); - STDMETHOD_(ID3DX11EffectType*, GetType)(); - STDMETHOD(GetDesc)(D3DX11_EFFECT_VARIABLE_DESC *pDesc); - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(LPCSTR Name); - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(LPCSTR Name); - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(LPCSTR Semantic); - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(UINT Index); - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(); - - // other casts are handled by TUncastableVariable - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(); - - STDMETHOD(SetRawValue)(CONST void *pData, UINT Offset, UINT Count); - STDMETHOD(GetRawValue)(__out_bcount(Count) void *pData, UINT Offset, UINT Count); - - STDMETHOD(SetConstantBuffer)(ID3D11Buffer *pConstantBuffer); - STDMETHOD(GetConstantBuffer)(ID3D11Buffer **ppConstantBuffer); - STDMETHOD(UndoSetConstantBuffer)(); - - STDMETHOD(SetTextureBuffer)(ID3D11ShaderResourceView *pTextureBuffer); - STDMETHOD(GetTextureBuffer)(ID3D11ShaderResourceView **ppTextureBuffer); - STDMETHOD(UndoSetTextureBuffer)(); - - // ID3DX11EffectType interface - STDMETHOD(GetDesc)(D3DX11_EFFECT_TYPE_DESC *pDesc); - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeByName)(LPCSTR Name); - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeBySemantic)(LPCSTR Semantic); - - STDMETHOD_(LPCSTR, GetMemberName)(UINT Index); - STDMETHOD_(LPCSTR, GetMemberSemantic)(UINT Index); -}; - - -////////////////////////////////////////////////////////////////////////// -// Assignments -////////////////////////////////////////////////////////////////////////// - -enum ERuntimeAssignmentType -{ - ERAT_Invalid, - // [Destination] refers to the destination location, which is always the backing store of the pass/state block. - // [Source] refers to the current source of data, always coming from either a constant buffer's - // backing store (for numeric assignments), an object variable's block array, or an anonymous (unowned) block - - // Numeric variables: - ERAT_Constant, // Source is unused. - // No dependencies; this assignment can be safely removed after load. - ERAT_NumericVariable, // Source points to the CB's backing store where the value lives. - // 1 dependency: the variable itself. - ERAT_NumericConstIndex, // Source points to the CB's backing store where the value lives, offset by N. - // 1 dependency: the variable array being indexed. - ERAT_NumericVariableIndex, // Source points to the last used element of the variable in the CB's backing store. - // 2 dependencies: the index variable followed by the array variable. - - // Object variables: - ERAT_ObjectInlineShader, // An anonymous, immutable shader block pointer is copied to the destination immediately. - // No dependencies; this assignment can be safely removed after load. - ERAT_ObjectVariable, // A pointer to the block owned by the object variable is copied to the destination immediately. - // No dependencies; this assignment can be safely removed after load. - ERAT_ObjectConstIndex, // A pointer to the Nth block owned by an object variable is copied to the destination immediately. - // No dependencies; this assignment can be safely removed after load. - ERAT_ObjectVariableIndex, // Source points to the first block owned by an object variable array - // (the offset from this, N, is taken from another variable). - // 1 dependency: the variable being used to index the array. -}; - -struct SAssignment -{ - struct SDependency - { - SGlobalVariable *pVariable; - - SDependency() - { - pVariable = NULL; - } - }; - - ELhsType LhsType; // PS, VS, DepthStencil etc. - - // The value of SAssignment.AssignmentType determines how the other fields behave - // (DependencyCount, pDependencies, Destination, and Source) - ERuntimeAssignmentType AssignmentType; - - Timer LastRecomputedTime; - - // see comments in ERuntimeAssignmentType for how dependencies and data pointers are handled - UINT DependencyCount; - SDependency *pDependencies; - - UDataPointer Destination; // This value never changes after load, and always refers to the backing store - UDataPointer Source; // This value, on the other hand, can change if variable- or expression- driven - - UINT DataSize : 16; // Size of the data element to be copied in bytes (if numeric) or - // stride of the block type (if object) - UINT MaxElements : 16; // Max allowable index (needed because we don't store object arrays as dependencies, - // and therefore have no way of getting their Element count) - - BOOL IsObjectAssignment() // True for Shader and RObject assignments (the type that appear in pass blocks) - { - return IsObjectAssignmentHelper(LhsType); - } - - SAssignment() - { - LhsType = ELHS_Invalid; - AssignmentType = ERAT_Invalid; - - Destination.pGeneric = NULL; - Source.pGeneric = NULL; - - LastRecomputedTime = 0; - DependencyCount = 0; - pDependencies = NULL; - - DataSize = 0; - } -}; - -////////////////////////////////////////////////////////////////////////// -// Private effect heaps -////////////////////////////////////////////////////////////////////////// - -// Used to efficiently reallocate data -// 1) For every piece of data that needs reallocation, move it to its new location -// and add an entry into the table -// 2) For everyone that references one of these data blocks, do a quick table lookup -// to find the old pointer and then replace it with the new one -struct SPointerMapping -{ - void *pOld; - void *pNew; - - static BOOL AreMappingsEqual(const SPointerMapping &pMap1, const SPointerMapping &pMap2) - { - return (pMap1.pOld == pMap2.pOld); - } - - UINT Hash() - { - // hash the pointer itself - // (using the pointer as a hash would be very bad) - return ComputeHash((BYTE*)&pOld, sizeof(pOld)); - } -}; - -typedef CEffectHashTableWithPrivateHeap CPointerMappingTable; - -// Assist adding data to a block of memory -class CEffectHeap -{ -protected: - BYTE *m_pData; - UINT m_dwBufferSize; - UINT m_dwSize; - - template - HRESULT AddDataInternal(const void *pData, UINT dwSize, void **ppPointer); - -public: - HRESULT ReserveMemory(UINT dwSize); - UINT GetSize(); - BYTE* GetDataStart() { return m_pData; } - - // AddData and AddString append existing data to the buffer - they change m_dwSize. Users are - // not expected to modify the data pointed to by the return pointer - HRESULT AddString(const char *pString, __deref_out_z char **ppPointer); - HRESULT AddData(const void *pData, UINT dwSize, void **ppPointer); - - // Allocate behaves like a standard new - it will allocate memory, move m_dwSize. The caller is - // expected to use the returned pointer - void* Allocate(UINT dwSize); - - // Move data from the general heap and optional free memory - HRESULT MoveData(void **ppData, UINT size); - HRESULT MoveString(__deref_inout_z char **ppStringData); - HRESULT MoveInterfaceParameters(UINT InterfaceCount, __in_ecount(1) SShaderBlock::SInterfaceParameter **ppInterfaces); - HRESULT MoveEmptyDataBlock(void **ppData, UINT size); - - BOOL IsInHeap(void *pData) const - { - return (pData >= m_pData && pData < (m_pData + m_dwBufferSize)); - } - - CEffectHeap(); - ~CEffectHeap(); -}; - -class CEffectReflection -{ -public: - // Single memory block support - CEffectHeap m_Heap; -}; - - -class CEffect : public ID3DX11Effect -{ - friend struct SBaseBlock; - friend struct SPassBlock; - friend class CEffectLoader; - friend struct SConstantBuffer; - friend struct TSamplerVariable>; - friend struct TSamplerVariable>>; - -protected: - - UINT m_RefCount; - UINT m_Flags; - - // Private heap - all pointers should point into here - CEffectHeap m_Heap; - - // Reflection object - CEffectReflection *m_pReflection; - - // global variables in the effect (aka parameters) - UINT m_VariableCount; - SGlobalVariable *m_pVariables; - - // anonymous shader variables (one for every inline shader assignment) - UINT m_AnonymousShaderCount; - SAnonymousShader *m_pAnonymousShaders; - - // techniques within this effect (the actual data is located in each group) - UINT m_TechniqueCount; - - // groups within this effect - UINT m_GroupCount; - SGroup *m_pGroups; - SGroup *m_pNullGroup; - - UINT m_ShaderBlockCount; - SShaderBlock *m_pShaderBlocks; - - UINT m_DepthStencilBlockCount; - SDepthStencilBlock *m_pDepthStencilBlocks; - - UINT m_BlendBlockCount; - SBlendBlock *m_pBlendBlocks; - - UINT m_RasterizerBlockCount; - SRasterizerBlock *m_pRasterizerBlocks; - - UINT m_SamplerBlockCount; - SSamplerBlock *m_pSamplerBlocks; - - UINT m_MemberDataCount; - SMemberDataPointer *m_pMemberDataBlocks; - - UINT m_InterfaceCount; - SInterface *m_pInterfaces; - - UINT m_CBCount; - SConstantBuffer *m_pCBs; - - UINT m_StringCount; - SString *m_pStrings; - - UINT m_ShaderResourceCount; - SShaderResource *m_pShaderResources; - - UINT m_UnorderedAccessViewCount; - SUnorderedAccessView *m_pUnorderedAccessViews; - - UINT m_RenderTargetViewCount; - SRenderTargetView *m_pRenderTargetViews; - - UINT m_DepthStencilViewCount; - SDepthStencilView *m_pDepthStencilViews; - - Timer m_LocalTimer; - - // temporary index variable for assignment evaluation - UINT m_FXLIndex; - - ID3D11Device *m_pDevice; - ID3D11DeviceContext *m_pContext; - ID3D11ClassLinkage *m_pClassLinkage; - - // Master lists of reflection interfaces - CEffectVectorOwner m_pTypeInterfaces; - CEffectVectorOwner m_pMemberInterfaces; - - ////////////////////////////////////////////////////////////////////////// - // String & Type pooling - - typedef SType *LPSRUNTIMETYPE; - static BOOL AreTypesEqual(const LPSRUNTIMETYPE &pType1, const LPSRUNTIMETYPE &pType2) { return (pType1->IsEqual(pType2)); } - static BOOL AreStringsEqual(__in const LPCSTR &pStr1, __in const LPCSTR &pStr2) { return strcmp(pStr1, pStr2) == 0; } - - typedef CEffectHashTableWithPrivateHeap CTypeHashTable; - typedef CEffectHashTableWithPrivateHeap CStringHashTable; - - // These are used to pool types & type-related strings - // until Optimize() is called - CTypeHashTable *m_pTypePool; - CStringHashTable *m_pStringPool; - CDataBlockStore *m_pPooledHeap; - // After Optimize() is called, the type/string pools should be deleted and all - // remaining data should be migrated into the optimized type heap - CEffectHeap *m_pOptimizedTypeHeap; - - // Pools a string or type and modifies the pointer - void AddStringToPool(const char **ppString); - void AddTypeToPool(SType **ppType); - - HRESULT OptimizeTypes(CPointerMappingTable *pMappingTable, bool Cloning = false); - - - ////////////////////////////////////////////////////////////////////////// - // Runtime (performance critical) - - void ApplyShaderBlock(SShaderBlock *pBlock); - BOOL ApplyRenderStateBlock(SBaseBlock *pBlock); - BOOL ApplySamplerBlock(SSamplerBlock *pBlock); - void ApplyPassBlock(SPassBlock *pBlock); - BOOL EvaluateAssignment(SAssignment *pAssignment); - BOOL ValidateShaderBlock( SShaderBlock* pBlock ); - BOOL ValidatePassBlock( SPassBlock* pBlock ); - - ////////////////////////////////////////////////////////////////////////// - // Non-runtime functions (not performance critical) - - SGlobalVariable *FindLocalVariableByName(LPCSTR pVarName); // Looks in the current effect only - SGlobalVariable *FindVariableByName(LPCSTR pVarName); - SVariable *FindVariableByNameWithParsing(LPCSTR pVarName); - SConstantBuffer *FindCB(LPCSTR pName); - void ReplaceCBReference(SConstantBuffer *pOldBufferBlock, ID3D11Buffer *pNewBuffer); // Used by user-managed CBs - void ReplaceSamplerReference(SSamplerBlock *pOldSamplerBlock, ID3D11SamplerState *pNewSampler); - void AddRefAllForCloning( CEffect* pEffectSource ); - HRESULT CopyMemberInterfaces( CEffect* pEffectSource ); - HRESULT CopyStringPool( CEffect* pEffectSource, CPointerMappingTable& mappingTable ); - HRESULT CopyTypePool( CEffect* pEffectSource, CPointerMappingTable& mappingTableTypes, CPointerMappingTable& mappingTableStrings ); - HRESULT CopyOptimizedTypePool( CEffect* pEffectSource, CPointerMappingTable& mappingTableTypes ); - HRESULT RecreateCBs(); - HRESULT FixupMemberInterface( SMember* pMember, CEffect* pEffectSource, CPointerMappingTable& mappingTableStrings ); - - void ValidateIndex(UINT Elements); - - void IncrementTimer(); - void HandleLocalTimerRollover(); - - friend struct SConstantBuffer; - -public: - CEffect( UINT Flags = 0 ); - virtual ~CEffect(); - void ReleaseShaderRefection(); - - // Initialize must be called after the effect is created - HRESULT LoadEffect(CONST void *pEffectBuffer, UINT cbEffectBuffer); - - // Once the effect is fully loaded, call BindToDevice to attach it to a device - HRESULT BindToDevice(ID3D11Device *pDevice); - - Timer GetCurrentTime() const { return m_LocalTimer; } - - BOOL IsReflectionData(void *pData) const { return m_pReflection->m_Heap.IsInHeap(pData); } - BOOL IsRuntimeData(void *pData) const { return m_Heap.IsInHeap(pData); } - - ////////////////////////////////////////////////////////////////////////// - // Public interface - - // IUnknown - STDMETHOD(QueryInterface)(REFIID iid, LPVOID *ppv); - STDMETHOD_(ULONG, AddRef)(); - STDMETHOD_(ULONG, Release)(); - - STDMETHOD_(BOOL, IsValid)() { return TRUE; } - - STDMETHOD(GetDevice)(ID3D11Device** ppDevice); - - STDMETHOD(GetDesc)(D3DX11_EFFECT_DESC *pDesc); - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetConstantBufferByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetConstantBufferByName)(LPCSTR Name); - - STDMETHOD_(ID3DX11EffectVariable*, GetVariableByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectVariable*, GetVariableByName)(LPCSTR Name); - STDMETHOD_(ID3DX11EffectVariable*, GetVariableBySemantic)(LPCSTR Semantic); - - STDMETHOD_(ID3DX11EffectTechnique*, GetTechniqueByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectTechnique*, GetTechniqueByName)(LPCSTR Name); - - STDMETHOD_(ID3DX11EffectGroup*, GetGroupByIndex)(UINT Index); - STDMETHOD_(ID3DX11EffectGroup*, GetGroupByName)(LPCSTR Name); - - STDMETHOD_(ID3D11ClassLinkage*, GetClassLinkage)(); - - STDMETHOD(CloneEffect)(UINT Flags, ID3DX11Effect** ppClonedEffect); - STDMETHOD(Optimize)(); - STDMETHOD_(BOOL, IsOptimized)(); - - ////////////////////////////////////////////////////////////////////////// - // New reflection helpers - - ID3DX11EffectType * CreatePooledSingleElementTypeInterface(SType *pType); - ID3DX11EffectVariable * CreatePooledVariableMemberInterface(TTopLevelVariable *pTopLevelEntity, SVariable *pMember, UDataPointer Data, BOOL IsSingleElement, UINT Index); - -}; - -} diff --git a/sample/d3d11/Effects11/EffectAPI.cpp b/sample/d3d11/Effects11/EffectAPI.cpp deleted file mode 100644 index e373e51..0000000 --- a/sample/d3d11/Effects11/EffectAPI.cpp +++ /dev/null @@ -1,29 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: EffectAPI.cpp -// Content: D3DX11 Effect DLL entry points -// -////////////////////////////////////////////////////////////////////////////// - -#include "pchfx.h" - -using namespace D3DX11Effects; - -HRESULT WINAPI D3DX11CreateEffectFromMemory(CONST void *pData, SIZE_T DataLength, UINT FXFlags, ID3D11Device *pDevice, ID3DX11Effect **ppEffect) -{ - HRESULT hr = S_OK; - - // Note that pData must point to a compiled effect, not HLSL - VN( *ppEffect = NEW CEffect( FXFlags & D3DX11_EFFECT_RUNTIME_VALID_FLAGS) ); - VH( ((CEffect*)(*ppEffect))->LoadEffect(pData, static_cast(DataLength)) ); - VH( ((CEffect*)(*ppEffect))->BindToDevice(pDevice) ); - -lExit: - if (FAILED(hr)) - { - SAFE_RELEASE(*ppEffect); - } - return hr; -} diff --git a/sample/d3d11/Effects11/EffectLoad.cpp b/sample/d3d11/Effects11/EffectLoad.cpp deleted file mode 100644 index 0e1cf32..0000000 --- a/sample/d3d11/Effects11/EffectLoad.cpp +++ /dev/null @@ -1,3982 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: EffectLoad.cpp -// Content: D3DX11 Effects file loading code -// -////////////////////////////////////////////////////////////////////////////// - -#include "pchfx.h" - -#include - -#define PRIVATENEW new(m_BulkHeap) - -namespace D3DX11Effects -{ - -LPCSTR g_szEffectLoadArea = "D3D11EffectLoader"; - -SRasterizerBlock g_NullRasterizer; -SDepthStencilBlock g_NullDepthStencil; -SBlendBlock g_NullBlend; -SShaderResource g_NullTexture; -SInterface g_NullInterface; -SUnorderedAccessView g_NullUnorderedAccessView; -SRenderTargetView g_NullRenderTargetView; -SDepthStencilView g_NullDepthStencilView; - -// these VTables must be setup in the proper order: -// 1) SetShader -// 2) SetConstantBuffers -// 3) SetSamplers -// 4) SetShaderResources -// 5) CreateShader -SD3DShaderVTable g_vtPS = { - (void (__stdcall ID3D11DeviceContext::*)(ID3D11DeviceChild*, ID3D11ClassInstance*const*, UINT)) &ID3D11DeviceContext::PSSetShader, - &ID3D11DeviceContext::PSSetConstantBuffers, - &ID3D11DeviceContext::PSSetSamplers, - &ID3D11DeviceContext::PSSetShaderResources, - (HRESULT (__stdcall ID3D11Device::*)(const void *, SIZE_T, ID3D11ClassLinkage*, ID3D11DeviceChild **)) &ID3D11Device::CreatePixelShader -}; - -SD3DShaderVTable g_vtVS = { - (void (__stdcall ID3D11DeviceContext::*)(ID3D11DeviceChild*, ID3D11ClassInstance*const*, UINT)) &ID3D11DeviceContext::VSSetShader, - &ID3D11DeviceContext::VSSetConstantBuffers, - &ID3D11DeviceContext::VSSetSamplers, - &ID3D11DeviceContext::VSSetShaderResources, - (HRESULT (__stdcall ID3D11Device::*)(const void *, SIZE_T, ID3D11ClassLinkage*, ID3D11DeviceChild **)) &ID3D11Device::CreateVertexShader -}; - -SD3DShaderVTable g_vtGS = { - (void (__stdcall ID3D11DeviceContext::*)(ID3D11DeviceChild*, ID3D11ClassInstance*const*, UINT)) &ID3D11DeviceContext::GSSetShader, - &ID3D11DeviceContext::GSSetConstantBuffers, - &ID3D11DeviceContext::GSSetSamplers, - &ID3D11DeviceContext::GSSetShaderResources, - (HRESULT (__stdcall ID3D11Device::*)(const void *, SIZE_T, ID3D11ClassLinkage*, ID3D11DeviceChild **)) &ID3D11Device::CreateGeometryShader -}; - -SD3DShaderVTable g_vtHS = { - (void (__stdcall ID3D11DeviceContext::*)(ID3D11DeviceChild*, ID3D11ClassInstance*const*, UINT)) &ID3D11DeviceContext::HSSetShader, - &ID3D11DeviceContext::HSSetConstantBuffers, - &ID3D11DeviceContext::HSSetSamplers, - &ID3D11DeviceContext::HSSetShaderResources, - (HRESULT (__stdcall ID3D11Device::*)(const void *, SIZE_T, ID3D11ClassLinkage*, ID3D11DeviceChild **)) &ID3D11Device::CreateHullShader -}; - -SD3DShaderVTable g_vtDS = { - (void (__stdcall ID3D11DeviceContext::*)(ID3D11DeviceChild*, ID3D11ClassInstance*const*, UINT)) &ID3D11DeviceContext::DSSetShader, - &ID3D11DeviceContext::DSSetConstantBuffers, - &ID3D11DeviceContext::DSSetSamplers, - &ID3D11DeviceContext::DSSetShaderResources, - (HRESULT (__stdcall ID3D11Device::*)(const void *, SIZE_T, ID3D11ClassLinkage*, ID3D11DeviceChild **)) &ID3D11Device::CreateDomainShader -}; - -SD3DShaderVTable g_vtCS = { - (void (__stdcall ID3D11DeviceContext::*)(ID3D11DeviceChild*, ID3D11ClassInstance*const*, UINT)) &ID3D11DeviceContext::CSSetShader, - &ID3D11DeviceContext::CSSetConstantBuffers, - &ID3D11DeviceContext::CSSetSamplers, - &ID3D11DeviceContext::CSSetShaderResources, - (HRESULT (__stdcall ID3D11Device::*)(const void *, SIZE_T, ID3D11ClassLinkage*, ID3D11DeviceChild **)) &ID3D11Device::CreateComputeShader -}; - -SShaderBlock g_NullVS(&g_vtVS); -SShaderBlock g_NullGS(&g_vtGS); -SShaderBlock g_NullPS(&g_vtPS); -SShaderBlock g_NullHS(&g_vtHS); -SShaderBlock g_NullDS(&g_vtDS); -SShaderBlock g_NullCS(&g_vtCS); - -D3D10_SHADER_VARIABLE_TYPE GetSimpleParameterTypeFromObjectType(EObjectType ObjectType) -{ - switch (ObjectType) - { - case EOT_String: - return D3D10_SVT_STRING; - case EOT_Blend: - return D3D10_SVT_BLEND; - case EOT_DepthStencil: - return D3D10_SVT_DEPTHSTENCIL; - case EOT_Rasterizer: - return D3D10_SVT_RASTERIZER; - case EOT_PixelShader: - case EOT_PixelShader5: - return D3D10_SVT_PIXELSHADER; - case EOT_VertexShader: - case EOT_VertexShader5: - return D3D10_SVT_VERTEXSHADER; - case EOT_GeometryShader: - case EOT_GeometryShaderSO: - case EOT_GeometryShader5: - return D3D10_SVT_GEOMETRYSHADER; - case EOT_HullShader5: - return D3D11_SVT_HULLSHADER; - case EOT_DomainShader5: - return D3D11_SVT_DOMAINSHADER; - case EOT_ComputeShader5: - return D3D11_SVT_COMPUTESHADER; - case EOT_RenderTargetView: - return D3D10_SVT_RENDERTARGETVIEW; - case EOT_DepthStencilView: - return D3D10_SVT_DEPTHSTENCILVIEW; - case EOT_Texture: - case EOT_Texture1D: - case EOT_Texture1DArray: - case EOT_Texture2D: - case EOT_Texture2DArray: - case EOT_Texture2DMS: - case EOT_Texture2DMSArray: - case EOT_Texture3D: - case EOT_TextureCube: - case EOT_TextureCubeArray: - return D3D10_SVT_TEXTURE; - case EOT_Buffer: - return D3D10_SVT_BUFFER; - case EOT_Sampler: - return D3D10_SVT_SAMPLER; - case EOT_ByteAddressBuffer: - return D3D11_SVT_BYTEADDRESS_BUFFER; - case EOT_StructuredBuffer: - return D3D11_SVT_STRUCTURED_BUFFER; - case EOT_RWTexture1D: - return D3D11_SVT_RWTEXTURE1D; - case EOT_RWTexture1DArray: - return D3D11_SVT_RWTEXTURE1DARRAY; - case EOT_RWTexture2D: - return D3D11_SVT_RWTEXTURE2D; - case EOT_RWTexture2DArray: - return D3D11_SVT_RWTEXTURE2DARRAY; - case EOT_RWTexture3D: - return D3D11_SVT_RWTEXTURE3D; - case EOT_RWBuffer: - return D3D11_SVT_RWBUFFER; - case EOT_RWByteAddressBuffer: - return D3D11_SVT_RWBYTEADDRESS_BUFFER; - case EOT_RWStructuredBuffer: - case EOT_RWStructuredBufferAlloc: - case EOT_RWStructuredBufferConsume: - return D3D11_SVT_RWSTRUCTURED_BUFFER; - case EOT_AppendStructuredBuffer: - return D3D11_SVT_APPEND_STRUCTURED_BUFFER; - case EOT_ConsumeStructuredBuffer: - return D3D11_SVT_CONSUME_STRUCTURED_BUFFER; - default: - D3DXASSERT(0); - } - return D3D10_SVT_VOID; -} - -inline HRESULT VerifyPointer(UINT oBase, UINT dwSize, UINT dwMaxSize) -{ - UINT dwAdd = oBase + dwSize; - if (dwAdd < oBase || dwAdd > dwMaxSize) - return E_FAIL; - return S_OK; -} - -////////////////////////////////////////////////////////////////////////// -// EffectHeap -// A simple class which assists in adding data to a block of memory -////////////////////////////////////////////////////////////////////////// - -CEffectHeap::CEffectHeap() -{ - m_pData = NULL; - m_dwSize = m_dwBufferSize = 0; -} - -CEffectHeap::~CEffectHeap() -{ - SAFE_DELETE_ARRAY(m_pData); -} - -UINT CEffectHeap::GetSize() -{ - return m_dwSize; -} - -HRESULT CEffectHeap::ReserveMemory(UINT dwSize) -{ - HRESULT hr = S_OK; - - D3DXASSERT(!m_pData); - D3DXASSERT(dwSize == AlignToPowerOf2(dwSize, c_DataAlignment)); - - m_dwBufferSize = dwSize; - - VN( m_pData = NEW BYTE[m_dwBufferSize] ); - - // make sure that we have machine word alignment - D3DXASSERT(m_pData == AlignToPowerOf2(m_pData, c_DataAlignment)); - -lExit: - return hr; -} - -HRESULT CEffectHeap::AddString(const char *pString, __deref_out_z char **ppPointer) -{ - size_t size = strlen(pString) + 1; - D3DXASSERT( size <= 0xffffffff ); - return AddData(pString, (UINT)size, (void**) ppPointer); -} - -// This data is forcibly aligned, so make sure you account for that in calculating heap size -template -HRESULT CEffectHeap::AddDataInternal(const void *pData, UINT dwSize, void **ppPointer) -{ - CCheckedDword chkFinalSize( m_dwSize ); - UINT finalSize; - HRESULT hr = S_OK; - - chkFinalSize += dwSize; - chkFinalSize += c_DataAlignment; // account for alignment - - VHD( chkFinalSize.GetValue(&finalSize), "Overflow while adding data to Effect heap." ); - - // align original value - finalSize = AlignToPowerOf2(finalSize - c_DataAlignment, c_DataAlignment); - VBD( finalSize <= m_dwBufferSize, "Overflow adding data to Effect heap." ); - - *ppPointer = m_pData + m_dwSize; - D3DXASSERT(*ppPointer == AlignToPowerOf2(*ppPointer, c_DataAlignment)); - - if( bCopyData ) - { - memcpy(*ppPointer, pData, dwSize); - } - m_dwSize = finalSize; - -lExit: - if (FAILED(hr)) - *ppPointer = NULL; - - return hr; -} - -HRESULT CEffectHeap::AddData(const void *pData, UINT dwSize, void **ppPointer) -{ - return AddDataInternal( pData, dwSize, ppPointer ); -} - -// Moves a string from the general heap to the private heap and modifies the pointer to -// point to the new memory block. -// The general heap is freed as a whole, so we don't worry about leaking the given string pointer. -// This data is forcibly aligned, so make sure you account for that in calculating heap size -HRESULT CEffectHeap::MoveString(__deref_inout_z char **ppString) -{ - HRESULT hr; - char *pNewPointer; - - if (*ppString == NULL) - return S_OK; - - hr = AddString(*ppString, &pNewPointer); - *ppString = pNewPointer; - - return hr; -} - -// Allocates space but does not move data -// The general heap is freed as a whole, so we don't worry about leaking the given string pointer. -// This data is forcibly aligned, so make sure you account for that in calculating heap size -HRESULT CEffectHeap::MoveEmptyDataBlock(void **ppData, UINT size) -{ - HRESULT hr; - void *pNewPointer; - - hr = AddDataInternal(*ppData, size, &pNewPointer); - - *ppData = pNewPointer; - if (size == 0) - { - // To help catch bugs, set zero-byte blocks to null. There's no real reason to do this - *ppData = NULL; - } - - return hr; -} - -// Moves an array of SInterfaceParameters from the general heap to the private heap and modifies the pointer to -// point to the new memory block. -// The general heap is freed as a whole, so we don't worry about leaking the given string pointer. -// This data is forcibly aligned, so make sure you account for that in calculating heap size -HRESULT CEffectHeap::MoveInterfaceParameters(UINT InterfaceCount, __in_ecount(1) SShaderBlock::SInterfaceParameter **ppInterfaces) -{ - HRESULT hr; - SShaderBlock::SInterfaceParameter *pNewPointer; - - if (*ppInterfaces == NULL) - return S_OK; - - VBD( InterfaceCount <= D3D11_SHADER_MAX_INTERFACES, "Internal loading error: InterfaceCount > D3D11_SHADER_MAX_INTERFACES." ); - VH( AddData(*ppInterfaces, InterfaceCount * sizeof(SShaderBlock::SInterfaceParameter), (void**)&pNewPointer) ); - - for( UINT i=0; i < InterfaceCount; i++ ) - { - VH( MoveString( &pNewPointer[i].pName ) ); - } - - *ppInterfaces = pNewPointer; - -lExit: - return hr; -} - - -// Moves data from the general heap to the private heap and modifies the pointer to -// point to the new memory block -// The general heap is freed as a whole, so we don't worry about leaking the given pointer. -// This data is forcibly aligned, so make sure you account for that in calculating heap size -HRESULT CEffectHeap::MoveData(void **ppData, UINT size) -{ - HRESULT hr; - void *pNewPointer; - - hr = AddData(*ppData, size, &pNewPointer); - - *ppData = pNewPointer; - if (size == 0) - { - // To help catch bugs, set zero-byte blocks to null. There's no real reason to do this - *ppData = NULL; - } - - return hr; -} - - -////////////////////////////////////////////////////////////////////////// -// Load API -////////////////////////////////////////////////////////////////////////// - -HRESULT CEffect::LoadEffect(CONST void *pEffectBuffer, UINT cbEffectBuffer) -{ - HRESULT hr = S_OK; - CEffectLoader loader; - - if (!pEffectBuffer) - { - DPF(0, "%s: pEffectBuffer is NULL.", g_szEffectLoadArea); - VH( E_INVALIDARG ); - } - - VH( loader.LoadEffect(this, pEffectBuffer, cbEffectBuffer) ); - -lExit: - if( FAILED( hr ) ) - { - // Release here because m_pShaderBlocks may still be in loader.m_BulkHeap if loading failed before we reallocated the memory - ReleaseShaderRefection(); - } - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// CEffectLoader -// A helper class which loads an effect -////////////////////////////////////////////////////////////////////////// - -HRESULT CEffectLoader::GetUnstructuredDataBlock(UINT offset, UINT *pdwSize, void **ppData) -{ - HRESULT hr = S_OK; - UINT *pBlockSize; - - VH( m_msUnstructured.ReadAtOffset(offset, sizeof(*pBlockSize), (void**) &pBlockSize ) ); - *pdwSize = *pBlockSize; - - VH( m_msUnstructured.Read(ppData, *pdwSize) ); - -lExit: - return hr; -} - -// position in buffer is lost on error -// -// This function should be used in 1:1 conjunction with CEffectHeap::MoveString; -// that is, any string added to the reflection heap with this function -// must be relocated with MoveString at some point later on. -HRESULT CEffectLoader::GetStringAndAddToReflection(UINT offset, __out_ecount_full(1) char **ppString) -{ - HRESULT hr = S_OK; - LPCSTR pName; - SIZE_T oldPos; - - if (offset == 0) - { - *ppString = NULL; - goto lExit; - } - - oldPos = m_msUnstructured.GetPosition(); - - VH( m_msUnstructured.ReadAtOffset(offset, &pName) ); - m_ReflectionMemory += AlignToPowerOf2( (UINT)strlen(pName) + 1, c_DataAlignment); - *ppString = const_cast(pName); - - m_msUnstructured.Seek(oldPos); - -lExit: - return hr; -} - -// position in buffer is lost on error -// -// This function should be used in 1:1 conjunction with CEffectHeap::MoveInterfaceParameters; -// that is, any array of parameters added to the reflection heap with this function -// must be relocated with MoveInterfaceParameters at some point later on. -HRESULT CEffectLoader::GetInterfaceParametersAndAddToReflection( UINT InterfaceCount, UINT offset, __out_ecount_full(1) SShaderBlock::SInterfaceParameter **ppInterfaces ) -{ - HRESULT hr = S_OK; - SBinaryInterfaceInitializer* pInterfaceInitializer; - SIZE_T oldPos; - - if (offset == 0) - { - *ppInterfaces = NULL; - goto lExit; - } - - oldPos = m_msUnstructured.GetPosition(); - - VBD( InterfaceCount <= D3D11_SHADER_MAX_INTERFACES, "Internal loading error: InterfaceCount > D3D11_SHADER_MAX_INTERFACES." ); - m_ReflectionMemory += AlignToPowerOf2(InterfaceCount * sizeof(SShaderBlock::SInterfaceParameter), c_DataAlignment); - D3DXASSERT( ppInterfaces ); - (*ppInterfaces) = PRIVATENEW SShaderBlock::SInterfaceParameter[InterfaceCount]; - VN( *ppInterfaces ); - - VHD( m_msUnstructured.ReadAtOffset(offset, sizeof(SBinaryInterfaceInitializer) * InterfaceCount, (void**)&pInterfaceInitializer), - "Invalid pEffectBuffer: cannot read interface initializer." ); - - for( UINT i=0; i < InterfaceCount; i++ ) - { - (*ppInterfaces)[i].Index = pInterfaceInitializer[i].ArrayIndex; - VHD( m_msUnstructured.ReadAtOffset(pInterfaceInitializer[i].oInstanceName, const_cast(&(*ppInterfaces)[i].pName)), - "Invalid pEffectBuffer: cannot read interface initializer." ); - m_ReflectionMemory += AlignToPowerOf2( (UINT)strlen((*ppInterfaces)[i].pName) + 1, c_DataAlignment); - } - - m_msUnstructured.Seek(oldPos); - -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupCBPointer(SConstantBuffer **ppCB) -{ - HRESULT hr = S_OK; - - SIZE_T index = (SConstantBuffer*)*ppCB - m_pOldCBs; - D3DXASSERT( index * sizeof(SConstantBuffer) == ((size_t)(SConstantBuffer*)*ppCB - (size_t)m_pOldCBs) ); - VBD( index < m_pEffect->m_CBCount, "Internal loading error: invalid constant buffer index." ); - *ppCB = (SConstantBuffer*)(m_pEffect->m_pCBs + index); - -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupShaderPointer(SShaderBlock **ppShaderBlock) -{ - HRESULT hr = S_OK; - if (*ppShaderBlock != &g_NullVS && *ppShaderBlock != &g_NullGS && *ppShaderBlock != &g_NullPS && - *ppShaderBlock != &g_NullHS && *ppShaderBlock != &g_NullDS && *ppShaderBlock != &g_NullCS && - *ppShaderBlock != NULL) - { - SIZE_T index = *ppShaderBlock - m_pOldShaders; - D3DXASSERT( index * sizeof(SShaderBlock) == ((size_t)*ppShaderBlock - (size_t)m_pOldShaders) ); - VBD( index < m_pEffect->m_ShaderBlockCount, "Internal loading error: invalid shader index." ); - *ppShaderBlock = m_pEffect->m_pShaderBlocks + index; - } -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupDSPointer(SDepthStencilBlock **ppDSBlock) -{ - HRESULT hr = S_OK; - if (*ppDSBlock != &g_NullDepthStencil && *ppDSBlock != NULL) - { - SIZE_T index = *ppDSBlock - m_pOldDS; - D3DXASSERT( index * sizeof(SDepthStencilBlock) == ((size_t)*ppDSBlock - (size_t)m_pOldDS) ); - VBD( index < m_pEffect->m_DepthStencilBlockCount, "Internal loading error: invalid depth-stencil state index." ); - *ppDSBlock = m_pEffect->m_pDepthStencilBlocks + index; - } -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupABPointer(SBlendBlock **ppABBlock) -{ - HRESULT hr = S_OK; - if (*ppABBlock != &g_NullBlend && *ppABBlock != NULL) - { - SIZE_T index = *ppABBlock - m_pOldAB; - D3DXASSERT( index * sizeof(SBlendBlock) == ((size_t)*ppABBlock - (size_t)m_pOldAB) ); - VBD( index < m_pEffect->m_BlendBlockCount, "Internal loading error: invalid blend state index." ); - *ppABBlock = m_pEffect->m_pBlendBlocks + index; - } -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupRSPointer(SRasterizerBlock **ppRSBlock) -{ - HRESULT hr = S_OK; - if (*ppRSBlock != &g_NullRasterizer && *ppRSBlock != NULL) - { - SIZE_T index = *ppRSBlock - m_pOldRS; - D3DXASSERT( index * sizeof(SRasterizerBlock) == ((size_t)*ppRSBlock - (size_t)m_pOldRS) ); - VBD( index < m_pEffect->m_RasterizerBlockCount, "Internal loading error: invalid rasterizer state index." ); - *ppRSBlock = m_pEffect->m_pRasterizerBlocks + index; - } -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupSamplerPointer(SSamplerBlock **ppSampler) -{ - HRESULT hr = S_OK; - SIZE_T index = *ppSampler - m_pOldSamplers; - D3DXASSERT( index * sizeof(SSamplerBlock) == ((size_t)*ppSampler - (size_t)m_pOldSamplers) ); - VBD( index < m_pEffect->m_SamplerBlockCount, "Internal loading error: invalid sampler index." ); - *ppSampler = m_pEffect->m_pSamplerBlocks + index; - -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupInterfacePointer(SInterface **ppInterface, bool CheckBackgroundInterfaces) -{ - HRESULT hr = S_OK; - if (*ppInterface != &g_NullInterface && *ppInterface != NULL) - { - SIZE_T index = *ppInterface - m_pOldInterfaces; - if(index < m_OldInterfaceCount) - { - D3DXASSERT( index * sizeof(SInterface) == ((size_t)*ppInterface - (size_t)m_pOldInterfaces) ); - *ppInterface = m_pEffect->m_pInterfaces + index; - } - else - { - VBD( CheckBackgroundInterfaces, "Internal loading error: invalid interface pointer." ); - for( index=0; index < m_BackgroundInterfaces.GetSize(); index++ ) - { - if( *ppInterface == m_BackgroundInterfaces[ (UINT)index ] ) - { - // The interfaces m_BackgroundInterfaces were concatenated to the original ones in m_pEffect->m_pInterfaces - *ppInterface = m_pEffect->m_pInterfaces + (m_OldInterfaceCount + index); - break; - } - } - VBD( index < m_BackgroundInterfaces.GetSize(), "Internal loading error: invalid interface pointer." ); - } - } - -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupShaderResourcePointer(SShaderResource **ppResource) -{ - HRESULT hr = S_OK; - if (*ppResource != &g_NullTexture && *ppResource != NULL) - { - SIZE_T index = *ppResource - m_pOldShaderResources; - D3DXASSERT( index * sizeof(SShaderResource) == ((size_t)*ppResource - (size_t)m_pOldShaderResources) ); - - // could be a TBuffer or a texture; better check first - if (index < m_pEffect->m_ShaderResourceCount) - { - *ppResource = m_pEffect->m_pShaderResources + index; - } - else - { - // if this is a TBuffer, then the shader resource pointer - // actually points into a SConstantBuffer's TBuffer field - index = (SConstantBuffer*)*ppResource - (SConstantBuffer*)&m_pOldCBs->TBuffer; - D3DXASSERT( index * sizeof(SConstantBuffer) == ((size_t)(SConstantBuffer*)*ppResource - (size_t)(SConstantBuffer*)&m_pOldCBs->TBuffer) ); - VBD( index < m_pEffect->m_CBCount, "Internal loading error: invalid SRV index." ); - *ppResource = &m_pEffect->m_pCBs[index].TBuffer; - } - } - -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupUnorderedAccessViewPointer(SUnorderedAccessView **ppUnorderedAccessView) -{ - HRESULT hr = S_OK; - if (*ppUnorderedAccessView != &g_NullUnorderedAccessView && *ppUnorderedAccessView != NULL) - { - SIZE_T index = *ppUnorderedAccessView - m_pOldUnorderedAccessViews; - D3DXASSERT( index * sizeof(SUnorderedAccessView) == ((size_t)*ppUnorderedAccessView - (size_t)m_pOldUnorderedAccessViews) ); - - VBD( index < m_pEffect->m_UnorderedAccessViewCount, "Internal loading error: invalid UAV index." ); - *ppUnorderedAccessView = m_pEffect->m_pUnorderedAccessViews + index; - } - -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupRenderTargetViewPointer(SRenderTargetView **ppRenderTargetView) -{ - HRESULT hr = S_OK; - if (*ppRenderTargetView != &g_NullRenderTargetView && *ppRenderTargetView != NULL) - { - SIZE_T index = *ppRenderTargetView - m_pOldRenderTargetViews; - D3DXASSERT( index * sizeof(SRenderTargetView) == ((size_t)*ppRenderTargetView - (size_t)m_pOldRenderTargetViews) ); - VBD( index < m_pEffect->m_RenderTargetViewCount, "Internal loading error: invalid RTV index." ); - *ppRenderTargetView = m_pEffect->m_pRenderTargetViews + index; - } - -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupDepthStencilViewPointer(SDepthStencilView **ppDepthStencilView) -{ - HRESULT hr = S_OK; - if (*ppDepthStencilView != &g_NullDepthStencilView && *ppDepthStencilView != NULL) - { - SIZE_T index = *ppDepthStencilView - m_pOldDepthStencilViews; - D3DXASSERT( index * sizeof(SDepthStencilView) == ((size_t)*ppDepthStencilView - (size_t)m_pOldDepthStencilViews) ); - VBD( index < m_pEffect->m_DepthStencilViewCount, "Internal loading error: invalid DSV index." ); - *ppDepthStencilView = m_pEffect->m_pDepthStencilViews + index; - } - -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupStringPointer(SString **ppString) -{ - HRESULT hr = S_OK; - SIZE_T index = *ppString - m_pOldStrings; - D3DXASSERT( index * sizeof(SString) == ((size_t)*ppString - (size_t)m_pOldStrings) ); - VBD(index < m_pEffect->m_StringCount, "Internal loading error: invalid string index." ); - *ppString = m_pEffect->m_pStrings + index; -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupMemberDataPointer(SMemberDataPointer **ppMemberData) -{ - HRESULT hr = S_OK; - SIZE_T index = *ppMemberData - m_pOldMemberDataBlocks; - D3DXASSERT( index * sizeof(SMemberDataPointer) == ((size_t)*ppMemberData - (size_t)m_pOldMemberDataBlocks) ); - VBD( index < m_pEffect->m_MemberDataCount, "Internal loading error: invalid member block index." ); - *ppMemberData = m_pEffect->m_pMemberDataBlocks + index; -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupVariablePointer(SGlobalVariable **ppVar) -{ - HRESULT hr = S_OK; - SIZE_T index = *ppVar - m_pOldVars; - - if( index < m_pEffect->m_VariableCount ) - { - D3DXASSERT( index * sizeof(SGlobalVariable) == ((size_t)*ppVar - (size_t)m_pOldVars) ); - *ppVar = m_pEffect->m_pVariables + index; - } - else if( m_pvOldMemberInterfaces ) - { - // When cloning, m_pvOldMemberInterfaces may be non-NULL, and *ppVar may point to a variable in it. - const SIZE_T Members = m_pvOldMemberInterfaces->GetSize(); - for( index=0; index < Members; index++ ) - { - if( (ID3DX11EffectVariable*)(*m_pvOldMemberInterfaces)[ (UINT)index] == (ID3DX11EffectVariable*)*ppVar ) - { - break; - } - } - VBD( index < Members, "Internal loading error: invalid member pointer." ); - *ppVar = (SGlobalVariable*)m_pEffect->m_pMemberInterfaces[ (UINT)index]; - } -lExit: - return hr; -} - -HRESULT CEffectLoader::FixupGroupPointer(SGroup **ppGroup) -{ - HRESULT hr = S_OK; - if( *ppGroup != NULL ) - { - SIZE_T index = *ppGroup - m_pOldGroups; - D3DXASSERT( index * sizeof(SGroup) == ((size_t)*ppGroup - (size_t)m_pOldGroups) ); - VBD( index < m_pEffect->m_GroupCount, "Internal loading error: invalid group index." ); - *ppGroup = m_pEffect->m_pGroups + index; - } -lExit: - return hr; -} - -HRESULT GetEffectVersion( UINT effectFileTag, DWORD* pVersion ) -{ - D3DXASSERT( pVersion != NULL ); - if( !pVersion ) - return E_FAIL; - - for( UINT i = 0; i < NUM_EFFECT10_VERSIONS; i++ ) - { - if( g_EffectVersions[i].m_Tag == effectFileTag ) - { - *pVersion = g_EffectVersions[i].m_Version; - return S_OK; - } - } - - return E_FAIL; -} - -HRESULT CEffectLoader::LoadEffect(CEffect *pEffect, CONST void *pEffectBuffer, UINT cbEffectBuffer) -{ - HRESULT hr = S_OK; - UINT i, varSize, cMemberDataBlocks; - CCheckedDword chkVariables = 0; - - // Used for cloning - m_pvOldMemberInterfaces = NULL; - - m_BulkHeap.EnableAlignment(); - - D3DXASSERT(pEffect && pEffectBuffer); - m_pEffect = pEffect; - m_EffectMemory = m_ReflectionMemory = 0; - - VN( m_pEffect->m_pReflection = NEW CEffectReflection() ); - m_pReflection = m_pEffect->m_pReflection; - - // Begin effect load - VN( m_pEffect->m_pTypePool = NEW CEffect::CTypeHashTable ); - VN( m_pEffect->m_pStringPool = NEW CEffect::CStringHashTable ); - VN( m_pEffect->m_pPooledHeap = NEW CDataBlockStore ); - m_pEffect->m_pPooledHeap->EnableAlignment(); - m_pEffect->m_pTypePool->SetPrivateHeap(m_pEffect->m_pPooledHeap); - m_pEffect->m_pStringPool->SetPrivateHeap(m_pEffect->m_pPooledHeap); - - VH( m_pEffect->m_pTypePool->AutoGrow() ); - VH( m_pEffect->m_pStringPool->AutoGrow() ); - - // Load from blob - m_pData = (BYTE*)pEffectBuffer; - m_dwBufferSize = cbEffectBuffer; - - VH( m_msStructured.SetData(m_pData, m_dwBufferSize) ); - - // At this point, we assume that the blob is valid - VHD( m_msStructured.Read((void**) &m_pHeader, sizeof(*m_pHeader)), "pEffectBuffer is too small." ); - - // Verify the version - if( FAILED( hr = GetEffectVersion( m_pHeader->Tag, &m_Version ) ) ) - { - DPF(0, "Effect version is unrecognized. This runtime supports fx_5_0 to %s.", g_EffectVersions[NUM_EFFECT10_VERSIONS-1].m_pName ); - VH( hr ); - } - - if( m_pHeader->RequiresPool() || m_pHeader->Pool.cObjectVariables > 0 || m_pHeader->Pool.cNumericVariables > 0 ) - { - DPF(0, "Effect11 does not support EffectPools." ); - VH( E_FAIL ); - } - - // Get shader block count - VBD( m_pHeader->cInlineShaders <= m_pHeader->cTotalShaders, "Invalid Effect header: cInlineShaders > cTotalShaders." ); - - // Make sure the counts for the Effect don't overflow - chkVariables = m_pHeader->Effect.cObjectVariables; - chkVariables += m_pHeader->Effect.cNumericVariables; - chkVariables += m_pHeader->cInterfaceVariables; - chkVariables *= sizeof(SGlobalVariable); - VH( chkVariables.GetValue(&varSize) ); - - // Make sure the counts for the SMemberDataPointers don't overflow - chkVariables = m_pHeader->cClassInstanceElements; - chkVariables += m_pHeader->cBlendStateBlocks; - chkVariables += m_pHeader->cRasterizerStateBlocks; - chkVariables += m_pHeader->cDepthStencilBlocks; - chkVariables += m_pHeader->cSamplers; - chkVariables += m_pHeader->Effect.cCBs; // Buffer (for CBuffers and TBuffers) - chkVariables += m_pHeader->Effect.cCBs; // SRV (for TBuffers) - VHD( chkVariables.GetValue(&cMemberDataBlocks), "Overflow: too many Effect variables." ); - - // Allocate effect resources - VN( m_pEffect->m_pCBs = PRIVATENEW SConstantBuffer[m_pHeader->Effect.cCBs] ); - VN( m_pEffect->m_pDepthStencilBlocks = PRIVATENEW SDepthStencilBlock[m_pHeader->cDepthStencilBlocks] ); - VN( m_pEffect->m_pRasterizerBlocks = PRIVATENEW SRasterizerBlock[m_pHeader->cRasterizerStateBlocks] ); - VN( m_pEffect->m_pBlendBlocks = PRIVATENEW SBlendBlock[m_pHeader->cBlendStateBlocks] ); - VN( m_pEffect->m_pSamplerBlocks = PRIVATENEW SSamplerBlock[m_pHeader->cSamplers] ); - - // we allocate raw bytes for variables because they are polymorphic types that need to be placement new'ed - VN( m_pEffect->m_pVariables = (SGlobalVariable *)PRIVATENEW BYTE[varSize] ); - VN( m_pEffect->m_pAnonymousShaders = PRIVATENEW SAnonymousShader[m_pHeader->cInlineShaders] ); - - VN( m_pEffect->m_pGroups = PRIVATENEW SGroup[m_pHeader->cGroups] ); - VN( m_pEffect->m_pShaderBlocks = PRIVATENEW SShaderBlock[m_pHeader->cTotalShaders] ); - VN( m_pEffect->m_pStrings = PRIVATENEW SString[m_pHeader->cStrings] ); - VN( m_pEffect->m_pShaderResources = PRIVATENEW SShaderResource[m_pHeader->cShaderResources] ); - VN( m_pEffect->m_pUnorderedAccessViews = PRIVATENEW SUnorderedAccessView[m_pHeader->cUnorderedAccessViews] ); - VN( m_pEffect->m_pInterfaces = PRIVATENEW SInterface[m_pHeader->cInterfaceVariableElements] ); - VN( m_pEffect->m_pMemberDataBlocks = PRIVATENEW SMemberDataPointer[cMemberDataBlocks] ); - VN( m_pEffect->m_pRenderTargetViews = PRIVATENEW SRenderTargetView[m_pHeader->cRenderTargetViews] ); - VN( m_pEffect->m_pDepthStencilViews = PRIVATENEW SDepthStencilView[m_pHeader->cDepthStencilViews] ); - - UINT oStructured = m_pHeader->cbUnstructured + sizeof(SBinaryHeader5); - VHD( m_msStructured.Seek(oStructured), "Invalid pEffectBuffer: Missing structured data block." ); - VH( m_msUnstructured.SetData(m_pData + sizeof(SBinaryHeader5), oStructured - sizeof(SBinaryHeader5)) ); - - VH( LoadCBs() ); - VH( LoadObjectVariables() ); - VH( LoadInterfaceVariables() ); - VH( LoadGroups() ); - - // Build shader dependencies - for (i=0; im_ShaderBlockCount; i++) - { - VH( BuildShaderBlock(&m_pEffect->m_pShaderBlocks[i]) ); - } - - for( UINT iGroup=0; iGroupcGroups; iGroup++ ) - { - SGroup *pGroup = &m_pEffect->m_pGroups[iGroup]; - pGroup->HasDependencies = FALSE; - - for( UINT iTechnique=0; iTechnique < pGroup->TechniqueCount; iTechnique++ ) - { - STechnique* pTech = &pGroup->pTechniques[iTechnique]; - pTech->HasDependencies = FALSE; - - for( UINT iPass=0; iPass < pTech->PassCount; iPass++ ) - { - SPassBlock *pPass = &pTech->pPasses[iPass]; - - pTech->HasDependencies |= pPass->CheckDependencies(); - } - pGroup->HasDependencies |= pTech->HasDependencies; - } - } - - VH( InitializeReflectionDataAndMoveStrings() ); - VH( ReallocateReflectionData() ); - VH( ReallocateEffectData() ); - - VB( m_pReflection->m_Heap.GetSize() == m_ReflectionMemory ); - - // Verify that all of the various block/variable types were loaded - VBD( m_pEffect->m_VariableCount == (m_pHeader->Effect.cObjectVariables + m_pHeader->Effect.cNumericVariables + m_pHeader->cInterfaceVariables), "Internal loading error: mismatched variable count." ); - VBD( m_pEffect->m_ShaderBlockCount == m_pHeader->cTotalShaders, "Internal loading error: mismatched shader block count." ); - VBD( m_pEffect->m_AnonymousShaderCount == m_pHeader->cInlineShaders, "Internal loading error: mismatched anonymous variable count." ); - VBD( m_pEffect->m_ShaderResourceCount == m_pHeader->cShaderResources, "Internal loading error: mismatched SRV count." ); - VBD( m_pEffect->m_InterfaceCount == m_pHeader->cInterfaceVariableElements + m_BackgroundInterfaces.GetSize(), "Internal loading error: mismatched interface count." ); - VBD( m_pEffect->m_UnorderedAccessViewCount == m_pHeader->cUnorderedAccessViews, "Internal loading error: mismatched UAV count." ); - VBD( m_pEffect->m_MemberDataCount == cMemberDataBlocks, "Internal loading error: mismatched member data block count." ); - VBD( m_pEffect->m_RenderTargetViewCount == m_pHeader->cRenderTargetViews, "Internal loading error: mismatched RTV count." ); - VBD( m_pEffect->m_DepthStencilViewCount == m_pHeader->cDepthStencilViews, "Internal loading error: mismatched DSV count." ); - VBD( m_pEffect->m_DepthStencilBlockCount == m_pHeader->cDepthStencilBlocks, "Internal loading error: mismatched depth-stencil state count." ); - VBD( m_pEffect->m_BlendBlockCount == m_pHeader->cBlendStateBlocks, "Internal loading error: mismatched blend state count." ); - VBD( m_pEffect->m_RasterizerBlockCount == m_pHeader->cRasterizerStateBlocks, "Internal loading error: mismatched rasterizer state count." ); - VBD( m_pEffect->m_SamplerBlockCount == m_pHeader->cSamplers, "Internal loading error: mismatched sampler count." ); - VBD( m_pEffect->m_StringCount == m_pHeader->cStrings, "Internal loading error: mismatched string count." ); - - // Uncomment if you really need this information - // DPF(0, "Effect heap size: %d, reflection heap size: %d, allocations avoided: %d", m_EffectMemory, m_ReflectionMemory, m_BulkHeap.m_cAllocations); - -lExit: - return hr; -} - -// position in buffer is lost on error -HRESULT CEffectLoader::LoadStringAndAddToPool(__out_ecount_full(1) char **ppString, UINT dwOffset) -{ - HRESULT hr = S_OK; - char *pName; - UINT hash; - SIZE_T oldPos; - CEffect::CStringHashTable::CIterator iter; - UINT len; - - if (dwOffset == 0) - { - *ppString = NULL; - goto lExit; - } - - oldPos = m_msUnstructured.GetPosition(); - - VHD( m_msUnstructured.ReadAtOffset(dwOffset, (LPCSTR *) &pName), "Invalid pEffectBuffer: cannot read string." ); - len = (UINT)strlen(pName); - hash = ComputeHash((BYTE *)pName, len); - if (FAILED(m_pEffect->m_pStringPool->FindValueWithHash(pName, hash, &iter))) - { - D3DXASSERT( m_pEffect->m_pPooledHeap != NULL ); - VN( (*ppString) = new(*m_pEffect->m_pPooledHeap) char[len + 1] ); - memcpy(*ppString, pName, len + 1); - VHD( m_pEffect->m_pStringPool->AddValueWithHash(*ppString, hash), "Internal loading error: failed to add string to pool." ); - } - else - { - *ppString = const_cast(iter.GetData()); - } - - m_msUnstructured.Seek(oldPos); - -lExit: - return hr; -} - -HRESULT CEffectLoader::LoadTypeAndAddToPool(SType **ppType, UINT dwOffset) -{ - HRESULT hr = S_OK; - SBinaryType *psType; - SBinaryNumericType *pNumericType; - EObjectType *pObjectType; - UINT cMembers, iMember, cInterfaces; - UINT oBaseClassType; - SType temporaryType; - CEffect::CTypeHashTable::CIterator iter; - BYTE *pHashBuffer; - UINT hash; - SVariable *pTempMembers = NULL; - - m_HashBuffer.Empty(); - - VHD( m_msUnstructured.ReadAtOffset(dwOffset, sizeof(SBinaryType), (void**) &psType), "Invalid pEffectBuffer: cannot read type." ); - VHD( LoadStringAndAddToPool(&temporaryType.pTypeName, psType->oTypeName), "Invalid pEffectBuffer: cannot read type name." ); - temporaryType.VarType = psType->VarType; - temporaryType.Elements = psType->Elements; - temporaryType.TotalSize = psType->TotalSize; - temporaryType.Stride = psType->Stride; - temporaryType.PackedSize = psType->PackedSize; - - // sanity check elements, size, stride, etc. - UINT cElements = max(1, temporaryType.Elements); - VBD( cElements * temporaryType.Stride == AlignToPowerOf2(temporaryType.TotalSize, SType::c_RegisterSize), "Invalid pEffectBuffer: invalid type size." ); - VBD( temporaryType.Stride % SType::c_RegisterSize == 0, "Invalid pEffectBuffer: invalid type stride." ); - VBD( temporaryType.PackedSize <= temporaryType.TotalSize && temporaryType.PackedSize % cElements == 0, "Invalid pEffectBuffer: invalid type packed size." ); - - switch(temporaryType.VarType) - { - case EVT_Object: - VHD( m_msUnstructured.Read((void**) &pObjectType, sizeof(UINT)), "Invalid pEffectBuffer: cannot read object type." ); - temporaryType.ObjectType = *pObjectType; - VBD( temporaryType.VarType > EOT_Invalid && temporaryType.VarType < EOT_Count, "Invalid pEffectBuffer: invalid object type." ); - - VN( pHashBuffer = m_HashBuffer.AddRange(sizeof(temporaryType.VarType) + sizeof(temporaryType.Elements) + - sizeof(temporaryType.pTypeName) + sizeof(temporaryType.ObjectType)) ); - memcpy(pHashBuffer, &temporaryType.VarType, sizeof(temporaryType.VarType)); - pHashBuffer += sizeof(temporaryType.VarType); - memcpy(pHashBuffer, &temporaryType.Elements, sizeof(temporaryType.Elements)); - pHashBuffer += sizeof(temporaryType.Elements); - memcpy(pHashBuffer, &temporaryType.pTypeName, sizeof(temporaryType.pTypeName)); - pHashBuffer += sizeof(temporaryType.pTypeName); - memcpy(pHashBuffer, &temporaryType.ObjectType, sizeof(temporaryType.ObjectType)); - break; - - case EVT_Interface: - temporaryType.InterfaceType = NULL; - - VN( pHashBuffer = m_HashBuffer.AddRange(sizeof(temporaryType.VarType) + sizeof(temporaryType.Elements) + - sizeof(temporaryType.pTypeName) + sizeof(temporaryType.ObjectType)) ); - memcpy(pHashBuffer, &temporaryType.VarType, sizeof(temporaryType.VarType)); - pHashBuffer += sizeof(temporaryType.VarType); - memcpy(pHashBuffer, &temporaryType.Elements, sizeof(temporaryType.Elements)); - pHashBuffer += sizeof(temporaryType.Elements); - memcpy(pHashBuffer, &temporaryType.pTypeName, sizeof(temporaryType.pTypeName)); - pHashBuffer += sizeof(temporaryType.pTypeName); - memcpy(pHashBuffer, &temporaryType.ObjectType, sizeof(temporaryType.ObjectType)); - break; - - case EVT_Numeric: - VHD( m_msUnstructured.Read((void**) &pNumericType, sizeof(SBinaryNumericType)), "Invalid pEffectBuffer: cannot read numeric type." ); - temporaryType.NumericType = *pNumericType; - VBD( temporaryType.NumericType.Rows >= 1 && temporaryType.NumericType.Rows <= 4 && - temporaryType.NumericType.Columns >= 1 && temporaryType.NumericType.Columns <= 4 && - temporaryType.NumericType.NumericLayout != ENL_Invalid && temporaryType.NumericType.NumericLayout < ENL_Count && - temporaryType.NumericType.ScalarType > EST_Invalid && temporaryType.NumericType.ScalarType < EST_Count, - "Invalid pEffectBuffer: invalid numeric type."); - - if (temporaryType.NumericType.NumericLayout != ENL_Matrix) - { - VBD( temporaryType.NumericType.IsColumnMajor == FALSE, "Invalid pEffectBuffer: only matricies can be column major." ); - } - - VN( pHashBuffer = m_HashBuffer.AddRange(sizeof(temporaryType.VarType) + sizeof(temporaryType.Elements) + - sizeof(temporaryType.pTypeName) + sizeof(temporaryType.NumericType)) ); - memcpy(pHashBuffer, &temporaryType.VarType, sizeof(temporaryType.VarType)); - pHashBuffer += sizeof(temporaryType.VarType); - memcpy(pHashBuffer, &temporaryType.Elements, sizeof(temporaryType.Elements)); - pHashBuffer += sizeof(temporaryType.Elements); - memcpy(pHashBuffer, &temporaryType.pTypeName, sizeof(temporaryType.pTypeName)); - pHashBuffer += sizeof(temporaryType.pTypeName); - memcpy(pHashBuffer, &temporaryType.NumericType, sizeof(temporaryType.NumericType)); - break; - - case EVT_Struct: - VHD( m_msUnstructured.Read(&cMembers), "Invalid pEffectBuffer: cannot read struct." ); - - temporaryType.StructType.Members = cMembers; - - VN( pTempMembers = NEW SVariable[cMembers] ); - temporaryType.StructType.pMembers = pTempMembers; - - // read up all of the member descriptors at once - SBinaryType::SBinaryMember *psMember; - VHD( m_msUnstructured.Read((void**) &psMember, cMembers * sizeof(*psMember)), "Invalid pEffectBuffer: cannot read struct members." ); - - { - // Determine if this type implements an interface - VHD( m_msUnstructured.Read(&oBaseClassType), "Invalid pEffectBuffer: cannot read base class type." ); - VHD( m_msUnstructured.Read(&cInterfaces), "Invalid pEffectBuffer: cannot read interfaces." ); - if( cInterfaces > 0 ) - { - temporaryType.StructType.ImplementsInterface = 1; - temporaryType.StructType.HasSuperClass = ( oBaseClassType > 0 ) ? 1 : 0; - } - else if( oBaseClassType > 0 ) - { - // Get parent type and copy its ImplementsInterface - SType* pBaseClassType; - VH( LoadTypeAndAddToPool(&pBaseClassType, oBaseClassType) ); - temporaryType.StructType.ImplementsInterface = pBaseClassType->StructType.ImplementsInterface; - temporaryType.StructType.HasSuperClass = 1; - } - // Read (and ignore) the interface types - UINT *poInterface; - VHD( m_msUnstructured.Read((void**) &poInterface, cInterfaces * sizeof(poInterface)), "Invalid pEffectBuffer: cannot read interface types." ); - } - - UINT totalSize; - totalSize = 0; - for (iMember=0; iMemberData.Offset = psMember[iMember].Offset; - - VH( LoadTypeAndAddToPool(&pMember->pType, psMember[iMember].oType) ); - VH( LoadStringAndAddToPool(&pMember->pName, psMember[iMember].oName) ); - VH( LoadStringAndAddToPool(&pMember->pSemantic, psMember[iMember].oSemantic) ); - - totalSize = psMember[iMember].Offset + pMember->pType->TotalSize; - } - VBD( AlignToPowerOf2(totalSize, SType::c_RegisterSize) == temporaryType.Stride, "Internal loading error: invlid type size." ); - - VN( pHashBuffer = m_HashBuffer.AddRange(sizeof(temporaryType.VarType) + sizeof(temporaryType.Elements) + - sizeof(temporaryType.pTypeName) + sizeof(temporaryType.StructType.Members) + cMembers * sizeof(SVariable)) ); - - memcpy(pHashBuffer, &temporaryType.VarType, sizeof(temporaryType.VarType)); - pHashBuffer += sizeof(temporaryType.VarType); - memcpy(pHashBuffer, &temporaryType.Elements, sizeof(temporaryType.Elements)); - pHashBuffer += sizeof(temporaryType.Elements); - memcpy(pHashBuffer, &temporaryType.pTypeName, sizeof(temporaryType.pTypeName)); - pHashBuffer += sizeof(temporaryType.pTypeName); - memcpy(pHashBuffer, &temporaryType.StructType.Members, sizeof(temporaryType.StructType.Members)); - pHashBuffer += sizeof(temporaryType.StructType.Members); - memcpy(pHashBuffer, temporaryType.StructType.pMembers, cMembers * sizeof(SVariable)); - break; - - default: - D3DXASSERT(0); - VHD( E_FAIL, "Internal loading error: invalid variable type." ); - } - - hash = ComputeHash(&m_HashBuffer[0], m_HashBuffer.GetSize()); - if (FAILED(m_pEffect->m_pTypePool->FindValueWithHash(&temporaryType, hash, &iter))) - { - D3DXASSERT( m_pEffect->m_pPooledHeap != NULL ); - - // allocate real member array, if necessary - if (temporaryType.VarType == EVT_Struct) - { - VN( temporaryType.StructType.pMembers = new(*m_pEffect->m_pPooledHeap) SVariable[temporaryType.StructType.Members] ); - memcpy(temporaryType.StructType.pMembers, pTempMembers, temporaryType.StructType.Members * sizeof(SVariable)); - } - - // allocate real type - VN( (*ppType) = new(*m_pEffect->m_pPooledHeap) SType ); - memcpy(*ppType, &temporaryType, sizeof(temporaryType)); - ZeroMemory(&temporaryType, sizeof(temporaryType)); - VH( m_pEffect->m_pTypePool->AddValueWithHash(*ppType, hash) ); - } - else - { - *ppType = iter.GetData(); - } - -lExit: - SAFE_DELETE_ARRAY(pTempMembers); - return hr; -} - -// Numeric data in annotations are tightly packed (unlike in CBs which follow D3D11 packing rules). This unpacks them. -UINT CEffectLoader::UnpackData(BYTE *pDestData, BYTE *pSrcData, UINT PackedDataSize, SType *pType, UINT *pBytesRead) -{ - UINT bytesRead = 0; - UINT i, j, k; - UINT registers, entries; - HRESULT hr = S_OK; - UINT elementsToCopy = max(pType->Elements, 1); - - switch (pType->VarType) - { - case EVT_Struct: - for (i = 0; i < elementsToCopy; ++ i) - { - for (j = 0; j < pType->StructType.Members; ++ j) - { - UINT br; - D3DXASSERT((UINT_PTR)pType->StructType.pMembers[j].pType == (UINT)(UINT_PTR)pType->StructType.pMembers[j].pType); - D3DXASSERT(PackedDataSize > bytesRead); - - VH( UnpackData(pDestData + pType->StructType.pMembers[j].Data.Offset, - pSrcData + bytesRead, PackedDataSize - bytesRead, - pType->StructType.pMembers[j].pType, &br) ); - - bytesRead += br; - } - pDestData += pType->Stride; - } - break; - - case EVT_Numeric: - if (pType->NumericType.IsPackedArray) - { - // No support for packed arrays - D3DXASSERT(0); - VHD(E_FAIL, "Internal loading error: packed arrays are not supported." ); - } - else - { - UINT bytesToCopy; - - if (pType->NumericType.IsColumnMajor) - { - registers = pType->NumericType.Columns; - entries = pType->NumericType.Rows; - bytesToCopy = entries * registers * SType::c_ScalarSize; - - for (i = 0; i < elementsToCopy; ++ i) - { - for (j = 0; j < registers; ++ j) - { - for (k = 0; k < entries; ++ k) - { - // type cast to an arbitrary scalar - ((UINT*)pDestData)[k] = ((UINT*)pSrcData)[k * registers + j]; - } - pDestData += SType::c_RegisterSize; // advance to next register - } - pSrcData += bytesToCopy; - bytesRead += bytesToCopy; - } - } - else - { - registers = pType->NumericType.Rows; - entries = pType->NumericType.Columns; - bytesToCopy = entries * SType::c_ScalarSize; - - for (i = 0; i < elementsToCopy; ++ i) - { - for (j = 0; j < registers; ++ j) - { - memcpy(pDestData, pSrcData, bytesToCopy); - - pDestData += SType::c_RegisterSize; // advance to next register - pSrcData += bytesToCopy; - bytesRead += bytesToCopy; - } - } - } - } - break; - - default: - // shouldn't be called on non-struct/numeric types - D3DXASSERT(0); - VHD(E_FAIL, "Internal loading error: UnpackData should not be called on non-struct, non-numeric types." ); - } - -lExit: - *pBytesRead = bytesRead; - return hr; -} - -// Read info from the compiled blob and initialize a numeric variable -HRESULT CEffectLoader::LoadNumericVariable(SConstantBuffer *pParentCB) -{ - HRESULT hr = S_OK; - SBinaryNumericVariable *psVar; - SGlobalVariable *pVar; - SType *pType; - void *pDefaultValue; - - // Read variable info - VHD( m_msStructured.Read((void**) &psVar, sizeof(*psVar)), "Invalid pEffectBuffer: cannot read numeric variable." ); - VBD( m_pEffect->m_VariableCount < (m_pHeader->Effect.cObjectVariables + m_pHeader->Effect.cNumericVariables + m_pHeader->cInterfaceVariables), - "Internal loading error: invalid variable counts."); - pVar = &m_pEffect->m_pVariables[m_pEffect->m_VariableCount]; - - // Get type - VH( LoadTypeAndAddToPool(&pType, psVar->oType) ); - - // Make sure the right polymorphic type is created - VH( PlacementNewVariable(pVar, pType, FALSE) ); - - if (psVar->Flags & D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT) - { - pVar->ExplicitBindPoint = psVar->Offset; - } - else - { - pVar->ExplicitBindPoint = -1; - } - - pVar->pEffect = m_pEffect; - pVar->pType = pType; - pVar->pCB = pParentCB; - pVar->Data.pGeneric = pParentCB->pBackingStore + psVar->Offset; - VBD( psVar->Offset + pVar->pType->TotalSize <= pVar->pCB->Size, "Invalid pEffectBuffer: invalid variable offset." ); - - if (pType->VarType == EVT_Struct && pType->StructType.ImplementsInterface && !pParentCB->IsTBuffer) - { - pVar->MemberDataOffsetPlus4 = m_pEffect->m_MemberDataCount * sizeof(SMemberDataPointer) + 4; - m_pEffect->m_MemberDataCount += max(pType->Elements,1); - } - - // Get name & semantic - VHD( GetStringAndAddToReflection(psVar->oName, &pVar->pName), "Invalid pEffectBuffer: cannot read variable name." ); - VHD( GetStringAndAddToReflection(psVar->oSemantic, &pVar->pSemantic), "Invalid pEffectBuffer: cannot read variable semantic." ); - - // Ensure the variable fits in the CBuffer and doesn't overflow - VBD( pType->TotalSize + psVar->Offset <= pParentCB->Size && - pType->TotalSize + psVar->Offset >= pType->TotalSize, "Invalid pEffectBuffer: variable does not fit in CB." ); - - ZeroMemory(pVar->Data.pGeneric, pType->TotalSize); - - // Get default value - if (0 != psVar->oDefaultValue) - { - UINT bytesUnpacked; - VHD( m_msUnstructured.ReadAtOffset(psVar->oDefaultValue, pType->PackedSize, &pDefaultValue), "Invalid pEffectBuffer: cannot read default value." ); - VH( UnpackData((BYTE*) pVar->Data.pGeneric, (BYTE*) pDefaultValue, pType->PackedSize, pType, &bytesUnpacked) ); - VBD( bytesUnpacked == pType->PackedSize, "Invalid pEffectBuffer: invalid type packed size."); - } - - // We need to use offsets until we fixup - pVar->Data.Offset = psVar->Offset; - - // Read annotations - VH( LoadAnnotations(&pVar->AnnotationCount, &pVar->pAnnotations) ); - - m_pEffect->m_VariableCount++; - -lExit: - return hr; -} - -// Read info from the compiled blob and initialize a constant buffer -HRESULT CEffectLoader::LoadCBs() -{ - HRESULT hr = S_OK; - UINT iCB, iVar; - - for (iCB=0; iCBEffect.cCBs; iCB++) - { - SBinaryConstantBuffer *psCB; - SConstantBuffer *pCB; - - VHD( m_msStructured.Read((void**) &psCB, sizeof(*psCB)), "Invalid pEffectBuffer: cannot read CB." ); - pCB = &m_pEffect->m_pCBs[iCB]; - - VHD( GetStringAndAddToReflection(psCB->oName, &pCB->pName), "Invalid pEffectBuffer: cannot read CB name." ); - - pCB->IsTBuffer = (psCB->Flags & SBinaryConstantBuffer::c_IsTBuffer) != 0 ? TRUE : FALSE; - pCB->IsSingle = (psCB->Flags & SBinaryConstantBuffer::c_IsSingle) != 0 ? TRUE : FALSE; - pCB->Size = psCB->Size; - pCB->ExplicitBindPoint = psCB->ExplicitBindPoint; - VBD( pCB->Size == AlignToPowerOf2(pCB->Size, SType::c_RegisterSize), "Invalid pEffectBuffer: CB size not a power of 2." ); - VN( pCB->pBackingStore = PRIVATENEW BYTE[pCB->Size] ); - - pCB->MemberDataOffsetPlus4 = m_pEffect->m_MemberDataCount * sizeof(SMemberDataPointer) + 4; - m_pEffect->m_MemberDataCount += 2; - - // point this CB to variables that it owns - pCB->VariableCount = psCB->cVariables; - if (pCB->VariableCount > 0) - { - pCB->pVariables = &m_pEffect->m_pVariables[m_pEffect->m_VariableCount]; - } - else - { - pCB->pVariables = NULL; - } - - // Read annotations - VH( LoadAnnotations(&pCB->AnnotationCount, &pCB->pAnnotations) ); - - for (iVar=0; iVarcVariables; iVar++) - { - VH( LoadNumericVariable(pCB) ); - } - } - - m_pEffect->m_CBCount = m_pHeader->Effect.cCBs; - -lExit: - return hr; -} - -// Used by LoadAssignment to initialize members on load -HRESULT CEffectLoader::ExecuteConstantAssignment(SBinaryConstant *pConstant, void *pLHS, D3D10_SHADER_VARIABLE_TYPE lhsType) -{ - HRESULT hr = S_OK; - - switch(pConstant->Type) - { - case EST_UInt: - case EST_Int: - case EST_Bool: - switch(lhsType) - { - case D3D10_SVT_BOOL: - case D3D10_SVT_INT: - case D3D10_SVT_UINT: - *(UINT*) pLHS = pConstant->iValue; - break; - - case D3D10_SVT_UINT8: - *(BYTE*) pLHS = (BYTE) pConstant->iValue; - break; - - case D3D10_SVT_FLOAT: - *(float*) pLHS = (float) pConstant->iValue; - break; - - default: - VHD( E_FAIL, "Internal loading error: invalid left-hand assignment type." ); - } - break; - - case EST_Float: - switch(lhsType) - { - case D3D10_SVT_BOOL: - case D3D10_SVT_INT: - case D3D10_SVT_UINT: - *(UINT*) pLHS = (UINT) pConstant->fValue; - break; - - case D3D10_SVT_UINT8: - *(BYTE*) pLHS = (BYTE) pConstant->fValue; - break; - - case D3D10_SVT_FLOAT: - *(float*) pLHS = pConstant->fValue; - break; - - default: - VHD( E_FAIL, "Internal loading error: invalid left-hand assignment type." ); - } - break; - - default: - VHD( E_FAIL, "Internal loading error: invalid left-hand assignment type." ); - } - -lExit: - return hr; -} - - -// Read info from the compiled blob and initialize a set of assignments -HRESULT CEffectLoader::LoadAssignments( UINT Assignments, SAssignment **ppAssignments, BYTE *pBackingStore, UINT *pRTVAssignments, UINT *pFinalAssignments ) -{ - HRESULT hr = S_OK; - UINT i, j; - - SBinaryAssignment *psAssignments; - UINT finalAssignments = 0; // the number of assignments worth keeping - UINT renderTargetViewAssns = 0; // Number of render target view assns, used by passes since SetRTV is a vararg call - - *pFinalAssignments = 0; - if (pRTVAssignments) - *pRTVAssignments = 0; - - VHD( m_msStructured.Read((void**) &psAssignments, sizeof(*psAssignments) * Assignments), "Invalid pEffectBuffer: cannot read assignments." ); - - // allocate enough room to store all of the assignments (even though some may go unused) - VN( (*ppAssignments) = PRIVATENEW SAssignment[Assignments] ) - - // - // In this loop, we read assignments 1-by-1, keeping some and discarding others. - // We write to the "next" assignment which is given by &(*ppAssignments)[finalAssignments]; - // if an assignment is worth keeping, we increment finalAssignments. - // This means that if you want to keep an assignment, you must be careful to initialize - // all members of SAssignment because old values from preceding discarded assignments might remain. - // - for (i = 0; i < Assignments; ++ i) - { - SGlobalVariable *pVarArray, *pVarIndex, *pVar; - const char *pGlobalVarName; - SAssignment *pAssignment = &(*ppAssignments)[finalAssignments]; - BYTE *pLHS; - - VBD( psAssignments[i].iState < NUM_STATES, "Invalid pEffectBuffer: invalid assignment state." ); - VBD( psAssignments[i].Index < g_lvGeneral[psAssignments[i].iState].m_Indices, "Invalid pEffectBuffer: invalid assignment index." ); - - pAssignment->LhsType = g_lvGeneral[psAssignments[i].iState].m_LhsType; - - // Count RenderTargetView assignments - if (pAssignment->LhsType == ELHS_RenderTargetView) - renderTargetViewAssns++; - - switch (g_lvGeneral[psAssignments[i].iState].m_Type) - { - case D3D10_SVT_UINT8: - D3DXASSERT(g_lvGeneral[psAssignments[i].iState].m_Cols == 1); // BYTE arrays not supported - pAssignment->DataSize = sizeof(BYTE); - // Store an offset for destination instead of a pointer so that it's easy to relocate it later - - break; - - case D3D10_SVT_BOOL: - case D3D10_SVT_INT: - case D3D10_SVT_UINT: - case D3D10_SVT_FLOAT: - pAssignment->DataSize = SType::c_ScalarSize * g_lvGeneral[psAssignments[i].iState].m_Cols; - break; - - case D3D10_SVT_RASTERIZER: - pAssignment->DataSize = sizeof(SRasterizerBlock); - break; - - case D3D10_SVT_DEPTHSTENCIL: - pAssignment->DataSize = sizeof(SDepthStencilBlock); - break; - - case D3D10_SVT_BLEND: - pAssignment->DataSize = sizeof(SBlendBlock); - break; - - case D3D10_SVT_VERTEXSHADER: - case D3D10_SVT_GEOMETRYSHADER: - case D3D10_SVT_PIXELSHADER: - case D3D11_SVT_HULLSHADER: - case D3D11_SVT_DOMAINSHADER: - case D3D11_SVT_COMPUTESHADER: - pAssignment->DataSize = sizeof(SShaderBlock); - break; - - case D3D10_SVT_TEXTURE: - case D3D10_SVT_TEXTURE1D: - case D3D10_SVT_TEXTURE2D: - case D3D10_SVT_TEXTURE2DMS: - case D3D10_SVT_TEXTURE3D: - case D3D10_SVT_TEXTURECUBE: - case D3D10_SVT_TEXTURECUBEARRAY: - case D3D11_SVT_BYTEADDRESS_BUFFER: - case D3D11_SVT_STRUCTURED_BUFFER: - pAssignment->DataSize = sizeof(SShaderResource); - break; - - case D3D10_SVT_RENDERTARGETVIEW: - pAssignment->DataSize = sizeof(SRenderTargetView); - break; - - case D3D10_SVT_DEPTHSTENCILVIEW: - pAssignment->DataSize = sizeof(SDepthStencilView); - break; - - case D3D11_SVT_RWTEXTURE1D: - case D3D11_SVT_RWTEXTURE1DARRAY: - case D3D11_SVT_RWTEXTURE2D: - case D3D11_SVT_RWTEXTURE2DARRAY: - case D3D11_SVT_RWTEXTURE3D: - case D3D11_SVT_RWBUFFER: - case D3D11_SVT_RWBYTEADDRESS_BUFFER: - case D3D11_SVT_RWSTRUCTURED_BUFFER: - case D3D11_SVT_APPEND_STRUCTURED_BUFFER: - case D3D11_SVT_CONSUME_STRUCTURED_BUFFER: - pAssignment->DataSize = sizeof(SUnorderedAccessView); - break; - - case D3D11_SVT_INTERFACE_POINTER: - pAssignment->DataSize = sizeof(SInterface); - break; - - default: - D3DXASSERT(0); - VHD( E_FAIL, "Internal loading error: invalid assignment type."); - } - - UINT lhsStride; - if( g_lvGeneral[psAssignments[i].iState].m_Stride > 0 ) - lhsStride = g_lvGeneral[psAssignments[i].iState].m_Stride; - else - lhsStride = pAssignment->DataSize; - - // Store only the destination offset so that the backing store pointers can be easily fixed up later - pAssignment->Destination.Offset = g_lvGeneral[psAssignments[i].iState].m_Offset + lhsStride * psAssignments[i].Index; - - // As a result, you should use pLHS in this function instead of the destination pointer - pLHS = pBackingStore + pAssignment->Destination.Offset; - - switch (psAssignments[i].AssignmentType) - { - case ECAT_Constant: // e.g. LHS = 1; or LHS = NULL; - UINT *pNumConstants; - SBinaryConstant *pConstants; - - VHD( m_msUnstructured.ReadAtOffset(psAssignments[i].oInitializer, sizeof(UINT), (void**) &pNumConstants), "Invalid pEffectBuffer: cannot read NumConstants." ); - VHD( m_msUnstructured.Read((void **)&pConstants, sizeof(SBinaryConstant) * (*pNumConstants)), "Invalid pEffectBuffer: cannot read constants." ); - - if(pAssignment->IsObjectAssignment()) - { - // make sure this is a NULL assignment - VBD( *pNumConstants == 1 && (pConstants[0].Type == EST_Int || pConstants[0].Type == EST_UInt) && pConstants[0].iValue == 0, - "Invalid pEffectBuffer: non-NULL constant assignment to object."); - - switch (pAssignment->LhsType) - { - case ELHS_DepthStencilBlock: - *((void **)pLHS) = &g_NullDepthStencil; - break; - case ELHS_BlendBlock: - *((void **)pLHS) = &g_NullBlend; - break; - case ELHS_RasterizerBlock: - *((void **)pLHS) = &g_NullRasterizer; - break; - case ELHS_VertexShaderBlock: - *((void **)pLHS) = &g_NullVS; - break; - case ELHS_PixelShaderBlock: - *((void **)pLHS) = &g_NullPS; - break; - case ELHS_GeometryShaderBlock: - *((void **)pLHS) = &g_NullGS; - break; - case ELHS_HullShaderBlock: - *((void **)pLHS) = &g_NullHS; - break; - case ELHS_DomainShaderBlock: - *((void **)pLHS) = &g_NullDS; - break; - case ELHS_ComputeShaderBlock: - *((void **)pLHS) = &g_NullCS; - break; - case ELHS_Texture: - *((void **)pLHS) = &g_NullTexture; - break; - case ELHS_DepthStencilView: - *((void **)pLHS) = &g_NullDepthStencilView; - break; - case ELHS_RenderTargetView: - *((void **)pLHS) = &g_NullRenderTargetView; - break; - default: - D3DXASSERT(0); - } - } - else - { - VBD( *pNumConstants == g_lvGeneral[psAssignments[i].iState].m_Cols, "Internal loading error: mismatch constant count." ); - for (j = 0; j < *pNumConstants; ++ j) - { - VH( ExecuteConstantAssignment(pConstants + j, pLHS, g_lvGeneral[psAssignments[i].iState].m_Type) ); - pLHS += SType::c_ScalarSize; // arrays of constants will always be regular scalar sized, never byte-sized - } - } - - // Can get rid of this assignment - break; - - case ECAT_Variable: // e.g. LHS = myVar; - VHD( m_msUnstructured.ReadAtOffset(psAssignments[i].oInitializer, &pGlobalVarName), "Invalid pEffectBuffer: cannot read variable name." ); - - VBD( pVar = m_pEffect->FindVariableByName(pGlobalVarName), "Loading error: cannot find variable name." ); - - if (pAssignment->IsObjectAssignment()) - { - VBD( pVar->pType->VarType == EVT_Object && - GetSimpleParameterTypeFromObjectType(pVar->pType->ObjectType) == g_lvGeneral[psAssignments[i].iState].m_Type, - "Loading error: invalid variable type or object type." ); - - // Write directly into the state block's backing store - *((void **)pLHS) = pVar->Data.pGeneric; - - // Now we can get rid of this assignment - } - else - { - VBD( pVar->pType->BelongsInConstantBuffer(), "Invalid pEffectBuffer: assignment type mismatch." ); - - pAssignment->DependencyCount = 1; - VN( pAssignment->pDependencies = PRIVATENEW SAssignment::SDependency[pAssignment->DependencyCount] ); - pAssignment->pDependencies->pVariable = pVar; - - // Store an offset for numeric values instead of a pointer so that it's easy to relocate it later - pAssignment->Source.Offset = pVar->Data.Offset; - pAssignment->AssignmentType = ERAT_NumericVariable; - - // Can't get rid of this assignment - ++ finalAssignments; - } - break; - - case ECAT_ConstIndex: // e.g. LHS = myGS[1] - SBinaryAssignment::SConstantIndex *psConstIndex; - - VHD( m_msUnstructured.ReadAtOffset(psAssignments[i].oInitializer, sizeof(*psConstIndex), (void**) &psConstIndex), - "Invalid pEffectBuffer: cannot read assignment initializer." ); - VHD( m_msUnstructured.ReadAtOffset(psConstIndex->oArrayName, &pGlobalVarName), "Invalid pEffectBuffer: cannot read array name." ); - - VBD( pVarArray = m_pEffect->FindVariableByName(pGlobalVarName), "Loading error: cannot find array name." ); - - if (pAssignment->IsObjectAssignment()) - { - VBD( psConstIndex->Index < pVarArray->pType->Elements, "Invalid pEffectBuffer: out of bounds array index." ); - VBD( pVarArray->pType->VarType == EVT_Object && - GetSimpleParameterTypeFromObjectType(pVarArray->pType->ObjectType) == g_lvGeneral[psAssignments[i].iState].m_Type, - "Loading error: invalid variable type or object type." ); - - // Write directly into the state block's backing store - *((void **)pLHS) = GetBlockByIndex(pVarArray->pType->VarType, pVarArray->pType->ObjectType, pVarArray->Data.pGeneric, psConstIndex->Index); - VBD( NULL != *((void **)pLHS), "Internal loading error: invalid block." ); - - // Now we can get rid of this assignment - } - else - { - VBD( pVarArray->pType->BelongsInConstantBuffer(), "Invalid pEffectBuffer: assignment type mismatch." ); - - pAssignment->DependencyCount = 1; - VN( pAssignment->pDependencies = PRIVATENEW SAssignment::SDependency[pAssignment->DependencyCount] ); - pAssignment->pDependencies->pVariable = pVarArray; - - CCheckedDword chkDataLen = psConstIndex->Index; - UINT dataLen; - chkDataLen *= SType::c_ScalarSize; - chkDataLen += pAssignment->DataSize; - VHD( chkDataLen.GetValue(&dataLen), "Overflow: assignment size." ); - VBD( dataLen <= pVarArray->pType->TotalSize, "Internal loading error: assignment size mismatch" ); - - pAssignment->Source.Offset = pVarArray->Data.Offset + psConstIndex->Index * SType::c_ScalarSize; - - // _NumericConstIndex is not used here because _NumericVariable - // does the same stuff in a more general fashion with no perf hit. - pAssignment->AssignmentType = ERAT_NumericVariable; - - // Can't get rid of this assignment - ++ finalAssignments; - } - break; - - case ECAT_VariableIndex: // e.g. LHS = myVar[numLights]; - SBinaryAssignment::SVariableIndex *psVarIndex; - - VHD( m_msUnstructured.ReadAtOffset(psAssignments[i].oInitializer, sizeof(*psVarIndex), (void**) &psVarIndex), - "Invalid pEffectBuffer: cannot read assignment initializer." ); - VHD( m_msUnstructured.ReadAtOffset(psVarIndex->oArrayName, &pGlobalVarName), "Invalid pEffectBuffer: cannot read variable name." ); - VBD( pVarArray = m_pEffect->FindVariableByName(pGlobalVarName), "Loading error: cannot find variable name." ); - - VHD( m_msUnstructured.ReadAtOffset(psVarIndex->oIndexVarName, &pGlobalVarName), "Invalid pEffectBuffer: cannot read index variable name." ); - VBD( pVarIndex = m_pEffect->FindVariableByName(pGlobalVarName), "Loading error: cannot find index variable name." ); - - // Only support integer indices - VBD( pVarIndex->pType->VarType == EVT_Numeric && (pVarIndex->pType->NumericType.ScalarType == EST_Int || pVarIndex->pType->NumericType.ScalarType == EST_UInt), - "Invalid pEffectBuffer: invalid index variable type."); - VBD( pVarArray->pType->Elements > 0, "Invalid pEffectBuffer: array variable is not an array." ); - - pVarIndex->pCB->IsUsedByExpression = TRUE; - - if (pAssignment->IsObjectAssignment()) - { - VBD( pVarArray->pType->VarType == EVT_Object && - GetSimpleParameterTypeFromObjectType(pVarArray->pType->ObjectType) == g_lvGeneral[psAssignments[i].iState].m_Type, - "Loading error: invalid variable type or object type." ); - - // MaxElements is only 16-bits wide - VBD( pVarArray->pType->Elements <= 0xFFFF, "Internal error: array size is too large." ); - pAssignment->MaxElements = pVarArray->pType->Elements; - - pAssignment->DependencyCount = 1; - VN( pAssignment->pDependencies = PRIVATENEW SAssignment::SDependency[pAssignment->DependencyCount] ); - pAssignment->pDependencies[0].pVariable = pVarIndex; - - // Point this assignment to the start of the variable's object array. - // When this assignment is dirty, we write the value of this pointer plus - // the index given by its one dependency directly into the destination - pAssignment->Source = pVarArray->Data; - pAssignment->AssignmentType = ERAT_ObjectVariableIndex; - } - else - { - VBD( pVarArray->pType->BelongsInConstantBuffer(), "Invalid pEffectBuffer: assignment type mismatch." ); - - pAssignment->DependencyCount = 2; - VN( pAssignment->pDependencies = PRIVATENEW SAssignment::SDependency[pAssignment->DependencyCount] ); - pAssignment->pDependencies[0].pVariable = pVarIndex; - pAssignment->pDependencies[1].pVariable = pVarArray; - - // When pVarIndex is updated, we update the source pointer. - // When pVarArray is updated, we copy data from the source to the destination. - pAssignment->Source.pGeneric = NULL; - pAssignment->AssignmentType = ERAT_NumericVariableIndex; - } - - // Can't get rid of this assignment - ++ finalAssignments; - - break; - - case ECAT_ExpressionIndex:// e.g. LHS = myVar[a + b * c]; - case ECAT_Expression: // e.g. LHS = a + b * c; - // we do not support FXLVM - VHD( E_NOTIMPL, "FXLVM Expressions (complex assignments like myVar[i*2]) are not supported in Effects11." ); - break; - - case ECAT_InlineShader: - case ECAT_InlineShader5: - UINT cbShaderBin; - BYTE *pShaderBin; - SShaderBlock *pShaderBlock; - SAnonymousShader *pAnonShader; - union - { - SBinaryAssignment::SInlineShader *psInlineShader; - SBinaryShaderData5 *psInlineShader5; - }; - - // Inline shader assignments must be object types - D3DXASSERT(pAssignment->IsObjectAssignment()); - - C_ASSERT( offsetof(SBinaryAssignment::SInlineShader,oShader) == offsetof(SBinaryShaderData5,oShader) ); - C_ASSERT( offsetof(SBinaryAssignment::SInlineShader,oSODecl) == offsetof(SBinaryShaderData5,oSODecls) ); - if( psAssignments[i].AssignmentType == ECAT_InlineShader ) - { - VHD( m_msUnstructured.ReadAtOffset(psAssignments[i].oInitializer, sizeof(*psInlineShader), (void**) &psInlineShader), - "Invalid pEffectBuffer: cannot read inline shader." ); - } - else - { - VHD( m_msUnstructured.ReadAtOffset(psAssignments[i].oInitializer, sizeof(*psInlineShader5), (void**) &psInlineShader5), - "Invalid pEffectBuffer: cannot read inline shader." ); - } - - VBD( m_pEffect->m_ShaderBlockCount < m_pHeader->cTotalShaders, "Internal loading error: shader count is out incorrect." ); - VBD( m_pEffect->m_AnonymousShaderCount < m_pHeader->cInlineShaders, "Internal loading error: anonymous shader count is out incorrect." ); - - pShaderBlock = &m_pEffect->m_pShaderBlocks[m_pEffect->m_ShaderBlockCount]; - pAnonShader = &m_pEffect->m_pAnonymousShaders[m_pEffect->m_AnonymousShaderCount]; - pAnonShader->pShaderBlock = pShaderBlock; - - ++ m_pEffect->m_ShaderBlockCount; - ++ m_pEffect->m_AnonymousShaderCount; - - // Write directly into the state block's backing store - *((void **)pLHS) = pShaderBlock; - - VHD( GetUnstructuredDataBlock(psInlineShader->oShader, &cbShaderBin, (void **) &pShaderBin), "Invalid pEffectBuffer: cannot read inline shader block." ); - - if (cbShaderBin > 0) - { - VN( pShaderBlock->pReflectionData = PRIVATENEW SShaderBlock::SReflectionData ); - - pShaderBlock->pReflectionData->BytecodeLength = cbShaderBin; - pShaderBlock->pReflectionData->pBytecode = (BYTE*) pShaderBin; - pShaderBlock->pReflectionData->pStreamOutDecls[0] = - pShaderBlock->pReflectionData->pStreamOutDecls[1] = - pShaderBlock->pReflectionData->pStreamOutDecls[2] = - pShaderBlock->pReflectionData->pStreamOutDecls[3] = NULL; - pShaderBlock->pReflectionData->RasterizedStream = 0; - pShaderBlock->pReflectionData->IsNullGS = FALSE; - pShaderBlock->pReflectionData->pReflection = NULL; - pShaderBlock->pReflectionData->InterfaceParameterCount = 0; - pShaderBlock->pReflectionData->pInterfaceParameters = NULL; - } - - switch (pAssignment->LhsType) - { - case ELHS_PixelShaderBlock: - pShaderBlock->pVT = &g_vtPS; - VBD( psInlineShader->oSODecl == NULL, "Internal loading error: pixel shaders cannot have stream out decls." ); - break; - - case ELHS_GeometryShaderBlock: - pShaderBlock->pVT = &g_vtGS; - if( psAssignments[i].AssignmentType == ECAT_InlineShader ) - { - if (psInlineShader->oSODecl) - { - // This is a GS with SO - VHD( GetStringAndAddToReflection(psInlineShader->oSODecl, &pShaderBlock->pReflectionData->pStreamOutDecls[0]), - "Invalid pEffectBuffer: cannot read SO decl." ); - } - } - else - { - // This is a GS with addressable stream out - for( UINT iDecl=0; iDecl < psInlineShader5->cSODecls; ++iDecl ) - { - if (psInlineShader5->oSODecls[iDecl]) - { - VHD( GetStringAndAddToReflection(psInlineShader5->oSODecls[iDecl], &pShaderBlock->pReflectionData->pStreamOutDecls[iDecl]), - "Invalid pEffectBuffer: cannot read SO decl." ); - } - } - pShaderBlock->pReflectionData->RasterizedStream = psInlineShader5->RasterizedStream; - } - break; - - case ELHS_VertexShaderBlock: - pShaderBlock->pVT = &g_vtVS; - VBD( psInlineShader->oSODecl == NULL, "Internal loading error: vertex shaders cannot have stream out decls." ); - break; - - case ELHS_HullShaderBlock: - pShaderBlock->pVT = &g_vtHS; - VBD( psInlineShader->oSODecl == NULL, "Internal loading error: hull shaders cannot have stream out decls." ); - break; - - case ELHS_DomainShaderBlock: - pShaderBlock->pVT = &g_vtDS; - VBD( psInlineShader->oSODecl == NULL, "Internal loading error: domain shaders cannot have stream out decls." ); - break; - - case ELHS_ComputeShaderBlock: - pShaderBlock->pVT = &g_vtCS; - VBD( psInlineShader->oSODecl == NULL, "Internal loading error: compute shaders cannot have stream out decls." ); - break; - - case ELHS_GeometryShaderSO: - D3DXASSERT(0); // Should never happen - - default: - VHD( E_FAIL, "Internal loading error: invalid shader type." ); - } - - if( psAssignments[i].AssignmentType == ECAT_InlineShader5 ) - { - pShaderBlock->pReflectionData->InterfaceParameterCount = psInlineShader5->cInterfaceBindings; - VH( GetInterfaceParametersAndAddToReflection( psInlineShader5->cInterfaceBindings, psInlineShader5->oInterfaceBindings, &pShaderBlock->pReflectionData->pInterfaceParameters ) ); - } - - // Now we can get rid of this assignment - break; - - default: - D3DXASSERT(0); - - } - } - - *pFinalAssignments = finalAssignments; - if (pRTVAssignments) - *pRTVAssignments = renderTargetViewAssns; - -lExit: - return hr; -} - - -// Read info from the compiled blob and initialize an object variable -HRESULT CEffectLoader::LoadObjectVariables() -{ - HRESULT hr = S_OK; - UINT iBlock; - UINT cBlocks; - - cBlocks = m_pHeader->Effect.cObjectVariables; - - for (iBlock=0; iBlockm_VariableCount < (m_pHeader->Effect.cObjectVariables + m_pHeader->Effect.cNumericVariables + m_pHeader->cInterfaceVariables), - "Internal loading error: variable count mismatch." ); - pVar = &m_pEffect->m_pVariables[m_pEffect->m_VariableCount]; - - // Get type - VH( LoadTypeAndAddToPool(&pType, psBlock->oType) ); - - // Make sure the right polymorphic type is created - VH( PlacementNewVariable(pVar, pType, FALSE) ); - - pVar->pEffect = m_pEffect; - pVar->pType = pType; - pVar->pCB = NULL; - pVar->ExplicitBindPoint = psBlock->ExplicitBindPoint; - - if( pType->IsStateBlockObject() ) - { - pVar->MemberDataOffsetPlus4 = m_pEffect->m_MemberDataCount * sizeof(SMemberDataPointer) + 4; - m_pEffect->m_MemberDataCount += max(pType->Elements,1); - } - - // Get name - VHD( GetStringAndAddToReflection(psBlock->oName, &pVar->pName), "Invalid pEffectBuffer: cannot read object variable name." ); - VHD( GetStringAndAddToReflection(psBlock->oSemantic, &pVar->pSemantic), "Invalid pEffectBuffer: cannot read object variable semantic." ); - - m_pEffect->m_VariableCount++; - elementsToRead = max(1, pType->Elements); - chkElementsTotal = elementsToRead; - - if (pType->IsStateBlockObject()) - { - // State blocks - EBlockType blockType; - UINT *maxBlockCount; - UINT *currentBlockCount; - - switch (pType->ObjectType) - { - case EOT_Blend: - pVar->Data.pBlock = &m_pEffect->m_pBlendBlocks[m_pEffect->m_BlendBlockCount]; - maxBlockCount = &m_pHeader->cBlendStateBlocks; - currentBlockCount = &m_pEffect->m_BlendBlockCount; - blockType = EBT_Blend; - break; - - case EOT_DepthStencil: - pVar->Data.pBlock = &m_pEffect->m_pDepthStencilBlocks[m_pEffect->m_DepthStencilBlockCount]; - maxBlockCount = &m_pHeader->cDepthStencilBlocks; - currentBlockCount = &m_pEffect->m_DepthStencilBlockCount; - blockType = EBT_DepthStencil; - break; - - case EOT_Rasterizer: - pVar->Data.pBlock = &m_pEffect->m_pRasterizerBlocks[m_pEffect->m_RasterizerBlockCount]; - maxBlockCount = &m_pHeader->cRasterizerStateBlocks; - currentBlockCount = &m_pEffect->m_RasterizerBlockCount; - blockType = EBT_Rasterizer; - break; - - default: - VB(pType->IsSampler()); - pVar->Data.pBlock = &m_pEffect->m_pSamplerBlocks[m_pEffect->m_SamplerBlockCount]; - maxBlockCount = &m_pHeader->cSamplers; - currentBlockCount = &m_pEffect->m_SamplerBlockCount; - blockType = EBT_Sampler; - } - - chkElementsTotal += *currentBlockCount; - VHD( chkElementsTotal.GetValue(&elementsTotal), "Overflow: vaiable elements." ); - VBD( elementsTotal <= *maxBlockCount, "Internal loading error: element count overflow." ); - - *currentBlockCount += elementsToRead; - - for (iElement = 0; iElement < elementsToRead; ++ iElement) - { - SBaseBlock *pCurrentBlock; - UINT cAssignments; - - pCurrentBlock = (SBaseBlock *) GetBlockByIndex(pVar->pType->VarType, pVar->pType->ObjectType, pVar->Data.pGeneric, iElement); - VBD( NULL != pCurrentBlock, "Internal loading error: find state block." ); - - pCurrentBlock->BlockType = blockType; - - VHD( m_msStructured.Read(&cAssignments), "Invalid pEffectBuffer: cannot read state block assignments." ); - - VH( LoadAssignments( cAssignments, &pCurrentBlock->pAssignments, (BYTE*)pCurrentBlock, NULL, &pCurrentBlock->AssignmentCount ) ); - } - } - else if (pType->IsShader()) - { - // Shaders - - chkElementsTotal += m_pEffect->m_ShaderBlockCount; - VHD( chkElementsTotal.GetValue(&elementsTotal), "Overflow: shader block count." ); - VBD( elementsTotal <= m_pHeader->cTotalShaders, "Invalid pEffectBuffer: shader count mismatch." ); - - pVar->Data.pShader = &m_pEffect->m_pShaderBlocks[m_pEffect->m_ShaderBlockCount]; - - for (iElement=0; iElementm_pShaderBlocks[m_pEffect->m_ShaderBlockCount]; - m_pEffect->m_ShaderBlockCount++; - - // Get shader binary - switch (pType->ObjectType) - { - case EOT_VertexShader: - case EOT_GeometryShader: - case EOT_PixelShader: - VHD( m_msStructured.Read((void**)&pOffset, sizeof(*pOffset)), "Invalid pEffectBuffer: cannot read shader block." ); - break; - - case EOT_GeometryShaderSO: - VHD( m_msStructured.Read((void**)&psInlineGSSO4, sizeof(*psInlineGSSO4)), "Invalid pEffectBuffer: cannot read inline GS with SO." ); - break; - - case EOT_VertexShader5: - case EOT_GeometryShader5: - case EOT_HullShader5: - case EOT_DomainShader5: - case EOT_PixelShader5: - case EOT_ComputeShader5: - VHD( m_msStructured.Read((void**)&psInlineShader5, sizeof(*psInlineShader5)), "Invalid pEffectBuffer: cannot read inline shader." ); - break; - - default: - VH( E_FAIL ); - } - - VHD( GetUnstructuredDataBlock(*pOffset, &cbShaderBin, &pShaderBin), "Invalid pEffectBuffer: cannot read shader byte code." ); - - if (cbShaderBin > 0) - { - VN( pShaderBlock->pReflectionData = PRIVATENEW SShaderBlock::SReflectionData ); - - pShaderBlock->pReflectionData->BytecodeLength = cbShaderBin; - pShaderBlock->pReflectionData->pBytecode = (BYTE*) pShaderBin; - pShaderBlock->pReflectionData->pStreamOutDecls[0] = - pShaderBlock->pReflectionData->pStreamOutDecls[1] = - pShaderBlock->pReflectionData->pStreamOutDecls[2] = - pShaderBlock->pReflectionData->pStreamOutDecls[3] = NULL; - pShaderBlock->pReflectionData->RasterizedStream = 0; - pShaderBlock->pReflectionData->IsNullGS = FALSE; - pShaderBlock->pReflectionData->pReflection = NULL; - pShaderBlock->pReflectionData->InterfaceParameterCount = 0; - pShaderBlock->pReflectionData->pInterfaceParameters = NULL; - } - - switch (pType->ObjectType) - { - case EOT_PixelShader: - pShaderBlock->pVT = &g_vtPS; - break; - - case EOT_GeometryShaderSO: - // Get StreamOut decl - //VH( m_msStructured.Read(&dwOffset) ); - if (cbShaderBin > 0) - { - VHD( GetStringAndAddToReflection(psInlineGSSO4->oSODecl, &pShaderBlock->pReflectionData->pStreamOutDecls[0]), - "Invalid pEffectBuffer: cannot read stream out decl." ); - } - pShaderBlock->pVT = &g_vtGS; - break; - - case EOT_VertexShader5: - case EOT_GeometryShader5: - case EOT_HullShader5: - case EOT_DomainShader5: - case EOT_PixelShader5: - case EOT_ComputeShader5: - // Get StreamOut decls - if (cbShaderBin > 0) - { - for( UINT iDecl=0; iDecl < psInlineShader5->cSODecls; ++iDecl ) - { - VHD( GetStringAndAddToReflection(psInlineShader5->oSODecls[iDecl], &pShaderBlock->pReflectionData->pStreamOutDecls[iDecl]), - "Invalid pEffectBuffer: cannot read stream out decls." ); - } - pShaderBlock->pReflectionData->RasterizedStream = psInlineShader5->RasterizedStream; - pShaderBlock->pReflectionData->InterfaceParameterCount = psInlineShader5->cInterfaceBindings; - VH( GetInterfaceParametersAndAddToReflection( psInlineShader5->cInterfaceBindings, psInlineShader5->oInterfaceBindings, &pShaderBlock->pReflectionData->pInterfaceParameters ) ); - } - switch (pType->ObjectType) - { - case EOT_VertexShader5: - pShaderBlock->pVT = &g_vtVS; - break; - case EOT_GeometryShader5: - pShaderBlock->pVT = &g_vtGS; - break; - case EOT_HullShader5: - pShaderBlock->pVT = &g_vtHS; - break; - case EOT_DomainShader5: - pShaderBlock->pVT = &g_vtDS; - break; - case EOT_PixelShader5: - pShaderBlock->pVT = &g_vtPS; - break; - case EOT_ComputeShader5: - pShaderBlock->pVT = &g_vtCS; - break; - default: - VH( E_FAIL ); - } - break; - - case EOT_GeometryShader: - pShaderBlock->pVT = &g_vtGS; - break; - - case EOT_VertexShader: - pShaderBlock->pVT = &g_vtVS; - break; - - default: - VHD( E_FAIL, "Invalid pEffectBuffer: invalid shader type." ); - } - } - } - else if (pType->IsObjectType(EOT_String)) - { - // Strings - - chkElementsTotal += m_pEffect->m_StringCount; - VHD( chkElementsTotal.GetValue(&elementsTotal), "Overflow: string object count." ); - VBD( elementsTotal <= m_pHeader->cStrings, "Invalid pEffectBuffer: string count mismatch." ); - - pVar->Data.pString = &m_pEffect->m_pStrings[m_pEffect->m_StringCount]; - - for (iElement=0; iElementm_pStrings[m_pEffect->m_StringCount]; - m_pEffect->m_StringCount++; - - // Get string - VHD( m_msStructured.Read(&dwOffset), "Invalid pEffectBuffer: cannot read string offset." ); - VHD( GetStringAndAddToReflection(dwOffset, &pString->pString), "Invalid pEffectBuffer: cannot read string." ); - } - } - else if (pType->IsShaderResource()) - { - // Textures/buffers - - chkElementsTotal += m_pEffect->m_ShaderResourceCount; - VHD( chkElementsTotal.GetValue(&elementsTotal), "Overflow: SRV object count." ); - VBD( elementsTotal <= m_pHeader->cShaderResources, "Invalid pEffectBuffer: SRV count mismatch." ); - - pVar->Data.pShaderResource = &m_pEffect->m_pShaderResources[m_pEffect->m_ShaderResourceCount]; - m_pEffect->m_ShaderResourceCount += elementsToRead; - } - else if (pType->IsUnorderedAccessView()) - { - // UnorderedAccessViews - - chkElementsTotal += m_pEffect->m_UnorderedAccessViewCount; - VHD( chkElementsTotal.GetValue(&elementsTotal), "Overflow: UAV object count." ); - VBD( elementsTotal <= m_pHeader->cUnorderedAccessViews, "Invalid pEffectBuffer: UAV count mismatch." ); - - pVar->Data.pUnorderedAccessView = &m_pEffect->m_pUnorderedAccessViews[m_pEffect->m_UnorderedAccessViewCount]; - m_pEffect->m_UnorderedAccessViewCount += elementsToRead; - } - else if (pType->IsRenderTargetView()) - { - // RenderTargets - - chkElementsTotal += m_pEffect->m_RenderTargetViewCount; - VHD( chkElementsTotal.GetValue(&elementsTotal), "Overflow: RTV object count." ); - VBD( elementsTotal <= m_pHeader->cRenderTargetViews, "Invalid pEffectBuffer: RTV count mismatch." ); - - pVar->Data.pRenderTargetView = &m_pEffect->m_pRenderTargetViews[m_pEffect->m_RenderTargetViewCount]; - m_pEffect->m_RenderTargetViewCount += elementsToRead; - } - else if (pType->IsDepthStencilView()) - { - // DepthStencilViews - - chkElementsTotal += m_pEffect->m_DepthStencilViewCount; - VHD( chkElementsTotal.GetValue(&elementsTotal), "Overflow: DSV object count." ); - VBD( elementsTotal <= m_pHeader->cDepthStencilViews, "Invalid pEffectBuffer: DSV count mismatch." ); - - pVar->Data.pDepthStencilView = &m_pEffect->m_pDepthStencilViews[m_pEffect->m_DepthStencilViewCount]; - m_pEffect->m_DepthStencilViewCount += elementsToRead; - } - else - { - VHD( E_FAIL, "Invalid pEffectBuffer: DSV count mismatch." ); - } - - // Read annotations - VH( LoadAnnotations(&pVar->AnnotationCount, &pVar->pAnnotations) ); - } -lExit: - return hr; -} - - -// Read info from the compiled blob and initialize an interface variable -HRESULT CEffectLoader::LoadInterfaceVariables() -{ - HRESULT hr = S_OK; - UINT iBlock; - UINT cBlocks; - - cBlocks = m_pHeader->cInterfaceVariables; - - for (iBlock=0; iBlockm_VariableCount < (m_pHeader->Effect.cObjectVariables + m_pHeader->Effect.cNumericVariables + m_pHeader->cInterfaceVariables), - "Internal loading error: variable count mismatch." ); - pVar = &m_pEffect->m_pVariables[m_pEffect->m_VariableCount]; - - // Get type - VH( LoadTypeAndAddToPool(&pType, psBlock->oType) ); - - // Make sure the right polymorphic type is created - VH( PlacementNewVariable(pVar, pType, FALSE) ); - - pVar->pEffect = m_pEffect; - pVar->pType = pType; - pVar->pCB = NULL; - pVar->ExplicitBindPoint = (UINT)-1; - pVar->pSemantic = NULL; - - // Get name - VHD( GetStringAndAddToReflection(psBlock->oName, &pVar->pName), "Invalid pEffectBuffer: cannot read interface name." ); - - m_pEffect->m_VariableCount++; - elementsToRead = max(1, pType->Elements); - chkElementsTotal = elementsToRead; - - VBD( pType->IsInterface(), "Internal loading error: invlaid type for interface." ); - - chkElementsTotal += m_pEffect->m_InterfaceCount; - VHD( chkElementsTotal.GetValue(&elementsTotal), "Overflow: interface count." ); - VBD( elementsTotal <= m_pHeader->cInterfaceVariableElements, "Invalid pEffectBuffer: interface count mismatch." ); - - pVar->Data.pInterface = &m_pEffect->m_pInterfaces[m_pEffect->m_InterfaceCount]; - m_pEffect->m_InterfaceCount += elementsToRead; - - // Get default value - if (0 != psBlock->oDefaultValue) - { - VHD( m_msUnstructured.ReadAtOffset(psBlock->oDefaultValue, elementsToRead * sizeof(SBinaryInterfaceInitializer), &pDefaultValue), - "Invalid pEffectBuffer: cannot read interface initializer offset." ); - for( UINT i=0; i < elementsToRead; i++ ) - { - SBinaryInterfaceInitializer* pInterfaceInit = &((SBinaryInterfaceInitializer*)pDefaultValue)[i]; - LPCSTR pClassInstanceName; - VHD( m_msUnstructured.ReadAtOffset(pInterfaceInit->oInstanceName, &pClassInstanceName), "Invalid pEffectBuffer: cannot read interface initializer." ); - - SGlobalVariable *pCIVariable = m_pEffect->FindVariableByName(pClassInstanceName); - VBD( pCIVariable != NULL, "Loading error: cannot find class instance for interface initializer." ); - VBD( pCIVariable->pType->IsClassInstance(), "Loading error: variable type mismatch for interface initializer." ); - if( pInterfaceInit->ArrayIndex == (UINT)-1 ) - { - VBD( pCIVariable->pType->Elements == 0, "Loading error: array mismatch for interface initializer." ); - pVar->Data.pInterface[i].pClassInstance = (SClassInstanceGlobalVariable*)pCIVariable; - } - else - { - VBD( pCIVariable->pType->Elements > 0, "Loading error: array mismatch for interface initializer." ); - VBD( pInterfaceInit->ArrayIndex < pCIVariable->pType->Elements, "Loading error: array index out of range." ); - - SMember* pMember = (SMember*)pCIVariable->GetElement( pInterfaceInit->ArrayIndex ); - VBD( pMember->IsValid(), "Loading error: cannot find member by name." ); - VBD( pMember->pType->IsClassInstance(), "Loading error: member type mismatch for interface initializer." ); - pVar->Data.pInterface[i].pClassInstance = (SClassInstanceGlobalVariable*)pMember; - } - } - } - - - // Read annotations - VH( LoadAnnotations(&pVar->AnnotationCount, &pVar->pAnnotations) ); - } -lExit: - return hr; -} - - -// Read info from the compiled blob and initialize a group (and contained techniques and passes) -HRESULT CEffectLoader::LoadGroups() -{ - HRESULT hr = S_OK; - UINT iGroup; - UINT TechniquesInEffect = 0; - - for( iGroup=0; iGroupcGroups; iGroup++ ) - { - SGroup *pGroup = &m_pEffect->m_pGroups[iGroup]; - SBinaryGroup *psGroup; - - // Read group info - VHD( m_msStructured.Read((void**) &psGroup, sizeof(*psGroup)), "Invalid pEffectBuffer: cannot read group." ); - pGroup->TechniqueCount = psGroup->cTechniques; - VN( pGroup->pTechniques = PRIVATENEW STechnique[pGroup->TechniqueCount] ); - VHD( GetStringAndAddToReflection(psGroup->oName, &pGroup->pName), "Invalid pEffectBuffer: cannot read group name." ); - - if( pGroup->pName == NULL ) - { - VBD( m_pEffect->m_pNullGroup == NULL, "Internal loading error: multiple NULL groups." ); - m_pEffect->m_pNullGroup = pGroup; - } - - // Read annotations - VH( LoadAnnotations(&pGroup->AnnotationCount, &pGroup->pAnnotations) ); - - UINT iTechnique; - for( iTechnique=0; iTechnique < psGroup->cTechniques; iTechnique++ ) - { - VH( LoadTechnique( &pGroup->pTechniques[iTechnique] ) ); - } - TechniquesInEffect += psGroup->cTechniques; - } - - VBD( TechniquesInEffect == m_pHeader->cTechniques, "Loading error: technique count mismatch." ); - m_pEffect->m_TechniqueCount = m_pHeader->cTechniques; - m_pEffect->m_GroupCount = m_pHeader->cGroups; - -lExit: - return hr; -} - - -// Read info from the compiled blob and initialize a technique (and contained passes) -HRESULT CEffectLoader::LoadTechnique( STechnique* pTech ) -{ - HRESULT hr = S_OK; - UINT iPass; - - SBinaryTechnique *psTech; - - // Read technique info - VHD( m_msStructured.Read((void**) &psTech, sizeof(*psTech)), "Invalid pEffectBuffer: cannot read technique." ); - pTech->PassCount = psTech->cPasses; - VN( pTech->pPasses = PRIVATENEW SPassBlock[pTech->PassCount] ); - VHD( GetStringAndAddToReflection(psTech->oName, &pTech->pName), "Invalid pEffectBuffer: cannot read technique name." ); - - // Read annotations - VH( LoadAnnotations(&pTech->AnnotationCount, &pTech->pAnnotations) ); - - for (iPass=0; iPasscPasses; iPass++) - { - SBinaryPass *psPass; - SPassBlock *pPass = &pTech->pPasses[iPass]; - - // Read pass info - VHD( m_msStructured.Read((void**) &psPass, sizeof(SBinaryPass)), "Invalid pEffectBuffer: cannot read pass." ); - VHD( GetStringAndAddToReflection(psPass->oName, &pPass->pName), "Invalid pEffectBuffer: cannot read pass name." ); - - // Read annotations - VH( LoadAnnotations(&pPass->AnnotationCount, &pPass->pAnnotations) ); - - VH( LoadAssignments( psPass->cAssignments, &pPass->pAssignments, (BYTE*)pPass, &pPass->BackingStore.RenderTargetViewCount, &pPass->AssignmentCount ) ); - VBD( pPass->BackingStore.RenderTargetViewCount <= D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT, "Invalid pEffectBuffer: too many RTVs in pass." ); - - // Initialize other pass information - pPass->pEffect = m_pEffect; - pPass->BlockType = EBT_Pass; - } - -lExit: - return hr; -} - - -// Read info from the compiled blob and initialize a set of annotations -HRESULT CEffectLoader::LoadAnnotations(UINT *pcAnnotations, SAnnotation **ppAnnotations) -{ - HRESULT hr = S_OK; - UINT cAnnotations, i, oData; - SAnnotation *pAnnotations = NULL; - - VHD( m_msStructured.Read(&cAnnotations), "Invalid pEffectBuffer: cannot read anootation count." ); - - if (cAnnotations) - { - UINT annotationsSize; - CCheckedDword chkAnnotationsSize; - - chkAnnotationsSize = cAnnotations; - chkAnnotationsSize *= sizeof(SAnnotation); - VHD( chkAnnotationsSize.GetValue(&annotationsSize), "Overflow in annotations." ); - - // we allocate raw bytes for annotations because they are polymorphic types that need to be placement new'ed - VN( pAnnotations = (SAnnotation *) PRIVATENEW BYTE[annotationsSize] ); - - for (i=0; ioType) ); - - // Make sure the right polymorphic type is created - VH( PlacementNewVariable(pAn, pType, TRUE) ); - - pAn->pEffect = m_pEffect; - pAn->pType = pType; - - VHD( GetStringAndAddToReflection(psAnnotation->oName, &pAn->pName), "Invalid pEffectBuffer: cannot read annotation name." ); - - if (pType->IsObjectType(EOT_String)) - { - UINT cElements = max(1, pType->Elements); - UINT j; - VN( pAn->Data.pString = PRIVATENEW SString[cElements] ); - for (j = 0; j < cElements; ++ j) - { - // Read initializer offset - VHD( m_msStructured.Read(&oData), "Invalid pEffectBuffer: cannot read string." ); - VHD( GetStringAndAddToReflection(oData, &pAn->Data.pString[j].pString), "Invalid pEffectBuffer: cannot read string initializer." ); - } - } - else if (pType->BelongsInConstantBuffer()) - { - void *pDefaultValue; - UINT bytesUnpacked; - - // Read initializer offset - VHD( m_msStructured.Read(&oData), "Invalid pEffectBuffer: cannot read annotation." ); - - VBD( oData != 0, "Invalid pEffectBuffer: invalid anotation offset." ); - - VN( pAn->Data.pGeneric = PRIVATENEW BYTE[pType->TotalSize] ); - ZeroMemory(pAn->Data.pGeneric, pType->TotalSize); - VHD( m_msUnstructured.ReadAtOffset(oData, pType->PackedSize, &pDefaultValue), "Invalid pEffectBuffer: cannot read variable default value." ); - VH( UnpackData((BYTE*) pAn->Data.pGeneric, (BYTE*) pDefaultValue, pType->PackedSize, pType, &bytesUnpacked) ); - VBD( bytesUnpacked == pType->PackedSize, "Invalid pEffectBuffer: packed sizes to not match." ); - } - else - { - VHD( E_FAIL, "Invalid pEffectBuffer: invalid annotation type." ); - } - } - } - - *pcAnnotations = cAnnotations; - *ppAnnotations = pAnnotations; -lExit: - - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// Build shader block dependencies from shader metadata -////////////////////////////////////////////////////////////////////////// - -// -// Grabs shader resource dependency information from the bytecode of the shader -// (cbuffer, tbuffer, texture, buffer, sampler, and UAV dependencies), -// and sets up the given SShaderBlock to point to the dependencies within the effect -// -HRESULT CEffectLoader::GrabShaderData(SShaderBlock *pShaderBlock) -{ - HRESULT hr = S_OK; - UINT i, j; - CEffectVector vRanges[ER_Count], *pvRange; - SRange *pRange = NULL; - CEffectVector vTBuffers; - - ////////////////////////////////////////////////////////////////////////// - // Step 1: iterate through the resource binding structures and build - // an "optimized" list of all of the dependencies - - D3D11_SHADER_DESC ShaderDesc; - pShaderBlock->pReflectionData->pReflection->GetDesc( &ShaderDesc ); - - // Since we have the shader desc, let's find out if this is a NULL GS - if( D3D11_SHVER_GET_TYPE( ShaderDesc.Version ) == D3D11_SHVER_VERTEX_SHADER && pShaderBlock->GetShaderType() == EOT_GeometryShader ) - { - pShaderBlock->pReflectionData->IsNullGS = TRUE; - } - - pShaderBlock->CBDepCount = pShaderBlock->ResourceDepCount = pShaderBlock->TBufferDepCount = pShaderBlock->SampDepCount = 0; - pShaderBlock->UAVDepCount = pShaderBlock->InterfaceDepCount = 0; - - for(i = 0; i < ShaderDesc.BoundResources; i++) - { - LPCSTR pName; - UINT bindPoint, size; - ERanges eRange; - SShaderResource *pShaderResource = NULL; - SUnorderedAccessView *pUnorderedAccessView = NULL; - SSamplerBlock *pSampler = NULL; - SConstantBuffer *pCB = NULL; - SVariable *pVariable = NULL; - BOOL isFX9TextureLoad = FALSE; - D3D11_SHADER_INPUT_BIND_DESC ResourceDesc; - - pShaderBlock->pReflectionData->pReflection->GetResourceBindingDesc( i, &ResourceDesc ); - - // HUGE ASSUMPTION: the bindpoints we read in the shader metadata are sorted; - // i.e. bindpoints are steadily increasing - // If this assumption is not met, then we will hit an assert below - - pName = ResourceDesc.Name; - bindPoint = ResourceDesc.BindPoint; - size = ResourceDesc.BindCount; - - switch( ResourceDesc.Type ) - { - case D3D10_SIT_CBUFFER: - eRange = ER_CBuffer; - - pCB = m_pEffect->FindCB(pName); - VBD( NULL != pCB, "Loading error: cannot find cbuffer." ); - VBD( size == 1, "Loading error: cbuffer arrays are not supported." ); - break; - - case D3D10_SIT_TBUFFER: - eRange = ER_Texture; - - pCB = m_pEffect->FindCB(pName); - VBD( NULL != pCB, "Loading error: cannot find tbuffer." ); - VBD( FALSE != pCB->IsTBuffer, "Loading error: cbuffer found where tbuffer is expected." ); - VBD( size == 1, "Loading error: tbuffer arrays are not supported." ); - pShaderResource = &pCB->TBuffer; - break; - - case D3D10_SIT_TEXTURE: - case D3D11_SIT_STRUCTURED: - case D3D11_SIT_BYTEADDRESS: - eRange = ER_Texture; - - pVariable = m_pEffect->FindVariableByNameWithParsing(pName); - VBD( pVariable != NULL, "Loading error: cannot find SRV variable." ); - UINT elements; - elements = max(1, pVariable->pType->Elements); - VBD( size <= elements, "Loading error: SRV array size mismatch." ); - - if (pVariable->pType->IsShaderResource()) - { - // this is just a straight texture assignment - pShaderResource = pVariable->Data.pShaderResource; - } - else - { - // This is a FX9/HLSL9-style texture load instruction that specifies only a sampler - VBD( pVariable->pType->IsSampler(), "Loading error: shader dependency is neither an SRV nor sampler."); - isFX9TextureLoad = TRUE; - pSampler = pVariable->Data.pSampler; - // validate that all samplers actually used (i.e. based on size, not elements) in this variable have a valid TEXTURE assignment - for (j = 0; j < size; ++ j) - { - if (NULL == pSampler[j].BackingStore.pTexture) - { - // print spew appropriately for samplers vs sampler arrays - if (0 == pVariable->pType->Elements) - { - DPF(0, "%s: Sampler %s does not have a texture bound to it, even though the sampler is used in a DX9-style texture load instruction", g_szEffectLoadArea, pName); - } - else - { - DPF(0, "%s: Sampler %s[%d] does not have a texture bound to it, even though the sampler array is used in a DX9-style texture load instruction", g_szEffectLoadArea, pName, j); - } - - VH( E_FAIL ); - } - } - } - break; - - case D3D11_SIT_UAV_RWTYPED: - case D3D11_SIT_UAV_RWSTRUCTURED: - case D3D11_SIT_UAV_RWBYTEADDRESS: - case D3D11_SIT_UAV_APPEND_STRUCTURED: - case D3D11_SIT_UAV_CONSUME_STRUCTURED: - case D3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER: - eRange = ER_UnorderedAccessView; - - pVariable = m_pEffect->FindVariableByNameWithParsing(pName); - VBD( pVariable != NULL, "Loading error: cannot find UAV variable." ); - VBD( size <= max(1, pVariable->pType->Elements), "Loading error: UAV array index out of range." ); - VBD( pVariable->pType->IsUnorderedAccessView(), "Loading error: UAV variable expected." ); - pUnorderedAccessView = pVariable->Data.pUnorderedAccessView; - break; - - case D3D10_SIT_SAMPLER: - eRange = ER_Sampler; - - pVariable = m_pEffect->FindVariableByNameWithParsing(pName); - VBD( pVariable != NULL, "Loading error: cannot find sampler variable." ); - VBD( size <= max(1, pVariable->pType->Elements), "Loading error: sampler array index out of range." ); - VBD( pVariable->pType->IsSampler(), "Loading error: sampler variable expected." ); - pSampler = pVariable->Data.pSampler; - break; - - default: - VHD( E_FAIL, "Internal loading error: unexpected shader dependency type." ); - }; - - // - // Here's where the "optimized" part comes in; whenever there's - // a resource dependency, see if it's located contiguous to - // an existing resource dependency and merge them together - // if possible - // - UINT rangeCount; - pvRange = &vRanges[eRange]; - rangeCount = pvRange->GetSize(); - - if ( rangeCount > 0 ) - { - // Can we continue an existing range? - pRange = &( (*pvRange)[rangeCount - 1] ); - - // Make sure that bind points are strictly increasing, - // otherwise this algorithm breaks and we'd get worse runtime performance - D3DXASSERT(pRange->last <= bindPoint); - - if ( pRange->last != bindPoint ) - { - if( eRange != ER_UnorderedAccessView ) - { - // No we can't. Begin a new range by setting rangeCount to 0 and triggering the next IF - rangeCount = 0; - } - else - { - // UAVs will always be located in one range, as they are more expensive to set - while(pRange->last < bindPoint) - { - VHD( pRange->vResources.Add(&g_NullUnorderedAccessView), "Internal loading error: cannot add UAV to range." ); - pRange->last++; - } - } - } - } - - if ( rangeCount == 0 ) - { - VN( pRange = pvRange->Add() ); - pRange->start = bindPoint; - } - - pRange->last = bindPoint + size; - - switch( ResourceDesc.Type ) - { - case D3D10_SIT_CBUFFER: - VHD( pRange->vResources.Add(pCB), "Internal loading error: cannot add cbuffer to range." ); - break; - case D3D10_SIT_TBUFFER: - VHD( pRange->vResources.Add(pShaderResource), "Internal loading error: cannot add tbuffer to range." ); - VHD( vTBuffers.Add( (SConstantBuffer*)pCB ), "Internal loading error: cannot add tbuffer to vector." ); - break; - case D3D10_SIT_TEXTURE: - case D3D11_SIT_STRUCTURED: - case D3D11_SIT_BYTEADDRESS: - if (isFX9TextureLoad) - { - // grab all of the textures from each sampler - for (j = 0; j < size; ++ j) - { - VHD( pRange->vResources.Add(pSampler[j].BackingStore.pTexture), "Internal loading error: cannot add SRV to range." ); - } - } - else - { - // add the whole array - for (j = 0; j < size; ++ j) - { - VHD( pRange->vResources.Add(pShaderResource + j), "Internal loading error: cannot add SRV to range." ); - } - } - break; - case D3D11_SIT_UAV_RWTYPED: - case D3D11_SIT_UAV_RWSTRUCTURED: - case D3D11_SIT_UAV_RWBYTEADDRESS: - case D3D11_SIT_UAV_APPEND_STRUCTURED: - case D3D11_SIT_UAV_CONSUME_STRUCTURED: - case D3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER: - // add the whole array - for (j = 0; j < size; ++ j) - { - VHD( pRange->vResources.Add(pUnorderedAccessView + j), "Internal loading error: cannot add UAV to range." ); - } - break; - case D3D10_SIT_SAMPLER: - // add the whole array - for (j = 0; j < size; ++ j) - { - VHD( pRange->vResources.Add(pSampler + j), "Internal loading error: cannot add sampler to range." ); - } - break; - default: - VHD( E_FAIL, "Internal loading error: unexpected shader dependency type." ); - } - } - - - ////////////////////////////////////////////////////////////////////////// - // Step 2: iterate through the interfaces and build - // an "optimized" list of all of the dependencies - - UINT NumInterfaces = pShaderBlock->pReflectionData->pReflection->GetNumInterfaceSlots(); - UINT CurInterfaceParameter = 0; - if( NumInterfaces > 0 ) - { - D3DXASSERT( ShaderDesc.ConstantBuffers > 0 ); - - for( i=0; i < ShaderDesc.ConstantBuffers; i++ ) - { - ID3D11ShaderReflectionConstantBuffer* pCB = pShaderBlock->pReflectionData->pReflection->GetConstantBufferByIndex(i); - VN( pCB ); - D3D11_SHADER_BUFFER_DESC CBDesc; - VHD( pCB->GetDesc( &CBDesc ), "Internal loading error: cannot get CB desc." ); - if( CBDesc.Type != D3D11_CT_INTERFACE_POINTERS ) - { - continue; - } - - for( UINT iVar=0; iVar < CBDesc.Variables; iVar++ ) - { - ID3D11ShaderReflectionVariable* pInterfaceVar = pCB->GetVariableByIndex( iVar ); - VN( pInterfaceVar ); - D3D11_SHADER_VARIABLE_DESC InterfaceDesc; - pInterfaceVar->GetDesc( &InterfaceDesc ); - - LPCSTR pName; - UINT bindPoint, size; - SGlobalVariable *pVariable = NULL; - SInterface *pInterface = NULL; - UINT VariableElements; - - pName = InterfaceDesc.Name; - bindPoint = InterfaceDesc.StartOffset; - size = InterfaceDesc.Size; - - if( bindPoint == (UINT)-1 ) - { - continue; - } - - D3DXASSERT( InterfaceDesc.uFlags & D3D11_SVF_INTERFACE_POINTER ); - if( InterfaceDesc.uFlags & D3D11_SVF_INTERFACE_PARAMETER ) - { - // This interface pointer is a parameter to the shader - if( pShaderBlock->pReflectionData->InterfaceParameterCount == 0 ) - { - // There may be no interface parameters in this shader if it was compiled but had no interfaced bound to it. - // The shader cannot be set (correctly) in any pass. - continue; - } - else - { - VBD( CurInterfaceParameter < pShaderBlock->pReflectionData->InterfaceParameterCount, - "Internal loading error: interface count mismatch."); - SShaderBlock::SInterfaceParameter* pInterfaceInfo; - pInterfaceInfo = &pShaderBlock->pReflectionData->pInterfaceParameters[CurInterfaceParameter]; - ++CurInterfaceParameter; - SGlobalVariable *pParent = m_pEffect->FindVariableByName(pInterfaceInfo->pName); - VBD( pParent != NULL, "Loading error: cannot find parent type." ); - if( pInterfaceInfo->Index == (UINT)-1 ) - { - pVariable = pParent; - VariableElements = pVariable->pType->Elements; - } - else - { - // We want a specific index of the variable (ex. "MyVar[2]") - VBD( size == 1, "Loading error: interface array type mismatch." ); - pVariable = (SGlobalVariable*)pParent->GetElement( pInterfaceInfo->Index ); - VBD( pVariable->IsValid(), "Loading error: interface array index out of range." ); - VariableElements = 0; - } - } - } - else - { - // This interface pointer is a global interface used in the shader - pVariable = m_pEffect->FindVariableByName(pName); - VBD( pVariable != NULL, "Loading error: cannot find interface variable." ); - VariableElements = pVariable->pType->Elements; - } - VBD( size <= max(1, VariableElements), "Loading error: interface array size mismatch." ); - if( pVariable->pType->IsInterface() ) - { - pInterface = pVariable->Data.pInterface; - } - else if( pVariable->pType->IsClassInstance() ) - { - // For class instances, we create background interfaces which point to the class instance. This is done so - // the shader can always expect SInterface dependencies, rather than a mix of SInterfaces and class instances - VN( pInterface = PRIVATENEW SInterface[size] ); - if( VariableElements == 0 ) - { - D3DXASSERT( size == 1 ); - pInterface[0].pClassInstance = (SClassInstanceGlobalVariable*)pVariable; - m_BackgroundInterfaces.Add( &pInterface[0] ); - } - else - { - // Fill each element of the SInstance array individually - VBD( size == VariableElements, "Loading error: class instance array size mismatch." ); - for( UINT iElement=0; iElement < size; iElement++ ) - { - SGlobalVariable *pElement = (SGlobalVariable*)pVariable->GetElement( iElement ); - VBD( pElement->IsValid(), "Internal loading error: class instance array index out of range." ); - pInterface[iElement].pClassInstance = (SClassInstanceGlobalVariable*)pElement; - m_BackgroundInterfaces.Add( &pInterface[iElement] ); - } - } - } - else - { - VHD( E_FAIL, "Loading error: invalid interface initializer variable type."); - } - - // - // Here's where the "optimized" part comes in; whenever there's - // a resource dependency, see if it's located contiguous to - // an existing resource dependency and merge them together - // if possible - // - UINT rangeCount; - pvRange = &vRanges[ER_Interfaces]; - rangeCount = pvRange->GetSize(); - - VBD( rangeCount <= 1, "Internal loading error: invalid range count." ); - - if ( rangeCount == 0 ) - { - VN( pRange = pvRange->Add() ); - pRange->start = pRange->last = 0; - } - else - { - pRange = &( (*pvRange)[0] ); - } - - if( bindPoint < pRange->last ) - { - // add interfaces into the range that already exists - VBD( bindPoint + size < pRange->last, "Internal loading error: range overlap." ); - for( j = 0; j < size; ++ j ) - { - pRange->vResources[j + bindPoint] = pInterface + j; - } - } - else - { - // add interfaces to the end of the range - - // add missing interface slots, if necessary - while(pRange->last < bindPoint) - { - VHD( pRange->vResources.Add(&g_NullInterface), "Internal loading error: cannot add NULL interface to range." ); - pRange->last++; - } - - D3DXASSERT( bindPoint == pRange->last ); - for( j=0; j < size; ++ j ) - { - VHD( pRange->vResources.Add(pInterface + j), "Internal loading error: cannot at interface to range." ); - } - pRange->last = bindPoint + size; - } - } - - // There is only one interface cbuffer - break; - } - } - - ////////////////////////////////////////////////////////////////////////// - // Step 3: allocate room in pShaderBlock for all of the dependency - // pointers and then hook them up - - pShaderBlock->SampDepCount = vRanges[ ER_Sampler ].GetSize(); - pShaderBlock->CBDepCount = vRanges[ ER_CBuffer ].GetSize(); - pShaderBlock->InterfaceDepCount = vRanges[ ER_Interfaces ].GetSize(); - pShaderBlock->ResourceDepCount = vRanges[ ER_Texture ].GetSize(); - pShaderBlock->UAVDepCount = vRanges[ ER_UnorderedAccessView ].GetSize(); - pShaderBlock->TBufferDepCount = vTBuffers.GetSize(); - - VN( pShaderBlock->pSampDeps = PRIVATENEW SShaderSamplerDependency[pShaderBlock->SampDepCount] ); - VN( pShaderBlock->pCBDeps = PRIVATENEW SShaderCBDependency[pShaderBlock->CBDepCount] ); - VN( pShaderBlock->pInterfaceDeps = PRIVATENEW SInterfaceDependency[pShaderBlock->InterfaceDepCount] ); - VN( pShaderBlock->pResourceDeps = PRIVATENEW SShaderResourceDependency[pShaderBlock->ResourceDepCount] ); - VN( pShaderBlock->pUAVDeps = PRIVATENEW SUnorderedAccessViewDependency[pShaderBlock->UAVDepCount] ); - VN( pShaderBlock->ppTbufDeps = PRIVATENEW SConstantBuffer*[pShaderBlock->TBufferDepCount] ); - - for (i=0; iCBDepCount; ++i) - { - SShaderCBDependency *pDep = &pShaderBlock->pCBDeps[i]; - - pRange = &vRanges[ER_CBuffer][i]; - - pDep->StartIndex = pRange->start; - pDep->Count = pRange->last - pDep->StartIndex; - pDep->ppFXPointers = PRIVATENEW SConstantBuffer*[ pDep->Count ]; - pDep->ppD3DObjects = PRIVATENEW ID3D11Buffer*[ pDep->Count ]; - - D3DXASSERT(pDep->Count == pRange->vResources.GetSize()); - for (j=0; jCount; ++j) - { - pDep->ppFXPointers[j] = (SConstantBuffer *)pRange->vResources[j]; - pDep->ppD3DObjects[j] = NULL; - } - } - - for (i=0; iSampDepCount; ++i) - { - SShaderSamplerDependency *pDep = &pShaderBlock->pSampDeps[i]; - - pRange = &vRanges[ER_Sampler][i]; - - pDep->StartIndex = pRange->start; - pDep->Count = pRange->last - pDep->StartIndex; - pDep->ppFXPointers = PRIVATENEW SSamplerBlock*[ pDep->Count ]; - pDep->ppD3DObjects = PRIVATENEW ID3D11SamplerState*[ pDep->Count ]; - - D3DXASSERT(pDep->Count == pRange->vResources.GetSize()); - for (j=0; jCount; ++j) - { - pDep->ppFXPointers[j] = (SSamplerBlock *) pRange->vResources[j]; - pDep->ppD3DObjects[j] = NULL; - } - } - - for (i=0; iInterfaceDepCount; ++i) - { - SInterfaceDependency *pDep = &pShaderBlock->pInterfaceDeps[i]; - - pRange = &vRanges[ER_Interfaces][i]; - - pDep->StartIndex = pRange->start; - pDep->Count = pRange->last - pDep->StartIndex; - pDep->ppFXPointers = PRIVATENEW SInterface*[ pDep->Count ]; - pDep->ppD3DObjects = PRIVATENEW ID3D11ClassInstance*[ pDep->Count ]; - - D3DXASSERT(pDep->Count == pRange->vResources.GetSize()); - for (j=0; jCount; ++j) - { - pDep->ppFXPointers[j] = (SInterface *) pRange->vResources[j]; - pDep->ppD3DObjects[j] = NULL; - } - } - - for (i=0; iResourceDepCount; ++i) - { - SShaderResourceDependency *pDep = &pShaderBlock->pResourceDeps[i]; - - pRange = &vRanges[ER_Texture][i]; - - pDep->StartIndex = pRange->start; - pDep->Count = pRange->last - pDep->StartIndex; - pDep->ppFXPointers = PRIVATENEW SShaderResource*[ pDep->Count ]; - pDep->ppD3DObjects = PRIVATENEW ID3D11ShaderResourceView*[ pDep->Count ]; - - D3DXASSERT(pDep->Count == pRange->vResources.GetSize()); - for (j=0; jCount; ++j) - { - pDep->ppFXPointers[j] = (SShaderResource *) pRange->vResources[j]; - pDep->ppD3DObjects[j] = NULL; - } - } - - for (i=0; iUAVDepCount; ++i) - { - SUnorderedAccessViewDependency *pDep = &pShaderBlock->pUAVDeps[i]; - - pRange = &vRanges[ER_UnorderedAccessView][i]; - - pDep->StartIndex = pRange->start; - pDep->Count = pRange->last - pDep->StartIndex; - pDep->ppFXPointers = PRIVATENEW SUnorderedAccessView*[ pDep->Count ]; - pDep->ppD3DObjects = PRIVATENEW ID3D11UnorderedAccessView*[ pDep->Count ]; - - D3DXASSERT(pDep->Count == pRange->vResources.GetSize()); - for (j=0; jCount; ++j) - { - pDep->ppFXPointers[j] = (SUnorderedAccessView *) pRange->vResources[j]; - pDep->ppD3DObjects[j] = NULL; - } - } - - if (pShaderBlock->TBufferDepCount > 0) - { - memcpy(pShaderBlock->ppTbufDeps, &vTBuffers[0], pShaderBlock->TBufferDepCount * sizeof(SConstantBuffer*)); - } - -lExit: - return hr; -} - -// Create shader reflection interface and grab dependency info -HRESULT CEffectLoader::BuildShaderBlock(SShaderBlock *pShaderBlock) -{ - HRESULT hr = S_OK; - - // unused shader block? that's not right - VBD( pShaderBlock->pVT != NULL, "Internal loading error: NULL shader vtable." ); - - D3DXASSERT(pShaderBlock->pD3DObject == NULL); - - if (NULL == pShaderBlock->pReflectionData) - { - // File contains a shader variable without an assigned shader, or this is a null assignment. - // Usually, this is called by one of these guys: - // SetVertexShader( NULL ); - // or - // vertexshader g_VS = NULL; - return S_OK; - } - - // Initialize the reflection interface - VHD( D3DReflect( pShaderBlock->pReflectionData->pBytecode, pShaderBlock->pReflectionData->BytecodeLength, IID_ID3D11ShaderReflection, (void**)&pShaderBlock->pReflectionData->pReflection ), - "Internal loading error: cannot create shader reflection object." ); - - // Get dependencies - VH( GrabShaderData( pShaderBlock ) ); - - // Grab input signatures for VS - if( EOT_VertexShader == pShaderBlock->GetShaderType() ) - { - D3DXASSERT( pShaderBlock->pInputSignatureBlob == NULL ); - VHD( D3DGetInputSignatureBlob( pShaderBlock->pReflectionData->pBytecode, pShaderBlock->pReflectionData->BytecodeLength, &pShaderBlock->pInputSignatureBlob ), - "Internal loading error: cannot get input signature." ); - } - -lExit: - return hr; -} - -#undef PRIVATENEW - - -////////////////////////////////////////////////////////////////////////// -// Code to relocate data to private heaps (reflection & runtime effect) -// -// Important note about alignment: all reasonable chunks of data are -// machine word aligned (that is, any piece of data moved as a whole is -// aligned as a whole. This means that when computing m_ReflectionMemory -// or m_EffectMemory, each addition is aligned. This also means -// that, when later relocating that same memory, you must call MoveData -// or MoveString on the same chunks that were aligned. This is -// because: Align(a * b) != a * Align(b). -////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////// -// Reflection reallocation code -////////////////////////////////////////////////////////////////////////// - -HRESULT CEffectLoader::CalculateAnnotationSize(UINT cAnnotations, SAnnotation *pAnnotations) -{ - HRESULT hr = S_OK; - UINT i; - - m_ReflectionMemory += AlignToPowerOf2(cAnnotations * sizeof(SAnnotation), c_DataAlignment); - for (i=0; iBelongsInConstantBuffer()) - { - m_ReflectionMemory += AlignToPowerOf2(pAnnotations[i].pType->TotalSize, c_DataAlignment); - } - else - { - VBD( pAnnotations[i].pType->IsObjectType(EOT_String), "Invalid pEffectBuffer: invalid annotation type." ); - - UINT cElements; - cElements = max(1, pAnnotations[i].pType->Elements); - - m_ReflectionMemory += AlignToPowerOf2(cElements * sizeof(SString), c_DataAlignment); - - } - } - -lExit: - return hr; -} - -HRESULT CEffectLoader::ReallocateAnnotationData(UINT cAnnotations, SAnnotation **ppAnnotations) -{ - HRESULT hr = S_OK; - UINT i; - SAnnotation *pAnnotations; - - VHD( m_pReflection->m_Heap.MoveData((void**) ppAnnotations, cAnnotations * sizeof(SAnnotation)), - "Internal loading error: cannot move annotation data." ); - pAnnotations = *ppAnnotations; - - for (i=0; ipEffect = m_pEffect; - - VHD( m_pReflection->m_Heap.MoveString(&pAn->pName), "Internal loading error: cannot move annotation name." ); - - // Reallocate type later - if (pAn->pType->BelongsInConstantBuffer()) - { - VHD( m_pReflection->m_Heap.MoveData( &pAn->Data.pGeneric, pAn->pType->TotalSize ), "Internal loading error: cannot move annotation data." ); - } - else if (pAnnotations[i].pType->IsObjectType(EOT_String)) - { - UINT j; - UINT cElements = max(1, pAn->pType->Elements); - - VHD( m_pReflection->m_Heap.MoveData((void**) &pAn->Data.pString, cElements * sizeof(SString)), "Internal loading error: cannot move annotation string." ); - for (j = 0; j < cElements; ++ j) - { - VHD( m_pReflection->m_Heap.MoveString(&pAn->Data.pString[j].pString), "Internal loading error: cannot move annotation string element." ); - } - } - else - { - VHD( E_FAIL, "Invalid pEffectBuffer: invalid annotation type." ); - } - } - -lExit: - return hr; -} - -HRESULT CEffectLoader::InitializeReflectionDataAndMoveStrings( UINT KnownSize ) -{ - HRESULT hr = S_OK; - UINT i, j, k; - UINT cbStrings; - CEffectHeap *pHeap = &m_pReflection->m_Heap; - - // Get byte counts - cbStrings = m_pEffect->m_StringCount * sizeof( SString ); - - if( KnownSize ) - { - m_ReflectionMemory = KnownSize; - } - else - { - m_ReflectionMemory += AlignToPowerOf2(cbStrings, c_DataAlignment); - - for (i=0; im_CBCount; i++) - { - VH( CalculateAnnotationSize(m_pEffect->m_pCBs[i].AnnotationCount, m_pEffect->m_pCBs[i].pAnnotations) ); - } - - for (i=0; im_VariableCount; i++) - { - VH( CalculateAnnotationSize(m_pEffect->m_pVariables[i].AnnotationCount, m_pEffect->m_pVariables[i].pAnnotations) ); - } - - for (i=0; im_GroupCount; i++) - { - VH( CalculateAnnotationSize(m_pEffect->m_pGroups[i].AnnotationCount, m_pEffect->m_pGroups[i].pAnnotations) ); - - for (j=0; jm_pGroups[i].TechniqueCount; j++) - { - VH( CalculateAnnotationSize(m_pEffect->m_pGroups[i].pTechniques[j].AnnotationCount, m_pEffect->m_pGroups[i].pTechniques[j].pAnnotations) ); - - for (k=0; km_pGroups[i].pTechniques[j].PassCount; k++) - { - VH( CalculateAnnotationSize(m_pEffect->m_pGroups[i].pTechniques[j].pPasses[k].AnnotationCount, m_pEffect->m_pGroups[i].pTechniques[j].pPasses[k].pAnnotations) ); - } - } - } - - // Calculate shader reflection data size - for (i=0; im_ShaderBlockCount; i++) - { - if (NULL != m_pEffect->m_pShaderBlocks[i].pReflectionData) - { - m_ReflectionMemory += AlignToPowerOf2(sizeof(SShaderBlock::SReflectionData), c_DataAlignment); - m_ReflectionMemory += AlignToPowerOf2(m_pEffect->m_pShaderBlocks[i].pReflectionData->BytecodeLength, c_DataAlignment); - // stream out decl is handled as a string, and thus its size is already factored because of GetStringAndAddToReflection - } - } - } - - VHD( pHeap->ReserveMemory(m_ReflectionMemory), "Internal loading error: failed to reserve reflection memory." ); - - // Strings are handled separately because we are moving them to reflection - m_pOldStrings = m_pEffect->m_pStrings; - VHD( pHeap->MoveData((void**) &m_pEffect->m_pStrings, cbStrings), "Internal loading error: cannot move string data." ); - for(i=0; im_StringCount; i++) - { - VHD( pHeap->MoveString( &m_pEffect->m_pStrings[i].pString), "Internal loading error: cannot move string pointer." ); - } - -lExit: - return hr; -} - -// Move all reflection data to private heap -HRESULT CEffectLoader::ReallocateReflectionData( bool Cloning ) -{ - HRESULT hr = S_OK; - UINT i, j, k; - CEffectHeap *pHeap = &m_pReflection->m_Heap; - - for(i=0; im_CBCount; i++) - { - VHD( pHeap->MoveString( &m_pEffect->m_pCBs[i].pName ), "Internal loading error: cannot move CB name." ); - VH( ReallocateAnnotationData(m_pEffect->m_pCBs[i].AnnotationCount, &m_pEffect->m_pCBs[i].pAnnotations) ); - } - - for(i=0; im_VariableCount; i++) - { - VHD( pHeap->MoveString( &m_pEffect->m_pVariables[i].pName ), "Internal loading error: cannot move variable name." ); - VHD( pHeap->MoveString( &m_pEffect->m_pVariables[i].pSemantic ), "Internal loading error: cannot move variable semantic." ); - VH( ReallocateAnnotationData(m_pEffect->m_pVariables[i].AnnotationCount, &m_pEffect->m_pVariables[i].pAnnotations) ); - } - - for(i=0; im_GroupCount; i++) - { - VHD( pHeap->MoveString( &m_pEffect->m_pGroups[i].pName ), "Internal loading error: cannot move group name." ); - VH( ReallocateAnnotationData(m_pEffect->m_pGroups[i].AnnotationCount, &m_pEffect->m_pGroups[i].pAnnotations) ); - - for(j=0; jm_pGroups[i].TechniqueCount; j++) - { - VHD( pHeap->MoveString( &m_pEffect->m_pGroups[i].pTechniques[j].pName ), "Internal loading error: cannot move technique name." ); - VH( ReallocateAnnotationData(m_pEffect->m_pGroups[i].pTechniques[j].AnnotationCount, &m_pEffect->m_pGroups[i].pTechniques[j].pAnnotations) ); - - for(k=0; km_pGroups[i].pTechniques[j].PassCount; k++) - { - VHD( pHeap->MoveString( &m_pEffect->m_pGroups[i].pTechniques[j].pPasses[k].pName ), "Internal loading error: cannot move pass name." ); - VH( ReallocateAnnotationData(m_pEffect->m_pGroups[i].pTechniques[j].pPasses[k].AnnotationCount, &m_pEffect->m_pGroups[i].pTechniques[j].pPasses[k].pAnnotations) ); - } - } - } - - if( !Cloning ) - { - // When not cloning, every member in m_pMemberInterfaces is from a global variable, so we can take pName and pSemantic - // from the parent variable, which were updated above - for (i = 0; i < m_pEffect->m_pMemberInterfaces.GetSize(); ++ i) - { - SMember* pMember = m_pEffect->m_pMemberInterfaces[i]; - SGlobalVariable* pTopLevelEntity = (SGlobalVariable*)pMember->pTopLevelEntity; - VH( FixupVariablePointer( &pTopLevelEntity ) ); - pMember->pName = pTopLevelEntity->pName; - pMember->pSemantic = pTopLevelEntity->pSemantic; - } - } - - // Move shader bytecode - for (i=0; im_ShaderBlockCount; i++) - { - if (NULL != m_pEffect->m_pShaderBlocks[i].pReflectionData) - { - VHD( pHeap->MoveData((void**)&m_pEffect->m_pShaderBlocks[i].pReflectionData, sizeof(SShaderBlock::SReflectionData)), - "Internal loading error: cannot move shader reflection block." ); - VHD( pHeap->MoveData((void**)&m_pEffect->m_pShaderBlocks[i].pReflectionData->pBytecode, m_pEffect->m_pShaderBlocks[i].pReflectionData->BytecodeLength), - "Internal loading error: cannot move shader bytecode."); - for( UINT iDecl=0; iDecl < D3D11_SO_STREAM_COUNT; ++iDecl ) - { - VHD( pHeap->MoveString(&m_pEffect->m_pShaderBlocks[i].pReflectionData->pStreamOutDecls[iDecl]), "Internal loading error: cannot move SO decl." ); - } - VH( pHeap->MoveInterfaceParameters(m_pEffect->m_pShaderBlocks[i].pReflectionData->InterfaceParameterCount, &m_pEffect->m_pShaderBlocks[i].pReflectionData->pInterfaceParameters ) ); - } - - } - -lExit: - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// Runtime effect reallocation code -////////////////////////////////////////////////////////////////////////// - -template HRESULT CEffectLoader::ReallocateBlockAssignments(T* &pBlocks, UINT cBlocks, T* pOldBlocks) -{ - HRESULT hr = S_OK; - CEffectHeap *pHeap = &m_pEffect->m_Heap; - UINT i, j; - - for(i=0; iMoveData((void**) &pBlock->pAssignments, sizeof(SAssignment)*pBlock->AssignmentCount), "Internal loading error: cannot move assignment count." ); - - for (j=0; jAssignmentCount; j++) - { - SAssignment *pAssignment = &pBlock->pAssignments[j]; - UINT cbDeps; - - // When cloning, convert pointers back into offsets - if( pOldBlocks ) - { - T *pOldBlock = &pOldBlocks[i]; - pAssignment->Destination.Offset = (UINT)( (UINT_PTR)pAssignment->Destination.pGeneric - (UINT_PTR)pOldBlock ) ; - } - - // Convert destination pointers from offset to real pointer - pAssignment->Destination.pGeneric = (BYTE*) pBlock + pAssignment->Destination.Offset; - - // Make sure the data pointer points into the backing store - VBD( pAssignment->Destination.pGeneric >= &pBlock->BackingStore && - pAssignment->Destination.pGeneric < (BYTE*) &pBlock->BackingStore + sizeof(pBlock->BackingStore), - "Internal loading error: assignment destination out of range." ); - - // Fixup dependencies - cbDeps = pAssignment->DependencyCount * sizeof(SAssignment::SDependency); - VHD( pHeap->MoveData((void**) &pAssignment->pDependencies, cbDeps), "Internal loading error: cannot move assignment dependencies." ); - - SGlobalVariable *pOldVariable = NULL; - for(UINT iDep=0; iDepDependencyCount; iDep++) - { - SAssignment::SDependency *pDep = &pAssignment->pDependencies[iDep]; - // We ignore all but the last variable because below, we only use the last dependency - pOldVariable = pDep->pVariable; - VH( FixupVariablePointer(&pDep->pVariable) ); - } - - // Fixup source pointers - switch(pAssignment->LhsType) - { - case ELHS_VertexShaderBlock: - case ELHS_PixelShaderBlock: - case ELHS_GeometryShaderBlock: - case ELHS_HullShaderBlock: - case ELHS_DomainShaderBlock: - case ELHS_ComputeShaderBlock: - VH( FixupShaderPointer(&pAssignment->Source.pShader) ); - break; - - case ELHS_DepthStencilBlock: - VH( FixupDSPointer((SDepthStencilBlock**)&pAssignment->Source.pBlock) ); - break; - case ELHS_BlendBlock: - VH( FixupABPointer((SBlendBlock**) &pAssignment->Source.pBlock) ); - break; - case ELHS_RasterizerBlock: - VH( FixupRSPointer((SRasterizerBlock**) &pAssignment->Source.pBlock) ); - break; - - case ELHS_Texture: - VH( FixupShaderResourcePointer((SShaderResource**) &pAssignment->Source.pShaderResource) ); - break; - - default: - // Non-object assignment (must have at least one dependency or it would have been pruned by now) - D3DXASSERT( !pAssignment->IsObjectAssignment() && pAssignment->DependencyCount > 0 ); - - // Numeric variables must be relocated before this function is called - - switch (pAssignment->AssignmentType) - { - case ERAT_NumericVariable: - case ERAT_NumericVariableIndex: - // the variable or variable array is always the last dependency in the chain - SGlobalVariable *pVariable; - pVariable = pAssignment->pDependencies[pAssignment->DependencyCount - 1].pVariable; - D3DXASSERT( pVariable->pType->BelongsInConstantBuffer() && NULL != pVariable->pCB ); - - // When cloning, convert pointers back into offsets - if( pOldBlocks ) - { - VBD( pOldVariable != NULL, "Internal loading error: pOldVariable is NULL." ); - pAssignment->Source.Offset = pAssignment->Source.pNumeric - pOldVariable->pCB->pBackingStore; - } - - // Convert from offset to pointer - pAssignment->Source.pNumeric = pVariable->pCB->pBackingStore + pAssignment->Source.Offset; - break; - - default: - // Shouldn't be able to get here - D3DXASSERT(0); - VHD( E_FAIL, "Loading error: invalid assignment type." ); - } - break; - - case ELHS_Invalid: - VHD( E_FAIL, "Loading error: invalid assignment type." ); - } - - D3DXASSERT(m_pEffect->m_LocalTimer > 0); - m_pEffect->EvaluateAssignment(pAssignment); - } - } - -lExit: - return hr; -} - -template UINT CEffectLoader::CalculateBlockAssignmentSize(T* &pBlocks, UINT cBlocks) -{ - UINT dwSize = 0; - UINT i, j; - - for(i=0; iAssignmentCount * sizeof(SAssignment), c_DataAlignment); - - for (j=0; jAssignmentCount; j++) - { - SAssignment *pAssignment = &pBlock->pAssignments[j]; - - dwSize += AlignToPowerOf2(pAssignment->DependencyCount * sizeof(SAssignment::SDependency), c_DataAlignment); - } - } - - return dwSize; -} - -HRESULT CEffectLoader::ReallocateShaderBlocks() -{ - HRESULT hr = S_OK; - UINT i, j, k; - CEffectHeap *pHeap = &m_pEffect->m_Heap; - const char* pError = "Internal loading error: cannot move shader data."; - - for (i=0; im_ShaderBlockCount; i++) - { - SShaderBlock *pShader = &m_pEffect->m_pShaderBlocks[i]; - - // pShader->pReflection data and all of its members (bytecode, SO decl, etc.) are handled by ReallocateReflectionData() - VHD( pHeap->MoveData((void**) &pShader->pCBDeps, pShader->CBDepCount * sizeof(SShaderCBDependency)), pError ); - VHD( pHeap->MoveData((void**) &pShader->pSampDeps, pShader->SampDepCount * sizeof(SShaderSamplerDependency)), pError ); - VHD( pHeap->MoveData((void**) &pShader->pInterfaceDeps, pShader->InterfaceDepCount * sizeof(SInterfaceDependency)), pError ); - VHD( pHeap->MoveData((void**) &pShader->pResourceDeps, pShader->ResourceDepCount * sizeof(SShaderResourceDependency)), pError ); - VHD( pHeap->MoveData((void**) &pShader->pUAVDeps, pShader->UAVDepCount * sizeof(SUnorderedAccessViewDependency)), pError ); - VHD( pHeap->MoveData((void**) &pShader->ppTbufDeps, pShader->TBufferDepCount * sizeof(SConstantBuffer*)), pError ); - - for (j=0; jCBDepCount; j++) - { - SShaderCBDependency *pCBDeps = &pShader->pCBDeps[j]; - VHD( pHeap->MoveData((void**) &pCBDeps->ppD3DObjects, pCBDeps->Count * sizeof(ID3D11Buffer*)), pError ); - VHD( pHeap->MoveData((void**) &pCBDeps->ppFXPointers, pCBDeps->Count * sizeof(SConstantBuffer*)), pError ); - - for (k=0; kCount; k++) - { - VH( FixupCBPointer( &pCBDeps->ppFXPointers[k] ) ); - } - } - - for (j=0; jSampDepCount; j++) - { - SShaderSamplerDependency *pSampDeps = &pShader->pSampDeps[j]; - VHD( pHeap->MoveData((void**) &pSampDeps->ppD3DObjects, pSampDeps->Count * sizeof(ID3D11SamplerState*)), pError ); - VHD( pHeap->MoveData((void**) &pSampDeps->ppFXPointers, pSampDeps->Count * sizeof(SSamplerBlock*)), pError ); - - for (k=0; kCount; k++) - { - VH( FixupSamplerPointer(&pSampDeps->ppFXPointers[k]) ); - } - } - - for (j=0; jInterfaceDepCount; j++) - { - SInterfaceDependency *pInterfaceDeps = &pShader->pInterfaceDeps[j]; - VHD( pHeap->MoveData((void**) &pInterfaceDeps->ppD3DObjects, pInterfaceDeps->Count * sizeof(ID3D11ClassInstance*)), pError ); - VHD( pHeap->MoveData((void**) &pInterfaceDeps->ppFXPointers, pInterfaceDeps->Count * sizeof(SInterface*)), pError ); - - for (k=0; kCount; k++) - { - VH( FixupInterfacePointer(&pInterfaceDeps->ppFXPointers[k], true) ); - } - } - - for (j=0; jResourceDepCount; j++) - { - SShaderResourceDependency *pResourceDeps = &pShader->pResourceDeps[j]; - VHD( pHeap->MoveData((void**) &pResourceDeps->ppD3DObjects, pResourceDeps->Count * sizeof(ID3D11ShaderResourceView*)), pError ); - VHD( pHeap->MoveData((void**) &pResourceDeps->ppFXPointers, pResourceDeps->Count * sizeof(SShaderResource*)), pError ); - - for (k=0; kCount; k++) - { - VH( FixupShaderResourcePointer(&pResourceDeps->ppFXPointers[k]) ); - } - } - - for (j=0; jUAVDepCount; j++) - { - SUnorderedAccessViewDependency *pUAVDeps = &pShader->pUAVDeps[j]; - VHD( pHeap->MoveData((void**) &pUAVDeps->ppD3DObjects, pUAVDeps->Count * sizeof(ID3D11UnorderedAccessView*)), pError ); - VHD( pHeap->MoveData((void**) &pUAVDeps->ppFXPointers, pUAVDeps->Count * sizeof(SUnorderedAccessView*)), pError ); - - for (k=0; kCount; k++) - { - VH( FixupUnorderedAccessViewPointer(&pUAVDeps->ppFXPointers[k]) ); - } - } - - for (j=0; jTBufferDepCount; j++) - { - VH( FixupCBPointer( &pShader->ppTbufDeps[j] ) ); - } - } - -lExit: - return hr; -} - - -UINT CEffectLoader::CalculateShaderBlockSize() -{ - UINT dwSize = 0; - UINT i, j; - - for (i=0; im_ShaderBlockCount; i++) - { - SShaderBlock *pShader = &m_pEffect->m_pShaderBlocks[i]; - - dwSize += AlignToPowerOf2(pShader->CBDepCount * sizeof(SShaderCBDependency), c_DataAlignment); - dwSize += AlignToPowerOf2(pShader->SampDepCount * sizeof(SShaderSamplerDependency), c_DataAlignment); - dwSize += AlignToPowerOf2(pShader->InterfaceDepCount * sizeof(SInterfaceDependency), c_DataAlignment); - dwSize += AlignToPowerOf2(pShader->ResourceDepCount * sizeof(SShaderResourceDependency), c_DataAlignment); - dwSize += AlignToPowerOf2(pShader->UAVDepCount * sizeof(SUnorderedAccessViewDependency), c_DataAlignment); - dwSize += AlignToPowerOf2(pShader->TBufferDepCount * sizeof(SConstantBuffer*), c_DataAlignment); - - for (j=0; jCBDepCount; j++) - { - SShaderCBDependency *pCBDeps = &pShader->pCBDeps[j]; - dwSize += AlignToPowerOf2(pCBDeps->Count * sizeof(ID3D11Buffer*), c_DataAlignment); - dwSize += AlignToPowerOf2(pCBDeps->Count * sizeof(SConstantBuffer*), c_DataAlignment); - } - - for (j=0; jSampDepCount; j++) - { - SShaderSamplerDependency *pSampDeps = &pShader->pSampDeps[j]; - dwSize += AlignToPowerOf2(pSampDeps->Count * sizeof(ID3D11SamplerState*), c_DataAlignment); - dwSize += AlignToPowerOf2(pSampDeps->Count * sizeof(SSamplerBlock*), c_DataAlignment); - } - - for (j=0; jInterfaceDepCount; j++) - { - SInterfaceDependency *pInterfaceDeps = &pShader->pInterfaceDeps[j]; - dwSize += AlignToPowerOf2(pInterfaceDeps->Count * sizeof(ID3D11ClassInstance*), c_DataAlignment); - dwSize += AlignToPowerOf2(pInterfaceDeps->Count * sizeof(SInterface*), c_DataAlignment); - } - - for (j=0; jResourceDepCount; j++) - { - SShaderResourceDependency *pResourceDeps = &pShader->pResourceDeps[j]; - dwSize += AlignToPowerOf2(pResourceDeps->Count * sizeof(ID3D11ShaderResourceView*), c_DataAlignment); - dwSize += AlignToPowerOf2(pResourceDeps->Count * sizeof(SShaderResource*), c_DataAlignment); - } - - for (j=0; jUAVDepCount; j++) - { - SUnorderedAccessViewDependency *pUAVDeps = &pShader->pUAVDeps[j]; - dwSize += AlignToPowerOf2(pUAVDeps->Count * sizeof(ID3D11UnorderedAccessView*), c_DataAlignment); - dwSize += AlignToPowerOf2(pUAVDeps->Count * sizeof(SUnorderedAccessView*), c_DataAlignment); - } - } - - return dwSize; -} - -// Move all (non-reflection) effect data to private heap -HRESULT CEffectLoader::ReallocateEffectData( bool Cloning ) -{ - HRESULT hr = S_OK; - UINT i, j; - CEffectHeap *pHeap = &m_pEffect->m_Heap; - UINT cbCBs = sizeof(SConstantBuffer) * m_pEffect->m_CBCount; - UINT cbVariables = sizeof(SGlobalVariable) * m_pEffect->m_VariableCount; - UINT cbGroups = sizeof(STechnique) * m_pEffect->m_GroupCount; - UINT cbShaders = sizeof(SShaderBlock) * m_pEffect->m_ShaderBlockCount; - UINT cbDS = sizeof(SDepthStencilBlock) * m_pEffect->m_DepthStencilBlockCount; - UINT cbAB = sizeof(SBlendBlock) * m_pEffect->m_BlendBlockCount; - UINT cbRS = sizeof(SRasterizerBlock) * m_pEffect->m_RasterizerBlockCount; - UINT cbSamplers = sizeof(SSamplerBlock) * m_pEffect->m_SamplerBlockCount; - UINT cbMemberDatas = sizeof(SMemberDataPointer) * m_pEffect->m_MemberDataCount; - UINT cbInterfaces = sizeof(SInterface) * m_pEffect->m_InterfaceCount; - UINT cbBackgroundInterfaces = sizeof(SInterface) * m_BackgroundInterfaces.GetSize(); - UINT cbShaderResources = sizeof(SShaderResource) * m_pEffect->m_ShaderResourceCount; - UINT cbUnorderedAccessViews = sizeof(SUnorderedAccessView) * m_pEffect->m_UnorderedAccessViewCount; - UINT cbRenderTargetViews = sizeof(SRenderTargetView) * m_pEffect->m_RenderTargetViewCount; - UINT cbDepthStencilViews = sizeof(SDepthStencilView) * m_pEffect->m_DepthStencilViewCount; - UINT cbAnonymousShaders = sizeof(SAnonymousShader) * m_pEffect->m_AnonymousShaderCount; - - // Calculate memory needed - m_EffectMemory += AlignToPowerOf2(cbCBs, c_DataAlignment); - m_EffectMemory += AlignToPowerOf2(cbVariables, c_DataAlignment); - m_EffectMemory += AlignToPowerOf2(cbGroups, c_DataAlignment); - m_EffectMemory += AlignToPowerOf2(cbShaders, c_DataAlignment); - m_EffectMemory += AlignToPowerOf2(cbMemberDatas, c_DataAlignment); - m_EffectMemory += AlignToPowerOf2(cbInterfaces + cbBackgroundInterfaces, c_DataAlignment); - m_EffectMemory += AlignToPowerOf2(cbShaderResources, c_DataAlignment); - m_EffectMemory += AlignToPowerOf2(cbUnorderedAccessViews, c_DataAlignment); - m_EffectMemory += AlignToPowerOf2(cbRenderTargetViews, c_DataAlignment); - m_EffectMemory += AlignToPowerOf2(cbDepthStencilViews, c_DataAlignment); - m_EffectMemory += AlignToPowerOf2(cbDS, c_DataAlignment); - m_EffectMemory += AlignToPowerOf2(cbAB, c_DataAlignment); - m_EffectMemory += AlignToPowerOf2(cbRS, c_DataAlignment); - m_EffectMemory += AlignToPowerOf2(cbSamplers, c_DataAlignment); - m_EffectMemory += AlignToPowerOf2(cbAnonymousShaders, c_DataAlignment); - - m_EffectMemory += CalculateShaderBlockSize(); - - for (i=0; im_CBCount; i++) - { - SConstantBuffer *pCB = &m_pEffect->m_pCBs[i]; - - m_EffectMemory += AlignToPowerOf2(pCB->Size, c_DataAlignment); - } - - for (i=0; im_GroupCount; i++) - { - SGroup *pGroup = &m_pEffect->m_pGroups[i]; - - m_EffectMemory += AlignToPowerOf2(pGroup->TechniqueCount * sizeof(STechnique), c_DataAlignment); - - for (j=0; jTechniqueCount; j++) - { - STechnique *pTech = &pGroup->pTechniques[j]; - - m_EffectMemory += AlignToPowerOf2(pTech->PassCount * sizeof(SPassBlock), c_DataAlignment); - m_EffectMemory += CalculateBlockAssignmentSize(pTech->pPasses, pTech->PassCount); - } - }; - - m_EffectMemory += CalculateBlockAssignmentSize(m_pEffect->m_pBlendBlocks, m_pEffect->m_BlendBlockCount); - m_EffectMemory += CalculateBlockAssignmentSize(m_pEffect->m_pDepthStencilBlocks, m_pEffect->m_DepthStencilBlockCount); - m_EffectMemory += CalculateBlockAssignmentSize(m_pEffect->m_pRasterizerBlocks, m_pEffect->m_RasterizerBlockCount); - m_EffectMemory += CalculateBlockAssignmentSize(m_pEffect->m_pSamplerBlocks, m_pEffect->m_SamplerBlockCount); - - // Reserve memory - VHD( pHeap->ReserveMemory(m_EffectMemory), "Internal loading error: cannot reserve effect memory." ); - - // Move DataMemberPointer blocks - m_pOldMemberDataBlocks = m_pEffect->m_pMemberDataBlocks; - VHD( pHeap->MoveData((void**) &m_pEffect->m_pMemberDataBlocks, cbMemberDatas), "Internal loading error: cannot move member data blocks." ); - - // Move CBs - m_pOldCBs = m_pEffect->m_pCBs; - VHD( pHeap->MoveData((void**) &m_pEffect->m_pCBs, cbCBs), "Internal loading error: cannot move CB count." ); - for (i=0; im_CBCount; i++) - { - SConstantBuffer *pCB = &m_pEffect->m_pCBs[i]; - - VHD( pHeap->MoveData((void**) &pCB->pBackingStore, pCB->Size), "Internal loading error: cannot move CB backing store." ); - - if( !Cloning ) - { - // When creating the effect, MemberDataOffsetPlus4 is used, not pMemberData - if( pCB->MemberDataOffsetPlus4 ) - { - pCB->pMemberData = (SMemberDataPointer*)( (BYTE*)m_pEffect->m_pMemberDataBlocks + ( pCB->MemberDataOffsetPlus4 - 4 ) ); - } - } - else if (pCB->pMemberData) - { - // When cloning an effect, pMemberData points to valid data in the original effect - VH( FixupMemberDataPointer( &pCB->pMemberData ) ); - } - } - - // Move numeric variables; move all variable types - m_pOldVars = m_pEffect->m_pVariables; - VHD( pHeap->MoveData((void**) &m_pEffect->m_pVariables, cbVariables), "Internal loading error: cannot move variable count." ); - for (i=0; im_VariableCount; i++) - { - SGlobalVariable *pVar = &m_pEffect->m_pVariables[i]; - pVar->pEffect = m_pEffect; - - if( Cloning && pVar->pType->BelongsInConstantBuffer()) - { - // Convert pointer back to offset - // pVar->pCB refers to the old CB - pVar->Data.Offset = (UINT_PTR)pVar->Data.pGeneric - (UINT_PTR)pVar->pCB->pBackingStore; - } - - if (pVar->pCB) - { - VH( FixupCBPointer( &pVar->pCB ) ); - } - - if( !Cloning ) - { - // When creating the effect, MemberDataOffsetPlus4 is used, not pMemberData - if( pVar->MemberDataOffsetPlus4 ) - { - pVar->pMemberData = (SMemberDataPointer*)( (BYTE*)m_pEffect->m_pMemberDataBlocks + ( pVar->MemberDataOffsetPlus4 - 4 ) ); - } - } - else if (pVar->pMemberData) - { - // When cloning an effect, pMemberData points to valid data in the original effect - VH( FixupMemberDataPointer( &pVar->pMemberData ) ); - } - - if (pVar->pType->BelongsInConstantBuffer()) - { - // Convert from offsets to pointers - pVar->Data.pGeneric = pVar->pCB->pBackingStore + pVar->Data.Offset; - } - } - - // Fixup each CB's array of child variable pointers - for (i=0; im_CBCount; i++) - { - SConstantBuffer *pCB = &m_pEffect->m_pCBs[i]; - pCB->pEffect = m_pEffect; - - if (pCB->pVariables != NULL) - { - VH( FixupVariablePointer(&pCB->pVariables) ); - } - } - - // Move shaders - m_pOldShaders = m_pEffect->m_pShaderBlocks; - VHD( pHeap->MoveData((void**) &m_pEffect->m_pShaderBlocks, cbShaders), "Internal loading error: cannot move shader count." ); - - // Move interfaces, combining global interfaces and those that were created during shader initialization - m_pOldInterfaces = m_pEffect->m_pInterfaces; - m_OldInterfaceCount = m_pEffect->m_InterfaceCount; - VHD( pHeap->MoveEmptyDataBlock((void**) &m_pEffect->m_pInterfaces, cbInterfaces + cbBackgroundInterfaces), "Internal loading error: cannot move shader." ); - memcpy( m_pEffect->m_pInterfaces, m_pOldInterfaces, cbInterfaces ); - for( i=0; i < m_BackgroundInterfaces.GetSize(); i++ ) - { - D3DXASSERT( m_BackgroundInterfaces[i] != NULL ); - BYTE* pDst = (BYTE*)m_pEffect->m_pInterfaces + ( m_pEffect->m_InterfaceCount * sizeof(SInterface) ); - memcpy( pDst, m_BackgroundInterfaces[i], sizeof(SInterface) ); - m_pEffect->m_InterfaceCount++; - } - - m_pOldShaderResources = m_pEffect->m_pShaderResources; - VHD( pHeap->MoveData((void**) &m_pEffect->m_pShaderResources, cbShaderResources), "Internal loading error: cannot move SRVs." ); - - m_pOldUnorderedAccessViews = m_pEffect->m_pUnorderedAccessViews; - VHD( pHeap->MoveData((void**) &m_pEffect->m_pUnorderedAccessViews, cbUnorderedAccessViews), "Internal loading error: cannot move UAVS." ); - - m_pOldRenderTargetViews = m_pEffect->m_pRenderTargetViews; - VHD( pHeap->MoveData((void**) &m_pEffect->m_pRenderTargetViews, cbRenderTargetViews), "Internal loading error: cannot move RTVs." ); - - m_pOldDepthStencilViews = m_pEffect->m_pDepthStencilViews; - VHD( pHeap->MoveData((void**) &m_pEffect->m_pDepthStencilViews, cbDepthStencilViews), "Internal loading error: cannot move DSVs." ); - - m_pOldDS = m_pEffect->m_pDepthStencilBlocks; - VHD( pHeap->MoveData((void**) &m_pEffect->m_pDepthStencilBlocks, cbDS), "Internal loading error: cannot move depth-stencil state blocks." ); - VH( ReallocateBlockAssignments(m_pEffect->m_pDepthStencilBlocks, m_pEffect->m_DepthStencilBlockCount, Cloning ? m_pOldDS : NULL) ); - - m_pOldAB = m_pEffect->m_pBlendBlocks; - VHD( pHeap->MoveData((void**) &m_pEffect->m_pBlendBlocks, cbAB), "Internal loading error: cannot move blend state blocks." ); - VH( ReallocateBlockAssignments(m_pEffect->m_pBlendBlocks, m_pEffect->m_BlendBlockCount, Cloning ? m_pOldAB : NULL) ); - - m_pOldRS = m_pEffect->m_pRasterizerBlocks; - VHD( pHeap->MoveData((void**) &m_pEffect->m_pRasterizerBlocks, cbRS), "Internal loading error: cannot move rasterizer state blocks." ); - VH( ReallocateBlockAssignments(m_pEffect->m_pRasterizerBlocks, m_pEffect->m_RasterizerBlockCount, Cloning ? m_pOldRS : NULL) ); - - m_pOldSamplers = m_pEffect->m_pSamplerBlocks; - VHD( pHeap->MoveData((void**) &m_pEffect->m_pSamplerBlocks, cbSamplers), "Internal loading error: cannot move samplers." ); - VH( ReallocateBlockAssignments(m_pEffect->m_pSamplerBlocks, m_pEffect->m_SamplerBlockCount, Cloning ? m_pOldSamplers : NULL) ); - - // Fixup sampler backing stores - for (i=0; im_SamplerBlockCount; ++i) - { - VH( FixupShaderResourcePointer(&m_pEffect->m_pSamplerBlocks[i].BackingStore.pTexture) ); - } - - // Fixup each interface's class instance variable pointer - for (i=0; im_InterfaceCount; i++) - { - SInterface *pInterface = &m_pEffect->m_pInterfaces[i]; - - if (pInterface->pClassInstance != NULL) - { - VH( FixupVariablePointer( (SGlobalVariable**)&pInterface->pClassInstance ) ); - } - } - - // Fixup pointers for non-numeric variables - for (i=0; im_VariableCount; i++) - { - SGlobalVariable *pVar = &m_pEffect->m_pVariables[i]; - - if (pVar->pType->IsShader()) - { - VH( FixupShaderPointer(&pVar->Data.pShader) ); - } - else if (pVar->pType->IsShaderResource()) - { - VH( FixupShaderResourcePointer(&pVar->Data.pShaderResource) ); - } - else if (pVar->pType->IsUnorderedAccessView()) - { - VH( FixupUnorderedAccessViewPointer(&pVar->Data.pUnorderedAccessView) ); - } - else if (pVar->pType->IsInterface()) - { - VH( FixupInterfacePointer(&pVar->Data.pInterface, false) ); - } - else if (pVar->pType->IsObjectType(EOT_String)) - { - if( !m_pEffect->IsOptimized() ) - { - VH( FixupStringPointer(&pVar->Data.pString) ); - } - } - else if (pVar->pType->IsStateBlockObject()) - { - switch(pVar->pType->ObjectType) - { - case EOT_DepthStencil: - VH( FixupDSPointer((SDepthStencilBlock**) &pVar->Data.pBlock) ); - break; - case EOT_Blend: - VH( FixupABPointer((SBlendBlock**) &pVar->Data.pBlock) ); - break; - case EOT_Rasterizer: - VH( FixupRSPointer((SRasterizerBlock**) &pVar->Data.pBlock) ); - break; - case EOT_Sampler: - VB(pVar->pType->IsSampler()); - VH( FixupSamplerPointer((SSamplerBlock**) &pVar->Data.pBlock) ); - break; - default: - VH( E_FAIL ); - } - } - else if (pVar->pType->VarType == EVT_Struct || pVar->pType->VarType == EVT_Numeric) - { - if( pVar->pType->IsClassInstance() ) - { - // do nothing - } - else - { - // do nothing - } - } - else if (pVar->pType->IsRenderTargetView()) - { - VH( FixupRenderTargetViewPointer(&pVar->Data.pRenderTargetView) ); - } - else if (pVar->pType->IsDepthStencilView()) - { - VH( FixupDepthStencilViewPointer(&pVar->Data.pDepthStencilView) ); - } - else - { - VHD( E_FAIL, "Internal loading error: Invalid variable type." ); - } - } - - // Fixup created members - for (i = 0; i < m_pEffect->m_pMemberInterfaces.GetSize(); ++ i) - { - SMember* pMember = m_pEffect->m_pMemberInterfaces[i]; - SGlobalVariable** ppTopLevelEntity = (SGlobalVariable**)&pMember->pTopLevelEntity; - VN( *ppTopLevelEntity ); - - // This might be set to false later, for supporting textures inside classes - const bool bGlobalMemberDataBlock = true; - - if( Cloning ) - { - if( pMember->pType->BelongsInConstantBuffer() ) - { - D3DXASSERT( pMember->Data.pGeneric == NULL || (*ppTopLevelEntity)->pEffect->m_Heap.IsInHeap(pMember->Data.pGeneric) ); - pMember->Data.Offset = (UINT)( (BYTE*)pMember->Data.pGeneric - (BYTE*)(*ppTopLevelEntity)->pCB->pBackingStore ); - } - if( bGlobalMemberDataBlock && pMember->pMemberData ) - { - pMember->MemberDataOffsetPlus4 = (UINT)( (BYTE*)pMember->pMemberData - (BYTE*)(*ppTopLevelEntity)->pEffect->m_pMemberDataBlocks ) + 4; - } - } - - VH( FixupVariablePointer( ppTopLevelEntity ) ); - - if (pMember->pType->BelongsInConstantBuffer()) - { - // Convert from offsets to pointers - pMember->Data.pGeneric = (*ppTopLevelEntity)->pCB->pBackingStore + pMember->Data.Offset; - } - if( bGlobalMemberDataBlock && pMember->MemberDataOffsetPlus4 ) - { - pMember->pMemberData = (SMemberDataPointer*)( (BYTE*)m_pEffect->m_pMemberDataBlocks + ( pMember->MemberDataOffsetPlus4 - 4 ) ); - } - } - - // Fixup shader data - VH( ReallocateShaderBlocks() ); - - // Move groups, techniques, and passes - m_pOldGroups = m_pEffect->m_pGroups; - VHD( pHeap->MoveData((void**) &m_pEffect->m_pGroups, cbGroups), "Internal loading error: cannot move groups." ); - for (i=0; im_GroupCount; i++) - { - SGroup *pGroup = &m_pEffect->m_pGroups[i]; - UINT cbTechniques; - - cbTechniques = pGroup->TechniqueCount * sizeof(STechnique); - VHD( pHeap->MoveData((void**) &pGroup->pTechniques, cbTechniques), "Internal loading error: cannot move techniques." ); - - for (j=0; jTechniqueCount; j++) - { - STechnique *pTech = &pGroup->pTechniques[j]; - UINT cbPass; - UINT iPass; - - cbPass = pTech->PassCount * sizeof(SPassBlock); - SPassBlock* pOldPasses = Cloning ? pTech->pPasses : NULL; - VHD( pHeap->MoveData((void**) &pTech->pPasses, cbPass), "Internal loading error: cannot move passes." ); - - for (iPass = 0; iPass < pTech->PassCount; ++ iPass) - { - pTech->pPasses[iPass].pEffect = m_pEffect; - - // Fixup backing store pointers in passes - VH( FixupABPointer((SBlendBlock**) &pTech->pPasses[iPass].BackingStore.pBlendBlock) ); - VH( FixupDSPointer((SDepthStencilBlock**) &pTech->pPasses[iPass].BackingStore.pDepthStencilBlock) ); - VH( FixupRSPointer((SRasterizerBlock**) &pTech->pPasses[iPass].BackingStore.pRasterizerBlock) ); - VH( FixupShaderPointer((SShaderBlock**) &pTech->pPasses[iPass].BackingStore.pVertexShaderBlock) ); - VH( FixupShaderPointer((SShaderBlock**) &pTech->pPasses[iPass].BackingStore.pPixelShaderBlock) ); - VH( FixupShaderPointer((SShaderBlock**) &pTech->pPasses[iPass].BackingStore.pGeometryShaderBlock) ); - VH( FixupShaderPointer((SShaderBlock**) &pTech->pPasses[iPass].BackingStore.pHullShaderBlock) ); - VH( FixupShaderPointer((SShaderBlock**) &pTech->pPasses[iPass].BackingStore.pDomainShaderBlock) ); - VH( FixupShaderPointer((SShaderBlock**) &pTech->pPasses[iPass].BackingStore.pComputeShaderBlock) ); - VH( FixupDepthStencilViewPointer( &pTech->pPasses[iPass].BackingStore.pDepthStencilView) ); - for (UINT iRT = 0; iRT < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; iRT++) - { - VH( FixupRenderTargetViewPointer( &pTech->pPasses[iPass].BackingStore.pRenderTargetViews[iRT] ) ); - } - } - - VH( ReallocateBlockAssignments( pTech->pPasses, pTech->PassCount, pOldPasses ) ); - } - } - VH( FixupGroupPointer( &m_pEffect->m_pNullGroup ) ); - - // Move anonymous shader variables - VHD( pHeap->MoveData((void **) &m_pEffect->m_pAnonymousShaders, cbAnonymousShaders), "Internal loading error: cannot move anonymous shaders." ); - for (i=0; im_AnonymousShaderCount; ++i) - { - SAnonymousShader *pAnonymousShader = m_pEffect->m_pAnonymousShaders + i; - VH( FixupShaderPointer((SShaderBlock**) &pAnonymousShader->pShaderBlock) ); - } - - VBD( pHeap->GetSize() == m_EffectMemory, "Loading error: effect size mismatch." ); - -lExit: - return hr; -} - -} diff --git a/sample/d3d11/Effects11/EffectLoad.h b/sample/d3d11/Effects11/EffectLoad.h deleted file mode 100644 index c5f5dc1..0000000 --- a/sample/d3d11/Effects11/EffectLoad.h +++ /dev/null @@ -1,149 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: EffectLoad.h -// Content: D3DX11 Effects header for the FX file loader -// A CEffectLoader is created at load time to facilitate loading -// -////////////////////////////////////////////////////////////////////////////// - -#pragma once - -namespace D3DX11Effects -{ - -// Ranges are used for dependency checking during load - -enum ERanges -{ - ER_CBuffer = 0, - ER_Texture, // Includes TBuffers - ER_Sampler, - ER_UnorderedAccessView, - ER_Interfaces, - ER_Count // This should be the size of the enum -}; - -struct SRange -{ - UINT start; - UINT last; - CEffectVector vResources; // should be (last - start) in length, resource type depends on the range type -}; - -// Used during load to validate assignments -D3D10_SHADER_VARIABLE_TYPE GetSimpleParameterTypeFromObjectType(EObjectType ObjectType); - - -// A class to facilitate loading an Effect. This class is a friend of CEffect. -class CEffectLoader -{ - friend HRESULT CEffect::CloneEffect(UINT Flags, ID3DX11Effect** ppClonedEffect ); - -protected: - // Load-time allocations that eventually get moved happen out of the TempHeap. This heap will grow as needed - CDataBlockStore m_BulkHeap; - - BYTE *m_pData; - SBinaryHeader5 *m_pHeader; - DWORD m_Version; - - CEffect *m_pEffect; - CEffectReflection *m_pReflection; - - D3DX11Core::CMemoryStream m_msStructured; - D3DX11Core::CMemoryStream m_msUnstructured; - - // used to avoid repeated hash buffer allocations in LoadTypeAndAddToPool - CEffectVector m_HashBuffer; - - UINT m_dwBufferSize; // Size of data buffer in bytes - - // List of SInterface blocks created to back class instances bound to shaders - CEffectVector m_BackgroundInterfaces; - - // Pointers to pre-reallocation data - SGlobalVariable *m_pOldVars; - SShaderBlock *m_pOldShaders; - SDepthStencilBlock *m_pOldDS; - SBlendBlock *m_pOldAB; - SRasterizerBlock *m_pOldRS; - SConstantBuffer *m_pOldCBs; - SSamplerBlock *m_pOldSamplers; - UINT m_OldInterfaceCount; - SInterface *m_pOldInterfaces; - SShaderResource *m_pOldShaderResources; - SUnorderedAccessView *m_pOldUnorderedAccessViews; - SRenderTargetView *m_pOldRenderTargetViews; - SDepthStencilView *m_pOldDepthStencilViews; - SString *m_pOldStrings; - SMemberDataPointer *m_pOldMemberDataBlocks; - CEffectVectorOwner *m_pvOldMemberInterfaces; - SGroup *m_pOldGroups; - - UINT m_EffectMemory; // Effect private heap - UINT m_ReflectionMemory; // Reflection private heap - - // Loader helpers - HRESULT LoadCBs(); - HRESULT LoadNumericVariable(SConstantBuffer *pParentCB); - HRESULT LoadObjectVariables(); - HRESULT LoadInterfaceVariables(); - - HRESULT LoadTypeAndAddToPool(SType **ppType, UINT dwOffset); - HRESULT LoadStringAndAddToPool(__out_ecount_full(1) char **ppString, UINT dwOffset); - HRESULT LoadAssignments( UINT Assignments, SAssignment **pAssignments, BYTE *pBackingStore, UINT *pRTVAssignments, UINT *pFinalAssignments ); - HRESULT LoadGroups(); - HRESULT LoadTechnique( STechnique* pTech ); - HRESULT LoadAnnotations(UINT *pcAnnotations, SAnnotation **ppAnnotations); - - HRESULT ExecuteConstantAssignment(SBinaryConstant *pConstant, void *pLHS, D3D10_SHADER_VARIABLE_TYPE lhsType); - UINT UnpackData(BYTE *pDestData, BYTE *pSrcData, UINT PackedDataSize, SType *pType, UINT *pBytesRead); - - // Build shader blocks - HRESULT ConvertRangesToBindings(SShaderBlock *pShaderBlock, CEffectVector *pvRanges ); - HRESULT GrabShaderData(SShaderBlock *pShaderBlock); - HRESULT BuildShaderBlock(SShaderBlock *pShaderBlock); - - // Memory compactors - HRESULT InitializeReflectionDataAndMoveStrings( UINT KnownSize = 0 ); - HRESULT ReallocateReflectionData( bool Cloning = false ); - HRESULT ReallocateEffectData( bool Cloning = false ); - HRESULT ReallocateShaderBlocks(); - template HRESULT ReallocateBlockAssignments(T* &pBlocks, UINT cBlocks, T* pOldBlocks = NULL); - HRESULT ReallocateAnnotationData(UINT cAnnotations, SAnnotation **ppAnnotations); - - HRESULT CalculateAnnotationSize(UINT cAnnotations, SAnnotation *pAnnotations); - UINT CalculateShaderBlockSize(); - template UINT CalculateBlockAssignmentSize(T* &pBlocks, UINT cBlocks); - - HRESULT FixupCBPointer(SConstantBuffer **ppCB); - HRESULT FixupShaderPointer(SShaderBlock **ppShaderBlock); - HRESULT FixupDSPointer(SDepthStencilBlock **ppDSBlock); - HRESULT FixupABPointer(SBlendBlock **ppABBlock); - HRESULT FixupRSPointer(SRasterizerBlock **ppRSBlock); - HRESULT FixupInterfacePointer(SInterface **ppInterface, bool CheckBackgroundInterfaces); - HRESULT FixupShaderResourcePointer(SShaderResource **ppResource); - HRESULT FixupUnorderedAccessViewPointer(SUnorderedAccessView **ppResource); - HRESULT FixupRenderTargetViewPointer(SRenderTargetView **ppRenderTargetView); - HRESULT FixupDepthStencilViewPointer(SDepthStencilView **ppDepthStencilView); - HRESULT FixupSamplerPointer(SSamplerBlock **ppSampler); - HRESULT FixupVariablePointer(SGlobalVariable **ppVar); - HRESULT FixupStringPointer(SString **ppString); - HRESULT FixupMemberDataPointer(SMemberDataPointer **ppMemberData); - HRESULT FixupGroupPointer(SGroup **ppGroup); - - // Methods to retrieve data from the unstructured block - // (these do not make copies; they simply return pointers into the block) - HRESULT GetStringAndAddToReflection(UINT offset, __out_ecount_full(1) char **ppPointer); // Returns a string from the file string block, updates m_EffectMemory - HRESULT GetUnstructuredDataBlock(UINT offset, UINT *pdwSize, void **ppData); - // This function makes a copy of the array of SInterfaceParameters, but not a copy of the strings - HRESULT GetInterfaceParametersAndAddToReflection( UINT InterfaceCount, UINT offset, __out_ecount_full(1) SShaderBlock::SInterfaceParameter **ppInterfaces ); -public: - - HRESULT LoadEffect(CEffect *pEffect, CONST void *pEffectBuffer, UINT cbEffectBuffer); -}; - - -} \ No newline at end of file diff --git a/sample/d3d11/Effects11/EffectNonRuntime.cpp b/sample/d3d11/Effects11/EffectNonRuntime.cpp deleted file mode 100644 index 5484d50..0000000 --- a/sample/d3d11/Effects11/EffectNonRuntime.cpp +++ /dev/null @@ -1,2963 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: EffectNonRuntime.cpp -// Content: D3DX11 Effect low-frequency utility functions -// These functions are not intended to be called regularly. They -// are typically called when creating, cloning, or optimizing an -// Effect, or reflecting a variable. -// -////////////////////////////////////////////////////////////////////////////// - -#include "pchfx.h" -#include "SOParser.h" - -namespace D3DX11Effects -{ - -extern SUnorderedAccessView g_NullUnorderedAccessView; - -SBaseBlock::SBaseBlock() -: BlockType(EBT_Invalid) -, IsUserManaged(FALSE) -, AssignmentCount(0) -, pAssignments(NULL) -{ - -} - -SPassBlock::SPassBlock() -{ - pName = NULL; - AnnotationCount = 0; - pAnnotations = NULL; - InitiallyValid = TRUE; - HasDependencies = FALSE; - ZeroMemory(&BackingStore, sizeof(BackingStore)); -} - -STechnique::STechnique() -: pName(NULL) -, PassCount(0) -, pPasses(NULL) -, AnnotationCount(0) -, pAnnotations(NULL) -, InitiallyValid( TRUE ) -, HasDependencies( FALSE ) -{ -} - -SGroup::SGroup() -: pName(NULL) -, TechniqueCount(0) -, pTechniques(NULL) -, AnnotationCount(0) -, pAnnotations(NULL) -, InitiallyValid( TRUE ) -, HasDependencies( FALSE ) -{ -} - -SDepthStencilBlock::SDepthStencilBlock() -{ - pDSObject = NULL; - ZeroMemory(&BackingStore, sizeof(BackingStore)); - IsValid = TRUE; - - BackingStore.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP; - BackingStore.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS; - BackingStore.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; - BackingStore.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP; - BackingStore.DepthEnable = TRUE; - BackingStore.DepthFunc = D3D11_COMPARISON_LESS; - BackingStore.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL; - BackingStore.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP; - BackingStore.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS; - BackingStore.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; - BackingStore.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP; - BackingStore.StencilEnable = FALSE; - BackingStore.StencilReadMask = D3D11_DEFAULT_STENCIL_READ_MASK; - BackingStore.StencilWriteMask = D3D11_DEFAULT_STENCIL_WRITE_MASK; -} - -SBlendBlock::SBlendBlock() -{ - pBlendObject = NULL; - ZeroMemory(&BackingStore, sizeof(BackingStore)); - IsValid = TRUE; - - BackingStore.AlphaToCoverageEnable = FALSE; - BackingStore.IndependentBlendEnable = TRUE; - for( UINT i=0; i < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; i++ ) - { - BackingStore.RenderTarget[i].SrcBlend = D3D11_BLEND_ONE; - BackingStore.RenderTarget[i].DestBlend = D3D11_BLEND_ZERO; - BackingStore.RenderTarget[i].BlendOp = D3D11_BLEND_OP_ADD; - BackingStore.RenderTarget[i].SrcBlendAlpha = D3D11_BLEND_ONE; - BackingStore.RenderTarget[i].DestBlendAlpha = D3D11_BLEND_ZERO; - BackingStore.RenderTarget[i].BlendOpAlpha = D3D11_BLEND_OP_ADD; - memset(&BackingStore.RenderTarget[i].RenderTargetWriteMask, 0x0F, sizeof(BackingStore.RenderTarget[i].RenderTargetWriteMask)); - } -} - -SRasterizerBlock::SRasterizerBlock() -{ - pRasterizerObject = NULL; - ZeroMemory(&BackingStore, sizeof(BackingStore)); - IsValid = TRUE; - - BackingStore.AntialiasedLineEnable = FALSE; - BackingStore.CullMode = D3D11_CULL_BACK; - BackingStore.DepthBias = D3D11_DEFAULT_DEPTH_BIAS; - BackingStore.DepthBiasClamp = D3D11_DEFAULT_DEPTH_BIAS_CLAMP; - BackingStore.FillMode = D3D11_FILL_SOLID; - BackingStore.FrontCounterClockwise = FALSE; - BackingStore.MultisampleEnable = FALSE; - BackingStore.ScissorEnable = FALSE; - BackingStore.SlopeScaledDepthBias = D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; - BackingStore.DepthClipEnable = TRUE; -} - -SSamplerBlock::SSamplerBlock() -{ - pD3DObject = NULL; - ZeroMemory(&BackingStore, sizeof(BackingStore)); - - BackingStore.SamplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; - BackingStore.SamplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; - BackingStore.SamplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; - BackingStore.SamplerDesc.BorderColor[3] = D3D11_DEFAULT_BORDER_COLOR_COMPONENT; - BackingStore.SamplerDesc.BorderColor[2] = D3D11_DEFAULT_BORDER_COLOR_COMPONENT; - BackingStore.SamplerDesc.BorderColor[1] = D3D11_DEFAULT_BORDER_COLOR_COMPONENT; - BackingStore.SamplerDesc.BorderColor[0] = D3D11_DEFAULT_BORDER_COLOR_COMPONENT; - BackingStore.SamplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; - BackingStore.SamplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; - BackingStore.SamplerDesc.MaxAnisotropy = (UINT32) D3D11_DEFAULT_MAX_ANISOTROPY; - BackingStore.SamplerDesc.MipLODBias = D3D11_DEFAULT_MIP_LOD_BIAS; - BackingStore.SamplerDesc.MinLOD = -FLT_MAX; - BackingStore.SamplerDesc.MaxLOD = FLT_MAX; -} - -SShaderBlock::SShaderBlock(SD3DShaderVTable *pVirtualTable) -{ - IsValid = TRUE; - - pVT = pVirtualTable; - - pReflectionData = NULL; - - pD3DObject = NULL; - - CBDepCount = 0; - pCBDeps = NULL; - - SampDepCount = 0; - pSampDeps = NULL; - - InterfaceDepCount = 0; - pInterfaceDeps = NULL; - - ResourceDepCount = 0; - pResourceDeps = NULL; - - UAVDepCount = 0; - pUAVDeps = NULL; - - TBufferDepCount = 0; - ppTbufDeps = NULL; - - pInputSignatureBlob = NULL; -} - -HRESULT SShaderBlock::OnDeviceBind() -{ - HRESULT hr = S_OK; - UINT i, j; - - // Update all CB deps - for (i=0; ipD3DObject; - - if ( !pCBDeps[i].ppD3DObjects[j] ) - VH( E_FAIL ); - } - } - - // Update all sampler deps - for (i=0; ipD3DObject; - - if ( !pSampDeps[i].ppD3DObjects[j] ) - VH( E_FAIL ); - } - } - - // Texture deps will be set automatically on use since they are initially marked dirty. - -lExit: - return hr; -} - -extern SD3DShaderVTable g_vtVS; -extern SD3DShaderVTable g_vtGS; -extern SD3DShaderVTable g_vtPS; -extern SD3DShaderVTable g_vtHS; -extern SD3DShaderVTable g_vtDS; -extern SD3DShaderVTable g_vtCS; - -EObjectType SShaderBlock::GetShaderType() -{ - if (&g_vtVS == pVT) - return EOT_VertexShader; - else if (&g_vtGS == pVT) - return EOT_GeometryShader; - else if (&g_vtPS == pVT) - return EOT_PixelShader; - else if (&g_vtHS == pVT) - return EOT_HullShader5; - else if (&g_vtDS == pVT) - return EOT_DomainShader5; - else if (&g_vtCS == pVT) - return EOT_ComputeShader5; - - return EOT_Invalid; -} - -#define _SET_BIT(bytes, x) (bytes[x / 8] |= (1 << (x % 8))) - -HRESULT SShaderBlock::ComputeStateBlockMask(D3DX11_STATE_BLOCK_MASK *pStateBlockMask) -{ - HRESULT hr = S_OK; - UINT i, j; - BYTE *pSamplerMask = NULL, *pShaderResourceMask = NULL, *pConstantBufferMask = NULL, *pUnorderedAccessViewMask = NULL, *pInterfaceMask = NULL; - - switch (GetShaderType()) - { - case EOT_VertexShader: - case EOT_VertexShader5: - pStateBlockMask->VS = 1; - pSamplerMask = pStateBlockMask->VSSamplers; - pShaderResourceMask = pStateBlockMask->VSShaderResources; - pConstantBufferMask = pStateBlockMask->VSConstantBuffers; - pInterfaceMask = pStateBlockMask->VSInterfaces; - pUnorderedAccessViewMask = NULL; - break; - - case EOT_GeometryShader: - case EOT_GeometryShader5: - pStateBlockMask->GS = 1; - pSamplerMask = pStateBlockMask->GSSamplers; - pShaderResourceMask = pStateBlockMask->GSShaderResources; - pConstantBufferMask = pStateBlockMask->GSConstantBuffers; - pInterfaceMask = pStateBlockMask->GSInterfaces; - pUnorderedAccessViewMask = NULL; - break; - - case EOT_PixelShader: - case EOT_PixelShader5: - pStateBlockMask->PS = 1; - pSamplerMask = pStateBlockMask->PSSamplers; - pShaderResourceMask = pStateBlockMask->PSShaderResources; - pConstantBufferMask = pStateBlockMask->PSConstantBuffers; - pInterfaceMask = pStateBlockMask->PSInterfaces; - pUnorderedAccessViewMask = &pStateBlockMask->PSUnorderedAccessViews; - break; - - case EOT_HullShader5: - pStateBlockMask->HS = 1; - pSamplerMask = pStateBlockMask->HSSamplers; - pShaderResourceMask = pStateBlockMask->HSShaderResources; - pConstantBufferMask = pStateBlockMask->HSConstantBuffers; - pInterfaceMask = pStateBlockMask->HSInterfaces; - pUnorderedAccessViewMask = NULL; - break; - - case EOT_DomainShader5: - pStateBlockMask->DS = 1; - pSamplerMask = pStateBlockMask->DSSamplers; - pShaderResourceMask = pStateBlockMask->DSShaderResources; - pConstantBufferMask = pStateBlockMask->DSConstantBuffers; - pInterfaceMask = pStateBlockMask->DSInterfaces; - pUnorderedAccessViewMask = NULL; - break; - - case EOT_ComputeShader5: - pStateBlockMask->CS = 1; - pSamplerMask = pStateBlockMask->CSSamplers; - pShaderResourceMask = pStateBlockMask->CSShaderResources; - pConstantBufferMask = pStateBlockMask->CSConstantBuffers; - pInterfaceMask = pStateBlockMask->CSInterfaces; - pUnorderedAccessViewMask = &pStateBlockMask->CSUnorderedAccessViews; - break; - - default: - D3DXASSERT(0); - VH(E_FAIL); - } - - for (i = 0; i < SampDepCount; ++ i) - { - for (j = 0; j < pSampDeps[i].Count; ++ j) - { - _SET_BIT(pSamplerMask, (pSampDeps[i].StartIndex + j)); - } - } - - for (i = 0; i < InterfaceDepCount; ++ i) - { - for (j = 0; j < pInterfaceDeps[i].Count; ++ j) - { - _SET_BIT(pInterfaceMask, (pInterfaceDeps[i].StartIndex + j)); - } - } - - for (i = 0; i < ResourceDepCount; ++ i) - { - for (j = 0; j < pResourceDeps[i].Count; ++ j) - { - _SET_BIT(pShaderResourceMask, (pResourceDeps[i].StartIndex + j)); - } - } - - for (i = 0; i < CBDepCount; ++ i) - { - for (j = 0; j < pCBDeps[i].Count; ++ j) - { - _SET_BIT(pConstantBufferMask, (pCBDeps[i].StartIndex + j)); - } - } - - for (i = 0; i < UAVDepCount; ++ i) - { - D3DXASSERT( pUnorderedAccessViewMask != NULL ); - for (j = 0; j < pUAVDeps[i].Count; ++ j) - { - if( pUAVDeps[i].ppFXPointers[j] != &g_NullUnorderedAccessView ) - _SET_BIT(pUnorderedAccessViewMask, (pUAVDeps[i].StartIndex + j)); - } - } - -lExit: - return hr; -} - -#undef _SET_BIT - -HRESULT SShaderBlock::GetShaderDesc(D3DX11_EFFECT_SHADER_DESC *pDesc, BOOL IsInline) -{ - HRESULT hr = S_OK; - - ZeroMemory(pDesc, sizeof(*pDesc)); - - pDesc->pInputSignature = pInputSignatureBlob ? (const BYTE*)pInputSignatureBlob->GetBufferPointer() : NULL; - pDesc->IsInline = IsInline; - - if (NULL != pReflectionData) - { - // initialize these only if present; otherwise leave them NULL or 0 - pDesc->pBytecode = pReflectionData->pBytecode; - pDesc->BytecodeLength = pReflectionData->BytecodeLength; - for( UINT iDecl=0; iDecl < D3D11_SO_STREAM_COUNT; ++iDecl ) - { - pDesc->SODecls[iDecl] = pReflectionData->pStreamOutDecls[iDecl]; - } - pDesc->RasterizedStream = pReflectionData->RasterizedStream; - - // get # of input & output signature entries - D3DXASSERT( pReflectionData->pReflection != NULL ); - - D3D11_SHADER_DESC ShaderDesc; - pReflectionData->pReflection->GetDesc( &ShaderDesc ); - pDesc->NumInputSignatureEntries = ShaderDesc.InputParameters; - pDesc->NumOutputSignatureEntries = ShaderDesc.OutputParameters; - pDesc->NumPatchConstantSignatureEntries = ShaderDesc.PatchConstantParameters; - } -lExit: - return hr; -} - -HRESULT SShaderBlock::GetVertexShader(ID3D11VertexShader **ppVS) -{ - if (EOT_VertexShader == GetShaderType() || - EOT_VertexShader5 == GetShaderType()) - { - *ppVS = (ID3D11VertexShader *) pD3DObject; - SAFE_ADDREF(*ppVS); - return S_OK; - } - else - { - *ppVS = NULL; - DPF(0, "ID3DX11EffectShaderVariable::GetVertexShader: This shader variable is not a vertex shader"); - return D3DERR_INVALIDCALL; - } -} - -HRESULT SShaderBlock::GetGeometryShader(ID3D11GeometryShader **ppGS) -{ - if (EOT_GeometryShader == GetShaderType() || - EOT_GeometryShaderSO == GetShaderType() || - EOT_GeometryShader5 == GetShaderType()) - { - *ppGS = (ID3D11GeometryShader *) pD3DObject; - SAFE_ADDREF(*ppGS); - return S_OK; - } - else - { - *ppGS = NULL; - DPF(0, "ID3DX11EffectShaderVariable::GetGeometryShader: This shader variable is not a geometry shader"); - return D3DERR_INVALIDCALL; - } -} - -HRESULT SShaderBlock::GetPixelShader(ID3D11PixelShader **ppPS) -{ - if (EOT_PixelShader == GetShaderType() || - EOT_PixelShader5 == GetShaderType()) - { - *ppPS = (ID3D11PixelShader *) pD3DObject; - SAFE_ADDREF(*ppPS); - return S_OK; - } - else - { - *ppPS = NULL; - DPF(0, "ID3DX11EffectShaderVariable::GetPixelShader: This shader variable is not a pixel shader"); - return D3DERR_INVALIDCALL; - } -} - -HRESULT SShaderBlock::GetHullShader(ID3D11HullShader **ppHS) -{ - if (EOT_HullShader5 == GetShaderType()) - { - *ppHS = (ID3D11HullShader *) pD3DObject; - SAFE_ADDREF(*ppHS); - return S_OK; - } - else - { - *ppHS = NULL; - DPF(0, "ID3DX11EffectShaderVariable::GetHullShader: This shader variable is not a hull shader"); - return D3DERR_INVALIDCALL; - } -} - -HRESULT SShaderBlock::GetDomainShader(ID3D11DomainShader **ppDS) -{ - if (EOT_DomainShader5 == GetShaderType()) - { - *ppDS = (ID3D11DomainShader *) pD3DObject; - SAFE_ADDREF(*ppDS); - return S_OK; - } - else - { - *ppDS = NULL; - DPF(0, "ID3DX11EffectShaderVariable::GetDomainShader: This shader variable is not a domain shader"); - return D3DERR_INVALIDCALL; - } -} - -HRESULT SShaderBlock::GetComputeShader(ID3D11ComputeShader **ppCS) -{ - if (EOT_ComputeShader5 == GetShaderType()) - { - *ppCS = (ID3D11ComputeShader *) pD3DObject; - SAFE_ADDREF(*ppCS); - return S_OK; - } - else - { - *ppCS = NULL; - DPF(0, "ID3DX11EffectShaderVariable::GetComputeShader: This shader variable is not a compute shader"); - return D3DERR_INVALIDCALL; - } -} - -HRESULT SShaderBlock::GetSignatureElementDesc(ESigType SigType, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName; - switch( SigType ) - { - case ST_Input: -#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF") - pFuncName = "ID3DX11EffectShaderVariable::GetInputSignatureElementDesc"; - break; - case ST_Output: -#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF") - pFuncName = "ID3DX11EffectShaderVariable::GetOutputSignatureElementDesc"; - break; - case ST_PatchConstant: -#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF") - pFuncName = "ID3DX11EffectShaderVariable::GetPatchConstantSignatureElementDesc"; - break; - default: - D3DXASSERT( false ); - return E_FAIL; - }; - - if (NULL != pReflectionData) - { - // get # of signature entries - D3DXASSERT( pReflectionData->pReflection != NULL ); - - D3D11_SHADER_DESC ShaderDesc; - VH( pReflectionData->pReflection->GetDesc( &ShaderDesc ) ); - - D3D11_SIGNATURE_PARAMETER_DESC ParamDesc; - if( pReflectionData->IsNullGS ) - { - switch( SigType ) - { - case ST_Input: - // The input signature for a null-GS is the output signature of the previous VS - SigType = ST_Output; - break; - case ST_PatchConstant: - // GeometryShaders cannot have patch constant signatures - return E_INVALIDARG; - }; - } - - switch( SigType ) - { - case ST_Input: - if( Element >= ShaderDesc.InputParameters ) - { - DPF( 0, "%s: Invalid Element index (%d) specified", pFuncName, Element ); - VH( E_INVALIDARG ); - } - VH( pReflectionData->pReflection->GetInputParameterDesc( Element, &ParamDesc ) ); - break; - case ST_Output: - if( Element >= ShaderDesc.OutputParameters ) - { - DPF( 0, "%s: Invalid Element index (%d) specified", pFuncName, Element ); - VH( E_INVALIDARG ); - } - VH( pReflectionData->pReflection->GetOutputParameterDesc( Element, &ParamDesc ) ); - break; - case ST_PatchConstant: - if( Element >= ShaderDesc.PatchConstantParameters ) - { - DPF( 0, "%s: Invalid Element index (%d) specified", pFuncName, Element ); - VH( E_INVALIDARG ); - } - VH( pReflectionData->pReflection->GetPatchConstantParameterDesc( Element, &ParamDesc ) ); - break; - }; - - pDesc->SemanticName = ParamDesc.SemanticName; - pDesc->SystemValueType = ParamDesc.SystemValueType; - - // Pixel shaders need to be special-cased as they don't technically output SVs - if( pDesc->SystemValueType == D3D10_NAME_UNDEFINED && GetShaderType() == EOT_PixelShader ) - { - if( _stricmp(pDesc->SemanticName, "SV_TARGET") == 0 ) - { - pDesc->SystemValueType = D3D10_NAME_TARGET; - } - else if( _stricmp(pDesc->SemanticName, "SV_DEPTH") == 0 ) - { - pDesc->SystemValueType = D3D10_NAME_DEPTH; - } - else if( _stricmp(pDesc->SemanticName, "SV_COVERAGE") == 0 ) - { - pDesc->SystemValueType = D3D10_NAME_COVERAGE; - } - } - - pDesc->SemanticIndex = ParamDesc.SemanticIndex; - pDesc->Register = ParamDesc.Register; - pDesc->Mask = ParamDesc.Mask; - pDesc->ComponentType = ParamDesc.ComponentType; - pDesc->ReadWriteMask = ParamDesc.ReadWriteMask; - } - else - { - DPF(0, "%s: Cannot get signatures; shader bytecode is not present", pFuncName); - VH( D3DERR_INVALIDCALL ); - } - -lExit: - return hr; -} - -SString::SString() -{ - pString = NULL; -} - -SRenderTargetView::SRenderTargetView() -{ - pRenderTargetView = NULL; -} - -SDepthStencilView::SDepthStencilView() -{ - pDepthStencilView = NULL; -} - -void * GetBlockByIndex(EVarType VarType, EObjectType ObjectType, void *pBaseBlock, UINT Index) -{ - switch( VarType ) - { - case EVT_Interface: - return (SInterface *)pBaseBlock + Index; - case EVT_Object: - switch (ObjectType) - { - case EOT_Blend: - return (SBlendBlock *)pBaseBlock + Index; - case EOT_DepthStencil: - return (SDepthStencilBlock *)pBaseBlock + Index; - case EOT_Rasterizer: - return (SRasterizerBlock *)pBaseBlock + Index; - case EOT_PixelShader: - case EOT_PixelShader5: - case EOT_GeometryShader: - case EOT_GeometryShaderSO: - case EOT_GeometryShader5: - case EOT_VertexShader: - case EOT_VertexShader5: - case EOT_HullShader5: - case EOT_DomainShader5: - case EOT_ComputeShader5: - return (SShaderBlock *)pBaseBlock + Index; - case EOT_String: - return (SString *)pBaseBlock + Index; - case EOT_Sampler: - return (SSamplerBlock *)pBaseBlock + Index; - case EOT_Buffer: - case EOT_Texture: - case EOT_Texture1D: - case EOT_Texture1DArray: - case EOT_Texture2D: - case EOT_Texture2DArray: - case EOT_Texture2DMS: - case EOT_Texture2DMSArray: - case EOT_Texture3D: - case EOT_TextureCube: - case EOT_TextureCubeArray: - case EOT_ByteAddressBuffer: - case EOT_StructuredBuffer: - return (SShaderResource *)pBaseBlock + Index; - case EOT_DepthStencilView: - return (SDepthStencilView *)pBaseBlock + Index; - case EOT_RenderTargetView: - return (SRenderTargetView *)pBaseBlock + Index; - case EOT_RWTexture1D: - case EOT_RWTexture1DArray: - case EOT_RWTexture2D: - case EOT_RWTexture2DArray: - case EOT_RWTexture3D: - case EOT_RWBuffer: - case EOT_RWByteAddressBuffer: - case EOT_RWStructuredBuffer: - case EOT_RWStructuredBufferAlloc: - case EOT_RWStructuredBufferConsume: - case EOT_AppendStructuredBuffer: - case EOT_ConsumeStructuredBuffer: - return (SUnorderedAccessView *)pBaseBlock + Index; - default: - D3DXASSERT(0); - return NULL; - } - default: - D3DXASSERT(0); - return NULL; - } -} - -CEffect::CEffect( UINT Flags ) -{ - m_RefCount = 1; - - m_pVariables = NULL; - m_pAnonymousShaders = NULL; - m_pGroups = NULL; - m_pNullGroup = NULL; - m_pShaderBlocks = NULL; - m_pDepthStencilBlocks = NULL; - m_pBlendBlocks = NULL; - m_pRasterizerBlocks = NULL; - m_pSamplerBlocks = NULL; - m_pCBs = NULL; - m_pStrings = NULL; - m_pMemberDataBlocks = NULL; - m_pInterfaces = NULL; - m_pShaderResources = NULL; - m_pUnorderedAccessViews = NULL; - m_pRenderTargetViews = NULL; - m_pDepthStencilViews = NULL; - m_pDevice = NULL; - m_pClassLinkage = NULL; - m_pContext = NULL; - - m_VariableCount = 0; - m_AnonymousShaderCount = 0; - m_ShaderBlockCount = 0; - m_DepthStencilBlockCount = 0; - m_BlendBlockCount = 0; - m_RasterizerBlockCount = 0; - m_SamplerBlockCount = 0; - m_StringCount = 0; - m_MemberDataCount = 0; - m_InterfaceCount = 0; - m_ShaderResourceCount = 0; - m_UnorderedAccessViewCount = 0; - m_RenderTargetViewCount = 0; - m_DepthStencilViewCount = 0; - m_CBCount = 0; - m_TechniqueCount = 0; - m_GroupCount = 0; - - m_pReflection = NULL; - m_LocalTimer = 1; - m_Flags = Flags; - m_FXLIndex = 0; - - m_pTypePool = NULL; - m_pStringPool = NULL; - m_pPooledHeap = NULL; - m_pOptimizedTypeHeap = NULL; -} - -void CEffect::ReleaseShaderRefection() -{ - for( UINT i = 0; i < m_ShaderBlockCount; ++ i ) - { - SAFE_RELEASE( m_pShaderBlocks[i].pInputSignatureBlob ); - if( m_pShaderBlocks[i].pReflectionData ) - { - SAFE_RELEASE( m_pShaderBlocks[i].pReflectionData->pReflection ); - } - } -} - -CEffect::~CEffect() -{ - ID3D11InfoQueue *pInfoQueue = NULL; - - // Mute debug spew - if (m_pDevice) - m_pDevice->QueryInterface(__uuidof(ID3D11InfoQueue), (void**) &pInfoQueue); - - if (pInfoQueue) - { - D3D11_INFO_QUEUE_FILTER filter; - D3D11_MESSAGE_CATEGORY messageCategory = D3D11_MESSAGE_CATEGORY_STATE_SETTING; - ZeroMemory(&filter, sizeof(filter)); - - filter.DenyList.NumCategories = 1; - filter.DenyList.pCategoryList = &messageCategory; - pInfoQueue->PushStorageFilter(&filter); - } - - UINT i; - - if( NULL != m_pDevice ) - { - // if m_pDevice == NULL, then we failed LoadEffect(), which means ReleaseShaderReflection was already called. - - // Release the shader reflection info, as it was not created on the private heap - // This must be called before we delete m_pReflection - ReleaseShaderRefection(); - } - - SAFE_DELETE( m_pReflection ); - SAFE_DELETE( m_pTypePool ); - SAFE_DELETE( m_pStringPool ); - SAFE_DELETE( m_pPooledHeap ); - SAFE_DELETE( m_pOptimizedTypeHeap ); - - // this code assumes the effect has been loaded & relocated, - // so check for that before freeing the resources - - if (NULL != m_pDevice) - { - // Keep the following in line with AddRefAllForCloning - - D3DXASSERT(NULL == m_pRasterizerBlocks || m_Heap.IsInHeap(m_pRasterizerBlocks)); - for (i = 0; i < m_RasterizerBlockCount; ++ i) - { - SAFE_RELEASE(m_pRasterizerBlocks[i].pRasterizerObject); - } - - D3DXASSERT(NULL == m_pBlendBlocks || m_Heap.IsInHeap(m_pBlendBlocks)); - for (i = 0; i < m_BlendBlockCount; ++ i) - { - SAFE_RELEASE(m_pBlendBlocks[i].pBlendObject); - } - - D3DXASSERT(NULL == m_pDepthStencilBlocks || m_Heap.IsInHeap(m_pDepthStencilBlocks)); - for (i = 0; i < m_DepthStencilBlockCount; ++ i) - { - SAFE_RELEASE(m_pDepthStencilBlocks[i].pDSObject); - } - - D3DXASSERT(NULL == m_pSamplerBlocks || m_Heap.IsInHeap(m_pSamplerBlocks)); - for (i = 0; i < m_SamplerBlockCount; ++ i) - { - SAFE_RELEASE(m_pSamplerBlocks[i].pD3DObject); - } - - D3DXASSERT(NULL == m_pShaderResources || m_Heap.IsInHeap(m_pShaderResources)); - for (i = 0; i < m_ShaderResourceCount; ++ i) - { - SAFE_RELEASE(m_pShaderResources[i].pShaderResource); - } - - D3DXASSERT(NULL == m_pUnorderedAccessViews || m_Heap.IsInHeap(m_pUnorderedAccessViews)); - for (i = 0; i < m_UnorderedAccessViewCount; ++ i) - { - SAFE_RELEASE(m_pUnorderedAccessViews[i].pUnorderedAccessView); - } - - D3DXASSERT(NULL == m_pRenderTargetViews || m_Heap.IsInHeap(m_pRenderTargetViews)); - for (i = 0; i < m_RenderTargetViewCount; ++ i) - { - SAFE_RELEASE(m_pRenderTargetViews[i].pRenderTargetView); - } - - D3DXASSERT(NULL == m_pDepthStencilViews || m_Heap.IsInHeap(m_pDepthStencilViews)); - for (i = 0; i < m_DepthStencilViewCount; ++ i) - { - SAFE_RELEASE(m_pDepthStencilViews[i].pDepthStencilView); - } - - D3DXASSERT(NULL == m_pMemberDataBlocks || m_Heap.IsInHeap(m_pMemberDataBlocks)); - for (i = 0; i < m_MemberDataCount; ++ i) - { - switch( m_pMemberDataBlocks[i].Type ) - { - case MDT_ClassInstance: - SAFE_RELEASE(m_pMemberDataBlocks[i].Data.pD3DClassInstance); - break; - case MDT_BlendState: - SAFE_RELEASE(m_pMemberDataBlocks[i].Data.pD3DEffectsManagedBlendState); - break; - case MDT_DepthStencilState: - SAFE_RELEASE(m_pMemberDataBlocks[i].Data.pD3DEffectsManagedDepthStencilState); - break; - case MDT_RasterizerState: - SAFE_RELEASE(m_pMemberDataBlocks[i].Data.pD3DEffectsManagedRasterizerState); - break; - case MDT_SamplerState: - SAFE_RELEASE(m_pMemberDataBlocks[i].Data.pD3DEffectsManagedSamplerState); - break; - case MDT_Buffer: - SAFE_RELEASE(m_pMemberDataBlocks[i].Data.pD3DEffectsManagedConstantBuffer); - break; - case MDT_ShaderResourceView: - SAFE_RELEASE(m_pMemberDataBlocks[i].Data.pD3DEffectsManagedTextureBuffer); - break; - default: - D3DXASSERT( false ); - } - } - - D3DXASSERT(NULL == m_pCBs || m_Heap.IsInHeap(m_pCBs)); - for (i = 0; i < m_CBCount; ++ i) - { - SAFE_RELEASE(m_pCBs[i].TBuffer.pShaderResource); - SAFE_RELEASE(m_pCBs[i].pD3DObject); - } - - D3DXASSERT(NULL == m_pShaderBlocks || m_Heap.IsInHeap(m_pShaderBlocks)); - for (i = 0; i < m_ShaderBlockCount; ++ i) - { - SAFE_RELEASE(m_pShaderBlocks[i].pD3DObject); - } - - SAFE_RELEASE( m_pDevice ); - } - SAFE_RELEASE( m_pClassLinkage ); - D3DXASSERT( m_pContext == NULL ); - - // Restore debug spew - if (pInfoQueue) - { - pInfoQueue->PopStorageFilter(); - SAFE_RELEASE(pInfoQueue); - } -} - -// AddRef all D3D object when cloning -void CEffect::AddRefAllForCloning( CEffect* pEffectSource ) -{ - UINT i; - - // Keep the following in line with ~CEffect - - D3DXASSERT( m_pDevice != NULL ); - - for( UINT i = 0; i < m_ShaderBlockCount; ++ i ) - { - SAFE_ADDREF( m_pShaderBlocks[i].pInputSignatureBlob ); - if( m_pShaderBlocks[i].pReflectionData ) - { - SAFE_ADDREF( m_pShaderBlocks[i].pReflectionData->pReflection ); - } - } - - D3DXASSERT(NULL == m_pRasterizerBlocks || pEffectSource->m_Heap.IsInHeap(m_pRasterizerBlocks)); - for (i = 0; i < m_RasterizerBlockCount; ++ i) - { - SAFE_ADDREF(m_pRasterizerBlocks[i].pRasterizerObject); - } - - D3DXASSERT(NULL == m_pBlendBlocks || pEffectSource->m_Heap.IsInHeap(m_pBlendBlocks)); - for (i = 0; i < m_BlendBlockCount; ++ i) - { - SAFE_ADDREF(m_pBlendBlocks[i].pBlendObject); - } - - D3DXASSERT(NULL == m_pDepthStencilBlocks || pEffectSource->m_Heap.IsInHeap(m_pDepthStencilBlocks)); - for (i = 0; i < m_DepthStencilBlockCount; ++ i) - { - SAFE_ADDREF(m_pDepthStencilBlocks[i].pDSObject); - } - - D3DXASSERT(NULL == m_pSamplerBlocks || pEffectSource->m_Heap.IsInHeap(m_pSamplerBlocks)); - for (i = 0; i < m_SamplerBlockCount; ++ i) - { - SAFE_ADDREF(m_pSamplerBlocks[i].pD3DObject); - } - - D3DXASSERT(NULL == m_pShaderResources || pEffectSource->m_Heap.IsInHeap(m_pShaderResources)); - for (i = 0; i < m_ShaderResourceCount; ++ i) - { - SAFE_ADDREF(m_pShaderResources[i].pShaderResource); - } - - D3DXASSERT(NULL == m_pUnorderedAccessViews || pEffectSource->m_Heap.IsInHeap(m_pUnorderedAccessViews)); - for (i = 0; i < m_UnorderedAccessViewCount; ++ i) - { - SAFE_ADDREF(m_pUnorderedAccessViews[i].pUnorderedAccessView); - } - - D3DXASSERT(NULL == m_pRenderTargetViews || pEffectSource->m_Heap.IsInHeap(m_pRenderTargetViews)); - for (i = 0; i < m_RenderTargetViewCount; ++ i) - { - SAFE_ADDREF(m_pRenderTargetViews[i].pRenderTargetView); - } - - D3DXASSERT(NULL == m_pDepthStencilViews || pEffectSource->m_Heap.IsInHeap(m_pDepthStencilViews)); - for (i = 0; i < m_DepthStencilViewCount; ++ i) - { - SAFE_ADDREF(m_pDepthStencilViews[i].pDepthStencilView); - } - - D3DXASSERT(NULL == m_pMemberDataBlocks || pEffectSource->m_Heap.IsInHeap(m_pMemberDataBlocks)); - for (i = 0; i < m_MemberDataCount; ++ i) - { - switch( m_pMemberDataBlocks[i].Type ) - { - case MDT_ClassInstance: - SAFE_ADDREF(m_pMemberDataBlocks[i].Data.pD3DClassInstance); - break; - case MDT_BlendState: - SAFE_ADDREF(m_pMemberDataBlocks[i].Data.pD3DEffectsManagedBlendState); - break; - case MDT_DepthStencilState: - SAFE_ADDREF(m_pMemberDataBlocks[i].Data.pD3DEffectsManagedDepthStencilState); - break; - case MDT_RasterizerState: - SAFE_ADDREF(m_pMemberDataBlocks[i].Data.pD3DEffectsManagedRasterizerState); - break; - case MDT_SamplerState: - SAFE_ADDREF(m_pMemberDataBlocks[i].Data.pD3DEffectsManagedSamplerState); - break; - case MDT_Buffer: - SAFE_ADDREF(m_pMemberDataBlocks[i].Data.pD3DEffectsManagedConstantBuffer); - break; - case MDT_ShaderResourceView: - SAFE_ADDREF(m_pMemberDataBlocks[i].Data.pD3DEffectsManagedTextureBuffer); - break; - default: - D3DXASSERT( false ); - } - } - - // There's no need to AddRef CBs, since they are recreated - D3DXASSERT(NULL == m_pCBs || pEffectSource->m_Heap.IsInHeap(m_pCBs)); - for (i = 0; i < m_CBCount; ++ i) - { - SAFE_ADDREF(m_pCBs[i].TBuffer.pShaderResource); - SAFE_ADDREF(m_pCBs[i].pD3DObject); - } - - D3DXASSERT(NULL == m_pShaderBlocks || pEffectSource->m_Heap.IsInHeap(m_pShaderBlocks)); - for (i = 0; i < m_ShaderBlockCount; ++ i) - { - SAFE_ADDREF(m_pShaderBlocks[i].pD3DObject); - } - - SAFE_ADDREF( m_pDevice ); - - SAFE_ADDREF( m_pClassLinkage ); - D3DXASSERT( m_pContext == NULL ); -} - -HRESULT CEffect::QueryInterface(REFIID iid, LPVOID *ppv) -{ - HRESULT hr = S_OK; - - if(NULL == ppv) - { - DPF(0, "ID3DX11Effect::QueryInterface: NULL parameter"); - hr = E_INVALIDARG; - goto EXIT; - } - - *ppv = NULL; - if(IsEqualIID(iid, IID_IUnknown)) - { - *ppv = (IUnknown *) this; - } - else if(IsEqualIID(iid, IID_ID3DX11Effect)) - { - *ppv = (ID3DX11Effect *) this; - } - else - { - return E_NOINTERFACE; - } - - AddRef(); - -EXIT: - return hr; -} - -ULONG CEffect::AddRef() -{ - return ++ m_RefCount; -} - -ULONG CEffect::Release() -{ - if (-- m_RefCount > 0) - { - return m_RefCount; - } - else - { - delete this; - } - - return 0; -} - -// In all shaders, replace pOldBufferBlock with pNewBuffer, if pOldBufferBlock is a dependency -void CEffect::ReplaceCBReference(SConstantBuffer *pOldBufferBlock, ID3D11Buffer *pNewBuffer) -{ - UINT iShaderBlock; - - for (iShaderBlock=0; iShaderBlockGetFeatureLevel() >= D3D_FEATURE_LEVEL_11_0 ); - - pDevice->AddRef(); - SAFE_RELEASE(m_pDevice); - m_pDevice = pDevice; - VH( m_pDevice->CreateClassLinkage( &m_pClassLinkage ) ); - - // Create all constant buffers - SConstantBuffer *pCB = m_pCBs; - SConstantBuffer *pCBLast = m_pCBs + m_CBCount; - for(; pCB != pCBLast; pCB++) - { - SAFE_RELEASE(pCB->pD3DObject); - SAFE_RELEASE(pCB->TBuffer.pShaderResource); - - // This is a CBuffer - if (pCB->Size > 0) - { - if (pCB->IsTBuffer) - { - D3D11_BUFFER_DESC bufDesc; - // size is always register aligned - bufDesc.ByteWidth = pCB->Size; - bufDesc.Usage = D3D11_USAGE_DEFAULT; - bufDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE; - bufDesc.CPUAccessFlags = 0; - bufDesc.MiscFlags = 0; - - VH( pDevice->CreateBuffer( &bufDesc, NULL, &pCB->pD3DObject) ); - - D3D11_SHADER_RESOURCE_VIEW_DESC viewDesc; - viewDesc.Format = DXGI_FORMAT_R32G32B32A32_UINT; - viewDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER; - viewDesc.Buffer.ElementOffset = 0; - viewDesc.Buffer.ElementWidth = pCB->Size / SType::c_RegisterSize; - - VH( pDevice->CreateShaderResourceView( pCB->pD3DObject, &viewDesc, &pCB->TBuffer.pShaderResource) ); - } - else - { - D3D11_BUFFER_DESC bufDesc; - // size is always register aligned - bufDesc.ByteWidth = pCB->Size; - bufDesc.Usage = D3D11_USAGE_DEFAULT; - bufDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; - bufDesc.CPUAccessFlags = 0; - bufDesc.MiscFlags = 0; - - VH( pDevice->CreateBuffer( &bufDesc, NULL, &pCB->pD3DObject) ); - pCB->TBuffer.pShaderResource = NULL; - } - - pCB->IsDirty = TRUE; - } - else - { - pCB->IsDirty = FALSE; - } - } - - // Create all RasterizerStates - SRasterizerBlock *pRB = m_pRasterizerBlocks; - SRasterizerBlock *pRBLast = m_pRasterizerBlocks + m_RasterizerBlockCount; - for(; pRB != pRBLast; pRB++) - { - SAFE_RELEASE(pRB->pRasterizerObject); - if( SUCCEEDED( m_pDevice->CreateRasterizerState( &pRB->BackingStore, &pRB->pRasterizerObject) ) ) - pRB->IsValid = TRUE; - else - pRB->IsValid = FALSE; - } - - // Create all DepthStencils - SDepthStencilBlock *pDS = m_pDepthStencilBlocks; - SDepthStencilBlock *pDSLast = m_pDepthStencilBlocks + m_DepthStencilBlockCount; - for(; pDS != pDSLast; pDS++) - { - SAFE_RELEASE(pDS->pDSObject); - if( SUCCEEDED( m_pDevice->CreateDepthStencilState( &pDS->BackingStore, &pDS->pDSObject) ) ) - pDS->IsValid = TRUE; - else - pDS->IsValid = FALSE; - } - - // Create all BlendStates - SBlendBlock *pBlend = m_pBlendBlocks; - SBlendBlock *pBlendLast = m_pBlendBlocks + m_BlendBlockCount; - for(; pBlend != pBlendLast; pBlend++) - { - SAFE_RELEASE(pBlend->pBlendObject); - if( SUCCEEDED( m_pDevice->CreateBlendState( &pBlend->BackingStore, &pBlend->pBlendObject ) ) ) - pBlend->IsValid = TRUE; - else - pBlend->IsValid = FALSE; - } - - // Create all Samplers - SSamplerBlock *pSampler = m_pSamplerBlocks; - SSamplerBlock *pSamplerLast = m_pSamplerBlocks + m_SamplerBlockCount; - for(; pSampler != pSamplerLast; pSampler++) - { - SAFE_RELEASE(pSampler->pD3DObject); - - VH( m_pDevice->CreateSamplerState( &pSampler->BackingStore.SamplerDesc, &pSampler->pD3DObject) ); - } - - // Create all shaders - ID3D11ClassLinkage* neededClassLinkage = featureLevelGE11 ? m_pClassLinkage : NULL; - SShaderBlock *pShader = m_pShaderBlocks; - SShaderBlock *pShaderLast = m_pShaderBlocks + m_ShaderBlockCount; - for(; pShader != pShaderLast; pShader++) - { - SAFE_RELEASE(pShader->pD3DObject); - - if (NULL == pShader->pReflectionData) - { - // NULL shader. It's one of these: - // PixelShader ps; - // or - // SetPixelShader( NULL ); - continue; - } - - if (pShader->pReflectionData->pStreamOutDecls[0] || pShader->pReflectionData->pStreamOutDecls[1] || - pShader->pReflectionData->pStreamOutDecls[2] || pShader->pReflectionData->pStreamOutDecls[3] ) - { - // This is a geometry shader, process it's data - CSOParser soParser; - VH( soParser.Parse(pShader->pReflectionData->pStreamOutDecls) ); - UINT strides[4]; - soParser.GetStrides( strides ); - hr = m_pDevice->CreateGeometryShaderWithStreamOutput((UINT*) pShader->pReflectionData->pBytecode, - pShader->pReflectionData->BytecodeLength, - soParser.GetDeclArray(), - soParser.GetDeclCount(), - strides, - featureLevelGE11 ? 4 : 1, - pShader->pReflectionData->RasterizedStream, - neededClassLinkage, - (ID3D11GeometryShader**) &pShader->pD3DObject); - if (FAILED(hr)) - { - DPF(1, "ID3DX11Effect::Load - failed to create GeometryShader with StreamOutput decl: \"%s\"", soParser.GetErrorString() ); - pShader->IsValid = FALSE; - hr = S_OK; - } - } - else - { - // This is a regular shader - if( pShader->pReflectionData->RasterizedStream == D3D11_SO_NO_RASTERIZED_STREAM ) - pShader->IsValid = FALSE; - else - { - if( FAILED( (m_pDevice->*(pShader->pVT->pCreateShader))( (UINT *) pShader->pReflectionData->pBytecode, pShader->pReflectionData->BytecodeLength, neededClassLinkage, &pShader->pD3DObject) ) ) - { - DPF(1, "ID3DX11Effect::Load - failed to create shader" ); - pShader->IsValid = FALSE; - } - } - } - - // Update all dependency pointers - VH( pShader->OnDeviceBind() ); - } - - // Initialize the member data pointers for all variables - UINT CurMemberData = 0; - for (UINT i = 0; i < m_VariableCount; ++ i) - { - if( m_pVariables[i].pMemberData ) - { - if( m_pVariables[i].pType->IsClassInstance() ) - { - for (UINT j = 0; j < max(m_pVariables[i].pType->Elements,1); ++j) - { - D3DXASSERT( CurMemberData < m_MemberDataCount ); - ID3D11ClassInstance** ppCI = &(m_pVariables[i].pMemberData + j)->Data.pD3DClassInstance; - (m_pVariables[i].pMemberData + j)->Type = MDT_ClassInstance; - (m_pVariables[i].pMemberData + j)->Data.pD3DClassInstance = NULL; - if( m_pVariables[i].pType->TotalSize > 0 ) - { - // ignore failures in GetClassInstance; - m_pClassLinkage->GetClassInstance( m_pVariables[i].pName, j, ppCI ); - } - else - { - // The HLSL compiler optimizes out zero-sized classes, so we have to create class instances from scratch - if( FAILED( m_pClassLinkage->CreateClassInstance( m_pVariables[i].pType->pTypeName, 0, 0, 0, 0, ppCI ) ) ) - { - DPF(0, "ID3DX11Effect: Out of memory while trying to create new class instance interface"); - } - } - CurMemberData++; - } - } - else if( m_pVariables[i].pType->IsStateBlockObject() ) - { - for (UINT j = 0; j < max(m_pVariables[i].pType->Elements,1); ++j) - { - switch( m_pVariables[i].pType->ObjectType ) - { - case EOT_Blend: - (m_pVariables[i].pMemberData + j)->Type = MDT_BlendState; - (m_pVariables[i].pMemberData + j)->Data.pD3DEffectsManagedBlendState = NULL; - break; - case EOT_Rasterizer: - (m_pVariables[i].pMemberData + j)->Type = MDT_RasterizerState; - (m_pVariables[i].pMemberData + j)->Data.pD3DEffectsManagedRasterizerState = NULL; - break; - case EOT_DepthStencil: - (m_pVariables[i].pMemberData + j)->Type = MDT_DepthStencilState; - (m_pVariables[i].pMemberData + j)->Data.pD3DEffectsManagedDepthStencilState = NULL; - break; - case EOT_Sampler: - (m_pVariables[i].pMemberData + j)->Type = MDT_SamplerState; - (m_pVariables[i].pMemberData + j)->Data.pD3DEffectsManagedSamplerState = NULL; - break; - default: - VB( FALSE ); - } - CurMemberData++; - } - } - else - { - VB( FALSE ); - } - } - } - for(pCB = m_pCBs; pCB != pCBLast; pCB++) - { - (pCB->pMemberData + 0)->Type = MDT_Buffer; - (pCB->pMemberData + 0)->Data.pD3DEffectsManagedConstantBuffer = NULL; - CurMemberData++; - (pCB->pMemberData + 1)->Type = MDT_ShaderResourceView; - (pCB->pMemberData + 1)->Data.pD3DEffectsManagedTextureBuffer = NULL; - CurMemberData++; - } - - - // Determine which techniques and passes are known to be invalid - for( UINT iGroup=0; iGroup < m_GroupCount; iGroup++ ) - { - SGroup* pGroup = &m_pGroups[iGroup]; - pGroup->InitiallyValid = TRUE; - - for( UINT iTech=0; iTech < pGroup->TechniqueCount; iTech++ ) - { - STechnique* pTechnique = &pGroup->pTechniques[iTech]; - pTechnique->InitiallyValid = TRUE; - - for( UINT iPass = 0; iPass < pTechnique->PassCount; iPass++ ) - { - SPassBlock* pPass = &pTechnique->pPasses[iPass]; - pPass->InitiallyValid = TRUE; - - if( pPass->BackingStore.pBlendBlock != NULL && !pPass->BackingStore.pBlendBlock->IsValid ) - pPass->InitiallyValid = FALSE; - if( pPass->BackingStore.pDepthStencilBlock != NULL && !pPass->BackingStore.pDepthStencilBlock->IsValid ) - pPass->InitiallyValid = FALSE; - if( pPass->BackingStore.pRasterizerBlock != NULL && !pPass->BackingStore.pRasterizerBlock->IsValid ) - pPass->InitiallyValid = FALSE; - if( pPass->BackingStore.pVertexShaderBlock != NULL && !pPass->BackingStore.pVertexShaderBlock->IsValid ) - pPass->InitiallyValid = FALSE; - if( pPass->BackingStore.pPixelShaderBlock != NULL && !pPass->BackingStore.pPixelShaderBlock->IsValid ) - pPass->InitiallyValid = FALSE; - if( pPass->BackingStore.pGeometryShaderBlock != NULL && !pPass->BackingStore.pGeometryShaderBlock->IsValid ) - pPass->InitiallyValid = FALSE; - if( pPass->BackingStore.pHullShaderBlock != NULL && !pPass->BackingStore.pHullShaderBlock->IsValid ) - pPass->InitiallyValid = FALSE; - if( pPass->BackingStore.pDomainShaderBlock != NULL && !pPass->BackingStore.pDomainShaderBlock->IsValid ) - pPass->InitiallyValid = FALSE; - if( pPass->BackingStore.pComputeShaderBlock != NULL && !pPass->BackingStore.pComputeShaderBlock->IsValid ) - pPass->InitiallyValid = FALSE; - - pTechnique->InitiallyValid &= pPass->InitiallyValid; - } - pGroup->InitiallyValid &= pTechnique->InitiallyValid; - } - } - -lExit: - return hr; -} - -// FindVariableByName, plus an understanding of literal indices -// This code handles A[i]. -// It does not handle anything else, like A.B, A[B[i]], A[B] -SVariable * CEffect::FindVariableByNameWithParsing(LPCSTR pName) -{ - SGlobalVariable *pVariable; - const UINT MAX_PARSABLE_NAME_LENGTH = 256; - char pScratchString[MAX_PARSABLE_NAME_LENGTH]; - - const char* pSource = pName; - char* pDest = pScratchString; - char* pEnd = pScratchString + MAX_PARSABLE_NAME_LENGTH; - - pVariable = NULL; - - while( *pSource != 0 ) - { - if( pDest == pEnd ) - { - pVariable = FindLocalVariableByName(pName); - if( pVariable == NULL ) - { - DPF( 0, "Name %s is too long to parse", &pName ); - } - return pVariable; - } - - if( *pSource == '[' ) - { - // parse previous variable name - *pDest = 0; - D3DXASSERT( pVariable == NULL ); - pVariable = FindLocalVariableByName(pScratchString); - if( pVariable == NULL ) - { - return NULL; - } - pDest = pScratchString; - } - else if( *pSource == ']' ) - { - // parse integer - *pDest = 0; - UINT index = atoi(pScratchString); - D3DXASSERT( pVariable != NULL ); - pVariable = (SGlobalVariable*)pVariable->GetElement(index); - if( pVariable && !pVariable->IsValid() ) - { - pVariable = NULL; - } - return pVariable; - } - else - { - // add character - *pDest = *pSource; - pDest++; - } - pSource++; - } - - if( pDest != pScratchString ) - { - // parse the variable name (there was no [i]) - *pDest = 0; - D3DXASSERT( pVariable == NULL ); - pVariable = FindLocalVariableByName(pScratchString); - } - - return pVariable; -} - -SGlobalVariable * CEffect::FindVariableByName(LPCSTR pName) -{ - SGlobalVariable *pVariable; - - pVariable = FindLocalVariableByName(pName); - - return pVariable; -} - -SGlobalVariable * CEffect::FindLocalVariableByName(LPCSTR pName) -{ - SGlobalVariable *pVariable, *pVariableEnd; - - pVariableEnd = m_pVariables + m_VariableCount; - for (pVariable = m_pVariables; pVariable != pVariableEnd; pVariable++) - { - if (strcmp( pVariable->pName, pName) == 0) - { - return pVariable; - } - } - - return NULL; -} - - -// -// Checks to see if two types are equivalent (either at runtime -// or during the type-pooling load process) -// -// Major assumption: if both types are structures, then their -// member types & names should already have been added to the pool, -// in which case their member type & name pointers should be equal. -// -// This is true because complex data types (structures) have all -// sub-types translated before the containing type is translated, -// which means that simple sub-types (numeric types) have already -// been pooled. -// -BOOL SType::IsEqual(SType *pOtherType) CONST -{ - if (VarType != pOtherType->VarType || Elements != pOtherType->Elements - || strcmp(pTypeName, pOtherType->pTypeName) != 0) - { - return FALSE; - } - - switch (VarType) - { - case EVT_Struct: - { - if (StructType.Members != pOtherType->StructType.Members) - { - return FALSE; - } - D3DXASSERT(StructType.pMembers != NULL && pOtherType->StructType.pMembers != NULL); - - UINT i; - for (i = 0; i < StructType.Members; ++ i) - { - // names for types must exist (not true for semantics) - D3DXASSERT(StructType.pMembers[i].pName != NULL && pOtherType->StructType.pMembers[i].pName != NULL); - - if (StructType.pMembers[i].pType != pOtherType->StructType.pMembers[i].pType || - StructType.pMembers[i].Data.Offset != pOtherType->StructType.pMembers[i].Data.Offset || - StructType.pMembers[i].pName != pOtherType->StructType.pMembers[i].pName || - StructType.pMembers[i].pSemantic != pOtherType->StructType.pMembers[i].pSemantic) - { - return FALSE; - } - } - } - break; - - case EVT_Object: - { - if (ObjectType != pOtherType->ObjectType) - { - return FALSE; - } - } - break; - - case EVT_Numeric: - { - if (NumericType.Rows != pOtherType->NumericType.Rows || - NumericType.Columns != pOtherType->NumericType.Columns || - NumericType.ScalarType != pOtherType->NumericType.ScalarType || - NumericType.NumericLayout != pOtherType->NumericType.NumericLayout || - NumericType.IsColumnMajor != pOtherType->NumericType.IsColumnMajor || - NumericType.IsPackedArray != pOtherType->NumericType.IsPackedArray) - { - return FALSE; - } - } - break; - - case EVT_Interface: - { - // VarType and pTypeName handled above - } - break; - - default: - { - D3DXASSERT(0); - return FALSE; - } - break; - } - - D3DXASSERT(TotalSize == pOtherType->TotalSize && Stride == pOtherType->Stride && PackedSize == pOtherType->PackedSize); - - return TRUE; -} - -UINT SType::GetTotalUnpackedSize(BOOL IsSingleElement) CONST -{ - if (VarType == EVT_Object) - { - return 0; - } - else if (VarType == EVT_Interface) - { - return 0; - } - else if (Elements > 0 && IsSingleElement) - { - D3DXASSERT( ( TotalSize == 0 && Stride == 0 ) || - ( (TotalSize > (Stride * (Elements - 1))) && (TotalSize <= (Stride * Elements)) ) ); - return TotalSize - Stride * (Elements - 1); - } - else - { - return TotalSize; - } -} - -UINT SType::GetTotalPackedSize(BOOL IsSingleElement) CONST -{ - if (Elements > 0 && IsSingleElement) - { - D3DXASSERT(PackedSize % Elements == 0); - return PackedSize / Elements; - } - else - { - return PackedSize; - } -} - -SConstantBuffer *CEffect::FindCB(LPCSTR pName) -{ - UINT i; - - for (i=0; iFindValueWithHash(ptrMapping, ptrMapping.Hash(), &iter) ); - *ppType = (SType *) iter.GetData().pNew; - -lExit: - return hr; -} - -// Replace *ppString with the corresponding value in pMappingTable -// pMappingTable table describes how to map old string pointers to new string pointers -static HRESULT RemapString(__in char **ppString, CPointerMappingTable *pMappingTable) -{ - HRESULT hr = S_OK; - - SPointerMapping ptrMapping; - CPointerMappingTable::CIterator iter; - ptrMapping.pOld = *ppString; - VH( pMappingTable->FindValueWithHash(ptrMapping, ptrMapping.Hash(), &iter) ); - *ppString = (char *) iter.GetData().pNew; - -lExit: - return hr; -} - -// Used in cloning, copy m_pMemberInterfaces from pEffectSource to this -HRESULT CEffect::CopyMemberInterfaces( CEffect* pEffectSource ) -{ - HRESULT hr = S_OK; - UINT i; // after a failure, this holds the failing index - - UINT Members = pEffectSource->m_pMemberInterfaces.GetSize(); - m_pMemberInterfaces.AddRange(Members); - for( i=0; i < Members; i++ ) - { - SMember* pOldMember = pEffectSource->m_pMemberInterfaces[i]; - if( pOldMember == NULL ) - { - // During Optimization, m_pMemberInterfaces[i] was set to NULL because it was an annotation - m_pMemberInterfaces[i] = NULL; - continue; - } - - SMember *pNewMember; - D3DXASSERT( pOldMember->pTopLevelEntity != NULL ); - - if (NULL == (pNewMember = CreateNewMember((SType*)pOldMember->pType, FALSE))) - { - DPF(0, "ID3DX11Effect: Out of memory while trying to create new member variable interface"); - VN( pNewMember ); - } - - pNewMember->pType = pOldMember->pType; - pNewMember->pName = pOldMember->pName; - pNewMember->pSemantic = pOldMember->pSemantic; - pNewMember->Data.pGeneric = pOldMember->Data.pGeneric; - pNewMember->IsSingleElement = pOldMember->IsSingleElement; - pNewMember->pTopLevelEntity = pOldMember->pTopLevelEntity; - pNewMember->pMemberData = pOldMember->pMemberData; - - m_pMemberInterfaces[i] = pNewMember; - } - -lExit: - if( FAILED(hr) ) - { - D3DXASSERT( i < Members ); - ZeroMemory( &m_pMemberInterfaces[i], sizeof(SMember) * ( Members - i ) ); - } - return hr; -} - -// Used in cloning, copy the string pool from pEffectSource to this and build mappingTable -// for use in RemapString -HRESULT CEffect::CopyStringPool( CEffect* pEffectSource, CPointerMappingTable& mappingTable ) -{ - HRESULT hr = S_OK; - D3DXASSERT( m_pPooledHeap != NULL ); - VN( m_pStringPool = NEW CEffect::CStringHashTable ); - m_pStringPool->SetPrivateHeap(m_pPooledHeap); - VH( m_pStringPool->AutoGrow() ); - - CStringHashTable::CIterator stringIter; - - // move strings over, build mapping table - for (pEffectSource->m_pStringPool->GetFirstEntry(&stringIter); !pEffectSource->m_pStringPool->PastEnd(&stringIter); pEffectSource->m_pStringPool->GetNextEntry(&stringIter)) - { - SPointerMapping ptrMapping; - char *pString; - - const char* pOldString = stringIter.GetData(); - ptrMapping.pOld = (void*)pOldString; - UINT len = (UINT)strlen(pOldString); - UINT hash = ptrMapping.Hash(); - VN( pString = new(*m_pPooledHeap) char[len + 1] ); - ptrMapping.pNew = (void*)pString; - memcpy(ptrMapping.pNew, ptrMapping.pOld, len + 1); - VH( m_pStringPool->AddValueWithHash(pString, hash) ); - - VH( mappingTable.AddValueWithHash(ptrMapping, hash) ); - } - - // Uncomment to print string mapping - /* - CPointerMappingTable::CIterator mapIter; - for (mappingTable.GetFirstEntry(&mapIter); !mappingTable.PastEnd(&mapIter); mappingTable.GetNextEntry(&mapIter)) - { - SPointerMapping ptrMapping = mapIter.GetData(); - DPF(0, "string: 0x%x : 0x%x %s", (UINT_PTR)ptrMapping.pOld, (UINT_PTR)ptrMapping.pNew, (char*)ptrMapping.pNew ); - }*/ - -lExit: - return hr; -} - -// Used in cloning, copy the unoptimized type pool from pEffectSource to this and build mappingTableTypes -// for use in RemapType. mappingTableStrings is the mapping table previously filled when copying strings. -HRESULT CEffect::CopyTypePool( CEffect* pEffectSource, CPointerMappingTable& mappingTableTypes, CPointerMappingTable& mappingTableStrings ) -{ - HRESULT hr = S_OK; - D3DXASSERT( m_pPooledHeap != NULL ); - VN( m_pTypePool = NEW CEffect::CTypeHashTable ); - m_pTypePool->SetPrivateHeap(m_pPooledHeap); - VH( m_pTypePool->AutoGrow() ); - - CTypeHashTable::CIterator typeIter; - CPointerMappingTable::CIterator mapIter; - - // first pass: move types over, build mapping table - for (pEffectSource->m_pTypePool->GetFirstEntry(&typeIter); !pEffectSource->m_pTypePool->PastEnd(&typeIter); pEffectSource->m_pTypePool->GetNextEntry(&typeIter)) - { - SPointerMapping ptrMapping; - SType *pType; - - ptrMapping.pOld = typeIter.GetData(); - UINT hash = ptrMapping.Hash(); - VN( (ptrMapping.pNew) = new(*m_pPooledHeap) SType ); - memcpy(ptrMapping.pNew, ptrMapping.pOld, sizeof(SType)); - - pType = (SType *) ptrMapping.pNew; - - // if this is a struct, move its members to the newly allocated space - if (EVT_Struct == pType->VarType) - { - SVariable* pOldMembers = pType->StructType.pMembers; - VN( pType->StructType.pMembers = new(*m_pPooledHeap) SVariable[pType->StructType.Members] ); - memcpy(pType->StructType.pMembers, pOldMembers, pType->StructType.Members * sizeof(SVariable)); - } - - VH( m_pTypePool->AddValueWithHash(pType, hash) ); - VH( mappingTableTypes.AddValueWithHash(ptrMapping, hash) ); - } - - // second pass: fixup structure member & name pointers - for (mappingTableTypes.GetFirstEntry(&mapIter); !mappingTableTypes.PastEnd(&mapIter); mappingTableTypes.GetNextEntry(&mapIter)) - { - SPointerMapping ptrMapping = mapIter.GetData(); - - // Uncomment to print type mapping - //DPF(0, "type: 0x%x : 0x%x", (UINT_PTR)ptrMapping.pOld, (UINT_PTR)ptrMapping.pNew ); - - SType *pType = (SType *) ptrMapping.pNew; - - if( pType->pTypeName ) - { - VH( RemapString(&pType->pTypeName, &mappingTableStrings) ); - } - - // if this is a struct, fix up its members' pointers - if (EVT_Struct == pType->VarType) - { - for (UINT i = 0; i < pType->StructType.Members; ++ i) - { - VH( RemapType((SType**)&pType->StructType.pMembers[i].pType, &mappingTableTypes) ); - if( pType->StructType.pMembers[i].pName ) - { - VH( RemapString(&pType->StructType.pMembers[i].pName, &mappingTableStrings) ); - } - if( pType->StructType.pMembers[i].pSemantic ) - { - VH( RemapString(&pType->StructType.pMembers[i].pSemantic, &mappingTableStrings) ); - } - } - } - } - -lExit: - return hr; -} - -// Used in cloning, copy the unoptimized type pool from pEffectSource to this and build mappingTableTypes -// for use in RemapType. mappingTableStrings is the mapping table previously filled when copying strings. -HRESULT CEffect::CopyOptimizedTypePool( CEffect* pEffectSource, CPointerMappingTable& mappingTableTypes ) -{ - HRESULT hr = S_OK; - CEffectHeap* pOptimizedTypeHeap = NULL; - - D3DXASSERT( pEffectSource->m_pOptimizedTypeHeap != NULL ); - D3DXASSERT( m_pTypePool == NULL ); - D3DXASSERT( m_pStringPool == NULL ); - D3DXASSERT( m_pPooledHeap == NULL ); - - VN( pOptimizedTypeHeap = NEW CEffectHeap ); - VH( pOptimizedTypeHeap->ReserveMemory( pEffectSource->m_pOptimizedTypeHeap->GetSize() ) ); - CPointerMappingTable::CIterator mapIter; - - // first pass: move types over, build mapping table - BYTE* pReadTypes = pEffectSource->m_pOptimizedTypeHeap->GetDataStart(); - while( pEffectSource->m_pOptimizedTypeHeap->IsInHeap( pReadTypes ) ) - { - SPointerMapping ptrMapping; - SType *pType; - UINT moveSize; - - ptrMapping.pOld = ptrMapping.pNew = pReadTypes; - moveSize = sizeof(SType); - VH( pOptimizedTypeHeap->MoveData(&ptrMapping.pNew, moveSize) ); - pReadTypes += moveSize; - - pType = (SType *) ptrMapping.pNew; - - // if this is a struct, move its members to the newly allocated space - if (EVT_Struct == pType->VarType) - { - moveSize = pType->StructType.Members * sizeof(SVariable); - VH( pOptimizedTypeHeap->MoveData((void **)&pType->StructType.pMembers, moveSize) ); - pReadTypes += moveSize; - } - - VH( mappingTableTypes.AddValueWithHash(ptrMapping, ptrMapping.Hash()) ); - } - - // second pass: fixup structure member & name pointers - for (mappingTableTypes.GetFirstEntry(&mapIter); !mappingTableTypes.PastEnd(&mapIter); mappingTableTypes.GetNextEntry(&mapIter)) - { - SPointerMapping ptrMapping = mapIter.GetData(); - - // Uncomment to print type mapping - //DPF(0, "type: 0x%x : 0x%x", (UINT_PTR)ptrMapping.pOld, (UINT_PTR)ptrMapping.pNew ); - - SType *pType = (SType *) ptrMapping.pNew; - - // if this is a struct, fix up its members' pointers - if (EVT_Struct == pType->VarType) - { - for (UINT i = 0; i < pType->StructType.Members; ++ i) - { - VH( RemapType((SType**)&pType->StructType.pMembers[i].pType, &mappingTableTypes) ); - } - } - } - -lExit: - return hr; -} - -// Used in cloning, create new ID3D11ConstantBuffers for each non-single CB -HRESULT CEffect::RecreateCBs() -{ - HRESULT hr = S_OK; - UINT i; // after a failure, this holds the failing index - - for (i = 0; i < m_CBCount; ++ i) - { - SConstantBuffer* pCB = &m_pCBs[i]; - - pCB->IsNonUpdatable = pCB->IsUserManaged || pCB->ClonedSingle(); - - if( pCB->Size > 0 && !pCB->ClonedSingle() ) - { - ID3D11Buffer** ppOriginalBuffer; - ID3D11ShaderResourceView** ppOriginalTBufferView; - - if( pCB->IsUserManaged ) - { - ppOriginalBuffer = &pCB->pMemberData[0].Data.pD3DEffectsManagedConstantBuffer; - ppOriginalTBufferView = &pCB->pMemberData[1].Data.pD3DEffectsManagedTextureBuffer; - } - else - { - ppOriginalBuffer = &pCB->pD3DObject; - ppOriginalTBufferView = &pCB->TBuffer.pShaderResource; - } - - VN( *ppOriginalBuffer ); - D3D11_BUFFER_DESC bufDesc; - (*ppOriginalBuffer)->GetDesc( &bufDesc ); - ID3D11Buffer* pNewBuffer = NULL; - VH( m_pDevice->CreateBuffer( &bufDesc, NULL, &pNewBuffer ) ); - (*ppOriginalBuffer)->Release(); - (*ppOriginalBuffer) = pNewBuffer; - pNewBuffer = NULL; - - if( pCB->IsTBuffer ) - { - VN( *ppOriginalTBufferView ); - D3D11_SHADER_RESOURCE_VIEW_DESC viewDesc; - (*ppOriginalTBufferView)->GetDesc( &viewDesc ); - ID3D11ShaderResourceView* pNewView = NULL; - VH( m_pDevice->CreateShaderResourceView( (*ppOriginalBuffer), &viewDesc, &pNewView) ); - (*ppOriginalTBufferView)->Release(); - (*ppOriginalTBufferView) = pNewView; - pNewView = NULL; - } - else - { - D3DXASSERT( *ppOriginalTBufferView == NULL ); - ReplaceCBReference( pCB, (*ppOriginalBuffer) ); - } - - pCB->IsDirty = TRUE; - } - } - -lExit: - return hr; -} - -// Move Name and Semantic strings using mappingTableStrings -HRESULT CEffect::FixupMemberInterface( SMember* pMember, CEffect* pEffectSource, CPointerMappingTable& mappingTableStrings ) -{ - HRESULT hr = S_OK; - - if( pMember->pName ) - { - if( pEffectSource->m_pReflection && pEffectSource->m_pReflection->m_Heap.IsInHeap(pMember->pName) ) - { - pMember->pName = (char*)((UINT_PTR)pMember->pName - (UINT_PTR)pEffectSource->m_pReflection->m_Heap.GetDataStart() + (UINT_PTR)m_pReflection->m_Heap.GetDataStart()); - } - else - { - VH( RemapString(&pMember->pName, &mappingTableStrings) ); - } - } - if( pMember->pSemantic ) - { - if( pEffectSource->m_pReflection && pEffectSource->m_pReflection->m_Heap.IsInHeap(pMember->pSemantic) ) - { - pMember->pSemantic = (char*)((UINT_PTR)pMember->pSemantic - (UINT_PTR)pEffectSource->m_pReflection->m_Heap.GetDataStart() + (UINT_PTR)m_pReflection->m_Heap.GetDataStart()); - } - else - { - VH( RemapString(&pMember->pSemantic, &mappingTableStrings) ); - } - } - -lExit: - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// Public API to create a copy of this effect -HRESULT CEffect::CloneEffect(UINT Flags, ID3DX11Effect** ppClonedEffect ) -{ - HRESULT hr = S_OK; - CPointerMappingTable mappingTableTypes; - CPointerMappingTable mappingTableStrings; - - CEffectLoader loader; - CEffect* pNewEffect = NULL; - CDataBlockStore* pTempHeap = NULL; - - - VN( pNewEffect = NEW CEffect( m_Flags ) ); - if( Flags & D3DX11_EFFECT_CLONE_FORCE_NONSINGLE ) - { - // The effect is cloned as if there was no original, so don't mark it as cloned - pNewEffect->m_Flags &= ~(UINT)D3DX11_EFFECT_CLONE; - } - else - { - pNewEffect->m_Flags |= D3DX11_EFFECT_CLONE; - } - - pNewEffect->m_VariableCount = m_VariableCount; - pNewEffect->m_pVariables = m_pVariables; - pNewEffect->m_AnonymousShaderCount = m_AnonymousShaderCount; - pNewEffect->m_pAnonymousShaders = m_pAnonymousShaders; - pNewEffect->m_TechniqueCount = m_TechniqueCount; - pNewEffect->m_GroupCount = m_GroupCount; - pNewEffect->m_pGroups = m_pGroups; - pNewEffect->m_pNullGroup = m_pNullGroup; - pNewEffect->m_ShaderBlockCount = m_ShaderBlockCount; - pNewEffect->m_pShaderBlocks = m_pShaderBlocks; - pNewEffect->m_DepthStencilBlockCount = m_DepthStencilBlockCount; - pNewEffect->m_pDepthStencilBlocks = m_pDepthStencilBlocks; - pNewEffect->m_BlendBlockCount = m_BlendBlockCount; - pNewEffect->m_pBlendBlocks = m_pBlendBlocks; - pNewEffect->m_RasterizerBlockCount = m_RasterizerBlockCount; - pNewEffect->m_pRasterizerBlocks = m_pRasterizerBlocks; - pNewEffect->m_SamplerBlockCount = m_SamplerBlockCount; - pNewEffect->m_pSamplerBlocks = m_pSamplerBlocks; - pNewEffect->m_MemberDataCount = m_MemberDataCount; - pNewEffect->m_pMemberDataBlocks = m_pMemberDataBlocks; - pNewEffect->m_InterfaceCount = m_InterfaceCount; - pNewEffect->m_pInterfaces = m_pInterfaces; - pNewEffect->m_CBCount = m_CBCount; - pNewEffect->m_pCBs = m_pCBs; - pNewEffect->m_StringCount = m_StringCount; - pNewEffect->m_pStrings = m_pStrings; - pNewEffect->m_ShaderResourceCount = m_ShaderResourceCount; - pNewEffect->m_pShaderResources = m_pShaderResources; - pNewEffect->m_UnorderedAccessViewCount = m_UnorderedAccessViewCount; - pNewEffect->m_pUnorderedAccessViews = m_pUnorderedAccessViews; - pNewEffect->m_RenderTargetViewCount = m_RenderTargetViewCount; - pNewEffect->m_pRenderTargetViews = m_pRenderTargetViews; - pNewEffect->m_DepthStencilViewCount = m_DepthStencilViewCount; - pNewEffect->m_pDepthStencilViews = m_pDepthStencilViews; - pNewEffect->m_LocalTimer = m_LocalTimer; - pNewEffect->m_FXLIndex = m_FXLIndex; - pNewEffect->m_pDevice = m_pDevice; - pNewEffect->m_pClassLinkage = m_pClassLinkage; - - pNewEffect->AddRefAllForCloning( this ); - - - // m_pMemberInterfaces is a vector of cbuffer members that were created when the user called GetMemberBy* or GetElement - // or during Effect loading when an interface is initialized to a global class variable elment. - VH( pNewEffect->CopyMemberInterfaces( this ) ); - - loader.m_pvOldMemberInterfaces = &m_pMemberInterfaces; - loader.m_pEffect = pNewEffect; - loader.m_EffectMemory = loader.m_ReflectionMemory = 0; - - - // Move data from current effect to new effect - if( !IsOptimized() ) - { - VN( pNewEffect->m_pReflection = NEW CEffectReflection() ); - loader.m_pReflection = pNewEffect->m_pReflection; - - // make sure strings are moved before ReallocateEffectData - VH( loader.InitializeReflectionDataAndMoveStrings( m_pReflection->m_Heap.GetSize() ) ); - } - VH( loader.ReallocateEffectData( true ) ); - if( !IsOptimized() ) - { - VH( loader.ReallocateReflectionData( true ) ); - } - - - // Data structures for remapping type pointers and string pointers - VN( pTempHeap = NEW CDataBlockStore ); - pTempHeap->EnableAlignment(); - mappingTableTypes.SetPrivateHeap(pTempHeap); - mappingTableStrings.SetPrivateHeap(pTempHeap); - VH( mappingTableTypes.AutoGrow() ); - VH( mappingTableStrings.AutoGrow() ); - - if( !IsOptimized() ) - { - // Let's re-create the type pool and string pool - VN( pNewEffect->m_pPooledHeap = NEW CDataBlockStore ); - pNewEffect->m_pPooledHeap->EnableAlignment(); - - VH( pNewEffect->CopyStringPool( this, mappingTableStrings ) ); - VH( pNewEffect->CopyTypePool( this, mappingTableTypes, mappingTableStrings ) ); - } - else - { - // There's no string pool after optimizing. Let's re-create the type pool - VH( pNewEffect->CopyOptimizedTypePool( this, mappingTableTypes ) ); - } - - // fixup this effect's variable's types - VH( pNewEffect->OptimizeTypes(&mappingTableTypes, true) ); - VH( pNewEffect->RecreateCBs() ); - - - for (UINT i = 0; i < pNewEffect->m_pMemberInterfaces.GetSize(); ++ i) - { - SMember* pMember = pNewEffect->m_pMemberInterfaces[i]; - VH( pNewEffect->FixupMemberInterface( pMember, this, mappingTableStrings ) ); - } - - -lExit: - SAFE_DELETE( pTempHeap ); - if( FAILED( hr ) ) - { - SAFE_DELETE( pNewEffect ); - } - *ppClonedEffect = pNewEffect; - return hr; -} - -// Move all type pointers using pMappingTable. -// This is called after creating the optimized type pool or during cloning. -HRESULT CEffect::OptimizeTypes(CPointerMappingTable *pMappingTable, bool Cloning) -{ - HRESULT hr = S_OK; - UINT i; - - // find all child types, point them to the new location - for (i = 0; i < m_VariableCount; ++ i) - { - VH( RemapType((SType**)&m_pVariables[i].pType, pMappingTable) ); - } - - UINT Members = m_pMemberInterfaces.GetSize(); - for( i=0; i < Members; i++ ) - { - if( m_pMemberInterfaces[i] != NULL ) - { - VH( RemapType((SType**)&m_pMemberInterfaces[i]->pType, pMappingTable) ); - } - } - - // when cloning, there may be annotations - if( Cloning ) - { - for (UINT iVar = 0; iVar < m_VariableCount; ++ iVar) - { - for(i = 0; i < m_pVariables[iVar].AnnotationCount; ++ i ) - { - VH( RemapType((SType**)&m_pVariables[iVar].pAnnotations[i].pType, pMappingTable) ); - } - } - for (UINT iCB = 0; iCB < m_CBCount; ++ iCB) - { - for(i = 0; i < m_pCBs[iCB].AnnotationCount; ++ i ) - { - VH( RemapType((SType**)&m_pCBs[iCB].pAnnotations[i].pType, pMappingTable) ); - } - } - for (UINT iGroup = 0; iGroup < m_GroupCount; ++ iGroup) - { - for(i = 0; i < m_pGroups[iGroup].AnnotationCount; ++ i ) - { - VH( RemapType((SType**)&m_pGroups[iGroup].pAnnotations[i].pType, pMappingTable) ); - } - for(UINT iTech = 0; iTech < m_pGroups[iGroup].TechniqueCount; ++ iTech ) - { - for(i = 0; i < m_pGroups[iGroup].pTechniques[iTech].AnnotationCount; ++ i ) - { - VH( RemapType((SType**)&m_pGroups[iGroup].pTechniques[iTech].pAnnotations[i].pType, pMappingTable) ); - } - for(UINT iPass = 0; iPass < m_pGroups[iGroup].pTechniques[iTech].PassCount; ++ iPass ) - { - for(i = 0; i < m_pGroups[iGroup].pTechniques[iTech].pPasses[iPass].AnnotationCount; ++ i ) - { - VH( RemapType((SType**)&m_pGroups[iGroup].pTechniques[iTech].pPasses[iPass].pAnnotations[i].pType, pMappingTable) ); - } - } - } - } - } -lExit: - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// Public API to shed this effect of its reflection data -HRESULT CEffect::Optimize() -{ - HRESULT hr = S_OK; - UINT i, j, k; - CEffectHeap *pOptimizedTypeHeap = NULL; - - if (IsOptimized()) - { - DPF(0, "ID3DX11Effect::Optimize: Effect has already been Optimize()'ed"); - return S_OK; - } - - // Delete annotations, names, semantics, and string data on variables - - for (i = 0; i < m_VariableCount; ++ i) - { - m_pVariables[i].AnnotationCount = 0; - m_pVariables[i].pAnnotations = NULL; - m_pVariables[i].pName = NULL; - m_pVariables[i].pSemantic = NULL; - - // 2) Point string variables to NULL - if (m_pVariables[i].pType->IsObjectType(EOT_String)) - { - D3DXASSERT(NULL != m_pVariables[i].Data.pString); - m_pVariables[i].Data.pString = NULL; - } - } - - // Delete annotations and names on CBs - - for (i = 0; i < m_CBCount; ++ i) - { - m_pCBs[i].AnnotationCount = 0; - m_pCBs[i].pAnnotations = NULL; - m_pCBs[i].pName = NULL; - m_pCBs[i].IsEffectOptimized = TRUE; - } - - // Delete annotations and names on techniques and passes - - for (i = 0; i < m_GroupCount; ++ i) - { - m_pGroups[i].AnnotationCount = 0; - m_pGroups[i].pAnnotations = NULL; - m_pGroups[i].pName = NULL; - - for (j = 0; j < m_pGroups[i].TechniqueCount; ++ j) - { - m_pGroups[i].pTechniques[j].AnnotationCount = 0; - m_pGroups[i].pTechniques[j].pAnnotations = NULL; - m_pGroups[i].pTechniques[j].pName = NULL; - - for (k = 0; k < m_pGroups[i].pTechniques[j].PassCount; ++ k) - { - m_pGroups[i].pTechniques[j].pPasses[k].AnnotationCount = 0; - m_pGroups[i].pTechniques[j].pPasses[k].pAnnotations = NULL; - m_pGroups[i].pTechniques[j].pPasses[k].pName = NULL; - } - } - }; - - // 2) Remove shader bytecode & stream out decls - // (all are contained within pReflectionData) - - for (i = 0; i < m_ShaderBlockCount; ++ i) - { - if( m_pShaderBlocks[i].pReflectionData ) - { - // pReflection was not created with PRIVATENEW - SAFE_RELEASE( m_pShaderBlocks[i].pReflectionData->pReflection ); - - m_pShaderBlocks[i].pReflectionData = NULL; - } - } - - UINT Members = m_pMemberInterfaces.GetSize(); - for( i=0; i < Members; i++ ) - { - D3DXASSERT( m_pMemberInterfaces[i] != NULL ); - if( IsReflectionData(m_pMemberInterfaces[i]->pTopLevelEntity) ) - { - D3DXASSERT( IsReflectionData(m_pMemberInterfaces[i]->Data.pGeneric) ); - - // This is checked when cloning (so we don't clone Optimized-out member variables) - m_pMemberInterfaces[i] = NULL; - } - else - { - m_pMemberInterfaces[i]->pName = NULL; - m_pMemberInterfaces[i]->pSemantic = NULL; - } - } - - - - // get rid of the name/type hash tables and string data, - // then reallocate the type data and fix up this effect - CPointerMappingTable mappingTable; - CTypeHashTable::CIterator typeIter; - CPointerMappingTable::CIterator mapIter; - CCheckedDword chkSpaceNeeded = 0; - UINT spaceNeeded; - - // first pass: compute needed space - for (m_pTypePool->GetFirstEntry(&typeIter); !m_pTypePool->PastEnd(&typeIter); m_pTypePool->GetNextEntry(&typeIter)) - { - SType *pType = typeIter.GetData(); - - chkSpaceNeeded += AlignToPowerOf2(sizeof(SType), c_DataAlignment); - - // if this is a struct, allocate room for its members - if (EVT_Struct == pType->VarType) - { - chkSpaceNeeded += AlignToPowerOf2(pType->StructType.Members * sizeof(SVariable), c_DataAlignment); - } - } - - VH( chkSpaceNeeded.GetValue(&spaceNeeded) ); - - D3DXASSERT(NULL == m_pOptimizedTypeHeap); - VN( pOptimizedTypeHeap = NEW CEffectHeap ); - VH( pOptimizedTypeHeap->ReserveMemory(spaceNeeded)); - - // use the private heap that we're about to destroy as scratch space for the mapping table - mappingTable.SetPrivateHeap(m_pPooledHeap); - VH( mappingTable.AutoGrow() ); - - // second pass: move types over, build mapping table - for (m_pTypePool->GetFirstEntry(&typeIter); !m_pTypePool->PastEnd(&typeIter); m_pTypePool->GetNextEntry(&typeIter)) - { - SPointerMapping ptrMapping; - SType *pType; - - ptrMapping.pOld = ptrMapping.pNew = typeIter.GetData(); - VH( pOptimizedTypeHeap->MoveData(&ptrMapping.pNew, sizeof(SType)) ); - - pType = (SType *) ptrMapping.pNew; - - // if this is a struct, move its members to the newly allocated space - if (EVT_Struct == pType->VarType) - { - VH( pOptimizedTypeHeap->MoveData((void **)&pType->StructType.pMembers, pType->StructType.Members * sizeof(SVariable)) ); - } - - VH( mappingTable.AddValueWithHash(ptrMapping, ptrMapping.Hash()) ); - } - - // third pass: fixup structure member & name pointers - for (mappingTable.GetFirstEntry(&mapIter); !mappingTable.PastEnd(&mapIter); mappingTable.GetNextEntry(&mapIter)) - { - SPointerMapping ptrMapping = mapIter.GetData(); - SType *pType = (SType *) ptrMapping.pNew; - - pType->pTypeName = NULL; - - // if this is a struct, fix up its members' pointers - if (EVT_Struct == pType->VarType) - { - for (i = 0; i < pType->StructType.Members; ++ i) - { - VH( RemapType((SType**)&pType->StructType.pMembers[i].pType, &mappingTable) ); - pType->StructType.pMembers[i].pName = NULL; - pType->StructType.pMembers[i].pSemantic = NULL; - } - } - } - - // fixup this effect's variable's types - VH( OptimizeTypes(&mappingTable) ); - - m_pOptimizedTypeHeap = pOptimizedTypeHeap; - pOptimizedTypeHeap = NULL; - -#ifdef D3DX11_FX_PRINT_HASH_STATS - DPF(0, "Compiler string pool hash table statistics:"); - m_pTypePool->PrintHashTableStats(); - DPF(0, "Compiler type pool hash table statistics:"); - m_pStringPool->PrintHashTableStats(); -#endif // D3DX11_FX_PRINT_HASH_STATS - - SAFE_DELETE(m_pTypePool); - SAFE_DELETE(m_pStringPool); - SAFE_DELETE(m_pPooledHeap); - - DPF(0, "ID3DX11Effect::Optimize: %d bytes of reflection data freed.", m_pReflection->m_Heap.GetSize()); - SAFE_DELETE(m_pReflection); - m_Flags |= D3DX11_EFFECT_OPTIMIZED; - -lExit: - SAFE_DELETE(pOptimizedTypeHeap); - return hr; -} - -SMember * CreateNewMember(SType *pType, BOOL IsAnnotation) -{ - switch (pType->VarType) - { - case EVT_Struct: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SNumericAnnotationMember) == sizeof(SMember)); - return (SMember*) NEW SNumericAnnotationMember; - } - else if (pType->StructType.ImplementsInterface) - { - D3DXASSERT(sizeof(SClassInstanceGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SClassInstanceGlobalVariableMember; - } - else - { - D3DXASSERT(sizeof(SNumericGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SNumericGlobalVariableMember; - } - break; - case EVT_Interface: - D3DXASSERT(sizeof(SInterfaceGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SInterfaceGlobalVariableMember; - break; - case EVT_Object: - switch (pType->ObjectType) - { - case EOT_String: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SStringAnnotationMember) == sizeof(SMember)); - return (SMember*) NEW SStringAnnotationMember; - } - else - { - D3DXASSERT(sizeof(SStringGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SStringGlobalVariableMember; - } - - break; - case EOT_Texture: - case EOT_Texture1D: - case EOT_Texture1DArray: - case EOT_Texture2D: - case EOT_Texture2DArray: - case EOT_Texture2DMS: - case EOT_Texture2DMSArray: - case EOT_Texture3D: - case EOT_TextureCube: - case EOT_TextureCubeArray: - case EOT_Buffer: - case EOT_ByteAddressBuffer: - case EOT_StructuredBuffer: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SShaderResourceGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SShaderResourceGlobalVariableMember; - break; - case EOT_RWTexture1D: - case EOT_RWTexture1DArray: - case EOT_RWTexture2D: - case EOT_RWTexture2DArray: - case EOT_RWTexture3D: - case EOT_RWBuffer: - case EOT_RWByteAddressBuffer: - case EOT_RWStructuredBuffer: - case EOT_RWStructuredBufferAlloc: - case EOT_RWStructuredBufferConsume: - case EOT_AppendStructuredBuffer: - case EOT_ConsumeStructuredBuffer: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SUnorderedAccessViewGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SUnorderedAccessViewGlobalVariableMember; - break; - case EOT_VertexShader: - case EOT_VertexShader5: - case EOT_GeometryShader: - case EOT_GeometryShaderSO: - case EOT_GeometryShader5: - case EOT_PixelShader: - case EOT_PixelShader5: - case EOT_HullShader5: - case EOT_DomainShader5: - case EOT_ComputeShader5: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SShaderGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SShaderGlobalVariableMember; - break; - case EOT_Blend: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SBlendGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SBlendGlobalVariableMember; - break; - case EOT_Rasterizer: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SRasterizerGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SRasterizerGlobalVariableMember; - break; - case EOT_DepthStencil: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SDepthStencilGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SDepthStencilGlobalVariableMember; - break; - case EOT_Sampler: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SSamplerGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SSamplerGlobalVariableMember; - break; - case EOT_DepthStencilView: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SDepthStencilViewGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SDepthStencilViewGlobalVariableMember; - break; - case EOT_RenderTargetView: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SRenderTargetViewGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SRenderTargetViewGlobalVariableMember; - break; - default: - D3DXASSERT(0); - DPF( 0, "Internal error: invalid object type." ); - return NULL; - break; - } - break; - case EVT_Numeric: - switch (pType->NumericType.NumericLayout) - { - case ENL_Matrix: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SMatrixAnnotationMember) == sizeof(SMember)); - return (SMember*) NEW SMatrixAnnotationMember; - } - else - { - D3DXASSERT(sizeof(SMatrixGlobalVariableMember) == sizeof(SMember)); - D3DXASSERT(sizeof(SMatrix4x4ColumnMajorGlobalVariableMember) == sizeof(SMember)); - D3DXASSERT(sizeof(SMatrix4x4RowMajorGlobalVariableMember) == sizeof(SMember)); - - if (pType->NumericType.Rows == 4 && pType->NumericType.Columns == 4) - { - if (pType->NumericType.IsColumnMajor) - { - return (SMember*) NEW SMatrix4x4ColumnMajorGlobalVariableMember; - } - else - { - return (SMember*) NEW SMatrix4x4RowMajorGlobalVariableMember; - } - } - else - { - return (SMember*) NEW SMatrixGlobalVariableMember; - } - } - break; - case ENL_Vector: - switch (pType->NumericType.ScalarType) - { - case EST_Float: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SFloatVectorAnnotationMember) == sizeof(SMember)); - return (SMember*) NEW SFloatVectorAnnotationMember; - } - else - { - D3DXASSERT(sizeof(SFloatVectorGlobalVariableMember) == sizeof(SMember)); - D3DXASSERT(sizeof(SFloatVector4GlobalVariableMember) == sizeof(SMember)); - - if (pType->NumericType.Columns == 4) - { - return (SMember*) NEW SFloatVector4GlobalVariableMember; - } - else - { - return (SMember*) NEW SFloatVectorGlobalVariableMember; - } - } - break; - case EST_Bool: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SBoolVectorAnnotationMember) == sizeof(SMember)); - return (SMember*) NEW SBoolVectorAnnotationMember; - } - else - { - D3DXASSERT(sizeof(SBoolVectorGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SBoolVectorGlobalVariableMember; - } - break; - case EST_UInt: - case EST_Int: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SIntVectorAnnotationMember) == sizeof(SMember)); - return (SMember*) NEW SIntVectorAnnotationMember; - } - else - { - D3DXASSERT(sizeof(SIntVectorGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SIntVectorGlobalVariableMember; - } - break; - default: - D3DXASSERT(0); - DPF( 0, "Internal loading error: invalid vector type." ); - break; - } - break; - case ENL_Scalar: - switch (pType->NumericType.ScalarType) - { - case EST_Float: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SFloatScalarAnnotationMember) == sizeof(SMember)); - return (SMember*) NEW SFloatScalarAnnotationMember; - } - else - { - D3DXASSERT(sizeof(SFloatScalarGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SFloatScalarGlobalVariableMember; - } - break; - case EST_UInt: - case EST_Int: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SIntScalarAnnotationMember) == sizeof(SMember)); - return (SMember*) NEW SIntScalarAnnotationMember; - } - else - { - D3DXASSERT(sizeof(SIntScalarGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SIntScalarGlobalVariableMember; - } - break; - case EST_Bool: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SBoolScalarAnnotationMember) == sizeof(SMember)); - return (SMember*) NEW SBoolScalarAnnotationMember; - } - else - { - D3DXASSERT(sizeof(SBoolScalarGlobalVariableMember) == sizeof(SMember)); - return (SMember*) NEW SBoolScalarGlobalVariableMember; - } - break; - default: - DPF( 0, "Internal loading error: invalid scalar type." ); - D3DXASSERT(0); - break; - } - break; - default: - D3DXASSERT(0); - DPF( 0, "Internal loading error: invalid numeric type." ); - break; - } - break; - default: - D3DXASSERT(0); - DPF( 0, "Internal loading error: invalid variable type." ); - break; - } - return NULL; -} - -// Global variables are created in place because storage for them was allocated during LoadEffect -HRESULT PlacementNewVariable(void *pVar, SType *pType, BOOL IsAnnotation) -{ - switch (pType->VarType) - { - case EVT_Struct: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SNumericAnnotation) == sizeof(SAnnotation)); - new(pVar) SNumericAnnotation(); - } - else if (pType->StructType.ImplementsInterface) - { - D3DXASSERT(sizeof(SClassInstanceGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SClassInstanceGlobalVariable; - } - else - { - D3DXASSERT(sizeof(SNumericGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SNumericGlobalVariable; - } - break; - case EVT_Interface: - D3DXASSERT(sizeof(SInterfaceGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SInterfaceGlobalVariable; - break; - case EVT_Object: - switch (pType->ObjectType) - { - case EOT_String: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SStringAnnotation) == sizeof(SAnnotation)); - new(pVar) SStringAnnotation; - } - else - { - D3DXASSERT(sizeof(SStringGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SStringGlobalVariable; - } - - break; - case EOT_Texture: - case EOT_Texture1D: - case EOT_Texture1DArray: - case EOT_Texture2D: - case EOT_Texture2DArray: - case EOT_Texture2DMS: - case EOT_Texture2DMSArray: - case EOT_Texture3D: - case EOT_TextureCube: - case EOT_TextureCubeArray: - case EOT_Buffer: - case EOT_ByteAddressBuffer: - case EOT_StructuredBuffer: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SShaderResourceGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SShaderResourceGlobalVariable; - break; - case EOT_RWTexture1D: - case EOT_RWTexture1DArray: - case EOT_RWTexture2D: - case EOT_RWTexture2DArray: - case EOT_RWTexture3D: - case EOT_RWBuffer: - case EOT_RWByteAddressBuffer: - case EOT_RWStructuredBuffer: - case EOT_RWStructuredBufferAlloc: - case EOT_RWStructuredBufferConsume: - case EOT_AppendStructuredBuffer: - case EOT_ConsumeStructuredBuffer: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SUnorderedAccessViewGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SUnorderedAccessViewGlobalVariable; - break; - case EOT_VertexShader: - case EOT_VertexShader5: - case EOT_GeometryShader: - case EOT_GeometryShaderSO: - case EOT_GeometryShader5: - case EOT_PixelShader: - case EOT_PixelShader5: - case EOT_HullShader5: - case EOT_DomainShader5: - case EOT_ComputeShader5: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SShaderGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SShaderGlobalVariable; - break; - case EOT_Blend: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SBlendGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SBlendGlobalVariable; - break; - case EOT_Rasterizer: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SRasterizerGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SRasterizerGlobalVariable; - break; - case EOT_DepthStencil: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SDepthStencilGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SDepthStencilGlobalVariable; - break; - case EOT_Sampler: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SSamplerGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SSamplerGlobalVariable; - break; - case EOT_RenderTargetView: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SRenderTargetViewGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SRenderTargetViewGlobalVariable; - break; - case EOT_DepthStencilView: - D3DXASSERT(!IsAnnotation); - D3DXASSERT(sizeof(SDepthStencilViewGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SDepthStencilViewGlobalVariable; - break; - default: - D3DXASSERT(0); - DPF( 0, "Internal loading error: invalid object type." ); - return E_FAIL; - break; - } - break; - case EVT_Numeric: - switch (pType->NumericType.NumericLayout) - { - case ENL_Matrix: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SMatrixAnnotation) == sizeof(SAnnotation)); - new(pVar) SMatrixAnnotation; - } - else - { - D3DXASSERT(sizeof(SMatrixGlobalVariable) == sizeof(SGlobalVariable)); - D3DXASSERT(sizeof(SMatrix4x4ColumnMajorGlobalVariable) == sizeof(SGlobalVariable)); - D3DXASSERT(sizeof(SMatrix4x4RowMajorGlobalVariable) == sizeof(SGlobalVariable)); - - if (pType->NumericType.Rows == 4 && pType->NumericType.Columns == 4) - { - if (pType->NumericType.IsColumnMajor) - { - new(pVar) SMatrix4x4ColumnMajorGlobalVariable; - } - else - { - new(pVar) SMatrix4x4RowMajorGlobalVariable; - } - } - else - { - new(pVar) SMatrixGlobalVariable; - } - } - break; - case ENL_Vector: - switch (pType->NumericType.ScalarType) - { - case EST_Float: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SFloatVectorAnnotation) == sizeof(SAnnotation)); - new(pVar) SFloatVectorAnnotation; - } - else - { - D3DXASSERT(sizeof(SFloatVectorGlobalVariable) == sizeof(SGlobalVariable)); - D3DXASSERT(sizeof(SFloatVector4GlobalVariable) == sizeof(SGlobalVariable)); - - if (pType->NumericType.Columns == 4) - { - new(pVar) SFloatVector4GlobalVariable; - } - else - { - new(pVar) SFloatVectorGlobalVariable; - } - } - break; - case EST_Bool: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SBoolVectorAnnotation) == sizeof(SAnnotation)); - new(pVar) SBoolVectorAnnotation; - } - else - { - D3DXASSERT(sizeof(SBoolVectorGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SBoolVectorGlobalVariable; - } - break; - case EST_UInt: - case EST_Int: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SIntVectorAnnotation) == sizeof(SAnnotation)); - new(pVar) SIntVectorAnnotation; - } - else - { - D3DXASSERT(sizeof(SIntVectorGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SIntVectorGlobalVariable; - } - break; - } - break; - case ENL_Scalar: - switch (pType->NumericType.ScalarType) - { - case EST_Float: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SFloatScalarAnnotation) == sizeof(SAnnotation)); - new(pVar) SFloatScalarAnnotation; - } - else - { - D3DXASSERT(sizeof(SFloatScalarGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SFloatScalarGlobalVariable; - } - break; - case EST_UInt: - case EST_Int: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SIntScalarAnnotation) == sizeof(SAnnotation)); - new(pVar) SIntScalarAnnotation; - } - else - { - D3DXASSERT(sizeof(SIntScalarGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SIntScalarGlobalVariable; - } - break; - case EST_Bool: - if (IsAnnotation) - { - D3DXASSERT(sizeof(SBoolScalarAnnotation) == sizeof(SAnnotation)); - new(pVar) SBoolScalarAnnotation; - } - else - { - D3DXASSERT(sizeof(SBoolScalarGlobalVariable) == sizeof(SGlobalVariable)); - new(pVar) SBoolScalarGlobalVariable; - } - break; - default: - D3DXASSERT(0); - DPF( 0, "Internal loading error: invalid scalar type." ); - return E_FAIL; - break; - } - break; - default: - D3DXASSERT(0); - DPF( 0, "Internal loading error: invalid numeric type." ); - return E_FAIL; - break; - } - break; - default: - D3DXASSERT(0); - DPF( 0, "Internal loading error: invalid variable type." ); - return E_FAIL; - break; - } - return S_OK; -} - -} diff --git a/sample/d3d11/Effects11/EffectReflection.cpp b/sample/d3d11/Effects11/EffectReflection.cpp deleted file mode 100644 index 138447b..0000000 --- a/sample/d3d11/Effects11/EffectReflection.cpp +++ /dev/null @@ -1,2151 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: EffectReflection.cpp -// Content: D3DX11 Effects public reflection APIs -// -////////////////////////////////////////////////////////////////////////////// - -#include "pchfx.h" - -namespace D3DX11Effects -{ - -SEffectInvalidType g_InvalidType; - -SEffectInvalidScalarVariable g_InvalidScalarVariable; -SEffectInvalidVectorVariable g_InvalidVectorVariable; -SEffectInvalidMatrixVariable g_InvalidMatrixVariable; -SEffectInvalidStringVariable g_InvalidStringVariable; -SEffectInvalidClassInstanceVariable g_InvalidClassInstanceVariable; -SEffectInvalidInterfaceVariable g_InvalidInterfaceVariable; -SEffectInvalidShaderResourceVariable g_InvalidShaderResourceVariable; -SEffectInvalidUnorderedAccessViewVariable g_InvalidUnorderedAccessViewVariable; -SEffectInvalidRenderTargetViewVariable g_InvalidRenderTargetViewVariable; -SEffectInvalidDepthStencilViewVariable g_InvalidDepthStencilViewVariable; -SEffectInvalidConstantBuffer g_InvalidConstantBuffer; -SEffectInvalidShaderVariable g_InvalidShaderVariable; -SEffectInvalidBlendVariable g_InvalidBlendVariable; -SEffectInvalidDepthStencilVariable g_InvalidDepthStencilVariable; -SEffectInvalidRasterizerVariable g_InvalidRasterizerVariable; -SEffectInvalidSamplerVariable g_InvalidSamplerVariable; - -SEffectInvalidPass g_InvalidPass; -SEffectInvalidTechnique g_InvalidTechnique; -SEffectInvalidGroup g_InvalidGroup; - - -////////////////////////////////////////////////////////////////////////// -// Helper routine implementations -////////////////////////////////////////////////////////////////////////// - -ID3DX11EffectConstantBuffer * NoParentCB() -{ - DPF(0, "ID3DX11EffectVariable::GetParentConstantBuffer: Variable does not have a parent constant buffer"); - // have to typecast because the type of g_InvalidScalarVariable has not been declared yet - return &g_InvalidConstantBuffer; -} - -ID3DX11EffectVariable * GetAnnotationByIndexHelper(const char *pClassName, UINT Index, UINT AnnotationCount, SAnnotation *pAnnotations) -{ - if (Index >= AnnotationCount) - { - DPF(0, "%s::GetAnnotationByIndex: Invalid index (%d, total: %d)", pClassName, Index, AnnotationCount); - return &g_InvalidScalarVariable; - } - - return pAnnotations + Index; -} - -ID3DX11EffectVariable * GetAnnotationByNameHelper(const char *pClassName, LPCSTR Name, UINT AnnotationCount, SAnnotation *pAnnotations) -{ - UINT i; - for (i = 0; i < AnnotationCount; ++ i) - { - if (strcmp(pAnnotations[i].pName, Name) == 0) - { - return pAnnotations + i; - } - } - - DPF(0, "%s::GetAnnotationByName: Annotation [%s] not found", pClassName, Name); - return &g_InvalidScalarVariable; -} - -////////////////////////////////////////////////////////////////////////// -// Effect routines to pool interfaces -////////////////////////////////////////////////////////////////////////// - -ID3DX11EffectType * CEffect::CreatePooledSingleElementTypeInterface(SType *pType) -{ - UINT i; - - if (IsOptimized()) - { - DPF(0, "ID3DX11Effect: Cannot create new type interfaces since the effect has been Optimize()'ed"); - return &g_InvalidType; - } - - for (i = 0; i < m_pTypeInterfaces.GetSize(); ++ i) - { - if (m_pTypeInterfaces[i]->pType == pType) - { - return (SSingleElementType*)m_pTypeInterfaces[i]; - } - } - SSingleElementType *pNewType; - if (NULL == (pNewType = NEW SSingleElementType)) - { - DPF(0, "ID3DX11Effect: Out of memory while trying to create new type interface"); - return &g_InvalidType; - } - - pNewType->pType = pType; - m_pTypeInterfaces.Add(pNewType); - - return pNewType; -} - -// Create a member variable (via GetMemberBy* or GetElement) -ID3DX11EffectVariable * CEffect::CreatePooledVariableMemberInterface(TTopLevelVariable *pTopLevelEntity, SVariable *pMember, UDataPointer Data, BOOL IsSingleElement, UINT Index) -{ - BOOL IsAnnotation; - UINT i; - - if (IsOptimized()) - { - DPF(0, "ID3DX11Effect: Cannot create new variable interfaces since the effect has been Optimize()'ed"); - return &g_InvalidScalarVariable; - } - - for (i = 0; i < m_pMemberInterfaces.GetSize(); ++ i) - { - if (m_pMemberInterfaces[i]->pType == pMember->pType && - m_pMemberInterfaces[i]->pName == pMember->pName && - m_pMemberInterfaces[i]->pSemantic == pMember->pSemantic && - m_pMemberInterfaces[i]->Data.pGeneric == Data.pGeneric && - m_pMemberInterfaces[i]->IsSingleElement == IsSingleElement && - ((SMember*)m_pMemberInterfaces[i])->pTopLevelEntity == pTopLevelEntity) - { - return (ID3DX11EffectVariable *) m_pMemberInterfaces[i]; - } - } - - // is this annotation or runtime data? - if( pTopLevelEntity->pEffect->IsReflectionData(pTopLevelEntity) ) - { - D3DXASSERT( pTopLevelEntity->pEffect->IsReflectionData(Data.pGeneric) ); - IsAnnotation = TRUE; - } - else - { - // if the heap is empty, we are still loading the Effect, and thus creating a member for a variable initializer - // ex. Interface myInt = myClassArray[2]; - if( pTopLevelEntity->pEffect->m_Heap.GetSize() > 0 ) - { - D3DXASSERT( pTopLevelEntity->pEffect->IsRuntimeData(pTopLevelEntity) ); - if (!pTopLevelEntity->pType->IsObjectType(EOT_String)) - { - // strings are funny; their data is reflection data, so ignore those - D3DXASSERT( pTopLevelEntity->pEffect->IsRuntimeData(Data.pGeneric) ); - } - } - IsAnnotation = FALSE; - } - - SMember *pNewMember; - - if (NULL == (pNewMember = CreateNewMember((SType*)pMember->pType, IsAnnotation))) - { - DPF(0, "ID3DX11Effect: Out of memory while trying to create new member variable interface"); - return &g_InvalidScalarVariable; - } - - pNewMember->pType = pMember->pType; - pNewMember->pName = pMember->pName; - pNewMember->pSemantic = pMember->pSemantic; - pNewMember->Data.pGeneric = Data.pGeneric; - pNewMember->IsSingleElement = IsSingleElement; - pNewMember->pTopLevelEntity = pTopLevelEntity; - - if( IsSingleElement && pMember->pMemberData ) - { - D3DXASSERT( !IsAnnotation ); - // This is an element of a global variable array - pNewMember->pMemberData = pMember->pMemberData + Index; - } - - if (FAILED(m_pMemberInterfaces.Add(pNewMember))) - { - SAFE_DELETE(pNewMember); - DPF(0, "ID3DX11Effect: Out of memory while trying to create new member variable interface"); - return &g_InvalidScalarVariable; - } - - return (ID3DX11EffectVariable *) pNewMember; -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectType (SType, SSingleElementType implementations) -////////////////////////////////////////////////////////////////////////// - -static ID3DX11EffectType * GetTypeByIndexHelper(UINT Index, UINT VariableCount, - SVariable *pVariables, UINT SizeOfVariableType) -{ - LPCSTR pFuncName = "ID3DX11EffectType::GetMemberTypeByIndex"; - - if (Index >= VariableCount) - { - DPF(0, "%s: Invalid index (%d, total: %d)", pFuncName, Index, VariableCount); - return &g_InvalidType; - } - - SVariable *pVariable = (SVariable *)((BYTE *)pVariables + Index * SizeOfVariableType); - if (NULL == pVariable->pName) - { - DPF(0, "%s: Cannot get member types; Effect has been Optimize()'ed", pFuncName); - return &g_InvalidType; - } - - return (ID3DX11EffectType *) pVariable->pType; -} - -static ID3DX11EffectType * GetTypeByNameHelper(LPCSTR Name, UINT VariableCount, - SVariable *pVariables, UINT SizeOfVariableType) -{ - LPCSTR pFuncName = "ID3DX11EffectType::GetMemberTypeByName"; - - if (NULL == Name) - { - DPF(0, "%s: Parameter Name was NULL.", pFuncName); - return &g_InvalidType; - } - - UINT i; - SVariable *pVariable; - - for (i = 0; i < VariableCount; ++ i) - { - pVariable = (SVariable *)((BYTE *)pVariables + i * SizeOfVariableType); - if (NULL == pVariable->pName) - { - DPF(0, "%s: Cannot get member types; Effect has been Optimize()'ed", pFuncName); - return &g_InvalidType; - } - if (strcmp(pVariable->pName, Name) == 0) - { - return (ID3DX11EffectType *) pVariable->pType; - } - } - - DPF(0, "%s: Member type [%s] not found", pFuncName, Name); - return &g_InvalidType; -} - - -static ID3DX11EffectType * GetTypeBySemanticHelper(LPCSTR Semantic, UINT VariableCount, - SVariable *pVariables, UINT SizeOfVariableType) -{ - LPCSTR pFuncName = "ID3DX11EffectType::GetMemberTypeBySemantic"; - - if (NULL == Semantic) - { - DPF(0, "%s: Parameter Semantic was NULL.", pFuncName); - return &g_InvalidType; - } - - UINT i; - SVariable *pVariable; - - for (i = 0; i < VariableCount; ++ i) - { - pVariable = (SVariable *)((BYTE *)pVariables + i * SizeOfVariableType); - if (NULL == pVariable->pName) - { - DPF(0, "%s: Cannot get member types; Effect has been Optimize()'ed", pFuncName); - return &g_InvalidType; - } - if (NULL != pVariable->pSemantic && - _stricmp(pVariable->pSemantic, Semantic) == 0) - { - return (ID3DX11EffectType *) pVariable->pType; - } - } - - DPF(0, "%s: Member type with semantic [%s] not found", pFuncName, Semantic); - return &g_InvalidType; -} - -ID3DX11EffectType * SType::GetMemberTypeByIndex(UINT Index) -{ - if (VarType != EVT_Struct) - { - DPF(0, "ID3DX11EffectType::GetMemberTypeByIndex: This interface does not refer to a structure"); - return &g_InvalidType; - } - - return GetTypeByIndexHelper(Index, StructType.Members, StructType.pMembers, sizeof(SVariable)); -} - -ID3DX11EffectType * SType::GetMemberTypeByName(LPCSTR Name) -{ - if (VarType != EVT_Struct) - { - DPF(0, "ID3DX11EffectType::GetMemberTypeByName: This interface does not refer to a structure"); - return &g_InvalidType; - } - - return GetTypeByNameHelper(Name, StructType.Members, StructType.pMembers, sizeof(SVariable)); -} - -ID3DX11EffectType * SType::GetMemberTypeBySemantic(LPCSTR Semantic) -{ - if (VarType != EVT_Struct) - { - DPF(0, "ID3DX11EffectType::GetMemberTypeBySemantic: This interface does not refer to a structure"); - return &g_InvalidType; - } - - return GetTypeBySemanticHelper(Semantic, StructType.Members, StructType.pMembers, sizeof(SVariable)); -} - -LPCSTR SType::GetMemberName(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11EffectType::GetMemberName"; - - if (VarType != EVT_Struct) - { - DPF(0, "%s: This interface does not refer to a structure", pFuncName); - return NULL; - } - - if (Index >= StructType.Members) - { - DPF(0, "%s: Invalid index (%d, total: %d)", pFuncName, Index, StructType.Members); - return NULL; - } - - SVariable *pVariable = StructType.pMembers + Index; - - if (NULL == pVariable->pName) - { - DPF(0, "%s: Cannot get member names; Effect has been Optimize()'ed", pFuncName); - return NULL; - } - - return pVariable->pName; -} - -LPCSTR SType::GetMemberSemantic(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11EffectType::GetMemberSemantic"; - - if (VarType != EVT_Struct) - { - DPF(0, "%s: This interface does not refer to a structure", pFuncName); - return NULL; - } - - if (Index >= StructType.Members) - { - DPF(0, "%s: Invalid index (%d, total: %d)", pFuncName, Index, StructType.Members); - return NULL; - } - - SVariable *pVariable = StructType.pMembers + Index; - - if (NULL == pVariable->pName) - { - DPF(0, "%s: Cannot get member semantics; Effect has been Optimize()'ed", pFuncName); - return NULL; - } - - return pVariable->pSemantic; -} - -HRESULT SType::GetDescHelper(D3DX11_EFFECT_TYPE_DESC *pDesc, BOOL IsSingleElement) const -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectType::GetDesc"; - - VERIFYPARAMETER(pDesc); - - pDesc->TypeName = pTypeName; - - // intentionally return 0 so they know it's not a single element array - pDesc->Elements = IsSingleElement ? 0 : Elements; - pDesc->PackedSize = GetTotalPackedSize(IsSingleElement); - pDesc->UnpackedSize = GetTotalUnpackedSize(IsSingleElement); - pDesc->Stride = Stride; - - switch (VarType) - { - case EVT_Numeric: - switch (NumericType.NumericLayout) - { - case ENL_Matrix: - if (NumericType.IsColumnMajor) - { - pDesc->Class = D3D10_SVC_MATRIX_COLUMNS; - } - else - { - pDesc->Class = D3D10_SVC_MATRIX_ROWS; - } - break; - case ENL_Vector: - pDesc->Class = D3D10_SVC_VECTOR; - break; - case ENL_Scalar: - pDesc->Class = D3D10_SVC_SCALAR; - break; - default: - D3DXASSERT(0); - } - - switch (NumericType.ScalarType) - { - case EST_Bool: - pDesc->Type = D3D10_SVT_BOOL; - break; - case EST_Int: - pDesc->Type = D3D10_SVT_INT; - break; - case EST_UInt: - pDesc->Type = D3D10_SVT_UINT; - break; - case EST_Float: - pDesc->Type = D3D10_SVT_FLOAT; - break; - default: - D3DXASSERT(0); - } - - pDesc->Rows = NumericType.Rows; - pDesc->Columns = NumericType.Columns; - pDesc->Members = 0; - - break; - - case EVT_Struct: - pDesc->Rows = 0; - pDesc->Columns = 0; - pDesc->Members = StructType.Members; - if( StructType.ImplementsInterface ) - { - pDesc->Class = D3D11_SVC_INTERFACE_CLASS; - } - else - { - pDesc->Class = D3D10_SVC_STRUCT; - } - pDesc->Type = D3D10_SVT_VOID; - break; - - case EVT_Interface: - pDesc->Rows = 0; - pDesc->Columns = 0; - pDesc->Members = 0; - pDesc->Class = D3D11_SVC_INTERFACE_POINTER; - pDesc->Type = D3D11_SVT_INTERFACE_POINTER; - break; - - case EVT_Object: - pDesc->Rows = 0; - pDesc->Columns = 0; - pDesc->Members = 0; - pDesc->Class = D3D10_SVC_OBJECT; - - switch (ObjectType) - { - case EOT_String: - pDesc->Type = D3D10_SVT_STRING; - break; - case EOT_Blend: - pDesc->Type = D3D10_SVT_BLEND; - break; - case EOT_DepthStencil: - pDesc->Type = D3D10_SVT_DEPTHSTENCIL; - break; - case EOT_Rasterizer: - pDesc->Type = D3D10_SVT_RASTERIZER; - break; - case EOT_PixelShader: - case EOT_PixelShader5: - pDesc->Type = D3D10_SVT_PIXELSHADER; - break; - case EOT_VertexShader: - case EOT_VertexShader5: - pDesc->Type = D3D10_SVT_VERTEXSHADER; - break; - case EOT_GeometryShader: - case EOT_GeometryShaderSO: - case EOT_GeometryShader5: - pDesc->Type = D3D10_SVT_GEOMETRYSHADER; - break; - case EOT_HullShader5: - pDesc->Type = D3D11_SVT_HULLSHADER; - break; - case EOT_DomainShader5: - pDesc->Type = D3D11_SVT_DOMAINSHADER; - break; - case EOT_ComputeShader5: - pDesc->Type = D3D11_SVT_COMPUTESHADER; - break; - case EOT_Texture: - pDesc->Type = D3D10_SVT_TEXTURE; - break; - case EOT_Texture1D: - pDesc->Type = D3D10_SVT_TEXTURE1D; - break; - case EOT_Texture1DArray: - pDesc->Type = D3D10_SVT_TEXTURE1DARRAY; - break; - case EOT_Texture2D: - pDesc->Type = D3D10_SVT_TEXTURE2D; - break; - case EOT_Texture2DArray: - pDesc->Type = D3D10_SVT_TEXTURE2DARRAY; - break; - case EOT_Texture2DMS: - pDesc->Type = D3D10_SVT_TEXTURE2DMS; - break; - case EOT_Texture2DMSArray: - pDesc->Type = D3D10_SVT_TEXTURE2DMSARRAY; - break; - case EOT_Texture3D: - pDesc->Type = D3D10_SVT_TEXTURE3D; - break; - case EOT_TextureCube: - pDesc->Type = D3D10_SVT_TEXTURECUBE; - break; - case EOT_TextureCubeArray: - pDesc->Type = D3D10_SVT_TEXTURECUBEARRAY; - break; - case EOT_Buffer: - pDesc->Type = D3D10_SVT_BUFFER; - break; - case EOT_Sampler: - pDesc->Type = D3D10_SVT_SAMPLER; - break; - case EOT_RenderTargetView: - pDesc->Type = D3D10_SVT_RENDERTARGETVIEW; - break; - case EOT_DepthStencilView: - pDesc->Type = D3D10_SVT_DEPTHSTENCILVIEW; - break; - case EOT_RWTexture1D: - pDesc->Type = D3D11_SVT_RWTEXTURE1D; - break; - case EOT_RWTexture1DArray: - pDesc->Type = D3D11_SVT_RWTEXTURE1DARRAY; - break; - case EOT_RWTexture2D: - pDesc->Type = D3D11_SVT_RWTEXTURE2D; - break; - case EOT_RWTexture2DArray: - pDesc->Type = D3D11_SVT_RWTEXTURE2DARRAY; - break; - case EOT_RWTexture3D: - pDesc->Type = D3D11_SVT_RWTEXTURE3D; - break; - case EOT_RWBuffer: - pDesc->Type = D3D11_SVT_RWBUFFER; - break; - case EOT_ByteAddressBuffer: - pDesc->Type = D3D11_SVT_BYTEADDRESS_BUFFER; - break; - case EOT_RWByteAddressBuffer: - pDesc->Type = D3D11_SVT_RWBYTEADDRESS_BUFFER; - break; - case EOT_StructuredBuffer: - pDesc->Type = D3D11_SVT_STRUCTURED_BUFFER; - break; - case EOT_RWStructuredBuffer: - case EOT_RWStructuredBufferAlloc: - case EOT_RWStructuredBufferConsume: - pDesc->Type = D3D11_SVT_RWSTRUCTURED_BUFFER; - break; - case EOT_AppendStructuredBuffer: - pDesc->Type = D3D11_SVT_APPEND_STRUCTURED_BUFFER; - break; - case EOT_ConsumeStructuredBuffer: - pDesc->Type = D3D11_SVT_CONSUME_STRUCTURED_BUFFER; - break; - - default: - D3DXASSERT(0); - } - break; - - default: - D3DXASSERT(0); - } - -lExit: - return hr; - -} - -//////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectShaderVariable (SAnonymousShader implementation) -//////////////////////////////////////////////////////////////////////////////// - -SAnonymousShader::SAnonymousShader(SShaderBlock *pBlock) -{ - pShaderBlock = pBlock; -} - -BOOL SAnonymousShader::IsValid() -{ - return pShaderBlock && pShaderBlock->IsValid; -} - -ID3DX11EffectType * SAnonymousShader::GetType() -{ - return (ID3DX11EffectType *) this; -} - -HRESULT SAnonymousShader::GetDesc(D3DX11_EFFECT_VARIABLE_DESC *pDesc) -{ - pDesc->Annotations = 0; - pDesc->Flags = 0; - - pDesc->Name = "$Anonymous"; - pDesc->Semantic = NULL; - pDesc->BufferOffset = 0; - - return S_OK; -} - -ID3DX11EffectVariable * SAnonymousShader::GetAnnotationByIndex(UINT Index) -{ - DPF(0, "ID3DX11EffectVariable::GetAnnotationByIndex: Anonymous shaders cannot have annotations"); - return &g_InvalidScalarVariable; -} - -ID3DX11EffectVariable * SAnonymousShader::GetAnnotationByName(LPCSTR Name) -{ - DPF(0, "ID3DX11EffectVariable::GetAnnotationByName: Anonymous shaders cannot have annotations"); - return &g_InvalidScalarVariable; -} - -ID3DX11EffectVariable * SAnonymousShader::GetMemberByIndex(UINT Index) -{ - DPF(0, "ID3DX11EffectVariable::GetMemberByIndex: Variable is not a structure"); - return &g_InvalidScalarVariable; -} - -ID3DX11EffectVariable * SAnonymousShader::GetMemberByName(LPCSTR Name) -{ - DPF(0, "ID3DX11EffectVariable::GetMemberByName: Variable is not a structure"); - return &g_InvalidScalarVariable; -} - -ID3DX11EffectVariable * SAnonymousShader::GetMemberBySemantic(LPCSTR Semantic) -{ - DPF(0, "ID3DX11EffectVariable::GetMemberBySemantic: Variable is not a structure"); - return &g_InvalidScalarVariable; -} - -ID3DX11EffectVariable * SAnonymousShader::GetElement(UINT Index) -{ - DPF(0, "ID3DX11EffectVariable::GetElement: Anonymous shaders cannot have elements"); - return &g_InvalidScalarVariable; -} - -ID3DX11EffectConstantBuffer * SAnonymousShader::GetParentConstantBuffer() -{ - return NoParentCB(); -} - -ID3DX11EffectShaderVariable * SAnonymousShader::AsShader() -{ - return (ID3DX11EffectShaderVariable *) this; -} - -HRESULT SAnonymousShader::SetRawValue(CONST void *pData, UINT Offset, UINT Count) -{ - return ObjectSetRawValue(); -} - -HRESULT SAnonymousShader::GetRawValue(__out_bcount(Count) void *pData, UINT Offset, UINT Count) -{ - return ObjectGetRawValue(); -} - -#define ANONYMOUS_SHADER_INDEX_CHECK() \ - HRESULT hr = S_OK; \ - if (0 != ShaderIndex) \ - { \ - DPF(0, "%s: Invalid index specified", pFuncName); \ - VH(E_INVALIDARG); \ - } \ - -HRESULT SAnonymousShader::GetShaderDesc(UINT ShaderIndex, D3DX11_EFFECT_SHADER_DESC *pDesc) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetShaderDesc"; - - ANONYMOUS_SHADER_INDEX_CHECK(); - - pShaderBlock->GetShaderDesc(pDesc, TRUE); - -lExit: - return hr; -} - -HRESULT SAnonymousShader::GetVertexShader(UINT ShaderIndex, ID3D11VertexShader **ppVS) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetVertexShader"; - - ANONYMOUS_SHADER_INDEX_CHECK(); - - VH( pShaderBlock->GetVertexShader(ppVS) ); - -lExit: - return hr; -} - -HRESULT SAnonymousShader::GetGeometryShader(UINT ShaderIndex, ID3D11GeometryShader **ppGS) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetGeometryShader"; - - ANONYMOUS_SHADER_INDEX_CHECK(); - - VH( pShaderBlock->GetGeometryShader(ppGS) ); - -lExit: - return hr; -} - -HRESULT SAnonymousShader::GetPixelShader(UINT ShaderIndex, ID3D11PixelShader **ppPS) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetPixelShader"; - - ANONYMOUS_SHADER_INDEX_CHECK(); - - VH( pShaderBlock->GetPixelShader(ppPS) ); - -lExit: - return hr; -} - -HRESULT SAnonymousShader::GetHullShader(UINT ShaderIndex, ID3D11HullShader **ppHS) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetHullShader"; - - ANONYMOUS_SHADER_INDEX_CHECK(); - - VH( pShaderBlock->GetHullShader(ppHS) ); - -lExit: - return hr; -} - -HRESULT SAnonymousShader::GetDomainShader(UINT ShaderIndex, ID3D11DomainShader **ppCS) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetDomainShader"; - - ANONYMOUS_SHADER_INDEX_CHECK(); - - VH( pShaderBlock->GetDomainShader(ppCS) ); - -lExit: - return hr; -} - -HRESULT SAnonymousShader::GetComputeShader(UINT ShaderIndex, ID3D11ComputeShader **ppCS) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetComputeShader"; - - ANONYMOUS_SHADER_INDEX_CHECK(); - - VH( pShaderBlock->GetComputeShader(ppCS) ); - -lExit: - return hr; -} - -HRESULT SAnonymousShader::GetInputSignatureElementDesc(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetInputSignatureElementDesc"; - - ANONYMOUS_SHADER_INDEX_CHECK(); - - VH( pShaderBlock->GetSignatureElementDesc(SShaderBlock::ST_Input, Element, pDesc) ); - -lExit: - return hr; -} - -HRESULT SAnonymousShader::GetOutputSignatureElementDesc(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetOutputSignatureElementDesc"; - - ANONYMOUS_SHADER_INDEX_CHECK(); - - VH( pShaderBlock->GetSignatureElementDesc(SShaderBlock::ST_Output, Element, pDesc) ); - -lExit: - return hr; -} - -HRESULT SAnonymousShader::GetPatchConstantSignatureElementDesc(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetPatchConstantSignatureElementDesc"; - - ANONYMOUS_SHADER_INDEX_CHECK(); - - VH( pShaderBlock->GetSignatureElementDesc(SShaderBlock::ST_PatchConstant, Element, pDesc) ); - -lExit: - return hr; -} - -HRESULT SAnonymousShader::GetDesc(D3DX11_EFFECT_TYPE_DESC *pDesc) -{ - pDesc->Class = D3D10_SVC_OBJECT; - - switch (pShaderBlock->GetShaderType()) - { - case EOT_VertexShader: - case EOT_VertexShader5: - pDesc->TypeName = "vertexshader"; - pDesc->Type = D3D10_SVT_VERTEXSHADER; - break; - case EOT_GeometryShader: - case EOT_GeometryShader5: - pDesc->TypeName = "geometryshader"; - pDesc->Type = D3D10_SVT_GEOMETRYSHADER; - break; - case EOT_PixelShader: - case EOT_PixelShader5: - pDesc->TypeName = "pixelshader"; - pDesc->Type = D3D10_SVT_PIXELSHADER; - break; - case EOT_HullShader5: - pDesc->TypeName = "Hullshader"; - pDesc->Type = D3D11_SVT_HULLSHADER; - break; - case EOT_DomainShader5: - pDesc->TypeName = "Domainshader"; - pDesc->Type = D3D11_SVT_DOMAINSHADER; - break; - case EOT_ComputeShader5: - pDesc->TypeName = "Computeshader"; - pDesc->Type = D3D11_SVT_COMPUTESHADER; - break; - } - - pDesc->Elements = 0; - pDesc->Members = 0; - pDesc->Rows = 0; - pDesc->Columns = 0; - pDesc->PackedSize = 0; - pDesc->UnpackedSize = 0; - pDesc->Stride = 0; - - return S_OK; -} - -ID3DX11EffectType * SAnonymousShader::GetMemberTypeByIndex(UINT Index) -{ - DPF(0, "ID3DX11EffectType::GetMemberTypeByIndex: This interface does not refer to a structure"); - return &g_InvalidType; -} - -ID3DX11EffectType * SAnonymousShader::GetMemberTypeByName(LPCSTR Name) -{ - DPF(0, "ID3DX11EffectType::GetMemberTypeByName: This interface does not refer to a structure"); - return &g_InvalidType; -} - -ID3DX11EffectType * SAnonymousShader::GetMemberTypeBySemantic(LPCSTR Semantic) -{ - DPF(0, "ID3DX11EffectType::GetMemberTypeBySemantic: This interface does not refer to a structure"); - return &g_InvalidType; -} - -LPCSTR SAnonymousShader::GetMemberName(UINT Index) -{ - DPF(0, "ID3DX11EffectType::GetMemberName: This interface does not refer to a structure"); - return NULL; -} - -LPCSTR SAnonymousShader::GetMemberSemantic(UINT Index) -{ - DPF(0, "ID3DX11EffectType::GetMemberSemantic: This interface does not refer to a structure"); - return NULL; -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectConstantBuffer (SConstantBuffer implementation) -////////////////////////////////////////////////////////////////////////// - -BOOL SConstantBuffer::IsValid() -{ - return TRUE; -} - -ID3DX11EffectType * SConstantBuffer::GetType() -{ - return (ID3DX11EffectType *) this; -} - -HRESULT SConstantBuffer::GetDesc(D3DX11_EFFECT_VARIABLE_DESC *pDesc) -{ - pDesc->Annotations = AnnotationCount; - pDesc->Flags = 0; - - pDesc->Name = pName; - pDesc->Semantic = NULL; - pDesc->BufferOffset = 0; - - if (ExplicitBindPoint != -1) - { - pDesc->ExplicitBindPoint = ExplicitBindPoint; - pDesc->Flags |= D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT; - } - else - { - pDesc->ExplicitBindPoint = 0; - } - - return S_OK; -} - -ID3DX11EffectVariable * SConstantBuffer::GetAnnotationByIndex(UINT Index) -{ - return GetAnnotationByIndexHelper("ID3DX11EffectVariable", Index, AnnotationCount, pAnnotations); -} - -ID3DX11EffectVariable * SConstantBuffer::GetAnnotationByName(LPCSTR Name) -{ - return GetAnnotationByNameHelper("ID3DX11EffectVariable", Name, AnnotationCount, pAnnotations); -} - -ID3DX11EffectVariable * SConstantBuffer::GetMemberByIndex(UINT Index) -{ - SGlobalVariable *pMember; - UDataPointer dataPtr; - - if (IsEffectOptimized) - { - DPF(0, "ID3DX11EffectVariable::GetMemberByIndex: Cannot get members; effect has been Optimize()'ed"); - return &g_InvalidScalarVariable; - } - - if (!GetVariableByIndexHelper(Index, VariableCount, (SGlobalVariable*)pVariables, - NULL, &pMember, &dataPtr.pGeneric)) - { - return &g_InvalidScalarVariable; - } - - return (ID3DX11EffectVariable *) pMember; -} - -ID3DX11EffectVariable * SConstantBuffer::GetMemberByName(LPCSTR Name) -{ - SGlobalVariable *pMember; - UDataPointer dataPtr; - UINT index; - - if (IsEffectOptimized) - { - DPF(0, "ID3DX11EffectVariable::GetMemberByName: Cannot get members; effect has been Optimize()'ed"); - return &g_InvalidScalarVariable; - } - - if (!GetVariableByNameHelper(Name, VariableCount, (SGlobalVariable*)pVariables, - NULL, &pMember, &dataPtr.pGeneric, &index)) - { - return &g_InvalidScalarVariable; - } - - return (ID3DX11EffectVariable *) pMember; -} - -ID3DX11EffectVariable * SConstantBuffer::GetMemberBySemantic(LPCSTR Semantic) -{ - SGlobalVariable *pMember; - UDataPointer dataPtr; - UINT index; - - if (IsEffectOptimized) - { - DPF(0, "ID3DX11EffectVariable::GetMemberBySemantic: Cannot get members; effect has been Optimize()'ed"); - return &g_InvalidScalarVariable; - } - - if (!GetVariableBySemanticHelper(Semantic, VariableCount, (SGlobalVariable*)pVariables, - NULL, &pMember, &dataPtr.pGeneric, &index)) - { - return &g_InvalidScalarVariable; - } - - return (ID3DX11EffectVariable *) pMember; -} - -ID3DX11EffectVariable * SConstantBuffer::GetElement(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::GetElement"; - DPF(0, "%s: This interface does not refer to an array", pFuncName); - return &g_InvalidScalarVariable; -} - -ID3DX11EffectConstantBuffer * SConstantBuffer::GetParentConstantBuffer() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::GetParentConstantBuffer"; - DPF(0, "%s: Constant buffers do not have parent constant buffers", pFuncName); - return &g_InvalidConstantBuffer; -} - -ID3DX11EffectConstantBuffer * SConstantBuffer::AsConstantBuffer() -{ - return (ID3DX11EffectConstantBuffer *) this; -} - -HRESULT SConstantBuffer::GetDesc(D3DX11_EFFECT_TYPE_DESC *pDesc) -{ - pDesc->TypeName = IsTBuffer ? "tbuffer" : "cbuffer"; - pDesc->Class = D3D10_SVC_OBJECT; - pDesc->Type = IsTBuffer ? D3D10_SVT_TBUFFER : D3D10_SVT_CBUFFER; - - pDesc->Elements = 0; - pDesc->Members = VariableCount; - pDesc->Rows = 0; - pDesc->Columns = 0; - - UINT i; - pDesc->PackedSize = 0; - for (i = 0; i < VariableCount; ++ i) - { - pDesc->PackedSize += pVariables[i].pType->PackedSize; - } - - pDesc->UnpackedSize = Size; - D3DXASSERT(pDesc->UnpackedSize >= pDesc->PackedSize); - - pDesc->Stride = AlignToPowerOf2(pDesc->UnpackedSize, SType::c_RegisterSize); - - return S_OK; -} - -ID3DX11EffectType * SConstantBuffer::GetMemberTypeByIndex(UINT Index) -{ - return GetTypeByIndexHelper(Index, VariableCount, pVariables, sizeof (SGlobalVariable)); -} - -ID3DX11EffectType * SConstantBuffer::GetMemberTypeByName(LPCSTR Name) -{ - return GetTypeByNameHelper(Name, VariableCount, pVariables, sizeof (SGlobalVariable)); -} - -ID3DX11EffectType * SConstantBuffer::GetMemberTypeBySemantic(LPCSTR Semantic) -{ - return GetTypeBySemanticHelper(Semantic, VariableCount, pVariables, sizeof (SGlobalVariable)); -} - -LPCSTR SConstantBuffer::GetMemberName(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11EffectType::GetMemberName"; - - if (IsEffectOptimized) - { - DPF(0, "%s: Cannot get member names; Effect has been Optimize()'ed", pFuncName); - return NULL; - } - - if (Index >= VariableCount) - { - DPF(0, "%s: Invalid index (%d, total: %d)", pFuncName, Index, VariableCount); - return NULL; - } - - return pVariables[Index].pName; -} - -LPCSTR SConstantBuffer::GetMemberSemantic(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11EffectType::GetMemberSemantic"; - - if (IsEffectOptimized) - { - DPF(0, "%s: Cannot get member semantics; Effect has been Optimize()'ed", pFuncName); - return NULL; - } - - if (Index >= VariableCount) - { - DPF(0, "%s: Invalid index (%d, total: %d)", pFuncName, Index, VariableCount); - return NULL; - } - - return pVariables[Index].pSemantic; -} - -HRESULT SConstantBuffer::SetRawValue(CONST void *pData, UINT Offset, UINT Count) -{ - HRESULT hr = S_OK; - -#ifdef _DEBUG - LPCSTR pFuncName = "ID3DX11EffectVariable::SetRawValue"; - - VERIFYPARAMETER(pData); - - if ((Offset + Count < Offset) || - (Count + (BYTE*)pData < (BYTE*)pData) || - ((Offset + Count) > Size)) - { - // overflow of some kind - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - if (IsUsedByExpression) - { - UINT i; - for (i = 0; i < VariableCount; ++ i) - { - ((SGlobalVariable*)pVariables)[i].DirtyVariable(); - } - } - else - { - IsDirty = TRUE; - } - - memcpy(pBackingStore + Offset, pData, Count); - -lExit: - return hr; -} - -HRESULT SConstantBuffer::GetRawValue(__out_bcount(Count) void *pData, UINT Offset, UINT Count) -{ - HRESULT hr = S_OK; - -#ifdef _DEBUG - LPCSTR pFuncName = "ID3DX11EffectVariable::GetRawValue"; - - VERIFYPARAMETER(pData); - - if ((Offset + Count < Offset) || - (Count + (BYTE*)pData < (BYTE*)pData) || - ((Offset + Count) > Size)) - { - // overflow of some kind - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - memcpy(pData, pBackingStore + Offset, Count); - -lExit: - return hr; -} - -bool SConstantBuffer::ClonedSingle() const -{ - return IsSingle && ( pEffect->m_Flags & D3DX11_EFFECT_CLONE ); -} - -HRESULT SConstantBuffer::SetConstantBuffer(ID3D11Buffer *pConstantBuffer) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectConstantBuffer::SetConstantBuffer"; - - if (IsTBuffer) - { - DPF(0, "%s: This is a texture buffer; use SetTextureBuffer instead", pFuncName); - VH(D3DERR_INVALIDCALL); - } - - // Replace all references to the old shader block with this one - pEffect->ReplaceCBReference(this, pConstantBuffer); - - if( !IsUserManaged ) - { - // Save original cbuffer in case we UndoSet - D3DXASSERT( pMemberData[0].Type == MDT_Buffer ); - VB( pMemberData[0].Data.pD3DEffectsManagedConstantBuffer == NULL ); - pMemberData[0].Data.pD3DEffectsManagedConstantBuffer = pD3DObject; - pD3DObject = NULL; - IsUserManaged = TRUE; - IsNonUpdatable = TRUE; - } - - SAFE_ADDREF( pConstantBuffer ); - SAFE_RELEASE( pD3DObject ); - pD3DObject = pConstantBuffer; - -lExit: - return hr; -} - -HRESULT SConstantBuffer::GetConstantBuffer(ID3D11Buffer **ppConstantBuffer) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectConstantBuffer::GetConstantBuffer"; - - VERIFYPARAMETER(ppConstantBuffer); - - if (IsTBuffer) - { - DPF(0, "%s: This is a texture buffer; use GetTextureBuffer instead", pFuncName); - VH(D3DERR_INVALIDCALL); - } - - *ppConstantBuffer = pD3DObject; - SAFE_ADDREF(*ppConstantBuffer); - -lExit: - return hr; -} - -HRESULT SConstantBuffer::UndoSetConstantBuffer() -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectConstantBuffer::UndoSetConstantBuffer"; - - if (IsTBuffer) - { - DPF(0, "%s: This is a texture buffer; use UndoSetTextureBuffer instead", pFuncName); - VH(D3DERR_INVALIDCALL); - } - - if( !IsUserManaged ) - { - return S_FALSE; - } - - // Replace all references to the old shader block with this one - pEffect->ReplaceCBReference(this, pMemberData[0].Data.pD3DEffectsManagedConstantBuffer); - - // Revert to original cbuffer - SAFE_RELEASE( pD3DObject ); - pD3DObject = pMemberData[0].Data.pD3DEffectsManagedConstantBuffer; - pMemberData[0].Data.pD3DEffectsManagedConstantBuffer = NULL; - IsUserManaged = FALSE; - IsNonUpdatable = ClonedSingle(); - -lExit: - return hr; -} - -HRESULT SConstantBuffer::SetTextureBuffer(ID3D11ShaderResourceView *pTextureBuffer) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectConstantBuffer::SetTextureBuffer"; - - if (!IsTBuffer) - { - DPF(0, "%s: This is a constant buffer; use SetConstantBuffer instead", pFuncName); - VH(D3DERR_INVALIDCALL); - } - - if( !IsUserManaged ) - { - // Save original cbuffer and tbuffer in case we UndoSet - D3DXASSERT( pMemberData[0].Type == MDT_Buffer ); - VB( pMemberData[0].Data.pD3DEffectsManagedConstantBuffer == NULL ); - pMemberData[0].Data.pD3DEffectsManagedConstantBuffer = pD3DObject; - pD3DObject = NULL; - D3DXASSERT( pMemberData[1].Type == MDT_ShaderResourceView ); - VB( pMemberData[1].Data.pD3DEffectsManagedTextureBuffer == NULL ); - pMemberData[1].Data.pD3DEffectsManagedTextureBuffer = TBuffer.pShaderResource; - TBuffer.pShaderResource = NULL; - IsUserManaged = TRUE; - IsNonUpdatable = TRUE; - } - - SAFE_ADDREF( pTextureBuffer ); - SAFE_RELEASE(pD3DObject); // won't be needing this anymore... - SAFE_RELEASE( TBuffer.pShaderResource ); - TBuffer.pShaderResource = pTextureBuffer; - -lExit: - return hr; -} - -HRESULT SConstantBuffer::GetTextureBuffer(ID3D11ShaderResourceView **ppTextureBuffer) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectConstantBuffer::GetTextureBuffer"; - - VERIFYPARAMETER(ppTextureBuffer); - - if (!IsTBuffer) - { - DPF(0, "%s: This is a constant buffer; use GetConstantBuffer instead", pFuncName); - VH(D3DERR_INVALIDCALL); - } - - *ppTextureBuffer = TBuffer.pShaderResource; - SAFE_ADDREF(*ppTextureBuffer); - -lExit: - return hr; -} - -HRESULT SConstantBuffer::UndoSetTextureBuffer() -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectConstantBuffer::UndoSetTextureBuffer"; - - if (!IsTBuffer) - { - DPF(0, "%s: This is a texture buffer; use UndoSetConstantBuffer instead", pFuncName); - VH(D3DERR_INVALIDCALL); - } - - if( !IsUserManaged ) - { - return S_FALSE; - } - - // Revert to original cbuffer - SAFE_RELEASE( pD3DObject ); - pD3DObject = pMemberData[0].Data.pD3DEffectsManagedConstantBuffer; - pMemberData[0].Data.pD3DEffectsManagedConstantBuffer = NULL; - SAFE_RELEASE( TBuffer.pShaderResource ); - TBuffer.pShaderResource = pMemberData[1].Data.pD3DEffectsManagedTextureBuffer; - pMemberData[1].Data.pD3DEffectsManagedTextureBuffer = NULL; - IsUserManaged = FALSE; - IsNonUpdatable = ClonedSingle(); - -lExit: - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectPass (CEffectPass implementation) -////////////////////////////////////////////////////////////////////////// - -BOOL SPassBlock::IsValid() -{ - if( HasDependencies ) - return pEffect->ValidatePassBlock( this ); - return InitiallyValid; -} - -HRESULT SPassBlock::GetDesc(D3DX11_PASS_DESC *pDesc) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectPass::GetDesc"; - - VERIFYPARAMETER(pDesc); - - ZeroMemory(pDesc, sizeof(*pDesc)); - - pDesc->Name = pName; - pDesc->Annotations = AnnotationCount; - - SAssignment *pAssignment; - SAssignment *pLastAssn; - - pEffect->IncrementTimer(); - - pAssignment = pAssignments; - pLastAssn = pAssignments + AssignmentCount; - - for(; pAssignment < pLastAssn; pAssignment++) - { - pEffect->EvaluateAssignment(pAssignment); - } - - if( BackingStore.pVertexShaderBlock && BackingStore.pVertexShaderBlock->pInputSignatureBlob ) - { - // pInputSignatureBlob can be null if we're setting a NULL VS "SetVertexShader( NULL )" - pDesc->pIAInputSignature = (BYTE*)BackingStore.pVertexShaderBlock->pInputSignatureBlob->GetBufferPointer(); - pDesc->IAInputSignatureSize = BackingStore.pVertexShaderBlock->pInputSignatureBlob->GetBufferSize(); - } - - pDesc->StencilRef = BackingStore.StencilRef; - pDesc->SampleMask = BackingStore.SampleMask; - pDesc->BlendFactor[0] = BackingStore.BlendFactor[0]; - pDesc->BlendFactor[1] = BackingStore.BlendFactor[1]; - pDesc->BlendFactor[2] = BackingStore.BlendFactor[2]; - pDesc->BlendFactor[3] = BackingStore.BlendFactor[3]; - -lExit: - return hr; -} - -extern SShaderBlock g_NullVS; -extern SShaderBlock g_NullGS; -extern SShaderBlock g_NullPS; -extern SShaderBlock g_NullHS; -extern SShaderBlock g_NullDS; -extern SShaderBlock g_NullCS; - -SAnonymousShader g_AnonymousNullVS(&g_NullVS); -SAnonymousShader g_AnonymousNullGS(&g_NullGS); -SAnonymousShader g_AnonymousNullPS(&g_NullPS); -SAnonymousShader g_AnonymousNullHS(&g_NullHS); -SAnonymousShader g_AnonymousNullDS(&g_NullDS); -SAnonymousShader g_AnonymousNullCS(&g_NullCS); - -template -HRESULT SPassBlock::GetShaderDescHelper(D3DX11_PASS_SHADER_DESC *pDesc) -{ - HRESULT hr = S_OK; - UINT i; - LPCSTR pFuncName = NULL; - SShaderBlock *pShaderBlock = NULL; - - ApplyPassAssignments(); - - switch (EShaderType) - { - case EOT_VertexShader: - case EOT_VertexShader5: -#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF") - pFuncName = "ID3DX11EffectPass::GetVertexShaderDesc"; - pShaderBlock = BackingStore.pVertexShaderBlock; - break; - case EOT_PixelShader: - case EOT_PixelShader5: -#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF") - pFuncName = "ID3DX11EffectPass::GetPixelShaderDesc"; - pShaderBlock = BackingStore.pPixelShaderBlock; - break; - case EOT_GeometryShader: - case EOT_GeometryShader5: -#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF") - pFuncName = "ID3DX11EffectPass::GetGeometryShaderDesc"; - pShaderBlock = BackingStore.pGeometryShaderBlock; - break; - case EOT_HullShader5: -#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF") - pFuncName = "ID3DX11EffectPass::GetHullShaderDesc"; - pShaderBlock = BackingStore.pHullShaderBlock; - break; - case EOT_DomainShader5: -#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF") - pFuncName = "ID3DX11EffectPass::GetDomainShaderDesc"; - pShaderBlock = BackingStore.pDomainShaderBlock; - break; - case EOT_ComputeShader5: -#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF") - pFuncName = "ID3DX11EffectPass::GetComputeShaderDesc"; - pShaderBlock = BackingStore.pComputeShaderBlock; - break; - default: - D3DXASSERT(0); - } - - VERIFYPARAMETER(pDesc); - - // in case of error (or in case the assignment doesn't exist), return something reasonable - pDesc->pShaderVariable = &g_InvalidShaderVariable; - pDesc->ShaderIndex = 0; - - if (NULL != pShaderBlock) - { - UINT elements, varCount, anonymousShaderCount; - SGlobalVariable *pVariables; - SAnonymousShader *pAnonymousShaders; - - if (pShaderBlock == &g_NullVS) - { - pDesc->pShaderVariable = &g_AnonymousNullVS; - pDesc->ShaderIndex = 0; - // we're done - goto lExit; - } - else if (pShaderBlock == &g_NullGS) - { - pDesc->pShaderVariable = &g_AnonymousNullGS; - pDesc->ShaderIndex = 0; - // we're done - goto lExit; - } - else if (pShaderBlock == &g_NullPS) - { - pDesc->pShaderVariable = &g_AnonymousNullPS; - pDesc->ShaderIndex = 0; - // we're done - goto lExit; - } - else if (pShaderBlock == &g_NullHS) - { - pDesc->pShaderVariable = &g_AnonymousNullHS; - pDesc->ShaderIndex = 0; - // we're done - goto lExit; - } - else if (pShaderBlock == &g_NullDS) - { - pDesc->pShaderVariable = &g_AnonymousNullDS; - pDesc->ShaderIndex = 0; - // we're done - goto lExit; - } - else if (pShaderBlock == &g_NullCS) - { - pDesc->pShaderVariable = &g_AnonymousNullCS; - pDesc->ShaderIndex = 0; - // we're done - goto lExit; - } - else - { - VB( pEffect->IsRuntimeData(pShaderBlock) ); - varCount = pEffect->m_VariableCount; - pVariables = pEffect->m_pVariables; - anonymousShaderCount = pEffect->m_AnonymousShaderCount; - pAnonymousShaders = pEffect->m_pAnonymousShaders; - } - - for (i = 0; i < varCount; ++ i) - { - elements = max(1, pVariables[i].pType->Elements); - // make sure the variable type matches, and don't forget about GeometryShaderSO's - if (pVariables[i].pType->IsShader()) - { - if (pShaderBlock >= pVariables[i].Data.pShader && pShaderBlock < pVariables[i].Data.pShader + elements) - { - pDesc->pShaderVariable = (ID3DX11EffectShaderVariable *)(pVariables + i); - pDesc->ShaderIndex = (UINT)(UINT_PTR)(pShaderBlock - pVariables[i].Data.pShader); - // we're done - goto lExit; - } - } - } - - for (i = 0; i < anonymousShaderCount; ++ i) - { - if (pShaderBlock == pAnonymousShaders[i].pShaderBlock) - { - VB(EShaderType == pAnonymousShaders[i].pShaderBlock->GetShaderType()) - pDesc->pShaderVariable = (pAnonymousShaders + i); - pDesc->ShaderIndex = 0; - // we're done - goto lExit; - } - } - - DPF(0, "%s: Internal error; shader not found", pFuncName); - VH( E_FAIL ); - } - -lExit: - return hr; -} - -HRESULT SPassBlock::GetVertexShaderDesc(D3DX11_PASS_SHADER_DESC *pDesc) -{ - return GetShaderDescHelper(pDesc); -} - -HRESULT SPassBlock::GetPixelShaderDesc(D3DX11_PASS_SHADER_DESC *pDesc) -{ - return GetShaderDescHelper(pDesc); -} - -HRESULT SPassBlock::GetGeometryShaderDesc(D3DX11_PASS_SHADER_DESC *pDesc) -{ - return GetShaderDescHelper(pDesc); -} - -HRESULT SPassBlock::GetHullShaderDesc(D3DX11_PASS_SHADER_DESC *pDesc) -{ - return GetShaderDescHelper(pDesc); -} - -HRESULT SPassBlock::GetDomainShaderDesc(D3DX11_PASS_SHADER_DESC *pDesc) -{ - return GetShaderDescHelper(pDesc); -} - -HRESULT SPassBlock::GetComputeShaderDesc(D3DX11_PASS_SHADER_DESC *pDesc) -{ - return GetShaderDescHelper(pDesc); -} - -ID3DX11EffectVariable * SPassBlock::GetAnnotationByIndex(UINT Index) -{ - return GetAnnotationByIndexHelper("ID3DX11EffectPass", Index, AnnotationCount, pAnnotations); -} - -ID3DX11EffectVariable * SPassBlock::GetAnnotationByName(LPCSTR Name) -{ - return GetAnnotationByNameHelper("ID3DX11EffectPass", Name, AnnotationCount, pAnnotations); -} - -HRESULT SPassBlock::Apply(UINT Flags, ID3D11DeviceContext* pContext) -{ - HRESULT hr = S_OK; - - // TODO: Flags are not yet implemented - - D3DXASSERT( pEffect->m_pContext == NULL ); - pEffect->m_pContext = pContext; - pEffect->ApplyPassBlock(this); - pEffect->m_pContext = NULL; - -lExit: - return hr; -} - -HRESULT SPassBlock::ComputeStateBlockMask(D3DX11_STATE_BLOCK_MASK *pStateBlockMask) -{ - HRESULT hr = S_OK; - UINT i, j; - - // flags indicating whether the following shader types were caught by assignment checks or not - BOOL bVS = FALSE, bGS = FALSE, bPS = FALSE, bHS = FALSE, bDS = FALSE, bCS = FALSE; - - for (i = 0; i < AssignmentCount; ++ i) - { - BOOL bShader = FALSE; - - switch (pAssignments[i].LhsType) - { - case ELHS_VertexShaderBlock: - bVS = TRUE; - bShader = TRUE; - break; - case ELHS_GeometryShaderBlock: - bGS = TRUE; - bShader = TRUE; - break; - case ELHS_PixelShaderBlock: - bPS = TRUE; - bShader = TRUE; - break; - case ELHS_HullShaderBlock: - bHS = TRUE; - bShader = TRUE; - break; - case ELHS_DomainShaderBlock: - bDS = TRUE; - bShader = TRUE; - break; - case ELHS_ComputeShaderBlock: - bCS = TRUE; - bShader = TRUE; - break; - - case ELHS_RasterizerBlock: - pStateBlockMask->RSRasterizerState = 1; - break; - case ELHS_BlendBlock: - pStateBlockMask->OMBlendState = 1; - break; - case ELHS_DepthStencilBlock: - pStateBlockMask->OMDepthStencilState = 1; - break; - - default: - // ignore this assignment (must be a scalar/vector assignment associated with a state object) - break; - } - - if (bShader) - { - for (j = 0; j < pAssignments[i].MaxElements; ++ j) - { - // compute state block mask for the union of ALL shaders - VH( pAssignments[i].Source.pShader[j].ComputeStateBlockMask(pStateBlockMask) ); - } - } - } - - // go over the state block objects in case there was no corresponding assignment - if (NULL != BackingStore.pRasterizerBlock) - { - pStateBlockMask->RSRasterizerState = 1; - } - if (NULL != BackingStore.pBlendBlock) - { - pStateBlockMask->OMBlendState = 1; - } - if (NULL != BackingStore.pDepthStencilBlock) - { - pStateBlockMask->OMDepthStencilState = 1; - } - - // go over the shaders only if an assignment didn't already catch them - if (FALSE == bVS && NULL != BackingStore.pVertexShaderBlock) - { - VH( BackingStore.pVertexShaderBlock->ComputeStateBlockMask(pStateBlockMask) ); - } - if (FALSE == bGS && NULL != BackingStore.pGeometryShaderBlock) - { - VH( BackingStore.pGeometryShaderBlock->ComputeStateBlockMask(pStateBlockMask) ); - } - if (FALSE == bPS && NULL != BackingStore.pPixelShaderBlock) - { - VH( BackingStore.pPixelShaderBlock->ComputeStateBlockMask(pStateBlockMask) ); - } - if (FALSE == bHS && NULL != BackingStore.pHullShaderBlock) - { - VH( BackingStore.pHullShaderBlock->ComputeStateBlockMask(pStateBlockMask) ); - } - if (FALSE == bDS && NULL != BackingStore.pDomainShaderBlock) - { - VH( BackingStore.pDomainShaderBlock->ComputeStateBlockMask(pStateBlockMask) ); - } - if (FALSE == bCS && NULL != BackingStore.pComputeShaderBlock) - { - VH( BackingStore.pComputeShaderBlock->ComputeStateBlockMask(pStateBlockMask) ); - } - -lExit: - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectTechnique (STechnique implementation) -////////////////////////////////////////////////////////////////////////// - -BOOL STechnique::IsValid() -{ - if( HasDependencies ) - { - for( UINT i = 0; i < PassCount; i++ ) - { - if( !((SPassBlock*)pPasses)[i].IsValid() ) - return FALSE; - } - return TRUE; - } - return InitiallyValid; -} - -HRESULT STechnique::GetDesc(D3DX11_TECHNIQUE_DESC *pDesc) -{ - HRESULT hr = S_OK; - - LPCSTR pFuncName = "ID3DX11EffectTechnique::GetDesc"; - - VERIFYPARAMETER(pDesc); - - pDesc->Name = pName; - pDesc->Annotations = AnnotationCount; - pDesc->Passes = PassCount; - -lExit: - return hr; -} - -ID3DX11EffectVariable * STechnique::GetAnnotationByIndex(UINT Index) -{ - return GetAnnotationByIndexHelper("ID3DX11EffectTechnique", Index, AnnotationCount, pAnnotations); -} - -ID3DX11EffectVariable * STechnique::GetAnnotationByName(LPCSTR Name) -{ - return GetAnnotationByNameHelper("ID3DX11EffectTechnique", Name, AnnotationCount, pAnnotations); -} - -ID3DX11EffectPass * STechnique::GetPassByIndex(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11EffectTechnique::GetPassByIndex"; - - if (Index >= PassCount) - { - DPF(0, "%s: Invalid pass index (%d, total: %d)", pFuncName, Index, PassCount); - return &g_InvalidPass; - } - - return (ID3DX11EffectPass *)(pPasses + Index); -} - -ID3DX11EffectPass * STechnique::GetPassByName(LPCSTR Name) -{ - LPCSTR pFuncName = "ID3DX11EffectTechnique::GetPassByName"; - - UINT i; - - for (i = 0; i < PassCount; ++ i) - { - if (NULL != pPasses[i].pName && - strcmp(pPasses[i].pName, Name) == 0) - { - break; - } - } - - if (i == PassCount) - { - DPF(0, "%s: Pass [%s] not found", pFuncName, Name); - return &g_InvalidPass; - } - - return (ID3DX11EffectPass *)(pPasses + i); -} - -HRESULT STechnique::ComputeStateBlockMask(D3DX11_STATE_BLOCK_MASK *pStateBlockMask) -{ - HRESULT hr = S_OK; - UINT i; - - for (i = 0; i < PassCount; ++ i) - { - VH( ((SPassBlock*)pPasses)[i].ComputeStateBlockMask(pStateBlockMask) ); - } - -lExit: - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectGroup (SGroup implementation) -////////////////////////////////////////////////////////////////////////// - -BOOL SGroup::IsValid() -{ - if( HasDependencies ) - { - for( UINT i = 0; i < TechniqueCount; i++ ) - { - if( !((STechnique*)pTechniques)[i].IsValid() ) - return FALSE; - } - return TRUE; - } - return InitiallyValid; -} - -HRESULT SGroup::GetDesc(D3DX11_GROUP_DESC *pDesc) -{ - HRESULT hr = S_OK; - - LPCSTR pFuncName = "ID3DX11EffectGroup::GetDesc"; - - VERIFYPARAMETER(pDesc); - - pDesc->Name = pName; - pDesc->Annotations = AnnotationCount; - pDesc->Techniques = TechniqueCount; - -lExit: - return hr; -} - -ID3DX11EffectVariable * SGroup::GetAnnotationByIndex(UINT Index) -{ - return GetAnnotationByIndexHelper("ID3DX11EffectGroup", Index, AnnotationCount, pAnnotations); -} - -ID3DX11EffectVariable * SGroup::GetAnnotationByName(LPCSTR Name) -{ - return GetAnnotationByNameHelper("ID3DX11EffectGroup", Name, AnnotationCount, pAnnotations); -} - -ID3DX11EffectTechnique * SGroup::GetTechniqueByIndex(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11EffectGroup::GetTechniqueByIndex"; - - if (Index >= TechniqueCount) - { - DPF(0, "%s: Invalid pass index (%d, total: %d)", pFuncName, Index, TechniqueCount); - return &g_InvalidTechnique; - } - - return (ID3DX11EffectTechnique *)(pTechniques + Index); -} - -ID3DX11EffectTechnique * SGroup::GetTechniqueByName(LPCSTR Name) -{ - LPCSTR pFuncName = "ID3DX11EffectGroup::GetTechniqueByName"; - - UINT i; - - for (i = 0; i < TechniqueCount; ++ i) - { - if (NULL != pTechniques[i].pName && - strcmp(pTechniques[i].pName, Name) == 0) - { - break; - } - } - - if (i == TechniqueCount) - { - DPF(0, "%s: Technique [%s] not found", pFuncName, Name); - return &g_InvalidTechnique; - } - - return (ID3DX11EffectTechnique *)(pTechniques + i); -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11Effect Public Reflection APIs (CEffect) -////////////////////////////////////////////////////////////////////////// - -HRESULT CEffect::GetDevice(ID3D11Device **ppDevice) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11Effect::GetDevice"; - VERIFYPARAMETER(ppDevice); - - m_pDevice->AddRef(); - *ppDevice = m_pDevice; - -lExit: - return hr; -} - -HRESULT CEffect::GetDesc(D3DX11_EFFECT_DESC *pDesc) -{ - HRESULT hr = S_OK; - - LPCSTR pFuncName = "ID3DX11Effect::GetDesc"; - - VERIFYPARAMETER(pDesc); - - pDesc->ConstantBuffers = m_CBCount; - pDesc->GlobalVariables = m_VariableCount; - pDesc->Techniques = m_TechniqueCount; - pDesc->Groups = m_GroupCount; - pDesc->InterfaceVariables = m_InterfaceCount; - -lExit: - return hr; -} - -ID3DX11EffectConstantBuffer * CEffect::GetConstantBufferByIndex(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11Effect::GetConstantBufferByIndex"; - - if (Index < m_CBCount) - { - return m_pCBs + Index; - } - - DPF(0, "%s: Invalid constant buffer index", pFuncName); - return &g_InvalidConstantBuffer; -} - -ID3DX11EffectConstantBuffer * CEffect::GetConstantBufferByName(LPCSTR Name) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11Effect::GetConstantBufferByName"; - - if (IsOptimized()) - { - DPF(0, "%s: Cannot get constant buffer interfaces by name since the effect has been Optimize()'ed", pFuncName); - return &g_InvalidConstantBuffer; - } - - if (NULL == Name) - { - DPF(0, "%s: Parameter Name was NULL.", pFuncName); - return &g_InvalidConstantBuffer; - } - - UINT i; - - for (i = 0; i < m_CBCount; ++ i) - { - if (strcmp(m_pCBs[i].pName, Name) == 0) - { - return m_pCBs + i; - } - } - - DPF(0, "%s: Constant Buffer [%s] not found", pFuncName, Name); - return &g_InvalidConstantBuffer; -} - -ID3DX11EffectVariable * CEffect::GetVariableByIndex(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11Effect::GetVariableByIndex"; - - if (Index < m_VariableCount) - { - return m_pVariables + Index; - } - - DPF(0, "%s: Invalid variable index", pFuncName); - return &g_InvalidScalarVariable; -} - -ID3DX11EffectVariable * CEffect::GetVariableByName(LPCSTR Name) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11Effect::GetVariableByName"; - - if (IsOptimized()) - { - DPF(0, "%s: Cannot get variable interfaces by name since the effect has been Optimize()'ed", pFuncName); - return &g_InvalidScalarVariable; - } - - if (NULL == Name) - { - DPF(0, "%s: Parameter Name was NULL.", pFuncName); - return &g_InvalidScalarVariable; - } - - UINT i; - - for (i = 0; i < m_VariableCount; ++ i) - { - if (strcmp(m_pVariables[i].pName, Name) == 0) - { - return m_pVariables + i; - } - } - - DPF(0, "%s: Variable [%s] not found", pFuncName, Name); - return &g_InvalidScalarVariable; -} - -ID3DX11EffectVariable * CEffect::GetVariableBySemantic(LPCSTR Semantic) -{ - LPCSTR pFuncName = "ID3DX11Effect::GetVariableBySemantic"; - - if (IsOptimized()) - { - DPF(0, "%s: Cannot get variable interfaces by semantic since the effect has been Optimize()'ed", pFuncName); - return &g_InvalidScalarVariable; - } - - if (NULL == Semantic) - { - DPF(0, "%s: Parameter Semantic was NULL.", pFuncName); - return &g_InvalidScalarVariable; - } - - UINT i; - - for (i = 0; i < m_VariableCount; ++ i) - { - if (NULL != m_pVariables[i].pSemantic && - _stricmp(m_pVariables[i].pSemantic, Semantic) == 0) - { - return (ID3DX11EffectVariable *)(m_pVariables + i); - } - } - - DPF(0, "%s: Variable with semantic [%s] not found", pFuncName, Semantic); - return &g_InvalidScalarVariable; -} - -ID3DX11EffectTechnique * CEffect::GetTechniqueByIndex(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11Effect::GetTechniqueByIndex"; - - if( Index < m_TechniqueCount ) - { - UINT i; - for( i=0; i < m_GroupCount; i++ ) - { - if( Index < m_pGroups[i].TechniqueCount ) - { - return (ID3DX11EffectTechnique *)(m_pGroups[i].pTechniques + Index); - } - Index -= m_pGroups[i].TechniqueCount; - } - D3DXASSERT( FALSE ); - } - DPF(0, "%s: Invalid technique index (%d)", pFuncName, Index); - return &g_InvalidTechnique; -} - -ID3DX11EffectTechnique * CEffect::GetTechniqueByName(LPCSTR Name) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11Effect::GetTechniqueByName"; - const UINT MAX_GROUP_TECHNIQUE_SIZE = 256; - char NameCopy[MAX_GROUP_TECHNIQUE_SIZE]; - - if (IsOptimized()) - { - DPF(0, "ID3DX11Effect::GetTechniqueByName: Cannot get technique interfaces by name since the effect has been Optimize()'ed"); - return &g_InvalidTechnique; - } - - if (NULL == Name) - { - DPF(0, "%s: Parameter Name was NULL.", pFuncName); - return &g_InvalidTechnique; - } - - if( FAILED( StringCchCopyA( NameCopy, MAX_GROUP_TECHNIQUE_SIZE, Name ) ) ) - { - DPF( 0, "Group|Technique name has a length greater than %d.", MAX_GROUP_TECHNIQUE_SIZE ); - return &g_InvalidTechnique; - } - - char* pDelimiter = strchr( NameCopy, '|' ); - if( pDelimiter == NULL ) - { - if ( m_pNullGroup == NULL ) - { - DPF( 0, "The effect contains no default group." ); - return &g_InvalidTechnique; - } - - return m_pNullGroup->GetTechniqueByName( Name ); - } - - // separate group name and technique name - *pDelimiter = 0; - - return GetGroupByName( NameCopy )->GetTechniqueByName( pDelimiter + 1 ); -} - -ID3D11ClassLinkage * CEffect::GetClassLinkage() -{ - SAFE_ADDREF( m_pClassLinkage ); - return m_pClassLinkage; -} - -ID3DX11EffectGroup * CEffect::GetGroupByIndex(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11Effect::GetGroupByIndex"; - - if( Index < m_GroupCount ) - { - return (ID3DX11EffectGroup *)(m_pGroups + Index); - } - DPF(0, "%s: Invalid group index (%d)", pFuncName, Index); - return &g_InvalidGroup; -} - -ID3DX11EffectGroup * CEffect::GetGroupByName(LPCSTR Name) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11Effect::GetGroupByName"; - - if (IsOptimized()) - { - DPF(0, "ID3DX11Effect::GetGroupByName: Cannot get group interfaces by name since the effect has been Optimize()'ed"); - return &g_InvalidGroup; - } - - if (NULL == Name || Name[0] == 0 ) - { - return m_pNullGroup ? (ID3DX11EffectGroup *)m_pNullGroup : &g_InvalidGroup; - } - - UINT i; - - for (i = 0; i < m_GroupCount; ++ i) - { - if (NULL != m_pGroups[i].pName && - strcmp(m_pGroups[i].pName, Name) == 0) - { - break; - } - } - - if (i == m_GroupCount) - { - DPF(0, "%s: Group [%s] not found", pFuncName, Name); - return &g_InvalidGroup; - } - - return (ID3DX11EffectGroup *)(m_pGroups + i); -} - -} diff --git a/sample/d3d11/Effects11/EffectRuntime.cpp b/sample/d3d11/Effects11/EffectRuntime.cpp deleted file mode 100644 index c09dc84..0000000 --- a/sample/d3d11/Effects11/EffectRuntime.cpp +++ /dev/null @@ -1,694 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: EffectRuntime.cpp -// Content: D3DX11 Effect runtime routines (performance critical) -// These functions are expected to be called at high frequency -// (when applying a pass). -// -////////////////////////////////////////////////////////////////////////////// - -#include "pchfx.h" - -namespace D3DX11Effects -{ - // D3D11_KEEP_UNORDERED_ACCESS_VIEWS == (UINT)-1 - UINT g_pNegativeOnes[8] = { D3D11_KEEP_UNORDERED_ACCESS_VIEWS, D3D11_KEEP_UNORDERED_ACCESS_VIEWS, D3D11_KEEP_UNORDERED_ACCESS_VIEWS, - D3D11_KEEP_UNORDERED_ACCESS_VIEWS, D3D11_KEEP_UNORDERED_ACCESS_VIEWS, D3D11_KEEP_UNORDERED_ACCESS_VIEWS, - D3D11_KEEP_UNORDERED_ACCESS_VIEWS, D3D11_KEEP_UNORDERED_ACCESS_VIEWS }; - -BOOL SBaseBlock::ApplyAssignments(CEffect *pEffect) -{ - SAssignment *pAssignment = pAssignments; - SAssignment *pLastAssn = pAssignments + AssignmentCount; - BOOL bRecreate = FALSE; - - for(; pAssignment < pLastAssn; pAssignment++) - { - bRecreate |= pEffect->EvaluateAssignment(pAssignment); - } - - return bRecreate; -} - -void SPassBlock::ApplyPassAssignments() -{ - SAssignment *pAssignment = pAssignments; - SAssignment *pLastAssn = pAssignments + AssignmentCount; - - pEffect->IncrementTimer(); - - for(; pAssignment < pLastAssn; pAssignment++) - { - pEffect->EvaluateAssignment(pAssignment); - } -} - -// Returns TRUE if the shader uses global interfaces (since these interfaces can be updated through SetClassInstance) -BOOL SPassBlock::CheckShaderDependencies( SShaderBlock* pBlock ) -{ - if( pBlock->InterfaceDepCount > 0 ) - { - D3DXASSERT( pBlock->InterfaceDepCount == 1 ); - for( UINT i=0; i < pBlock->pInterfaceDeps[0].Count; i++ ) - { - SInterface* pInterfaceDep = pBlock->pInterfaceDeps[0].ppFXPointers[i]; - if( pInterfaceDep > pEffect->m_pInterfaces && pInterfaceDep < (pEffect->m_pInterfaces + pEffect->m_InterfaceCount) ) - { - // This is a global interface pointer (as opposed to an SInterface created in a BindInterface call - return TRUE; - } - } - } - return FALSE; -} - -// Returns TRUE if the pass (and sets HasDependencies) if the pass sets objects whose backing stores can be updated -BOOL SPassBlock::CheckDependencies() -{ - if( HasDependencies ) - return TRUE; - - for( UINT i=0; i < AssignmentCount; i++ ) - { - if( pAssignments[i].DependencyCount > 0 ) - return HasDependencies = TRUE; - } - if( BackingStore.pBlendBlock && BackingStore.pBlendBlock->AssignmentCount > 0 ) - { - for( UINT i=0; i < BackingStore.pBlendBlock->AssignmentCount; i++ ) - { - if( BackingStore.pBlendBlock->pAssignments[i].DependencyCount > 0 ) - return HasDependencies = TRUE; - } - } - if( BackingStore.pDepthStencilBlock && BackingStore.pDepthStencilBlock->AssignmentCount > 0 ) - { - for( UINT i=0; i < BackingStore.pDepthStencilBlock->AssignmentCount; i++ ) - { - if( BackingStore.pDepthStencilBlock->pAssignments[i].DependencyCount > 0 ) - return HasDependencies = TRUE; - } - } - if( BackingStore.pRasterizerBlock && BackingStore.pRasterizerBlock->AssignmentCount > 0 ) - { - for( UINT i=0; i < BackingStore.pRasterizerBlock->AssignmentCount; i++ ) - { - if( BackingStore.pRasterizerBlock->pAssignments[i].DependencyCount > 0 ) - return HasDependencies = TRUE; - } - } - if( BackingStore.pVertexShaderBlock && CheckShaderDependencies( BackingStore.pVertexShaderBlock ) ) - { - return HasDependencies = TRUE; - } - if( BackingStore.pGeometryShaderBlock && CheckShaderDependencies( BackingStore.pGeometryShaderBlock ) ) - { - return HasDependencies = TRUE; - } - if( BackingStore.pPixelShaderBlock && CheckShaderDependencies( BackingStore.pPixelShaderBlock ) ) - { - return HasDependencies = TRUE; - } - if( BackingStore.pHullShaderBlock && CheckShaderDependencies( BackingStore.pHullShaderBlock ) ) - { - return HasDependencies = TRUE; - } - if( BackingStore.pDomainShaderBlock && CheckShaderDependencies( BackingStore.pDomainShaderBlock ) ) - { - return HasDependencies = TRUE; - } - if( BackingStore.pComputeShaderBlock && CheckShaderDependencies( BackingStore.pComputeShaderBlock ) ) - { - return HasDependencies = TRUE; - } - - return HasDependencies; -} - - -// Update constant buffer contents if necessary -D3DX11INLINE void CheckAndUpdateCB_FX(ID3D11DeviceContext *pContext, SConstantBuffer *pCB) -{ - if (pCB->IsDirty && !pCB->IsNonUpdatable) - { - // CB out of date; rebuild it - pContext->UpdateSubresource(pCB->pD3DObject, 0, NULL, pCB->pBackingStore, pCB->Size, pCB->Size); - pCB->IsDirty = FALSE; - } -} - - -// Set the shader and dependent state (SRVs, samplers, UAVs, interfaces) -void CEffect::ApplyShaderBlock(SShaderBlock *pBlock) -{ - UINT i; - - SD3DShaderVTable *pVT = pBlock->pVT; - - // Apply constant buffers first (tbuffers are done later) - SShaderCBDependency *pCBDep = pBlock->pCBDeps; - SShaderCBDependency *pLastCBDep = pBlock->pCBDeps + pBlock->CBDepCount; - - for (; pCBDepppFXPointers); - - for (i = 0; i < pCBDep->Count; ++ i) - { - CheckAndUpdateCB_FX(m_pContext, (SConstantBuffer*)pCBDep->ppFXPointers[i]); - } - - (m_pContext->*(pVT->pSetConstantBuffers))(pCBDep->StartIndex, pCBDep->Count, pCBDep->ppD3DObjects); - } - - // Next, apply samplers - SShaderSamplerDependency *pSampDep = pBlock->pSampDeps; - SShaderSamplerDependency *pLastSampDep = pBlock->pSampDeps + pBlock->SampDepCount; - - for (; pSampDepppFXPointers); - - for (i=0; iCount; i++) - { - if ( ApplyRenderStateBlock(pSampDep->ppFXPointers[i]) ) - { - // If the sampler was updated, its pointer will have changed - pSampDep->ppD3DObjects[i] = pSampDep->ppFXPointers[i]->pD3DObject; - } - } - (m_pContext->*(pVT->pSetSamplers))(pSampDep->StartIndex, pSampDep->Count, pSampDep->ppD3DObjects); - } - - // Set the UAVs - // UAV ranges were combined in EffectLoad. This code remains unchanged, however, so that ranges can be easily split - D3DXASSERT( pBlock->UAVDepCount < 2 ); - if( pBlock->UAVDepCount > 0 ) - { - SUnorderedAccessViewDependency *pUAVDep = pBlock->pUAVDeps; - D3DXASSERT(pUAVDep->ppFXPointers); - - for (i=0; iCount; i++) - { - pUAVDep->ppD3DObjects[i] = pUAVDep->ppFXPointers[i]->pUnorderedAccessView; - } - - if( EOT_ComputeShader5 == pBlock->GetShaderType() ) - { - m_pContext->CSSetUnorderedAccessViews( pUAVDep->StartIndex, pUAVDep->Count, pUAVDep->ppD3DObjects, g_pNegativeOnes ); - } - else - { - // This call could be combined with the call to set render targets if both exist in the pass - m_pContext->OMSetRenderTargetsAndUnorderedAccessViews( D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL, NULL, NULL, pUAVDep->StartIndex, pUAVDep->Count, pUAVDep->ppD3DObjects, g_pNegativeOnes ); - } - } - - // TBuffers are funny: - // We keep two references to them. One is in as a standard texture dep, and that gets used for all sets - // The other is as a part of the TBufferDeps array, which tells us to rebuild the matching CBs. - // These two refs could be rolled into one, but then we would have to predicate on each CB or each texture. - SConstantBuffer **ppTB = pBlock->ppTbufDeps; - SConstantBuffer **ppLastTB = ppTB + pBlock->TBufferDepCount; - - for (; ppTBpResourceDeps; - SShaderResourceDependency *pLastResourceDep = pBlock->pResourceDeps + pBlock->ResourceDepCount; - - for (; pResourceDepppFXPointers); - - for (i=0; iCount; i++) - { - pResourceDep->ppD3DObjects[i] = pResourceDep->ppFXPointers[i]->pShaderResource; - } - - (m_pContext->*(pVT->pSetShaderResources))(pResourceDep->StartIndex, pResourceDep->Count, pResourceDep->ppD3DObjects); - } - - // Update Interface dependencies - UINT Interfaces = 0; - ID3D11ClassInstance** ppClassInstances = NULL; - D3DXASSERT( pBlock->InterfaceDepCount < 2 ); - if( pBlock->InterfaceDepCount > 0 ) - { - SInterfaceDependency *pInterfaceDep = pBlock->pInterfaceDeps; - D3DXASSERT(pInterfaceDep->ppFXPointers); - - ppClassInstances = pInterfaceDep->ppD3DObjects; - Interfaces = pInterfaceDep->Count; - for (i=0; iCount; i++) - { - SClassInstanceGlobalVariable* pCI = pInterfaceDep->ppFXPointers[i]->pClassInstance; - if( pCI ) - { - D3DXASSERT( pCI->pMemberData != NULL ); - pInterfaceDep->ppD3DObjects[i] = pCI->pMemberData->Data.pD3DClassInstance; - } - else - { - pInterfaceDep->ppD3DObjects[i] = NULL; - } - } - } - - // Now set the shader - (m_pContext->*(pVT->pSetShader))(pBlock->pD3DObject, ppClassInstances, Interfaces); -} - -// Returns TRUE if the block D3D data was recreated -BOOL CEffect::ApplyRenderStateBlock(SBaseBlock *pBlock) -{ - if( pBlock->IsUserManaged ) - { - return FALSE; - } - - BOOL bRecreate = pBlock->ApplyAssignments(this); - - if (bRecreate) - { - switch (pBlock->BlockType) - { - case EBT_Sampler: - { - SSamplerBlock *pSBlock = pBlock->AsSampler(); - - D3DXASSERT(NULL != pSBlock->pD3DObject); - pSBlock->pD3DObject->Release(); - - m_pDevice->CreateSamplerState( &pSBlock->BackingStore.SamplerDesc, &pSBlock->pD3DObject ); - - } - break; - - case EBT_DepthStencil: - { - SDepthStencilBlock *pDSBlock = pBlock->AsDepthStencil(); - - D3DXASSERT(NULL != pDSBlock->pDSObject); - SAFE_RELEASE( pDSBlock->pDSObject ); - if( SUCCEEDED( m_pDevice->CreateDepthStencilState( &pDSBlock->BackingStore, &pDSBlock->pDSObject ) ) ) - pDSBlock->IsValid = TRUE; - else - pDSBlock->IsValid = FALSE; - } - break; - - case EBT_Blend: - { - SBlendBlock *pBBlock = pBlock->AsBlend(); - - D3DXASSERT(NULL != pBBlock->pBlendObject); - SAFE_RELEASE( pBBlock->pBlendObject ); - if( SUCCEEDED( m_pDevice->CreateBlendState( &pBBlock->BackingStore, &pBBlock->pBlendObject ) ) ) - pBBlock->IsValid = TRUE; - else - pBBlock->IsValid = FALSE; - } - break; - - case EBT_Rasterizer: - { - SRasterizerBlock *pRBlock = pBlock->AsRasterizer(); - - D3DXASSERT(NULL != pRBlock->pRasterizerObject); - - SAFE_RELEASE( pRBlock->pRasterizerObject ); - if( SUCCEEDED( m_pDevice->CreateRasterizerState( &pRBlock->BackingStore, &pRBlock->pRasterizerObject ) ) ) - pRBlock->IsValid = TRUE; - else - pRBlock->IsValid = FALSE; - } - break; - - default: - D3DXASSERT(0); - } - } - - return bRecreate; -} - -void CEffect::ValidateIndex(UINT Elements) -{ - if (m_FXLIndex >= Elements) - { - DPF(0, "ID3DX11Effect: Overindexing variable array (size: %d, index: %d), using index = 0 instead", Elements, m_FXLIndex); - m_FXLIndex = 0; - } -} - -// Returns TRUE if the assignment was changed -BOOL CEffect::EvaluateAssignment(SAssignment *pAssignment) -{ - BOOL bNeedUpdate = FALSE; - SGlobalVariable *pVarDep0, *pVarDep1; - - switch (pAssignment->AssignmentType) - { - case ERAT_NumericVariable: - D3DXASSERT(pAssignment->DependencyCount == 1); - if (pAssignment->pDependencies[0].pVariable->LastModifiedTime >= pAssignment->LastRecomputedTime) - { - dwordMemcpy(pAssignment->Destination.pNumeric, pAssignment->Source.pNumeric, pAssignment->DataSize); - bNeedUpdate = TRUE; - } - break; - - case ERAT_NumericVariableIndex: - D3DXASSERT(pAssignment->DependencyCount == 2); - pVarDep0 = pAssignment->pDependencies[0].pVariable; - pVarDep1 = pAssignment->pDependencies[1].pVariable; - - if (pVarDep0->LastModifiedTime >= pAssignment->LastRecomputedTime) - { - m_FXLIndex = *pVarDep0->Data.pNumericDword; - - ValidateIndex(pVarDep1->pType->Elements); - - // Array index variable is dirty, update the pointer - pAssignment->Source.pNumeric = pVarDep1->Data.pNumeric + pVarDep1->pType->Stride * m_FXLIndex; - - // Copy the new data - dwordMemcpy(pAssignment->Destination.pNumeric, pAssignment->Source.pNumeric, pAssignment->DataSize); - bNeedUpdate = TRUE; - } - else if (pVarDep1->LastModifiedTime >= pAssignment->LastRecomputedTime) - { - // Only the array variable is dirty, copy the new data - dwordMemcpy(pAssignment->Destination.pNumeric, pAssignment->Source.pNumeric, pAssignment->DataSize); - bNeedUpdate = TRUE; - } - break; - - case ERAT_ObjectVariableIndex: - D3DXASSERT(pAssignment->DependencyCount == 1); - pVarDep0 = pAssignment->pDependencies[0].pVariable; - if (pVarDep0->LastModifiedTime >= pAssignment->LastRecomputedTime) - { - m_FXLIndex = *pVarDep0->Data.pNumericDword; - ValidateIndex(pAssignment->MaxElements); - - // Array index variable is dirty, update the destination pointer - *((void **)pAssignment->Destination.pGeneric) = pAssignment->Source.pNumeric + - pAssignment->DataSize * m_FXLIndex; - bNeedUpdate = TRUE; - } - break; - - default: - //case ERAT_Constant: -- These are consumed and discarded - //case ERAT_ObjectVariable: -- These are consumed and discarded - //case ERAT_ObjectConstIndex: -- These are consumed and discarded - //case ERAT_ObjectInlineShader: -- These are consumed and discarded - //case ERAT_NumericConstIndex: -- ERAT_NumericVariable should be generated instead - D3DXASSERT(0); - break; - } - - // Mark the assignment as not dirty - pAssignment->LastRecomputedTime = m_LocalTimer; - - return bNeedUpdate; -} - -// Returns FALSE if this shader has interface dependencies which are NULL (SetShader will fail). -BOOL CEffect::ValidateShaderBlock( SShaderBlock* pBlock ) -{ - if( !pBlock->IsValid ) - return FALSE; - if( pBlock->InterfaceDepCount > 0 ) - { - D3DXASSERT( pBlock->InterfaceDepCount == 1 ); - for( UINT i=0; i < pBlock->pInterfaceDeps[0].Count; i++ ) - { - SInterface* pInterfaceDep = pBlock->pInterfaceDeps[0].ppFXPointers[i]; - D3DXASSERT( pInterfaceDep != NULL ); - if( pInterfaceDep->pClassInstance == NULL ) - { - return FALSE; - } - } - } - return TRUE; -} - -// Returns FALSE if any state in the pass is invalid -BOOL CEffect::ValidatePassBlock( SPassBlock* pBlock ) -{ - pBlock->ApplyPassAssignments(); - - if (NULL != pBlock->BackingStore.pBlendBlock) - { - ApplyRenderStateBlock(pBlock->BackingStore.pBlendBlock); - pBlock->BackingStore.pBlendState = pBlock->BackingStore.pBlendBlock->pBlendObject; - if( !pBlock->BackingStore.pBlendBlock->IsValid ) - return FALSE; - } - - if( NULL != pBlock->BackingStore.pDepthStencilBlock ) - { - ApplyRenderStateBlock( pBlock->BackingStore.pDepthStencilBlock ); - pBlock->BackingStore.pDepthStencilState = pBlock->BackingStore.pDepthStencilBlock->pDSObject; - if( !pBlock->BackingStore.pDepthStencilBlock->IsValid ) - return FALSE; - } - - if( NULL != pBlock->BackingStore.pRasterizerBlock ) - { - ApplyRenderStateBlock( pBlock->BackingStore.pRasterizerBlock ); - if( !pBlock->BackingStore.pRasterizerBlock->IsValid ) - return FALSE; - } - - if( NULL != pBlock->BackingStore.pVertexShaderBlock && !ValidateShaderBlock(pBlock->BackingStore.pVertexShaderBlock) ) - return FALSE; - - if( NULL != pBlock->BackingStore.pGeometryShaderBlock && !ValidateShaderBlock(pBlock->BackingStore.pGeometryShaderBlock) ) - return FALSE; - - if( NULL != pBlock->BackingStore.pPixelShaderBlock ) - { - if( !ValidateShaderBlock(pBlock->BackingStore.pPixelShaderBlock) ) - return FALSE; - else if( pBlock->BackingStore.pPixelShaderBlock->UAVDepCount > 0 && - pBlock->BackingStore.RenderTargetViewCount > pBlock->BackingStore.pPixelShaderBlock->pUAVDeps[0].StartIndex ) - { - return FALSE; - } - } - - if( NULL != pBlock->BackingStore.pHullShaderBlock && !ValidateShaderBlock(pBlock->BackingStore.pHullShaderBlock) ) - return FALSE; - - if( NULL != pBlock->BackingStore.pDomainShaderBlock && !ValidateShaderBlock(pBlock->BackingStore.pDomainShaderBlock) ) - return FALSE; - - if( NULL != pBlock->BackingStore.pComputeShaderBlock && !ValidateShaderBlock(pBlock->BackingStore.pComputeShaderBlock) ) - return FALSE; - - return TRUE; -} - -// Set all state defined in the pass -void CEffect::ApplyPassBlock(SPassBlock *pBlock) -{ - pBlock->ApplyPassAssignments(); - - if (NULL != pBlock->BackingStore.pBlendBlock) - { - ApplyRenderStateBlock(pBlock->BackingStore.pBlendBlock); -#ifdef FXDEBUG - if( !pBlock->BackingStore.pBlendBlock->IsValid ) - DPF( 0, "Pass::Apply - warning: applying invalid BlendState." ); -#endif - pBlock->BackingStore.pBlendState = pBlock->BackingStore.pBlendBlock->pBlendObject; - m_pContext->OMSetBlendState(pBlock->BackingStore.pBlendState, - pBlock->BackingStore.BlendFactor, - pBlock->BackingStore.SampleMask); - } - - if (NULL != pBlock->BackingStore.pDepthStencilBlock) - { - ApplyRenderStateBlock(pBlock->BackingStore.pDepthStencilBlock); -#ifdef FXDEBUG - if( !pBlock->BackingStore.pDepthStencilBlock->IsValid ) - DPF( 0, "Pass::Apply - warning: applying invalid DepthStencilState." ); -#endif - pBlock->BackingStore.pDepthStencilState = pBlock->BackingStore.pDepthStencilBlock->pDSObject; - m_pContext->OMSetDepthStencilState(pBlock->BackingStore.pDepthStencilState, - pBlock->BackingStore.StencilRef); - } - - if (NULL != pBlock->BackingStore.pRasterizerBlock) - { - ApplyRenderStateBlock(pBlock->BackingStore.pRasterizerBlock); -#ifdef FXDEBUG - if( !pBlock->BackingStore.pRasterizerBlock->IsValid ) - DPF( 0, "Pass::Apply - warning: applying invalid RasterizerState." ); -#endif - m_pContext->RSSetState(pBlock->BackingStore.pRasterizerBlock->pRasterizerObject); - } - - if (NULL != pBlock->BackingStore.pRenderTargetViews[0]) - { - // Grab all render targets - ID3D11RenderTargetView *pRTV[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT]; - - D3DXASSERT(pBlock->BackingStore.RenderTargetViewCount <= D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT); - __analysis_assume(D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT >= pBlock->BackingStore.RenderTargetViewCount); - - for (UINT i=0; iBackingStore.RenderTargetViewCount; i++) - { - pRTV[i] = pBlock->BackingStore.pRenderTargetViews[i]->pRenderTargetView; - } - - // This call could be combined with the call to set PS UAVs if both exist in the pass - m_pContext->OMSetRenderTargetsAndUnorderedAccessViews( pBlock->BackingStore.RenderTargetViewCount, pRTV, pBlock->BackingStore.pDepthStencilView->pDepthStencilView, 7, D3D11_KEEP_UNORDERED_ACCESS_VIEWS, NULL, NULL ); - } - - if (NULL != pBlock->BackingStore.pVertexShaderBlock) - { -#ifdef FXDEBUG - if( !pBlock->BackingStore.pVertexShaderBlock->IsValid ) - DPF( 0, "Pass::Apply - warning: applying invalid vertex shader." ); -#endif - ApplyShaderBlock(pBlock->BackingStore.pVertexShaderBlock); - } - - if (NULL != pBlock->BackingStore.pPixelShaderBlock) - { -#ifdef FXDEBUG - if( !pBlock->BackingStore.pPixelShaderBlock->IsValid ) - DPF( 0, "Pass::Apply - warning: applying invalid pixel shader." ); -#endif - ApplyShaderBlock(pBlock->BackingStore.pPixelShaderBlock); - } - - if (NULL != pBlock->BackingStore.pGeometryShaderBlock) - { -#ifdef FXDEBUG - if( !pBlock->BackingStore.pGeometryShaderBlock->IsValid ) - DPF( 0, "Pass::Apply - warning: applying invalid geometry shader." ); -#endif - ApplyShaderBlock(pBlock->BackingStore.pGeometryShaderBlock); - } - - if (NULL != pBlock->BackingStore.pHullShaderBlock) - { -#ifdef FXDEBUG - if( !pBlock->BackingStore.pHullShaderBlock->IsValid ) - DPF( 0, "Pass::Apply - warning: applying invalid hull shader." ); -#endif - ApplyShaderBlock(pBlock->BackingStore.pHullShaderBlock); - } - - if (NULL != pBlock->BackingStore.pDomainShaderBlock) - { -#ifdef FXDEBUG - if( !pBlock->BackingStore.pDomainShaderBlock->IsValid ) - DPF( 0, "Pass::Apply - warning: applying invalid domain shader." ); -#endif - ApplyShaderBlock(pBlock->BackingStore.pDomainShaderBlock); - } - - if (NULL != pBlock->BackingStore.pComputeShaderBlock) - { -#ifdef FXDEBUG - if( !pBlock->BackingStore.pComputeShaderBlock->IsValid ) - DPF( 0, "Pass::Apply - warning: applying invalid compute shader." ); -#endif - ApplyShaderBlock(pBlock->BackingStore.pComputeShaderBlock); - } -} - -void CEffect::IncrementTimer() -{ - m_LocalTimer++; - -#ifndef _WIN64 -#if _DEBUG && FXDEBUG - if (m_LocalTimer > g_TimerRolloverCount) - { - DPF(0, "Rolling over timer (current time: %d, rollover cap: %d).", m_LocalTimer, g_TimerRolloverCount); -#else // else !(_DEBUG && FXDEBUG) - if (m_LocalTimer >= 0x80000000) // check to see if we've exceeded ~2 billion - { -#endif // _DEBUG && FXDEBUG - HandleLocalTimerRollover(); - - m_LocalTimer = 1; - } -#endif // _WIN64 -} - -// This function resets all timers, rendering all assignments dirty -// This is clearly bad for performance, but should only happen every few billion ticks -void CEffect::HandleLocalTimerRollover() -{ - UINT i, j, k; - - // step 1: update variables - for (i = 0; i < m_VariableCount; ++ i) - { - m_pVariables[i].LastModifiedTime = 0; - } - - // step 2: update assignments on all blocks (pass, depth stencil, rasterizer, blend, sampler) - for (UINT iGroup = 0; iGroup < m_GroupCount; ++ iGroup) - { - for (i = 0; i < m_pGroups[iGroup].TechniqueCount; ++ i) - { - for (j = 0; j < m_pGroups[iGroup].pTechniques[i].PassCount; ++ j) - { - for (k = 0; k < m_pGroups[iGroup].pTechniques[i].pPasses[j].AssignmentCount; ++ k) - { - m_pGroups[iGroup].pTechniques[i].pPasses[j].pAssignments[k].LastRecomputedTime = 0; - } - } - } - } - - for (i = 0; i < m_DepthStencilBlockCount; ++ i) - { - for (j = 0; j < m_pDepthStencilBlocks[i].AssignmentCount; ++ j) - { - m_pDepthStencilBlocks[i].pAssignments[j].LastRecomputedTime = 0; - } - } - - for (i = 0; i < m_RasterizerBlockCount; ++ i) - { - for (j = 0; j < m_pRasterizerBlocks[i].AssignmentCount; ++ j) - { - m_pRasterizerBlocks[i].pAssignments[j].LastRecomputedTime = 0; - } - } - - for (i = 0; i < m_BlendBlockCount; ++ i) - { - for (j = 0; j < m_pBlendBlocks[i].AssignmentCount; ++ j) - { - m_pBlendBlocks[i].pAssignments[j].LastRecomputedTime = 0; - } - } - - for (i = 0; i < m_SamplerBlockCount; ++ i) - { - for (j = 0; j < m_pSamplerBlocks[i].AssignmentCount; ++ j) - { - m_pSamplerBlocks[i].pAssignments[j].LastRecomputedTime = 0; - } - } -} - -} diff --git a/sample/d3d11/Effects11/EffectVariable.inl b/sample/d3d11/Effects11/EffectVariable.inl deleted file mode 100644 index 4a8f4b7..0000000 --- a/sample/d3d11/Effects11/EffectVariable.inl +++ /dev/null @@ -1,4573 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: EffectVariable.inl -// Content: D3DX11 Effects Variable reflection template -// These templates define the many Effect variable types. -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////// -// Invalid variable forward defines -////////////////////////////////////////////////////////////////////////// - -struct SEffectInvalidScalarVariable; -struct SEffectInvalidVectorVariable; -struct SEffectInvalidMatrixVariable; -struct SEffectInvalidStringVariable; -struct SEffectInvalidClassInstanceVariable; -struct SEffectInvalidInterfaceVariable; -struct SEffectInvalidShaderResourceVariable; -struct SEffectInvalidUnorderedAccessViewVariable; -struct SEffectInvalidRenderTargetViewVariable; -struct SEffectInvalidDepthStencilViewVariable; -struct SEffectInvalidConstantBuffer; -struct SEffectInvalidShaderVariable; -struct SEffectInvalidBlendVariable; -struct SEffectInvalidDepthStencilVariable; -struct SEffectInvalidRasterizerVariable; -struct SEffectInvalidSamplerVariable; -struct SEffectInvalidTechnique; -struct SEffectInvalidPass; -struct SEffectInvalidType; - -extern SEffectInvalidScalarVariable g_InvalidScalarVariable; -extern SEffectInvalidVectorVariable g_InvalidVectorVariable; -extern SEffectInvalidMatrixVariable g_InvalidMatrixVariable; -extern SEffectInvalidStringVariable g_InvalidStringVariable; -extern SEffectInvalidClassInstanceVariable g_InvalidClassInstanceVariable; -extern SEffectInvalidInterfaceVariable g_InvalidInterfaceVariable; -extern SEffectInvalidShaderResourceVariable g_InvalidShaderResourceVariable; -extern SEffectInvalidUnorderedAccessViewVariable g_InvalidUnorderedAccessViewVariable; -extern SEffectInvalidRenderTargetViewVariable g_InvalidRenderTargetViewVariable; -extern SEffectInvalidDepthStencilViewVariable g_InvalidDepthStencilViewVariable; -extern SEffectInvalidConstantBuffer g_InvalidConstantBuffer; -extern SEffectInvalidShaderVariable g_InvalidShaderVariable; -extern SEffectInvalidBlendVariable g_InvalidBlendVariable; -extern SEffectInvalidDepthStencilVariable g_InvalidDepthStencilVariable; -extern SEffectInvalidRasterizerVariable g_InvalidRasterizerVariable; -extern SEffectInvalidSamplerVariable g_InvalidSamplerVariable; -extern SEffectInvalidTechnique g_InvalidTechnique; -extern SEffectInvalidPass g_InvalidPass; -extern SEffectInvalidType g_InvalidType; - -enum ETemplateVarType -{ - ETVT_Bool, - ETVT_Int, - ETVT_Float -}; - -////////////////////////////////////////////////////////////////////////// -// Invalid effect variable struct definitions -////////////////////////////////////////////////////////////////////////// - -struct SEffectInvalidType : public ID3DX11EffectType -{ - STDMETHOD_(BOOL, IsValid)() { return FALSE; } - STDMETHOD(GetDesc)(D3DX11_EFFECT_TYPE_DESC *pDesc) { return E_FAIL; } - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeByIndex)(UINT Index) { return &g_InvalidType; } - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeByName)(LPCSTR Name) { return &g_InvalidType; } - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeBySemantic)(LPCSTR Semanti) { return &g_InvalidType; } - STDMETHOD_(LPCSTR, GetMemberName)(UINT Index) { return NULL; } - STDMETHOD_(LPCSTR, GetMemberSemantic)(UINT Index) { return NULL; } -}; - -template -struct TEffectInvalidVariable : public IBaseInterface -{ -public: - STDMETHOD_(BOOL, IsValid)() { return FALSE; } - STDMETHOD_(ID3DX11EffectType*, GetType)() { return &g_InvalidType; } - STDMETHOD(GetDesc)(D3DX11_EFFECT_VARIABLE_DESC *pDesc) { return E_FAIL; } - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(UINT Index) { return &g_InvalidScalarVariable; } - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(LPCSTR Name) { return &g_InvalidScalarVariable; } - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(UINT Index) { return &g_InvalidScalarVariable; } - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(LPCSTR Name) { return &g_InvalidScalarVariable; } - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(LPCSTR Semantic) { return &g_InvalidScalarVariable; } - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(UINT Index) { return &g_InvalidScalarVariable; } - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)() { return &g_InvalidConstantBuffer; } - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)() { return &g_InvalidScalarVariable; } - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)() { return &g_InvalidVectorVariable; } - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)() { return &g_InvalidMatrixVariable; } - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)() { return &g_InvalidStringVariable; } - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)() { return &g_InvalidClassInstanceVariable; } - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)() { return &g_InvalidInterfaceVariable; } - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)() { return &g_InvalidShaderResourceVariable; } - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)() { return &g_InvalidUnorderedAccessViewVariable; } - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)() { return &g_InvalidRenderTargetViewVariable; } - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)() { return &g_InvalidDepthStencilViewVariable; } - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)() { return &g_InvalidConstantBuffer; } - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)() { return &g_InvalidShaderVariable; } - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)() { return &g_InvalidBlendVariable; } - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)() { return &g_InvalidDepthStencilVariable; } - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)() { return &g_InvalidRasterizerVariable; } - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)() { return &g_InvalidSamplerVariable; } - - STDMETHOD(SetRawValue)(CONST void *pData, UINT Offset, UINT Count) { return E_FAIL; } - STDMETHOD(GetRawValue)(void *pData, UINT Offset, UINT Count) { return E_FAIL; } -}; - -struct SEffectInvalidScalarVariable : public TEffectInvalidVariable -{ -public: - - STDMETHOD(SetFloat)(CONST float Value) { return E_FAIL; } - STDMETHOD(GetFloat)(float *pValue) { return E_FAIL; } - - STDMETHOD(SetFloatArray)(CONST float *pData, UINT Offset, UINT Count) { return E_FAIL; } - STDMETHOD(GetFloatArray)(float *pData, UINT Offset, UINT Count) { return E_FAIL; } - - STDMETHOD(SetInt)(CONST int Value) { return E_FAIL; } - STDMETHOD(GetInt)(int *pValue) { return E_FAIL; } - - STDMETHOD(SetIntArray)(CONST int *pData, UINT Offset, UINT Count) { return E_FAIL; } - STDMETHOD(GetIntArray)(int *pData, UINT Offset, UINT Count) { return E_FAIL; } - - STDMETHOD(SetBool)(CONST BOOL Value) { return E_FAIL; } - STDMETHOD(GetBool)(BOOL *pValue) { return E_FAIL; } - - STDMETHOD(SetBoolArray)(CONST BOOL *pData, UINT Offset, UINT Count) { return E_FAIL; } - STDMETHOD(GetBoolArray)(BOOL *pData, UINT Offset, UINT Count) { return E_FAIL; } -}; - - -struct SEffectInvalidVectorVariable : public TEffectInvalidVariable -{ -public: - STDMETHOD(SetFloatVector)(CONST float *pData) { return E_FAIL; }; - STDMETHOD(SetIntVector)(CONST int *pData) { return E_FAIL; }; - STDMETHOD(SetBoolVector)(CONST BOOL *pData) { return E_FAIL; }; - - STDMETHOD(GetFloatVector)(float *pData) { return E_FAIL; }; - STDMETHOD(GetIntVector)(int *pData) { return E_FAIL; }; - STDMETHOD(GetBoolVector)(BOOL *pData) { return E_FAIL; }; - - STDMETHOD(SetBoolVectorArray) (CONST BOOL *pData, UINT Offset, UINT Count) { return E_FAIL; }; - STDMETHOD(SetIntVectorArray) (CONST int *pData, UINT Offset, UINT Count) { return E_FAIL; }; - STDMETHOD(SetFloatVectorArray)(CONST float *pData, UINT Offset, UINT Count) { return E_FAIL; }; - - STDMETHOD(GetBoolVectorArray) (BOOL *pData, UINT Offset, UINT Count) { return E_FAIL; }; - STDMETHOD(GetIntVectorArray) (int *pData, UINT Offset, UINT Count) { return E_FAIL; }; - STDMETHOD(GetFloatVectorArray)(float *pData, UINT Offset, UINT Count) { return E_FAIL; }; - -}; - -struct SEffectInvalidMatrixVariable : public TEffectInvalidVariable -{ -public: - - STDMETHOD(SetMatrix)(CONST float *pData) { return E_FAIL; } - STDMETHOD(GetMatrix)(float *pData) { return E_FAIL; } - - STDMETHOD(SetMatrixArray)(CONST float *pData, UINT Offset, UINT Count) { return E_FAIL; } - STDMETHOD(GetMatrixArray)(float *pData, UINT Offset, UINT Count) { return E_FAIL; } - - STDMETHOD(SetMatrixPointerArray)(CONST float **ppData, UINT Offset, UINT Count) { return E_FAIL; } - STDMETHOD(GetMatrixPointerArray)(float **ppData, UINT Offset, UINT Count) { return E_FAIL; } - - STDMETHOD(SetMatrixTranspose)(CONST float *pData) { return E_FAIL; } - STDMETHOD(GetMatrixTranspose)(float *pData) { return E_FAIL; } - - STDMETHOD(SetMatrixTransposeArray)(CONST float *pData, UINT Offset, UINT Count) { return E_FAIL; } - STDMETHOD(GetMatrixTransposeArray)(float *pData, UINT Offset, UINT Count) { return E_FAIL; } - - STDMETHOD(SetMatrixTransposePointerArray)(CONST float **ppData, UINT Offset, UINT Count) { return E_FAIL; } - STDMETHOD(GetMatrixTransposePointerArray)(float **ppData, UINT Offset, UINT Count) { return E_FAIL; } -}; - -struct SEffectInvalidStringVariable : public TEffectInvalidVariable -{ -public: - - STDMETHOD(GetString)(LPCSTR *ppString) { return E_FAIL; } - STDMETHOD(GetStringArray)(LPCSTR *ppStrings, UINT Offset, UINT Count) { return E_FAIL; } -}; - -struct SEffectInvalidClassInstanceVariable : public TEffectInvalidVariable -{ -public: - - STDMETHOD(GetClassInstance)(ID3D11ClassInstance **ppClassInstance) { return E_FAIL; } -}; - - -struct SEffectInvalidInterfaceVariable : public TEffectInvalidVariable -{ -public: - - STDMETHOD(SetClassInstance)(ID3DX11EffectClassInstanceVariable *pEffectClassInstance) { return E_FAIL; } - STDMETHOD(GetClassInstance)(ID3DX11EffectClassInstanceVariable **ppEffectClassInstance) { return E_FAIL; } -}; - - -struct SEffectInvalidShaderResourceVariable : public TEffectInvalidVariable -{ -public: - - STDMETHOD(SetResource)(ID3D11ShaderResourceView *pResource) { return E_FAIL; } - STDMETHOD(GetResource)(ID3D11ShaderResourceView **ppResource) { return E_FAIL; } - - STDMETHOD(SetResourceArray)(ID3D11ShaderResourceView **ppResources, UINT Offset, UINT Count) { return E_FAIL; } - STDMETHOD(GetResourceArray)(ID3D11ShaderResourceView **ppResources, UINT Offset, UINT Count) { return E_FAIL; } -}; - - -struct SEffectInvalidUnorderedAccessViewVariable : public TEffectInvalidVariable -{ -public: - - STDMETHOD(SetUnorderedAccessView)(ID3D11UnorderedAccessView *pResource) { return E_FAIL; } - STDMETHOD(GetUnorderedAccessView)(ID3D11UnorderedAccessView **ppResource) { return E_FAIL; } - - STDMETHOD(SetUnorderedAccessViewArray)(ID3D11UnorderedAccessView **ppResources, UINT Offset, UINT Count) { return E_FAIL; } - STDMETHOD(GetUnorderedAccessViewArray)(ID3D11UnorderedAccessView **ppResources, UINT Offset, UINT Count) { return E_FAIL; } -}; - - -struct SEffectInvalidRenderTargetViewVariable : public TEffectInvalidVariable -{ -public: - - STDMETHOD(SetRenderTarget)(ID3D11RenderTargetView *pResource) { return E_FAIL; } - STDMETHOD(GetRenderTarget)(ID3D11RenderTargetView **ppResource) { return E_FAIL; } - - STDMETHOD(SetRenderTargetArray)(ID3D11RenderTargetView **ppResources, UINT Offset, UINT Count) { return E_FAIL; } - STDMETHOD(GetRenderTargetArray)(ID3D11RenderTargetView **ppResources, UINT Offset, UINT Count) { return E_FAIL; } -}; - - -struct SEffectInvalidDepthStencilViewVariable : public TEffectInvalidVariable -{ -public: - - STDMETHOD(SetDepthStencil)(ID3D11DepthStencilView *pResource) { return E_FAIL; } - STDMETHOD(GetDepthStencil)(ID3D11DepthStencilView **ppResource) { return E_FAIL; } - - STDMETHOD(SetDepthStencilArray)(ID3D11DepthStencilView **ppResources, UINT Offset, UINT Count) { return E_FAIL; } - STDMETHOD(GetDepthStencilArray)(ID3D11DepthStencilView **ppResources, UINT Offset, UINT Count) { return E_FAIL; } -}; - - -struct SEffectInvalidConstantBuffer : public TEffectInvalidVariable -{ -public: - - STDMETHOD(SetConstantBuffer)(ID3D11Buffer *pConstantBuffer) { return E_FAIL; } - STDMETHOD(GetConstantBuffer)(ID3D11Buffer **ppConstantBuffer) { return E_FAIL; } - STDMETHOD(UndoSetConstantBuffer)() { return E_FAIL; } - - STDMETHOD(SetTextureBuffer)(ID3D11ShaderResourceView *pTextureBuffer) { return E_FAIL; } - STDMETHOD(GetTextureBuffer)(ID3D11ShaderResourceView **ppTextureBuffer) { return E_FAIL; } - STDMETHOD(UndoSetTextureBuffer)() { return E_FAIL; } -}; - -struct SEffectInvalidShaderVariable : public TEffectInvalidVariable -{ -public: - - STDMETHOD(GetShaderDesc)(UINT ShaderIndex, D3DX11_EFFECT_SHADER_DESC *pDesc) { return E_FAIL; } - - STDMETHOD(GetVertexShader)(UINT ShaderIndex, ID3D11VertexShader **ppVS) { return E_FAIL; } - STDMETHOD(GetGeometryShader)(UINT ShaderIndex, ID3D11GeometryShader **ppGS) { return E_FAIL; } - STDMETHOD(GetPixelShader)(UINT ShaderIndex, ID3D11PixelShader **ppPS) { return E_FAIL; } - STDMETHOD(GetHullShader)(UINT ShaderIndex, ID3D11HullShader **ppPS) { return E_FAIL; } - STDMETHOD(GetDomainShader)(UINT ShaderIndex, ID3D11DomainShader **ppPS) { return E_FAIL; } - STDMETHOD(GetComputeShader)(UINT ShaderIndex, ID3D11ComputeShader **ppPS) { return E_FAIL; } - - STDMETHOD(GetInputSignatureElementDesc)(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) { return E_FAIL; } - STDMETHOD(GetOutputSignatureElementDesc)(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) { return E_FAIL; } - STDMETHOD(GetPatchConstantSignatureElementDesc)(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) { return E_FAIL; } -}; - -struct SEffectInvalidBlendVariable : public TEffectInvalidVariable -{ -public: - - STDMETHOD(GetBlendState)(UINT Index, ID3D11BlendState **ppBlendState) { return E_FAIL; } - STDMETHOD(SetBlendState)(UINT Index, ID3D11BlendState *pBlendState) { return E_FAIL; } - STDMETHOD(UndoSetBlendState)(UINT Index) { return E_FAIL; } - STDMETHOD(GetBackingStore)(UINT Index, D3D11_BLEND_DESC *pBlendDesc) { return E_FAIL; } -}; - -struct SEffectInvalidDepthStencilVariable : public TEffectInvalidVariable -{ -public: - - STDMETHOD(GetDepthStencilState)(UINT Index, ID3D11DepthStencilState **ppDepthStencilState) { return E_FAIL; } - STDMETHOD(SetDepthStencilState)(UINT Index, ID3D11DepthStencilState *pDepthStencilState) { return E_FAIL; } - STDMETHOD(UndoSetDepthStencilState)(UINT Index) { return E_FAIL; } - STDMETHOD(GetBackingStore)(UINT Index, D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc) { return E_FAIL; } -}; - -struct SEffectInvalidRasterizerVariable : public TEffectInvalidVariable -{ -public: - - STDMETHOD(GetRasterizerState)(UINT Index, ID3D11RasterizerState **ppRasterizerState) { return E_FAIL; } - STDMETHOD(SetRasterizerState)(UINT Index, ID3D11RasterizerState *pRasterizerState) { return E_FAIL; } - STDMETHOD(UndoSetRasterizerState)(UINT Index) { return E_FAIL; } - STDMETHOD(GetBackingStore)(UINT Index, D3D11_RASTERIZER_DESC *pRasterizerDesc) { return E_FAIL; } -}; - -struct SEffectInvalidSamplerVariable : public TEffectInvalidVariable -{ -public: - - STDMETHOD(GetSampler)(UINT Index, ID3D11SamplerState **ppSampler) { return E_FAIL; } - STDMETHOD(SetSampler)(UINT Index, ID3D11SamplerState *pSampler) { return E_FAIL; } - STDMETHOD(UndoSetSampler)(UINT Index) { return E_FAIL; } - STDMETHOD(GetBackingStore)(UINT Index, D3D11_SAMPLER_DESC *pSamplerDesc) { return E_FAIL; } -}; - -struct SEffectInvalidPass : public ID3DX11EffectPass -{ -public: - STDMETHOD_(BOOL, IsValid)() { return FALSE; } - STDMETHOD(GetDesc)(D3DX11_PASS_DESC *pDesc) { return E_FAIL; } - - STDMETHOD(GetVertexShaderDesc)(D3DX11_PASS_SHADER_DESC *pDesc) { return E_FAIL; } - STDMETHOD(GetGeometryShaderDesc)(D3DX11_PASS_SHADER_DESC *pDesc) { return E_FAIL; } - STDMETHOD(GetPixelShaderDesc)(D3DX11_PASS_SHADER_DESC *pDesc) { return E_FAIL; } - STDMETHOD(GetHullShaderDesc)(D3DX11_PASS_SHADER_DESC *pDesc) { return E_FAIL; } - STDMETHOD(GetDomainShaderDesc)(D3DX11_PASS_SHADER_DESC *pDesc) { return E_FAIL; } - STDMETHOD(GetComputeShaderDesc)(D3DX11_PASS_SHADER_DESC *pDesc) { return E_FAIL; } - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(UINT Index) { return &g_InvalidScalarVariable; } - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(LPCSTR Name) { return &g_InvalidScalarVariable; } - - STDMETHOD(Apply)(UINT Flags, ID3D11DeviceContext* pContext) { return E_FAIL; } - STDMETHOD(ComputeStateBlockMask)(D3DX11_STATE_BLOCK_MASK *pStateBlockMask) { return E_FAIL; } -}; - -struct SEffectInvalidTechnique : public ID3DX11EffectTechnique -{ -public: - STDMETHOD_(BOOL, IsValid)() { return FALSE; } - STDMETHOD(GetDesc)(D3DX11_TECHNIQUE_DESC *pDesc) { return E_FAIL; } - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(UINT Index) { return &g_InvalidScalarVariable; } - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(LPCSTR Name) { return &g_InvalidScalarVariable; } - - STDMETHOD_(ID3DX11EffectPass*, GetPassByIndex)(UINT Index) { return &g_InvalidPass; } - STDMETHOD_(ID3DX11EffectPass*, GetPassByName)(LPCSTR Name) { return &g_InvalidPass; } - - STDMETHOD(ComputeStateBlockMask)(D3DX11_STATE_BLOCK_MASK *pStateBlockMask) { return E_FAIL; } -}; - -struct SEffectInvalidGroup : public ID3DX11EffectGroup -{ -public: - STDMETHOD_(BOOL, IsValid)() { return FALSE; } - STDMETHOD(GetDesc)(D3DX11_GROUP_DESC *pDesc) { return E_FAIL; } - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(UINT Index) { return &g_InvalidScalarVariable; } - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(LPCSTR Name) { return &g_InvalidScalarVariable; } - - STDMETHOD_(ID3DX11EffectTechnique*, GetTechniqueByIndex)(UINT Index) { return &g_InvalidTechnique; } - STDMETHOD_(ID3DX11EffectTechnique*, GetTechniqueByName)(LPCSTR Name) { return &g_InvalidTechnique; } -}; - -////////////////////////////////////////////////////////////////////////// -// Helper routines -////////////////////////////////////////////////////////////////////////// - -// This is an annoying warning that pops up in retail builds because -// the code that jumps to "lExit" is conditionally not compiled. -// The only alternative is more #ifdefs in every function -#pragma warning( disable : 4102 ) // 'label' : unreferenced label - -#define VERIFYPARAMETER(x) \ -{ if (!(x)) { DPF(0, "%s: Parameter " #x " was NULL.", pFuncName); \ - __BREAK_ON_FAIL; hr = E_INVALIDARG; goto lExit; } } - -static HRESULT AnnotationInvalidSetCall(LPCSTR pFuncName) -{ - DPF(0, "%s: Annotations are readonly", pFuncName); - return D3DERR_INVALIDCALL; -} - -static HRESULT ObjectSetRawValue() -{ - DPF(0, "ID3DX11EffectVariable::SetRawValue: Objects do not support ths call; please use the specific object accessors instead."); - return D3DERR_INVALIDCALL; -} - -static HRESULT ObjectGetRawValue() -{ - DPF(0, "ID3DX11EffectVariable::GetRawValue: Objects do not support ths call; please use the specific object accessors instead."); - return D3DERR_INVALIDCALL; -} - -ID3DX11EffectConstantBuffer * NoParentCB(); - -ID3DX11EffectVariable * GetAnnotationByIndexHelper(const char *pClassName, UINT Index, UINT AnnotationCount, SAnnotation *pAnnotations); - -ID3DX11EffectVariable * GetAnnotationByNameHelper(const char *pClassName, LPCSTR Name, UINT AnnotationCount, SAnnotation *pAnnotations); - -template -BOOL GetVariableByIndexHelper(UINT Index, UINT VariableCount, SVarType *pVariables, - BYTE *pBaseAddress, SVarType **ppMember, void **ppDataPtr) -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::GetMemberByIndex"; - - if (Index >= VariableCount) - { - DPF(0, "%s: Invalid index (%d, total: %d)", pFuncName, Index, VariableCount); - return FALSE; - } - - *ppMember = pVariables + Index; - *ppDataPtr = pBaseAddress + (*ppMember)->Data.Offset; - return TRUE; -} - -template -BOOL GetVariableByNameHelper(LPCSTR Name, UINT VariableCount, SVarType *pVariables, - BYTE *pBaseAddress, SVarType **ppMember, void **ppDataPtr, UINT* pIndex) -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::GetMemberByName"; - - if (NULL == Name) - { - DPF(0, "%s: Parameter Name was NULL.", pFuncName); - return FALSE; - } - - UINT i; - bool bHasSuper = false; - - for (i = 0; i < VariableCount; ++ i) - { - *ppMember = pVariables + i; - D3DXASSERT(NULL != (*ppMember)->pName); - if (strcmp((*ppMember)->pName, Name) == 0) - { - *ppDataPtr = pBaseAddress + (*ppMember)->Data.Offset; - *pIndex = i; - return TRUE; - } - else if (i == 0 && - (*ppMember)->pName[0] == '$' && - strcmp((*ppMember)->pName, "$super") == 0) - { - bHasSuper = true; - } - } - - if (bHasSuper) - { - SVarType* pSuper = pVariables; - - return GetVariableByNameHelper(Name, - pSuper->pType->StructType.Members, - (SVarType*)pSuper->pType->StructType.pMembers, - pBaseAddress + pSuper->Data.Offset, - ppMember, - ppDataPtr, - pIndex); - } - - DPF(0, "%s: Variable [%s] not found", pFuncName, Name); - return FALSE; -} - -template -BOOL GetVariableBySemanticHelper(LPCSTR Semantic, UINT VariableCount, SVarType *pVariables, - BYTE *pBaseAddress, SVarType **ppMember, void **ppDataPtr, UINT* pIndex) -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::GetMemberBySemantic"; - - if (NULL == Semantic) - { - DPF(0, "%s: Parameter Semantic was NULL.", pFuncName); - return FALSE; - } - - UINT i; - - for (i = 0; i < VariableCount; ++ i) - { - *ppMember = pVariables + i; - if (NULL != (*ppMember)->pSemantic && - _stricmp((*ppMember)->pSemantic, Semantic) == 0) - { - *ppDataPtr = pBaseAddress + (*ppMember)->Data.Offset; - *pIndex = i; - return TRUE; - } - } - - DPF(0, "%s: Variable with semantic [%s] not found", pFuncName, Semantic); - return FALSE; -} - -D3DX11INLINE BOOL AreBoundsValid(UINT Offset, UINT Count, CONST void *pData, CONST SType *pType, UINT TotalUnpackedSize) -{ - if (Count == 0) return TRUE; - UINT singleElementSize = pType->GetTotalUnpackedSize(TRUE); - D3DXASSERT(singleElementSize <= pType->Stride); - - return ((Offset + Count >= Offset) && - ((Offset + Count) < ((UINT)-1) / pType->Stride) && - (Count * pType->Stride + (BYTE*)pData >= (BYTE*)pData) && - ((Offset + Count - 1) * pType->Stride + singleElementSize <= TotalUnpackedSize)); -} - -// Note that the branches in this code is based on template parameters and will be compiled out -template -__forceinline HRESULT CopyScalarValue(SRC_TYPE SrcValue, void *pDest, const char *pFuncName) -{ - HRESULT hr = S_OK; -#ifdef _DEBUG - if (ValidatePtr) - VERIFYPARAMETER(pDest); -#endif - - switch (SourceType) - { - case ETVT_Bool: - switch (DestType) - { - case ETVT_Bool: - *(int*)pDest = (SrcValue != 0) ? -1 : 0; - break; - - case ETVT_Int: - *(int*)pDest = SrcValue ? 1 : 0; - break; - - case ETVT_Float: - *(float*)pDest = SrcValue ? 1.0f : 0.0f; - break; - - default: - D3DXASSERT(0); - } - break; - - - case ETVT_Int: - switch (DestType) - { - case ETVT_Bool: - *(int*)pDest = (SrcValue != 0) ? -1 : 0; - break; - - case ETVT_Int: - *(int*)pDest = (int) SrcValue; - break; - - case ETVT_Float: - *(float*)pDest = (float)(SrcValue); - break; - - default: - D3DXASSERT(0); - } - break; - - case ETVT_Float: - switch (DestType) - { - case ETVT_Bool: - *(int*)pDest = (SrcValue != 0.0f) ? -1 : 0; - break; - - case ETVT_Int: - *(int*)pDest = (int) (SrcValue); - break; - - case ETVT_Float: - *(float*)pDest = (float) SrcValue; - break; - - default: - D3DXASSERT(0); - } - break; - - default: - D3DXASSERT(0); - } - -lExit: - return S_OK; -} - -template -D3DX11INLINE HRESULT SetScalarArray(CONST SRC_TYPE *pSrcValues, DEST_TYPE *pDestValues, UINT Offset, UINT Count, - SType *pType, UINT TotalUnpackedSize, const char *pFuncName) -{ - HRESULT hr = S_OK; - -#ifdef _DEBUG - VERIFYPARAMETER(pSrcValues); - - if (!AreBoundsValid(Offset, Count, pSrcValues, pType, TotalUnpackedSize)) - { - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - UINT i, j, delta = pType->NumericType.IsPackedArray ? 1 : SType::c_ScalarsPerRegister; - pDestValues += Offset * delta; - for (i = 0, j = 0; j < Count; i += delta, ++ j) - { - // pDestValues[i] = (DEST_TYPE)pSrcValues[j]; - CopyScalarValue(pSrcValues[j], &pDestValues[i], "SetScalarArray"); - } - -lExit: - return hr; -} - -template -D3DX11INLINE HRESULT GetScalarArray(SRC_TYPE *pSrcValues, DEST_TYPE *pDestValues, UINT Offset, UINT Count, - SType *pType, UINT TotalUnpackedSize, const char *pFuncName) -{ - HRESULT hr = S_OK; - -#ifdef _DEBUG - VERIFYPARAMETER(pDestValues); - - if (!AreBoundsValid(Offset, Count, pDestValues, pType, TotalUnpackedSize)) - { - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - UINT i, j, delta = pType->NumericType.IsPackedArray ? 1 : SType::c_ScalarsPerRegister; - pSrcValues += Offset * delta; - for (i = 0, j = 0; j < Count; i += delta, ++ j) - { - // pDestValues[j] = (DEST_TYPE)pSrcValues[i]; - CopyScalarValue(pSrcValues[i], &pDestValues[j], "GetScalarArray"); - } - -lExit: - return hr; -} - - -////////////////////////////////////////////////////////////////////////// -// TVariable - implements type casting and member/element retrieval -////////////////////////////////////////////////////////////////////////// - -// requires that IBaseInterface contain SVariable's fields and support ID3DX11EffectVariable -template -struct TVariable : public IBaseInterface -{ - STDMETHOD_(BOOL, IsValid)() { return TRUE; } - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(UINT Index) - { - SVariable *pMember; - UDataPointer dataPtr; - TTopLevelVariable *pTopLevelEntity = GetTopLevelEntity(); - - if (((ID3DX11Effect*)pTopLevelEntity->pEffect)->IsOptimized()) - { - DPF(0, "ID3DX11EffectVariable::GetMemberByIndex: Cannot get members; effect has been Optimize()'ed"); - return &g_InvalidScalarVariable; - } - - if (pType->VarType != EVT_Struct) - { - DPF(0, "ID3DX11EffectVariable::GetMemberByIndex: Variable is not a structure"); - return &g_InvalidScalarVariable; - } - - if (!GetVariableByIndexHelper(Index, pType->StructType.Members, pType->StructType.pMembers, - Data.pNumeric, &pMember, &dataPtr.pGeneric)) - { - return &g_InvalidScalarVariable; - } - - return pTopLevelEntity->pEffect->CreatePooledVariableMemberInterface(pTopLevelEntity, pMember, dataPtr, FALSE, Index); - } - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(LPCSTR Name) - { - SVariable *pMember; - UDataPointer dataPtr; - UINT index; - TTopLevelVariable *pTopLevelEntity = GetTopLevelEntity(); - - if (pTopLevelEntity->pEffect->IsOptimized()) - { - DPF(0, "ID3DX11EffectVariable::GetMemberByName: Cannot get members; effect has been Optimize()'ed"); - return &g_InvalidScalarVariable; - } - - if (pType->VarType != EVT_Struct) - { - DPF(0, "ID3DX11EffectVariable::GetMemberByName: Variable is not a structure"); - return &g_InvalidScalarVariable; - } - - if (!GetVariableByNameHelper(Name, pType->StructType.Members, pType->StructType.pMembers, - Data.pNumeric, &pMember, &dataPtr.pGeneric, &index)) - { - return &g_InvalidScalarVariable; - - } - - return pTopLevelEntity->pEffect->CreatePooledVariableMemberInterface(pTopLevelEntity, pMember, dataPtr, FALSE, index); - } - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(LPCSTR Semantic) - { - SVariable *pMember; - UDataPointer dataPtr; - UINT index; - TTopLevelVariable *pTopLevelEntity = GetTopLevelEntity(); - - if (pTopLevelEntity->pEffect->IsOptimized()) - { - DPF(0, "ID3DX11EffectVariable::GetMemberBySemantic: Cannot get members; effect has been Optimize()'ed"); - return &g_InvalidScalarVariable; - } - - if (pType->VarType != EVT_Struct) - { - DPF(0, "ID3DX11EffectVariable::GetMemberBySemantic: Variable is not a structure"); - return &g_InvalidScalarVariable; - } - - if (!GetVariableBySemanticHelper(Semantic, pType->StructType.Members, pType->StructType.pMembers, - Data.pNumeric, &pMember, &dataPtr.pGeneric, &index)) - { - return &g_InvalidScalarVariable; - - } - - return pTopLevelEntity->pEffect->CreatePooledVariableMemberInterface(pTopLevelEntity, pMember, dataPtr, FALSE, index); - } - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(UINT Index) - { - LPCSTR pFuncName = "ID3DX11EffectVariable::GetElement"; - TTopLevelVariable *pTopLevelEntity = GetTopLevelEntity(); - UDataPointer dataPtr; - - if (pTopLevelEntity->pEffect->IsOptimized()) - { - DPF(0, "ID3DX11EffectVariable::GetElement: Cannot get element; effect has been Optimize()'ed"); - return &g_InvalidScalarVariable; - } - - if (!IsArray()) - { - DPF(0, "%s: This interface does not refer to an array", pFuncName); - return &g_InvalidScalarVariable; - } - - if (Index >= pType->Elements) - { - DPF(0, "%s: Invalid element index (%d, total: %d)", pFuncName, Index, pType->Elements); - return &g_InvalidScalarVariable; - } - - if (pType->BelongsInConstantBuffer()) - { - dataPtr.pGeneric = Data.pNumeric + pType->Stride * Index; - } - else - { - dataPtr.pGeneric = GetBlockByIndex(pType->VarType, pType->ObjectType, Data.pGeneric, Index); - if (NULL == dataPtr.pGeneric) - { - DPF(0, "%s: Internal error", pFuncName); - return &g_InvalidScalarVariable; - } - } - - return pTopLevelEntity->pEffect->CreatePooledVariableMemberInterface(pTopLevelEntity, (SVariable *) this, dataPtr, TRUE, Index); - } - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsScalar"; - - if (pType->VarType != EVT_Numeric || - pType->NumericType.NumericLayout != ENL_Scalar) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidScalarVariable; - } - - return (ID3DX11EffectScalarVariable *) this; - } - - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsVector"; - - if (pType->VarType != EVT_Numeric || - pType->NumericType.NumericLayout != ENL_Vector) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidVectorVariable; - } - - return (ID3DX11EffectVectorVariable *) this; - } - - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsMatrix"; - - if (pType->VarType != EVT_Numeric || - pType->NumericType.NumericLayout != ENL_Matrix) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidMatrixVariable; - } - - return (ID3DX11EffectMatrixVariable *) this; - } - - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsString"; - - if (!pType->IsObjectType(EOT_String)) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidStringVariable; - } - - return (ID3DX11EffectStringVariable *) this; - } - - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsClassInstance"; - - if (!pType->IsClassInstance() ) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidClassInstanceVariable; - } - else if( pMemberData == NULL ) - { - DPF(0, "%s: Non-global class instance variables (members of structs or classes) and class instances " - "inside tbuffers are not supported.", pFuncName ); - return &g_InvalidClassInstanceVariable; - } - - return (ID3DX11EffectClassInstanceVariable *) this; - } - - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsInterface"; - - if (!pType->IsInterface()) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidInterfaceVariable; - } - - return (ID3DX11EffectInterfaceVariable *) this; - } - - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsShaderResource"; - - if (!pType->IsShaderResource()) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidShaderResourceVariable; - } - - return (ID3DX11EffectShaderResourceVariable *) this; - } - - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsUnorderedAccessView"; - - if (!pType->IsUnorderedAccessView()) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidUnorderedAccessViewVariable; - } - - return (ID3DX11EffectUnorderedAccessViewVariable *) this; - } - - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsRenderTargetView"; - - if (!pType->IsRenderTargetView()) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidRenderTargetViewVariable; - } - - return (ID3DX11EffectRenderTargetViewVariable *) this; - } - - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsDepthStencilView"; - - if (!pType->IsDepthStencilView()) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidDepthStencilViewVariable; - } - - return (ID3DX11EffectDepthStencilViewVariable *) this; - } - - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsConstantBuffer"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidConstantBuffer; - } - - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsShader"; - - if (!pType->IsShader()) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidShaderVariable; - } - - return (ID3DX11EffectShaderVariable *) this; - } - - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsBlend"; - - if (!pType->IsObjectType(EOT_Blend)) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidBlendVariable; - } - - return (ID3DX11EffectBlendVariable *) this; - } - - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsDepthStencil"; - - if (!pType->IsObjectType(EOT_DepthStencil)) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidDepthStencilVariable; - } - - return (ID3DX11EffectDepthStencilVariable *) this; - } - - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsRasterizer"; - - if (!pType->IsObjectType(EOT_Rasterizer)) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidRasterizerVariable; - } - - return (ID3DX11EffectRasterizerVariable *) this; - } - - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)() - { - LPCSTR pFuncName = "ID3DX11EffectVariable::AsSampler"; - - if (!pType->IsSampler()) - { - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidSamplerVariable; - } - - return (ID3DX11EffectSamplerVariable *) this; - } - - // Numeric variables should override this - STDMETHOD(SetRawValue)(CONST void *pData, UINT Offset, UINT Count) { return ObjectSetRawValue(); } - STDMETHOD(GetRawValue)(void *pData, UINT Offset, UINT Count) { return ObjectGetRawValue(); } -}; - -////////////////////////////////////////////////////////////////////////// -// TTopLevelVariable - functionality for annotations and global variables -////////////////////////////////////////////////////////////////////////// - -template -struct TTopLevelVariable : public SVariable, public IBaseInterface -{ - // Required to create member/element variable interfaces - CEffect *pEffect; - - CEffect* GetEffect() - { - return pEffect; - } - - TTopLevelVariable() - { - pEffect = NULL; - } - - UINT GetTotalUnpackedSize() - { - return ((SType*)pType)->GetTotalUnpackedSize(FALSE); - } - - STDMETHOD_(ID3DX11EffectType*, GetType)() - { - return (ID3DX11EffectType*)(SType*)pType; - } - - TTopLevelVariable * GetTopLevelEntity() - { - return (TTopLevelVariable *)this; - } - - BOOL IsArray() - { - return (pType->Elements > 0); - } - -}; - -////////////////////////////////////////////////////////////////////////// -// TMember - functionality for structure/array members of other variables -////////////////////////////////////////////////////////////////////////// - -template -struct TMember : public SVariable, public IBaseInterface -{ - // Indicates that this is a single element of a containing array - UINT IsSingleElement : 1; - - // Required to create member/element variable interfaces - TTopLevelVariable *pTopLevelEntity; - - TMember() - { - IsSingleElement = FALSE; - pTopLevelEntity = NULL; - } - - CEffect* GetEffect() - { - return pTopLevelEntity->pEffect; - } - - UINT GetTotalUnpackedSize() - { - return pType->GetTotalUnpackedSize(IsSingleElement); - } - - STDMETHOD_(ID3DX11EffectType*, GetType)() - { - if (IsSingleElement) - { - return pTopLevelEntity->pEffect->CreatePooledSingleElementTypeInterface( pType ); - } - else - { - return (ID3DX11EffectType*) pType; - } - } - - STDMETHOD(GetDesc)(D3DX11_EFFECT_VARIABLE_DESC *pDesc) - { - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVariable::GetDesc"; - - VERIFYPARAMETER(pDesc != NULL); - - pDesc->Name = pName; - pDesc->Semantic = pSemantic; - pDesc->Flags = 0; - - if (pTopLevelEntity->pEffect->IsReflectionData(pTopLevelEntity)) - { - // Is part of an annotation - D3DXASSERT(pTopLevelEntity->pEffect->IsReflectionData(Data.pGeneric)); - pDesc->Annotations = 0; - pDesc->BufferOffset = 0; - pDesc->Flags |= D3DX11_EFFECT_VARIABLE_ANNOTATION; - } - else - { - // Is part of a global variable - D3DXASSERT(pTopLevelEntity->pEffect->IsRuntimeData(pTopLevelEntity)); - if (!pTopLevelEntity->pType->IsObjectType(EOT_String)) - { - // strings are funny; their data is reflection data, so ignore those - D3DXASSERT(pTopLevelEntity->pEffect->IsRuntimeData(Data.pGeneric)); - } - - pDesc->Annotations = ((TGlobalVariable*)pTopLevelEntity)->AnnotationCount; - - SConstantBuffer *pCB = ((TGlobalVariable*)pTopLevelEntity)->pCB; - - if (pType->BelongsInConstantBuffer()) - { - D3DXASSERT(pCB != NULL); - UINT_PTR offset = Data.pNumeric - pCB->pBackingStore; - D3DXASSERT(offset == (UINT)offset); - pDesc->BufferOffset = (UINT)offset; - D3DXASSERT(pDesc->BufferOffset >= 0 && pDesc->BufferOffset + GetTotalUnpackedSize() <= pCB->Size); - } - else - { - D3DXASSERT(pCB == NULL); - pDesc->BufferOffset = 0; - } - } - -lExit: - return hr; - } - - TTopLevelVariable * GetTopLevelEntity() - { - return pTopLevelEntity; - } - - BOOL IsArray() - { - return (pType->Elements > 0 && !IsSingleElement); - } - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(UINT Index) - { return pTopLevelEntity->GetAnnotationByIndex(Index); } - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(LPCSTR Name) - { return pTopLevelEntity->GetAnnotationByName(Name); } - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)() - { return pTopLevelEntity->GetParentConstantBuffer(); } - - // Annotations should never be able to go down this codepath - void DirtyVariable() - { - // make sure to call the global variable's version of dirty variable - ((TGlobalVariable*)pTopLevelEntity)->DirtyVariable(); - } -}; - -////////////////////////////////////////////////////////////////////////// -// TAnnotation - functionality for top level annotations -////////////////////////////////////////////////////////////////////////// - -template -struct TAnnotation : public TVariable > -{ - STDMETHOD(GetDesc)(D3DX11_EFFECT_VARIABLE_DESC *pDesc) - { - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVariable::GetDesc"; - - VERIFYPARAMETER(pDesc != NULL); - - pDesc->Name = pName; - pDesc->Semantic = pSemantic; - pDesc->Flags = D3DX11_EFFECT_VARIABLE_ANNOTATION; - pDesc->Annotations = 0; - pDesc->BufferOffset = 0; - pDesc->ExplicitBindPoint = 0; - -lExit: - return hr; - - } - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(UINT Index) - { - LPCSTR pFuncName = "ID3DX11EffectVariable::GetAnnotationByIndex"; - DPF(0, "%s: Only variables may have annotations", pFuncName); - return &g_InvalidScalarVariable; - } - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(LPCSTR Name) - { - LPCSTR pFuncName = "ID3DX11EffectVariable::GetAnnotationByName"; - DPF(0, "%s: Only variables may have annotations", pFuncName); - return &g_InvalidScalarVariable; - } - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)() - { return NoParentCB(); } - - void DirtyVariable() - { - D3DXASSERT(0); - } -}; - -////////////////////////////////////////////////////////////////////////// -// TGlobalVariable - functionality for top level global variables -////////////////////////////////////////////////////////////////////////// - -template -struct TGlobalVariable : public TVariable > -{ - Timer LastModifiedTime; - - // if numeric, pointer to the constant buffer where this variable lives - SConstantBuffer *pCB; - - UINT AnnotationCount; - SAnnotation *pAnnotations; - - TGlobalVariable() - { - LastModifiedTime = 0; - pCB = NULL; - AnnotationCount = 0; - pAnnotations = NULL; - } - - STDMETHOD(GetDesc)(D3DX11_EFFECT_VARIABLE_DESC *pDesc) - { - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVariable::GetDesc"; - - VERIFYPARAMETER(pDesc != NULL); - - pDesc->Name = pName; - pDesc->Semantic = pSemantic; - pDesc->Flags = 0; - pDesc->Annotations = AnnotationCount; - - if (pType->BelongsInConstantBuffer()) - { - D3DXASSERT(pCB != NULL); - UINT_PTR offset = Data.pNumeric - pCB->pBackingStore; - D3DXASSERT(offset == (UINT)offset); - pDesc->BufferOffset = (UINT)offset; - D3DXASSERT(pDesc->BufferOffset >= 0 && pDesc->BufferOffset + GetTotalUnpackedSize() <= pCB->Size ); - } - else - { - D3DXASSERT(pCB == NULL); - pDesc->BufferOffset = 0; - } - - if (ExplicitBindPoint != -1) - { - pDesc->ExplicitBindPoint = ExplicitBindPoint; - pDesc->Flags |= D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT; - } - else - { - pDesc->ExplicitBindPoint = 0; - } - -lExit: - return hr; - } - - // these are all well defined for global vars - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(UINT Index) - { - return GetAnnotationByIndexHelper("ID3DX11EffectVariable", Index, AnnotationCount, pAnnotations); - } - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(LPCSTR Name) - { - return GetAnnotationByNameHelper("ID3DX11EffectVariable", Name, AnnotationCount, pAnnotations); - } - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)() - { - if (NULL != pCB) - { - D3DXASSERT(pType->BelongsInConstantBuffer()); - return (ID3DX11EffectConstantBuffer*)pCB; - } - else - { - D3DXASSERT(!pType->BelongsInConstantBuffer()); - return &g_InvalidConstantBuffer; - } - } - - D3DX11INLINE void DirtyVariable() - { - D3DXASSERT(NULL != pCB); - pCB->IsDirty = TRUE; - LastModifiedTime = pEffect->GetCurrentTime(); - } - -}; - -////////////////////////////////////////////////////////////////////////// -// TNumericVariable - implements raw set/get functionality -////////////////////////////////////////////////////////////////////////// - -// IMPORTANT NOTE: All of these numeric & object aspect classes MUST NOT -// add data members to the base variable classes. Otherwise type sizes -// will disagree between object & numeric variables and we cannot eaily -// create arrays of global variables using SGlobalVariable - -// Requires that IBaseInterface have SVariable's members, GetTotalUnpackedSize() and DirtyVariable() -template -struct TNumericVariable : public IBaseInterface -{ - STDMETHOD(SetRawValue)(CONST void *pData, UINT ByteOffset, UINT ByteCount) - { - if (IsAnnotation) - { - return AnnotationInvalidSetCall("ID3DX11EffectVariable::SetRawValue"); - } - else - { - HRESULT hr = S_OK; - -#ifdef _DEBUG - LPCSTR pFuncName = "ID3DX11EffectVariable::SetRawValue"; - - VERIFYPARAMETER(pData); - - if ((ByteOffset + ByteCount < ByteOffset) || - (ByteCount + (BYTE*)pData < (BYTE*)pData) || - ((ByteOffset + ByteCount) > GetTotalUnpackedSize())) - { - // overflow of some kind - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - DirtyVariable(); - memcpy(Data.pNumeric + ByteOffset, pData, ByteCount); - -lExit: - return hr; - } - } - - STDMETHOD(GetRawValue)(__out_bcount(ByteCount) void *pData, UINT ByteOffset, UINT ByteCount) - { - HRESULT hr = S_OK; - -#ifdef _DEBUG - LPCSTR pFuncName = "ID3DX11EffectVariable::GetRawValue"; - - VERIFYPARAMETER(pData); - - if ((ByteOffset + ByteCount < ByteOffset) || - (ByteCount + (BYTE*)pData < (BYTE*)pData) || - ((ByteOffset + ByteCount) > GetTotalUnpackedSize())) - { - // overflow of some kind - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - memcpy(pData, Data.pNumeric + ByteOffset, ByteCount); - -lExit: - return hr; - } -}; - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectScalarVariable (TFloatScalarVariable implementation) -////////////////////////////////////////////////////////////////////////// - -template -struct TFloatScalarVariable : public TNumericVariable -{ - STDMETHOD(SetFloat)(CONST float Value); - STDMETHOD(GetFloat)(float *pValue); - - STDMETHOD(SetFloatArray)(CONST float *pData, UINT Offset, UINT Count); - STDMETHOD(GetFloatArray)(float *pData, UINT Offset, UINT Count); - - STDMETHOD(SetInt)(CONST int Value); - STDMETHOD(GetInt)(int *pValue); - - STDMETHOD(SetIntArray)(CONST int *pData, UINT Offset, UINT Count); - STDMETHOD(GetIntArray)(int *pData, UINT Offset, UINT Count); - - STDMETHOD(SetBool)(CONST BOOL Value); - STDMETHOD(GetBool)(BOOL *pValue); - - STDMETHOD(SetBoolArray)(CONST BOOL *pData, UINT Offset, UINT Count); - STDMETHOD(GetBoolArray)(BOOL *pData, UINT Offset, UINT Count); -}; - -template -HRESULT TFloatScalarVariable::SetFloat(float Value) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetFloat"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return CopyScalarValue(Value, Data.pNumericFloat, pFuncName); -} - -template -HRESULT TFloatScalarVariable::GetFloat(float *pValue) -{ - return CopyScalarValue(*Data.pNumericFloat, pValue, "ID3DX11EffectScalarVariable::GetFloat"); -} - -template -HRESULT TFloatScalarVariable::SetFloatArray(CONST float *pData, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetFloatArray"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return SetScalarArray(pData, Data.pNumericFloat, Offset, Count, - pType, GetTotalUnpackedSize(), pFuncName); -} - -template -HRESULT TFloatScalarVariable::GetFloatArray(float *pData, UINT Offset, UINT Count) -{ - return GetScalarArray(Data.pNumericFloat, pData, Offset, Count, - pType, GetTotalUnpackedSize(), "ID3DX11EffectScalarVariable::GetFloatArray"); -} - -template -HRESULT TFloatScalarVariable::SetInt(CONST int Value) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetInt"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return CopyScalarValue(Value, Data.pNumericFloat, pFuncName); -} - -template -HRESULT TFloatScalarVariable::GetInt(int *pValue) -{ - return CopyScalarValue(*Data.pNumericFloat, pValue, "ID3DX11EffectScalarVariable::GetInt"); -} - -template -HRESULT TFloatScalarVariable::SetIntArray(CONST int *pData, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetIntArray"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return SetScalarArray(pData, Data.pNumericFloat, Offset, Count, - pType, GetTotalUnpackedSize(), pFuncName); -} - -template -HRESULT TFloatScalarVariable::GetIntArray(int *pData, UINT Offset, UINT Count) -{ - return GetScalarArray(Data.pNumericFloat, pData, Offset, Count, - pType, GetTotalUnpackedSize(), "ID3DX11EffectScalarVariable::GetIntArray"); -} - -template -HRESULT TFloatScalarVariable::SetBool(CONST BOOL Value) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetBool"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return CopyScalarValue(Value, Data.pNumericFloat, pFuncName); -} - -template -HRESULT TFloatScalarVariable::GetBool(BOOL *pValue) -{ - return CopyScalarValue(*Data.pNumericFloat, pValue, "ID3DX11EffectScalarVariable::GetBool"); -} - -template -HRESULT TFloatScalarVariable::SetBoolArray(CONST BOOL *pData, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetBoolArray"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return SetScalarArray(pData, Data.pNumericFloat, Offset, Count, - pType, GetTotalUnpackedSize(), pFuncName); -} - -template -HRESULT TFloatScalarVariable::GetBoolArray(BOOL *pData, UINT Offset, UINT Count) -{ - return GetScalarArray(Data.pNumericFloat, pData, Offset, Count, - pType, GetTotalUnpackedSize(), "ID3DX11EffectScalarVariable::GetBoolArray"); -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectScalarVariable (TIntScalarVariable implementation) -////////////////////////////////////////////////////////////////////////// - -template -struct TIntScalarVariable : public TNumericVariable -{ - STDMETHOD(SetFloat)(CONST float Value); - STDMETHOD(GetFloat)(float *pValue); - - STDMETHOD(SetFloatArray)(CONST float *pData, UINT Offset, UINT Count); - STDMETHOD(GetFloatArray)(float *pData, UINT Offset, UINT Count); - - STDMETHOD(SetInt)(CONST int Value); - STDMETHOD(GetInt)(int *pValue); - - STDMETHOD(SetIntArray)(CONST int *pData, UINT Offset, UINT Count); - STDMETHOD(GetIntArray)(int *pData, UINT Offset, UINT Count); - - STDMETHOD(SetBool)(CONST BOOL Value); - STDMETHOD(GetBool)(BOOL *pValue); - - STDMETHOD(SetBoolArray)(CONST BOOL *pData, UINT Offset, UINT Count); - STDMETHOD(GetBoolArray)(BOOL *pData, UINT Offset, UINT Count); -}; - -template -HRESULT TIntScalarVariable::SetFloat(float Value) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetFloat"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return CopyScalarValue(Value, Data.pNumericInt, pFuncName); -} - -template -HRESULT TIntScalarVariable::GetFloat(float *pValue) -{ - return CopyScalarValue(*Data.pNumericInt, pValue, "ID3DX11EffectScalarVariable::GetFloat"); -} - -template -HRESULT TIntScalarVariable::SetFloatArray(CONST float *pData, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetFloatArray"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return SetScalarArray(pData, Data.pNumericInt, Offset, Count, - pType, GetTotalUnpackedSize(), pFuncName); -} - -template -HRESULT TIntScalarVariable::GetFloatArray(float *pData, UINT Offset, UINT Count) -{ - return GetScalarArray(Data.pNumericInt, pData, Offset, Count, - pType, GetTotalUnpackedSize(), "ID3DX11EffectScalarVariable::GetFloatArray"); -} - -template -HRESULT TIntScalarVariable::SetInt(CONST int Value) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetInt"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return CopyScalarValue(Value, Data.pNumericInt, pFuncName); -} - -template -HRESULT TIntScalarVariable::GetInt(int *pValue) -{ - return CopyScalarValue(*Data.pNumericInt, pValue, "ID3DX11EffectScalarVariable::GetInt"); -} - -template -HRESULT TIntScalarVariable::SetIntArray(CONST int *pData, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetIntArray"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return SetScalarArray(pData, Data.pNumericInt, Offset, Count, - pType, GetTotalUnpackedSize(), pFuncName); -} - -template -HRESULT TIntScalarVariable::GetIntArray(int *pData, UINT Offset, UINT Count) -{ - return GetScalarArray(Data.pNumericInt, pData, Offset, Count, - pType, GetTotalUnpackedSize(), "ID3DX11EffectScalarVariable::GetIntArray"); -} - -template -HRESULT TIntScalarVariable::SetBool(CONST BOOL Value) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetBool"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return CopyScalarValue(Value, Data.pNumericInt, pFuncName); -} - -template -HRESULT TIntScalarVariable::GetBool(BOOL *pValue) -{ - return CopyScalarValue(*Data.pNumericInt, pValue, "ID3DX11EffectScalarVariable::GetBool"); -} - -template -HRESULT TIntScalarVariable::SetBoolArray(CONST BOOL *pData, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetBoolArray"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return SetScalarArray(pData, Data.pNumericInt, Offset, Count, - pType, GetTotalUnpackedSize(), pFuncName); -} - -template -HRESULT TIntScalarVariable::GetBoolArray(BOOL *pData, UINT Offset, UINT Count) -{ - return GetScalarArray(Data.pNumericInt, pData, Offset, Count, - pType, GetTotalUnpackedSize(), "ID3DX11EffectScalarVariable::GetBoolArray"); -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectScalarVariable (TBoolScalarVariable implementation) -////////////////////////////////////////////////////////////////////////// - -template -struct TBoolScalarVariable : public TNumericVariable -{ - STDMETHOD(SetFloat)(CONST float Value); - STDMETHOD(GetFloat)(float *pValue); - - STDMETHOD(SetFloatArray)(CONST float *pData, UINT Offset, UINT Count); - STDMETHOD(GetFloatArray)(float *pData, UINT Offset, UINT Count); - - STDMETHOD(SetInt)(CONST int Value); - STDMETHOD(GetInt)(int *pValue); - - STDMETHOD(SetIntArray)(CONST int *pData, UINT Offset, UINT Count); - STDMETHOD(GetIntArray)(int *pData, UINT Offset, UINT Count); - - STDMETHOD(SetBool)(CONST BOOL Value); - STDMETHOD(GetBool)(BOOL *pValue); - - STDMETHOD(SetBoolArray)(CONST BOOL *pData, UINT Offset, UINT Count); - STDMETHOD(GetBoolArray)(BOOL *pData, UINT Offset, UINT Count); -}; - -template -HRESULT TBoolScalarVariable::SetFloat(float Value) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetFloat"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return CopyScalarValue(Value, Data.pNumericBool, pFuncName); -} - -template -HRESULT TBoolScalarVariable::GetFloat(float *pValue) -{ - return CopyScalarValue(*Data.pNumericBool, pValue, "ID3DX11EffectScalarVariable::GetFloat"); -} - -template -HRESULT TBoolScalarVariable::SetFloatArray(CONST float *pData, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetFloatArray"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return SetScalarArray(pData, Data.pNumericBool, Offset, Count, - pType, GetTotalUnpackedSize(), pFuncName); -} - -template -HRESULT TBoolScalarVariable::GetFloatArray(float *pData, UINT Offset, UINT Count) -{ - return GetScalarArray(Data.pNumericBool, pData, Offset, Count, - pType, GetTotalUnpackedSize(), "ID3DX11EffectScalarVariable::GetFloatArray"); -} - -template -HRESULT TBoolScalarVariable::SetInt(CONST int Value) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetInt"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return CopyScalarValue(Value, Data.pNumericBool, pFuncName); -} - -template -HRESULT TBoolScalarVariable::GetInt(int *pValue) -{ - return CopyScalarValue(*Data.pNumericBool, pValue, "ID3DX11EffectScalarVariable::GetInt"); -} - -template -HRESULT TBoolScalarVariable::SetIntArray(CONST int *pData, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetIntArray"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return SetScalarArray(pData, Data.pNumericBool, Offset, Count, - pType, GetTotalUnpackedSize(), pFuncName); -} - -template -HRESULT TBoolScalarVariable::GetIntArray(int *pData, UINT Offset, UINT Count) -{ - return GetScalarArray(Data.pNumericBool, pData, Offset, Count, - pType, GetTotalUnpackedSize(), "ID3DX11EffectScalarVariable::GetIntArray"); -} - -template -HRESULT TBoolScalarVariable::SetBool(CONST BOOL Value) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetBool"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return CopyScalarValue(Value, Data.pNumericBool, pFuncName); -} - -template -HRESULT TBoolScalarVariable::GetBool(BOOL *pValue) -{ - return CopyScalarValue(*Data.pNumericBool, pValue, "ID3DX11EffectScalarVariable::GetBool"); -} - -template -HRESULT TBoolScalarVariable::SetBoolArray(CONST BOOL *pData, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectScalarVariable::SetBoolArray"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return SetScalarArray(pData, Data.pNumericBool, Offset, Count, - pType, GetTotalUnpackedSize(), pFuncName); -} - -template -HRESULT TBoolScalarVariable::GetBoolArray(BOOL *pData, UINT Offset, UINT Count) -{ - return GetScalarArray(Data.pNumericBool, pData, Offset, Count, - pType, GetTotalUnpackedSize(), "ID3DX11EffectScalarVariable::GetBoolArray"); -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectVectorVariable (TVectorVariable implementation) -////////////////////////////////////////////////////////////////////////// - -template -struct TVectorVariable : public TNumericVariable -{ - STDMETHOD(SetBoolVector) (CONST BOOL *pData); - STDMETHOD(SetIntVector) (CONST int *pData); - STDMETHOD(SetFloatVector)(CONST float *pData); - - STDMETHOD(GetBoolVector) (BOOL *pData); - STDMETHOD(GetIntVector) (int *pData); - STDMETHOD(GetFloatVector)(float *pData); - - - STDMETHOD(SetBoolVectorArray) (CONST BOOL *pData, UINT Offset, UINT Count); - STDMETHOD(SetIntVectorArray) (CONST int *pData, UINT Offset, UINT Count); - STDMETHOD(SetFloatVectorArray)(CONST float *pData, UINT Offset, UINT Count); - - STDMETHOD(GetBoolVectorArray) (BOOL *pData, UINT Offset, UINT Count); - STDMETHOD(GetIntVectorArray) (int *pData, UINT Offset, UINT Count); - STDMETHOD(GetFloatVectorArray)(float *pData, UINT Offset, UINT Count); -}; - -// Note that branches in this code is based on template parameters and will be compiled out -template -void __forceinline CopyDataWithTypeConversion(__out_bcount(vecCount * dstVecSize * sizeof(UINT)) void *pDest, CONST void *pSource, UINT dstVecSize, UINT srcVecSize, UINT elementCount, UINT vecCount) -{ - UINT i, j; - - switch (SourceType) - { - case ETVT_Bool: - switch (DestType) - { - case ETVT_Bool: - for (j=0; j -HRESULT TVectorVariable::SetFloatVector(CONST float *pData) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::SetFloatVector"; - -#ifdef _DEBUG - VERIFYPARAMETER(pData); -#endif - - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - CopyDataWithTypeConversion(Data.pVector, pData, 4, pType->NumericType.Columns, pType->NumericType.Columns, 1); - -lExit: - return hr; -} - -template -HRESULT TVectorVariable::GetFloatVector(float *pData) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::GetFloatVector"; - -#ifdef _DEBUG - VERIFYPARAMETER(pData); -#endif - - CopyDataWithTypeConversion(pData, Data.pVector, pType->NumericType.Columns, 4, pType->NumericType.Columns, 1); - -lExit: - return hr; -} - -// Int Vector - -template -HRESULT TVectorVariable::SetIntVector(CONST int *pData) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::SetIntVector"; - -#ifdef _DEBUG - VERIFYPARAMETER(pData); -#endif - - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - CopyDataWithTypeConversion(Data.pVector, pData, 4, pType->NumericType.Columns, pType->NumericType.Columns, 1); - -lExit: - return hr; -} - -template -HRESULT TVectorVariable::GetIntVector(int *pData) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::GetIntVector"; - -#ifdef _DEBUG - VERIFYPARAMETER(pData); -#endif - - CopyDataWithTypeConversion(pData, Data.pVector, pType->NumericType.Columns, 4, pType->NumericType.Columns, 1); - -lExit: - return hr; -} - -// Bool Vector - -template -HRESULT TVectorVariable::SetBoolVector(CONST BOOL *pData) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::SetBoolVector"; - -#ifdef _DEBUG - VERIFYPARAMETER(pData); -#endif - - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - CopyDataWithTypeConversion(Data.pVector, pData, 4, pType->NumericType.Columns, pType->NumericType.Columns, 1); - -lExit: - return hr; -} - -template -HRESULT TVectorVariable::GetBoolVector(BOOL *pData) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::GetBoolVector"; - -#ifdef _DEBUG - VERIFYPARAMETER(pData); -#endif - - CopyDataWithTypeConversion(pData, Data.pVector, pType->NumericType.Columns, 4, pType->NumericType.Columns, 1); - -lExit: - return hr; -} - -// Vector Arrays ///////////////////////////////////////////////////////// - -template -HRESULT TVectorVariable::SetFloatVectorArray(CONST float *pData, UINT Offset, UINT Count) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::SetFloatVectorArray"; - -#ifdef _DEBUG - if (!AreBoundsValid(Offset, Count, pData, pType, GetTotalUnpackedSize())) - { - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - // ensure we don't write over the padding at the end of the vector array - CopyDataWithTypeConversion(Data.pVector + Offset, pData, 4, pType->NumericType.Columns, pType->NumericType.Columns, max(min((int)Count, (int)pType->Elements - (int)Offset), 0)); - -lExit: - return hr; -} - -template -HRESULT TVectorVariable::GetFloatVectorArray(float *pData, UINT Offset, UINT Count) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::GetFloatVectorArray"; - -#ifdef _DEBUG - if (!AreBoundsValid(Offset, Count, pData, pType, GetTotalUnpackedSize())) - { - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - // ensure we don't read past the end of the vector array - CopyDataWithTypeConversion(pData, Data.pVector + Offset, pType->NumericType.Columns, 4, pType->NumericType.Columns, max(min((int)Count, (int)pType->Elements - (int)Offset), 0)); - -lExit: - return hr; -} - -// int - -template -HRESULT TVectorVariable::SetIntVectorArray(CONST int *pData, UINT Offset, UINT Count) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::SetIntVectorArray"; - -#ifdef _DEBUG - if (!AreBoundsValid(Offset, Count, pData, pType, GetTotalUnpackedSize())) - { - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - // ensure we don't write over the padding at the end of the vector array - CopyDataWithTypeConversion(Data.pVector + Offset, pData, 4, pType->NumericType.Columns, pType->NumericType.Columns, max(min((int)Count, (int)pType->Elements - (int)Offset), 0)); - -lExit: - return hr; -} - -template -HRESULT TVectorVariable::GetIntVectorArray(int *pData, UINT Offset, UINT Count) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::GetIntVectorArray"; - -#ifdef _DEBUG - if (!AreBoundsValid(Offset, Count, pData, pType, GetTotalUnpackedSize())) - { - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - // ensure we don't read past the end of the vector array - CopyDataWithTypeConversion(pData, Data.pVector + Offset, pType->NumericType.Columns, 4, pType->NumericType.Columns, max(min((int)Count, (int)pType->Elements - (int)Offset), 0)); - -lExit: - return hr; -} - -// bool - -template -HRESULT TVectorVariable::SetBoolVectorArray(CONST BOOL *pData, UINT Offset, UINT Count) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::SetBoolVectorArray"; - -#ifdef _DEBUG - if (!AreBoundsValid(Offset, Count, pData, pType, GetTotalUnpackedSize())) - { - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - // ensure we don't write over the padding at the end of the vector array - CopyDataWithTypeConversion(Data.pVector + Offset, pData, 4, pType->NumericType.Columns, pType->NumericType.Columns, max(min((int)Count, (int)pType->Elements - (int)Offset), 0)); - -lExit: - return hr; -} - -template -HRESULT TVectorVariable::GetBoolVectorArray(BOOL *pData, UINT Offset, UINT Count) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::GetBoolVectorArray"; - -#ifdef _DEBUG - if (!AreBoundsValid(Offset, Count, pData, pType, GetTotalUnpackedSize())) - { - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - // ensure we don't read past the end of the vector array - CopyDataWithTypeConversion(pData, Data.pVector + Offset, pType->NumericType.Columns, 4, pType->NumericType.Columns, max(min((int)Count, (int)pType->Elements - (int)Offset), 0)); - -lExit: - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectVector4Variable (TVectorVariable implementation) [OPTIMIZED] -////////////////////////////////////////////////////////////////////////// - -template -struct TVector4Variable : public TVectorVariable -{ - STDMETHOD(SetFloatVector)(CONST float *pData); - STDMETHOD(GetFloatVector)(float *pData); - - STDMETHOD(SetFloatVectorArray)(CONST float *pData, UINT Offset, UINT Count); - STDMETHOD(GetFloatVectorArray)(float *pData, UINT Offset, UINT Count); -}; - -template -HRESULT TVector4Variable::SetFloatVector(CONST float *pData) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::SetFloatVector"; - -#ifdef _DEBUG - VERIFYPARAMETER(pData); -#endif - - DirtyVariable(); - Data.pVector[0] = ((CEffectVector4*) pData)[0]; - -lExit: - return hr; -} - -template -HRESULT TVector4Variable::GetFloatVector(float *pData) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::GetFloatVector"; - -#ifdef _DEBUG - VERIFYPARAMETER(pData); -#endif - - dwordMemcpy(pData, Data.pVector, pType->NumericType.Columns * SType::c_ScalarSize); - -lExit: - return hr; -} - -template -HRESULT TVector4Variable::SetFloatVectorArray(CONST float *pData, UINT Offset, UINT Count) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::SetFloatVectorArray"; - -#ifdef _DEBUG - if (!AreBoundsValid(Offset, Count, pData, pType, GetTotalUnpackedSize())) - { - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - DirtyVariable(); - // ensure we don't write over the padding at the end of the vector array - dwordMemcpy(Data.pVector + Offset, pData, min((Offset + Count) * sizeof(CEffectVector4), pType->TotalSize)); - -lExit: - return hr; -} - -template -HRESULT TVector4Variable::GetFloatVectorArray(float *pData, UINT Offset, UINT Count) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectVectorVariable::GetFloatVectorArray"; - -#ifdef _DEBUG - if (!AreBoundsValid(Offset, Count, pData, pType, GetTotalUnpackedSize())) - { - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - // ensure we don't read past the end of the vector array - dwordMemcpy(pData, Data.pVector + Offset, min((Offset + Count) * sizeof(CEffectVector4), pType->TotalSize)); - -lExit: - return hr; -} - - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectMatrixVariable (TMatrixVariable implementation) -////////////////////////////////////////////////////////////////////////// - -template -struct TMatrixVariable : public TNumericVariable -{ - STDMETHOD(SetMatrix)(CONST float *pData); - STDMETHOD(GetMatrix)(float *pData); - - STDMETHOD(SetMatrixArray)(CONST float *pData, UINT Offset, UINT Count); - STDMETHOD(GetMatrixArray)(float *pData, UINT Offset, UINT Count); - - STDMETHOD(SetMatrixPointerArray)(CONST float **ppData, UINT Offset, UINT Count); - STDMETHOD(GetMatrixPointerArray)(float **ppData, UINT Offset, UINT Count); - - STDMETHOD(SetMatrixTranspose)(CONST float *pData); - STDMETHOD(GetMatrixTranspose)(float *pData); - - STDMETHOD(SetMatrixTransposeArray)(CONST float *pData, UINT Offset, UINT Count); - STDMETHOD(GetMatrixTransposeArray)(float *pData, UINT Offset, UINT Count); - - STDMETHOD(SetMatrixTransposePointerArray)(CONST float **ppData, UINT Offset, UINT Count); - STDMETHOD(GetMatrixTransposePointerArray)(float **ppData, UINT Offset, UINT Count); -}; - -template -static void SetMatrixTransposeHelper(SType *pType, __out_bcount(64) BYTE *pDestData, CONST float* pMatrix) -{ - UINT i, j; - UINT registers, entries; - - if (Transpose) - { - // row major - registers = pType->NumericType.Rows; - entries = pType->NumericType.Columns; - } - else - { - // column major - registers = pType->NumericType.Columns; - entries = pType->NumericType.Rows; - } - __analysis_assume( registers <= 4 ); - __analysis_assume( entries <= 4 ); - - for (i = 0; i < registers; ++ i) - { - for (j = 0; j < entries; ++ j) - { -#pragma prefast(suppress:__WARNING_UNRELATED_LOOP_TERMINATION, "regs / entries <= 4") - ((float*)pDestData)[j] = ((float*)pMatrix)[j * 4 + i]; - } - pDestData += SType::c_RegisterSize; - } -} - -template -static void GetMatrixTransposeHelper(SType *pType, __in_bcount(64) BYTE *pSrcData, __out_ecount(16) float* pMatrix) -{ - UINT i, j; - UINT registers, entries; - - if (Transpose) - { - // row major - registers = pType->NumericType.Rows; - entries = pType->NumericType.Columns; - } - else - { - // column major - registers = pType->NumericType.Columns; - entries = pType->NumericType.Rows; - } - __analysis_assume( registers <= 4 ); - __analysis_assume( entries <= 4 ); - - for (i = 0; i < registers; ++ i) - { - for (j = 0; j < entries; ++ j) - { - ((float*)pMatrix)[j * 4 + i] = ((float*)pSrcData)[j]; - } - pSrcData += SType::c_RegisterSize; - } -} - -template -HRESULT DoMatrixArrayInternal(SType *pType, UINT TotalUnpackedSize, BYTE *pEffectData, void *pMatrixData, UINT Offset, UINT Count, LPCSTR pFuncName) -{ - HRESULT hr = S_OK; - -#ifdef _DEBUG - if (!AreBoundsValid(Offset, Count, pMatrixData, pType, TotalUnpackedSize)) - { - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } -#endif - - UINT i; - - if ((pType->NumericType.IsColumnMajor && Transpose) || (!pType->NumericType.IsColumnMajor && !Transpose)) - { - // fast path - UINT dataSize; - if (Transpose) - { - dataSize = ((pType->NumericType.Columns - 1) * 4 + pType->NumericType.Rows) * SType::c_ScalarSize; - } - else - { - dataSize = ((pType->NumericType.Rows - 1) * 4 + pType->NumericType.Columns) * SType::c_ScalarSize; - } - - for (i = 0; i < Count; ++ i) - { - CEffectMatrix *pMatrix; - if (ExtraIndirection) - { - pMatrix = ((CEffectMatrix **)pMatrixData)[i]; - if (!pMatrix) - { - continue; - } - } - else - { - pMatrix = ((CEffectMatrix *)pMatrixData) + i; - } - - if (IsSetting) - { - dwordMemcpy(pEffectData + pType->Stride * (i + Offset), pMatrix, dataSize); - } - else - { - dwordMemcpy(pMatrix, pEffectData + pType->Stride * (i + Offset), dataSize); - } - } - } - else - { - // slow path - for (i = 0; i < Count; ++ i) - { - CEffectMatrix *pMatrix; - if (ExtraIndirection) - { - pMatrix = ((CEffectMatrix **)pMatrixData)[i]; - if (!pMatrix) - { - continue; - } - } - else - { - pMatrix = ((CEffectMatrix *)pMatrixData) + i; - } - - if (IsSetting) - { - SetMatrixTransposeHelper(pType, pEffectData + pType->Stride * (i + Offset), (float*) pMatrix); - } - else - { - GetMatrixTransposeHelper(pType, pEffectData + pType->Stride * (i + Offset), (float*) pMatrix); - } - } - } - -lExit: - return hr; -} - -template -HRESULT TMatrixVariable::SetMatrix(CONST float *pData) -{ - LPCSTR pFuncName = "ID3DX11EffectMatrixVariable::SetMatrix"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return DoMatrixArrayInternal(pType, GetTotalUnpackedSize(), - Data.pNumeric, const_cast(pData), 0, 1, pFuncName); -} - -template -HRESULT TMatrixVariable::GetMatrix(float *pData) -{ - return DoMatrixArrayInternal(pType, GetTotalUnpackedSize(), - Data.pNumeric, pData, 0, 1, "ID3DX11EffectMatrixVariable::GetMatrix"); -} - -template -HRESULT TMatrixVariable::SetMatrixArray(CONST float *pData, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectMatrixVariable::SetMatrixArray"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return DoMatrixArrayInternal(pType, GetTotalUnpackedSize(), - Data.pNumeric, const_cast(pData), Offset, Count, "ID3DX11EffectMatrixVariable::SetMatrixArray"); -} - -template -HRESULT TMatrixVariable::GetMatrixArray(float *pData, UINT Offset, UINT Count) -{ - return DoMatrixArrayInternal(pType, GetTotalUnpackedSize(), - Data.pNumeric, pData, Offset, Count, "ID3DX11EffectMatrixVariable::GetMatrixArray"); -} - -template -HRESULT TMatrixVariable::SetMatrixPointerArray(CONST float **ppData, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectMatrixVariable::SetMatrixPointerArray"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return DoMatrixArrayInternal(pType, GetTotalUnpackedSize(), - Data.pNumeric, const_cast(ppData), Offset, Count, "ID3DX11EffectMatrixVariable::SetMatrixPointerArray"); -} - -template -HRESULT TMatrixVariable::GetMatrixPointerArray(float **ppData, UINT Offset, UINT Count) -{ - return DoMatrixArrayInternal(pType, GetTotalUnpackedSize(), - Data.pNumeric, ppData, Offset, Count, "ID3DX11EffectMatrixVariable::GetMatrixPointerArray"); -} - -template -HRESULT TMatrixVariable::SetMatrixTranspose(CONST float *pData) -{ - LPCSTR pFuncName = "ID3DX11EffectMatrixVariable::SetMatrixTranspose"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return DoMatrixArrayInternal(pType, GetTotalUnpackedSize(), - Data.pNumeric, const_cast(pData), 0, 1, "ID3DX11EffectMatrixVariable::SetMatrixTranspose"); -} - -template -HRESULT TMatrixVariable::GetMatrixTranspose(float *pData) -{ - return DoMatrixArrayInternal(pType, GetTotalUnpackedSize(), - Data.pNumeric, pData, 0, 1, "ID3DX11EffectMatrixVariable::GetMatrixTranspose"); -} - -template -HRESULT TMatrixVariable::SetMatrixTransposeArray(CONST float *pData, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectMatrixVariable::SetMatrixTransposeArray"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return DoMatrixArrayInternal(pType, GetTotalUnpackedSize(), - Data.pNumeric, const_cast(pData), Offset, Count, "ID3DX11EffectMatrixVariable::SetMatrixTransposeArray"); -} - -template -HRESULT TMatrixVariable::GetMatrixTransposeArray(float *pData, UINT Offset, UINT Count) -{ - return DoMatrixArrayInternal(pType, GetTotalUnpackedSize(), - Data.pNumeric, pData, Offset, Count, "ID3DX11EffectMatrixVariable::GetMatrixTransposeArray"); -} - -template -HRESULT TMatrixVariable::SetMatrixTransposePointerArray(CONST float **ppData, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectMatrixVariable::SetMatrixTransposePointerArray"; - if (IsAnnotation) return AnnotationInvalidSetCall(pFuncName); - DirtyVariable(); - return DoMatrixArrayInternal(pType, GetTotalUnpackedSize(), - Data.pNumeric, const_cast(ppData), Offset, Count, "ID3DX11EffectMatrixVariable::SetMatrixTransposePointerArray"); -} - -template -HRESULT TMatrixVariable::GetMatrixTransposePointerArray(float **ppData, UINT Offset, UINT Count) -{ - return DoMatrixArrayInternal(pType, GetTotalUnpackedSize(), - Data.pNumeric, ppData, Offset, Count, "ID3DX11EffectMatrixVariable::GetMatrixTransposePointerArray"); -} - -// Optimize commonly used fast paths -// (non-annotations only!) -template -struct TMatrix4x4Variable : public TMatrixVariable -{ - STDMETHOD(SetMatrix)(CONST float *pData); - STDMETHOD(GetMatrix)(float *pData); - - STDMETHOD(SetMatrixArray)(CONST float *pData, UINT Offset, UINT Count); - STDMETHOD(GetMatrixArray)(float *pData, UINT Offset, UINT Count); - - STDMETHOD(SetMatrixTranspose)(CONST float *pData); - STDMETHOD(GetMatrixTranspose)(float *pData); - - STDMETHOD(SetMatrixTransposeArray)(CONST float *pData, UINT Offset, UINT Count); - STDMETHOD(GetMatrixTransposeArray)(float *pData, UINT Offset, UINT Count); -}; - -D3DX11INLINE static void Matrix4x4TransposeHelper(CONST void *pSrc, void *pDst) -{ - BYTE *pDestData = (BYTE*)pDst; - UINT *pMatrix = (UINT*)pSrc; - - ((UINT*)pDestData)[0 * 4 + 0] = pMatrix[0 * 4 + 0]; - ((UINT*)pDestData)[0 * 4 + 1] = pMatrix[1 * 4 + 0]; - ((UINT*)pDestData)[0 * 4 + 2] = pMatrix[2 * 4 + 0]; - ((UINT*)pDestData)[0 * 4 + 3] = pMatrix[3 * 4 + 0]; - - ((UINT*)pDestData)[1 * 4 + 0] = pMatrix[0 * 4 + 1]; - ((UINT*)pDestData)[1 * 4 + 1] = pMatrix[1 * 4 + 1]; - ((UINT*)pDestData)[1 * 4 + 2] = pMatrix[2 * 4 + 1]; - ((UINT*)pDestData)[1 * 4 + 3] = pMatrix[3 * 4 + 1]; - - ((UINT*)pDestData)[2 * 4 + 0] = pMatrix[0 * 4 + 2]; - ((UINT*)pDestData)[2 * 4 + 1] = pMatrix[1 * 4 + 2]; - ((UINT*)pDestData)[2 * 4 + 2] = pMatrix[2 * 4 + 2]; - ((UINT*)pDestData)[2 * 4 + 3] = pMatrix[3 * 4 + 2]; - - ((UINT*)pDestData)[3 * 4 + 0] = pMatrix[0 * 4 + 3]; - ((UINT*)pDestData)[3 * 4 + 1] = pMatrix[1 * 4 + 3]; - ((UINT*)pDestData)[3 * 4 + 2] = pMatrix[2 * 4 + 3]; - ((UINT*)pDestData)[3 * 4 + 3] = pMatrix[3 * 4 + 3]; -} - -D3DX11INLINE static void Matrix4x4Copy(CONST void *pSrc, void *pDst) -{ -#if 1 - // In tests, this path ended up generating faster code both on x86 and x64 - // T1 - Matrix4x4Copy - this path - // T2 - Matrix4x4Transpose - // T1: 1.88 T2: 1.92 - with 32 bit copies - // T1: 1.85 T2: 1.80 - with 64 bit copies - - UINT64 *pDestData = (UINT64*)pDst; - UINT64 *pMatrix = (UINT64*)pSrc; - - pDestData[0 * 4 + 0] = pMatrix[0 * 4 + 0]; - pDestData[0 * 4 + 1] = pMatrix[0 * 4 + 1]; - pDestData[0 * 4 + 2] = pMatrix[0 * 4 + 2]; - pDestData[0 * 4 + 3] = pMatrix[0 * 4 + 3]; - - pDestData[1 * 4 + 0] = pMatrix[1 * 4 + 0]; - pDestData[1 * 4 + 1] = pMatrix[1 * 4 + 1]; - pDestData[1 * 4 + 2] = pMatrix[1 * 4 + 2]; - pDestData[1 * 4 + 3] = pMatrix[1 * 4 + 3]; -#else - UINT *pDestData = (UINT*)pDst; - UINT *pMatrix = (UINT*)pSrc; - - pDestData[0 * 4 + 0] = pMatrix[0 * 4 + 0]; - pDestData[0 * 4 + 1] = pMatrix[0 * 4 + 1]; - pDestData[0 * 4 + 2] = pMatrix[0 * 4 + 2]; - pDestData[0 * 4 + 3] = pMatrix[0 * 4 + 3]; - - pDestData[1 * 4 + 0] = pMatrix[1 * 4 + 0]; - pDestData[1 * 4 + 1] = pMatrix[1 * 4 + 1]; - pDestData[1 * 4 + 2] = pMatrix[1 * 4 + 2]; - pDestData[1 * 4 + 3] = pMatrix[1 * 4 + 3]; - - pDestData[2 * 4 + 0] = pMatrix[2 * 4 + 0]; - pDestData[2 * 4 + 1] = pMatrix[2 * 4 + 1]; - pDestData[2 * 4 + 2] = pMatrix[2 * 4 + 2]; - pDestData[2 * 4 + 3] = pMatrix[2 * 4 + 3]; - - pDestData[3 * 4 + 0] = pMatrix[3 * 4 + 0]; - pDestData[3 * 4 + 1] = pMatrix[3 * 4 + 1]; - pDestData[3 * 4 + 2] = pMatrix[3 * 4 + 2]; - pDestData[3 * 4 + 3] = pMatrix[3 * 4 + 3]; -#endif -} - - -// Note that branches in this code is based on template parameters and will be compiled out -template -D3DX11INLINE HRESULT DoMatrix4x4ArrayInternal(BYTE *pEffectData, void *pMatrixData, UINT Offset, UINT Count - -#ifdef _DEBUG - , SType *pType, UINT TotalUnpackedSize, LPCSTR pFuncName) -#else - ) -#endif -{ - HRESULT hr = S_OK; - -#ifdef _DEBUG - if (!AreBoundsValid(Offset, Count, pMatrixData, pType, TotalUnpackedSize)) - { - DPF(0, "%s: Invalid range specified", pFuncName); - VH(E_INVALIDARG); - } - - D3DXASSERT(pType->NumericType.IsColumnMajor == IsColumnMajor && pType->Stride == (4 * SType::c_RegisterSize)); -#endif - - UINT i; - - if ((IsColumnMajor && Transpose) || (!IsColumnMajor && !Transpose)) - { - // fast path - for (i = 0; i < Count; ++ i) - { - CEffectMatrix *pMatrix = ((CEffectMatrix *)pMatrixData) + i; - - if (IsSetting) - { - Matrix4x4Copy(pMatrix, pEffectData + 4 * SType::c_RegisterSize * (i + Offset)); - } - else - { - Matrix4x4Copy(pEffectData + 4 * SType::c_RegisterSize * (i + Offset), pMatrix); - } - } - } - else - { - // slow path - for (i = 0; i < Count; ++ i) - { - CEffectMatrix *pMatrix = ((CEffectMatrix *)pMatrixData) + i; - - if (IsSetting) - { - Matrix4x4TransposeHelper((float*) pMatrix, pEffectData + 4 * SType::c_RegisterSize * (i + Offset)); - } - else - { - Matrix4x4TransposeHelper(pEffectData + 4 * SType::c_RegisterSize * (i + Offset), (float*) pMatrix); - } - } - } - -lExit: - return hr; -} - -template -HRESULT TMatrix4x4Variable::SetMatrix(CONST float *pData) -{ - DirtyVariable(); - return DoMatrix4x4ArrayInternal(Data.pNumeric, const_cast(pData), 0, 1 -#ifdef _DEBUG - , pType, GetTotalUnpackedSize(), "ID3DX11EffectMatrixVariable::SetMatrix"); -#else - ); -#endif -} - -template -HRESULT TMatrix4x4Variable::GetMatrix(float *pData) -{ - return DoMatrix4x4ArrayInternal(Data.pNumeric, pData, 0, 1 -#ifdef _DEBUG - , pType, GetTotalUnpackedSize(), "ID3DX11EffectMatrixVariable::GetMatrix"); -#else - ); -#endif -} - -template -HRESULT TMatrix4x4Variable::SetMatrixArray(CONST float *pData, UINT Offset, UINT Count) -{ - DirtyVariable(); - return DoMatrix4x4ArrayInternal(Data.pNumeric, const_cast(pData), Offset, Count -#ifdef _DEBUG - , pType, GetTotalUnpackedSize(), "ID3DX11EffectMatrixVariable::SetMatrixArray"); -#else - ); -#endif -} - -template -HRESULT TMatrix4x4Variable::GetMatrixArray(float *pData, UINT Offset, UINT Count) -{ - return DoMatrix4x4ArrayInternal(Data.pNumeric, pData, Offset, Count -#ifdef _DEBUG - , pType, GetTotalUnpackedSize(), "ID3DX11EffectMatrixVariable::GetMatrixArray"); -#else - ); -#endif -} - -template -HRESULT TMatrix4x4Variable::SetMatrixTranspose(CONST float *pData) -{ - DirtyVariable(); - return DoMatrix4x4ArrayInternal(Data.pNumeric, const_cast(pData), 0, 1 -#ifdef _DEBUG - , pType, GetTotalUnpackedSize(), "ID3DX11EffectMatrixVariable::SetMatrixTranspose"); -#else - ); -#endif -} - -template -HRESULT TMatrix4x4Variable::GetMatrixTranspose(float *pData) -{ - return DoMatrix4x4ArrayInternal(Data.pNumeric, pData, 0, 1 -#ifdef _DEBUG - , pType, GetTotalUnpackedSize(), "ID3DX11EffectMatrixVariable::GetMatrixTranspose"); -#else - ); -#endif -} - -template -HRESULT TMatrix4x4Variable::SetMatrixTransposeArray(CONST float *pData, UINT Offset, UINT Count) -{ - DirtyVariable(); - return DoMatrix4x4ArrayInternal(Data.pNumeric, const_cast(pData), Offset, Count -#ifdef _DEBUG - , pType, GetTotalUnpackedSize(), "ID3DX11EffectMatrixVariable::SetMatrixTransposeArray"); -#else - ); -#endif -} - -template -HRESULT TMatrix4x4Variable::GetMatrixTransposeArray(float *pData, UINT Offset, UINT Count) -{ - return DoMatrix4x4ArrayInternal(Data.pNumeric, pData, Offset, Count -#ifdef _DEBUG - , pType, GetTotalUnpackedSize(), "ID3DX11EffectMatrixVariable::GetMatrixTransposeArray"); -#else - ); -#endif -} - -#ifdef _DEBUG - -// Useful object macro to check bounds and parameters -#define CHECK_OBJECT_ARRAY_BOUNDS(Offset, Count, Pointer) \ - HRESULT hr = S_OK; \ - VERIFYPARAMETER(Pointer) \ - UINT elements = IsArray() ? pType->Elements : 1; \ - \ - if ((Offset + Count < Offset) || (elements < Offset + Count)) \ - { \ - DPF(0, "%s: Invalid range specified", pFuncName); \ - VH(E_INVALIDARG); \ - } \ - -#define CHECK_OBJECT_SCALAR_BOUNDS(Index, Pointer) \ - HRESULT hr = S_OK; \ - VERIFYPARAMETER(Pointer) \ - UINT elements = IsArray() ? pType->Elements : 1; \ - \ - if (Index >= elements) \ - { \ - DPF(0, "%s: Invalid index specified", pFuncName); \ - VH(E_INVALIDARG); \ - } \ - -#define CHECK_SCALAR_BOUNDS(Index) \ - HRESULT hr = S_OK; \ - UINT elements = IsArray() ? pType->Elements : 1; \ - \ - if (Index >= elements) \ -{ \ - DPF(0, "%s: Invalid index specified", pFuncName); \ - VH(E_INVALIDARG); \ -} \ - -#else // _DEBUG - -#define CHECK_OBJECT_ARRAY_BOUNDS(Offset, Count, Pointer) \ - HRESULT hr = S_OK; \ - -#define CHECK_OBJECT_SCALAR_BOUNDS(Index, Pointer) \ - HRESULT hr = S_OK; \ - -#define CHECK_SCALAR_BOUNDS(Index) \ - HRESULT hr = S_OK; \ - -#endif // _DEBUG - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectStringVariable (TStringVariable implementation) -////////////////////////////////////////////////////////////////////////// - -template -struct TStringVariable : public IBaseInterface -{ - STDMETHOD(GetString)(LPCSTR *ppString); - STDMETHOD(GetStringArray)( __out_ecount(Count) LPCSTR *ppStrings, UINT Offset, UINT Count ); -}; - -template -HRESULT TStringVariable::GetString(LPCSTR *ppString) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectStringVariable::GetString"; - - VERIFYPARAMETER(ppString); - - if (GetTopLevelEntity()->pEffect->IsOptimized()) - { - DPF(0, "%s: Effect has been Optimize()'ed; all string/reflection data has been deleted", pFuncName); - return D3DERR_INVALIDCALL; - } - - D3DXASSERT(NULL != Data.pString); - - *ppString = Data.pString->pString; - -lExit: - return hr; -} - -template -HRESULT TStringVariable::GetStringArray( __out_ecount(Count) LPCSTR *ppStrings, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectStringVariable::GetStringArray"; - - CHECK_OBJECT_ARRAY_BOUNDS(Offset, Count, ppStrings); - - if (GetTopLevelEntity()->pEffect->IsOptimized()) - { - DPF(0, "%s: Effect has been Optimize()'ed; all string/reflection data has been deleted", pFuncName); - return D3DERR_INVALIDCALL; - } - - D3DXASSERT(NULL != Data.pString); - - UINT i; - for (i = 0; i < Count; ++ i) - { - ppStrings[i] = (Data.pString + Offset + i)->pString; - } - -lExit: - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectClassInstanceVariable (TClassInstanceVariable implementation) -////////////////////////////////////////////////////////////////////////// - -template -struct TClassInstanceVariable : public IBaseInterface -{ - STDMETHOD(GetClassInstance)(ID3D11ClassInstance **ppClassInstance); -}; - -template -HRESULT TClassInstanceVariable::GetClassInstance(ID3D11ClassInstance** ppClassInstance) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectClassInstanceVariable::GetClassInstance"; - - D3DXASSERT( pMemberData != NULL ); - *ppClassInstance = pMemberData->Data.pD3DClassInstance; - SAFE_ADDREF(*ppClassInstance); - -lExit: - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectInterfaceeVariable (TInterfaceVariable implementation) -////////////////////////////////////////////////////////////////////////// - -template -struct TInterfaceVariable : public IBaseInterface -{ - STDMETHOD(SetClassInstance)(ID3DX11EffectClassInstanceVariable *pEffectClassInstance); - STDMETHOD(GetClassInstance)(ID3DX11EffectClassInstanceVariable **ppEffectClassInstance); -}; - -template -HRESULT TInterfaceVariable::SetClassInstance(ID3DX11EffectClassInstanceVariable *pEffectClassInstance) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectInterfaceVariable::SetClassInstance"; - - // Note that we don't check if the types are compatible. The debug layer will complain if it is. - // IsValid() will not catch type mismatches. - SClassInstanceGlobalVariable* pCI = (SClassInstanceGlobalVariable*)pEffectClassInstance; - Data.pInterface->pClassInstance = pCI; - -lExit: - return hr; -} - -template -HRESULT TInterfaceVariable::GetClassInstance(ID3DX11EffectClassInstanceVariable **ppEffectClassInstance) -{ - HRESULT hr = S_OK; - LPCSTR pFuncName = "ID3DX11EffectInterfaceVariable::GetClassInstance"; - -#ifdef _DEBUG - VERIFYPARAMETER(ppEffectClassInstance); -#endif - - *ppEffectClassInstance = Data.pInterface->pClassInstance; - -lExit: - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectShaderResourceVariable (TShaderResourceVariable implementation) -////////////////////////////////////////////////////////////////////////// - -template -struct TShaderResourceVariable : public IBaseInterface -{ - STDMETHOD(SetResource)(ID3D11ShaderResourceView *pResource); - STDMETHOD(GetResource)(ID3D11ShaderResourceView **ppResource); - - STDMETHOD(SetResourceArray)(ID3D11ShaderResourceView **ppResources, UINT Offset, UINT Count); - STDMETHOD(GetResourceArray)(ID3D11ShaderResourceView **ppResources, UINT Offset, UINT Count); -}; - -static LPCSTR GetTextureTypeNameFromEnum(EObjectType ObjectType) -{ - switch (ObjectType) - { - case EOT_Buffer: - return "Buffer"; - case EOT_Texture: - return "texture"; - case EOT_Texture1D: - case EOT_Texture1DArray: - return "Texture1D"; - case EOT_Texture2DMS: - case EOT_Texture2DMSArray: - return "Texture2DMS"; - case EOT_Texture2D: - case EOT_Texture2DArray: - return "Texture2D"; - case EOT_Texture3D: - return "Texture3D"; - case EOT_TextureCube: - return "TextureCube"; - case EOT_TextureCubeArray: - return "TextureCubeArray"; - case EOT_RWTexture1D: - case EOT_RWTexture1DArray: - return "RWTexture1D"; - case EOT_RWTexture2D: - case EOT_RWTexture2DArray: - return "RWTexture2D"; - case EOT_RWTexture3D: - return "RWTexture3D"; - case EOT_RWBuffer: - return "RWBuffer"; - case EOT_ByteAddressBuffer: - return "ByteAddressBuffer"; - case EOT_RWByteAddressBuffer: - return "RWByteAddressBuffer"; - case EOT_StructuredBuffer: - return "StructuredBuffe"; - case EOT_RWStructuredBuffer: - return "RWStructuredBuffer"; - case EOT_RWStructuredBufferAlloc: - return "RWStructuredBufferAlloc"; - case EOT_RWStructuredBufferConsume: - return "RWStructuredBufferConsume"; - case EOT_AppendStructuredBuffer: - return "AppendStructuredBuffer"; - case EOT_ConsumeStructuredBuffer: - return "ConsumeStructuredBuffer"; - } - return ""; -} - -static LPCSTR GetResourceDimensionNameFromEnum(D3D11_RESOURCE_DIMENSION ResourceDimension) -{ - switch (ResourceDimension) - { - case D3D11_RESOURCE_DIMENSION_BUFFER: - return "Buffer"; - case D3D11_RESOURCE_DIMENSION_TEXTURE1D: - return "Texture1D"; - case D3D11_RESOURCE_DIMENSION_TEXTURE2D: - return "Texture2D"; - case D3D11_RESOURCE_DIMENSION_TEXTURE3D: - return "Texture3D"; - } - return ""; -} - -static LPCSTR GetSRVDimensionNameFromEnum(D3D11_SRV_DIMENSION ViewDimension) -{ - switch (ViewDimension) - { - case D3D11_SRV_DIMENSION_BUFFER: - case D3D11_SRV_DIMENSION_BUFFEREX: - return "Buffer"; - case D3D11_SRV_DIMENSION_TEXTURE1D: - return "Texture1D"; - case D3D11_SRV_DIMENSION_TEXTURE1DARRAY: - return "Texture1DArray"; - case D3D11_SRV_DIMENSION_TEXTURE2D: - return "Texture2D"; - case D3D11_SRV_DIMENSION_TEXTURE2DARRAY: - return "Texture2DArray"; - case D3D11_SRV_DIMENSION_TEXTURE2DMS: - return "Texture2DMS"; - case D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY: - return "Texture2DMSArray"; - case D3D11_SRV_DIMENSION_TEXTURE3D: - return "Texture3D"; - case D3D11_SRV_DIMENSION_TEXTURECUBE: - return "TextureCube"; - } - return ""; -} - -static LPCSTR GetUAVDimensionNameFromEnum(D3D11_UAV_DIMENSION ViewDimension) -{ - switch (ViewDimension) - { - case D3D11_UAV_DIMENSION_BUFFER: - return "Buffer"; - case D3D11_UAV_DIMENSION_TEXTURE1D: - return "RWTexture1D"; - case D3D11_UAV_DIMENSION_TEXTURE1DARRAY: - return "RWTexture1DArray"; - case D3D11_UAV_DIMENSION_TEXTURE2D: - return "RWTexture2D"; - case D3D11_UAV_DIMENSION_TEXTURE2DARRAY: - return "RWTexture2DArray"; - case D3D11_UAV_DIMENSION_TEXTURE3D: - return "RWTexture3D"; - } - return ""; -} - -static LPCSTR GetRTVDimensionNameFromEnum(D3D11_RTV_DIMENSION ViewDimension) -{ - switch (ViewDimension) - { - case D3D11_RTV_DIMENSION_BUFFER: - return "Buffer"; - case D3D11_RTV_DIMENSION_TEXTURE1D: - return "Texture1D"; - case D3D11_RTV_DIMENSION_TEXTURE1DARRAY: - return "Texture1DArray"; - case D3D11_RTV_DIMENSION_TEXTURE2D: - return "Texture2D"; - case D3D11_RTV_DIMENSION_TEXTURE2DARRAY: - return "Texture2DArray"; - case D3D11_RTV_DIMENSION_TEXTURE2DMS: - return "Texture2DMS"; - case D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY: - return "Texture2DMSArray"; - case D3D11_RTV_DIMENSION_TEXTURE3D: - return "Texture3D"; - } - return ""; -} - -static LPCSTR GetDSVDimensionNameFromEnum(D3D11_DSV_DIMENSION ViewDimension) -{ - switch (ViewDimension) - { - case D3D11_DSV_DIMENSION_TEXTURE1D: - return "Texture1D"; - case D3D11_DSV_DIMENSION_TEXTURE1DARRAY: - return "Texture1DArray"; - case D3D11_DSV_DIMENSION_TEXTURE2D: - return "Texture2D"; - case D3D11_DSV_DIMENSION_TEXTURE2DARRAY: - return "Texture2DArray"; - case D3D11_DSV_DIMENSION_TEXTURE2DMS: - return "Texture2DMS"; - case D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY: - return "Texture2DMSArray"; - } - return ""; -} - -static HRESULT ValidateTextureType(ID3D11ShaderResourceView *pView, EObjectType ObjectType, LPCSTR pFuncName) -{ - if (NULL != pView) - { - D3D11_SHADER_RESOURCE_VIEW_DESC desc; - pView->GetDesc(&desc); - switch (ObjectType) - { - case EOT_Texture: - if (desc.ViewDimension != D3D11_SRV_DIMENSION_BUFFER && desc.ViewDimension != D3D11_SRV_DIMENSION_BUFFEREX) - return S_OK; - break; - case EOT_Buffer: - if (desc.ViewDimension != D3D11_SRV_DIMENSION_BUFFER && desc.ViewDimension != D3D11_SRV_DIMENSION_BUFFEREX) - break; - if (desc.ViewDimension == D3D11_SRV_DIMENSION_BUFFEREX && (desc.BufferEx.Flags & D3D11_BUFFEREX_SRV_FLAG_RAW)) - { - DPF(0, "%s: Resource type mismatch; %s expected, ByteAddressBuffer provided.", pFuncName, GetTextureTypeNameFromEnum(ObjectType)); - return E_INVALIDARG; - } - else - { - ID3D11Buffer* pBuffer = NULL; - pView->GetResource( (ID3D11Resource**)&pBuffer ); - D3DXASSERT( pBuffer != NULL ); - D3D11_BUFFER_DESC BufDesc; - pBuffer->GetDesc( &BufDesc ); - SAFE_RELEASE( pBuffer ); - if( BufDesc.MiscFlags & D3D11_RESOURCE_MISC_BUFFER_STRUCTURED ) - { - DPF(0, "%s: Resource type mismatch; %s expected, StructuredBuffer provided.", pFuncName, GetTextureTypeNameFromEnum(ObjectType)); - return E_INVALIDARG; - } - else - { - return S_OK; - } - } - break; - case EOT_Texture1D: - case EOT_Texture1DArray: - if (desc.ViewDimension == D3D11_SRV_DIMENSION_TEXTURE1D || - desc.ViewDimension == D3D11_SRV_DIMENSION_TEXTURE1DARRAY) - return S_OK; - break; - case EOT_Texture2D: - case EOT_Texture2DArray: - if (desc.ViewDimension == D3D11_SRV_DIMENSION_TEXTURE2D || - desc.ViewDimension == D3D11_SRV_DIMENSION_TEXTURE2DARRAY) - return S_OK; - break; - case EOT_Texture2DMS: - case EOT_Texture2DMSArray: - if (desc.ViewDimension == D3D11_SRV_DIMENSION_TEXTURE2DMS || - desc.ViewDimension == D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY) - return S_OK; - break; - case EOT_Texture3D: - if (desc.ViewDimension == D3D11_SRV_DIMENSION_TEXTURE3D) - return S_OK; - break; - case EOT_TextureCube: - case EOT_TextureCubeArray: - if (desc.ViewDimension == D3D11_SRV_DIMENSION_TEXTURECUBE || - desc.ViewDimension == D3D11_SRV_DIMENSION_TEXTURECUBEARRAY) - return S_OK; - break; - case EOT_ByteAddressBuffer: - if (desc.ViewDimension == D3D11_SRV_DIMENSION_BUFFEREX && (desc.BufferEx.Flags & D3D11_BUFFEREX_SRV_FLAG_RAW)) - return S_OK; - break; - case EOT_StructuredBuffer: - if (desc.ViewDimension == D3D11_SRV_DIMENSION_BUFFEREX || desc.ViewDimension == D3D11_SRV_DIMENSION_BUFFER) - { - ID3D11Buffer* pBuffer = NULL; - pView->GetResource( (ID3D11Resource**)&pBuffer ); - D3DXASSERT( pBuffer != NULL ); - D3D11_BUFFER_DESC BufDesc; - pBuffer->GetDesc( &BufDesc ); - SAFE_RELEASE( pBuffer ); - if( BufDesc.MiscFlags & D3D11_RESOURCE_MISC_BUFFER_STRUCTURED ) - { - return S_OK; - } - else - { - DPF(0, "%s: Resource type mismatch; %s expected, non-structured Buffer provided.", pFuncName, GetTextureTypeNameFromEnum(ObjectType)); - return E_INVALIDARG; - } - } - break; - default: - D3DXASSERT(0); // internal error, should never get here - return E_FAIL; - } - - - DPF(0, "%s: Resource type mismatch; %s expected, %s provided.", pFuncName, GetTextureTypeNameFromEnum(ObjectType), GetSRVDimensionNameFromEnum(desc.ViewDimension)); - return E_INVALIDARG; - } - return S_OK; -} - -template -HRESULT TShaderResourceVariable::SetResource(ID3D11ShaderResourceView *pResource) -{ - HRESULT hr = S_OK; - -#ifdef _DEBUG - LPCSTR pFuncName = "ID3DX11EffectShaderResourceVariable::SetResource"; - - VH(ValidateTextureType(pResource, pType->ObjectType, pFuncName)); -#endif - - // Texture variables don't need to be dirtied. - SAFE_ADDREF(pResource); - SAFE_RELEASE(Data.pShaderResource->pShaderResource); - Data.pShaderResource->pShaderResource = pResource; - -lExit: - return hr; -} - -template -HRESULT TShaderResourceVariable::GetResource(ID3D11ShaderResourceView **ppResource) -{ - HRESULT hr = S_OK; - -#ifdef _DEBUG - LPCSTR pFuncName = "ID3DX11EffectShaderResourceVariable::GetResource"; - - VERIFYPARAMETER(ppResource); -#endif - - *ppResource = Data.pShaderResource->pShaderResource; - SAFE_ADDREF(*ppResource); - -lExit: - return hr; -} - -template -HRESULT TShaderResourceVariable::SetResourceArray(ID3D11ShaderResourceView **ppResources, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderResourceVariable::SetResourceArray"; - UINT i; - - CHECK_OBJECT_ARRAY_BOUNDS(Offset, Count, ppResources); - -#ifdef _DEBUG - for (i = 0; i < Count; ++ i) - { - VH(ValidateTextureType(ppResources[i], pType->ObjectType, pFuncName)); - } -#endif - - // Texture variables don't need to be dirtied. - for (i = 0; i < Count; ++ i) - { - SShaderResource *pResourceBlock = Data.pShaderResource + Offset + i; - SAFE_ADDREF(ppResources[i]); - SAFE_RELEASE(pResourceBlock->pShaderResource); - pResourceBlock->pShaderResource = ppResources[i]; - } - -lExit: - return hr; -} - -template -HRESULT TShaderResourceVariable::GetResourceArray(ID3D11ShaderResourceView **ppResources, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderResourceVariable::GetResourceArray"; - - CHECK_OBJECT_ARRAY_BOUNDS(Offset, Count, ppResources); - - UINT i; - for (i = 0; i < Count; ++ i) - { - ppResources[i] = (Data.pShaderResource + Offset + i)->pShaderResource; - SAFE_ADDREF(ppResources[i]); - } - -lExit: - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectUnorderedAccessViewVariable (TUnorderedAccessViewVariable implementation) -////////////////////////////////////////////////////////////////////////// - -template -struct TUnorderedAccessViewVariable : public IBaseInterface -{ - STDMETHOD(SetUnorderedAccessView)(ID3D11UnorderedAccessView *pResource); - STDMETHOD(GetUnorderedAccessView)(ID3D11UnorderedAccessView **ppResource); - - STDMETHOD(SetUnorderedAccessViewArray)(ID3D11UnorderedAccessView **ppResources, UINT Offset, UINT Count); - STDMETHOD(GetUnorderedAccessViewArray)(ID3D11UnorderedAccessView **ppResources, UINT Offset, UINT Count); -}; - -static HRESULT ValidateTextureType(ID3D11UnorderedAccessView *pView, EObjectType ObjectType, LPCSTR pFuncName) -{ - if (NULL != pView) - { - D3D11_UNORDERED_ACCESS_VIEW_DESC desc; - pView->GetDesc(&desc); - switch (ObjectType) - { - case EOT_RWBuffer: - if (desc.ViewDimension != D3D11_UAV_DIMENSION_BUFFER) - break; - if (desc.Buffer.Flags & D3D11_BUFFER_UAV_FLAG_RAW) - { - DPF(0, "%s: Resource type mismatch; %s expected, RWByteAddressBuffer provided.", pFuncName, GetTextureTypeNameFromEnum(ObjectType)); - return E_INVALIDARG; - } - else - { - ID3D11Buffer* pBuffer = NULL; - pView->GetResource( (ID3D11Resource**)&pBuffer ); - D3DXASSERT( pBuffer != NULL ); - D3D11_BUFFER_DESC BufDesc; - pBuffer->GetDesc( &BufDesc ); - SAFE_RELEASE( pBuffer ); - if( BufDesc.MiscFlags & D3D11_RESOURCE_MISC_BUFFER_STRUCTURED ) - { - DPF(0, "%s: Resource type mismatch; %s expected, an RWStructuredBuffer provided.", pFuncName, GetTextureTypeNameFromEnum(ObjectType)); - return E_INVALIDARG; - } - else - { - return S_OK; - } - } - break; - case EOT_RWTexture1D: - case EOT_RWTexture1DArray: - if (desc.ViewDimension == D3D11_UAV_DIMENSION_TEXTURE1D || - desc.ViewDimension == D3D11_UAV_DIMENSION_TEXTURE1DARRAY) - return S_OK; - break; - case EOT_RWTexture2D: - case EOT_RWTexture2DArray: - if (desc.ViewDimension == D3D11_UAV_DIMENSION_TEXTURE2D || - desc.ViewDimension == D3D11_UAV_DIMENSION_TEXTURE2DARRAY) - return S_OK; - break; - case EOT_RWTexture3D: - if (desc.ViewDimension == D3D11_UAV_DIMENSION_TEXTURE3D) - return S_OK; - break; - case EOT_RWByteAddressBuffer: - if (desc.ViewDimension == D3D11_UAV_DIMENSION_BUFFER && (desc.Buffer.Flags & D3D11_BUFFER_UAV_FLAG_RAW)) - return S_OK; - break; - case EOT_RWStructuredBuffer: - if (desc.ViewDimension == D3D11_UAV_DIMENSION_BUFFER) - { - ID3D11Buffer* pBuffer = NULL; - pView->GetResource( (ID3D11Resource**)&pBuffer ); - D3DXASSERT( pBuffer != NULL ); - D3D11_BUFFER_DESC BufDesc; - pBuffer->GetDesc( &BufDesc ); - SAFE_RELEASE( pBuffer ); - if( BufDesc.MiscFlags & D3D11_RESOURCE_MISC_BUFFER_STRUCTURED ) - { - return S_OK; - } - else - { - DPF(0, "%s: Resource type mismatch; %s expected, non-structured Buffer provided.", pFuncName, GetTextureTypeNameFromEnum(ObjectType)); - return E_INVALIDARG; - } - } - break; - case EOT_RWStructuredBufferAlloc: - case EOT_RWStructuredBufferConsume: - if (desc.ViewDimension != D3D11_UAV_DIMENSION_BUFFER) - break; - if (desc.Buffer.Flags & D3D11_BUFFER_UAV_FLAG_COUNTER) - { - return S_OK; - } - else - { - DPF(0, "%s: Resource type mismatch; %s expected, non-Counter buffer provided.", pFuncName, GetTextureTypeNameFromEnum(ObjectType)); - return E_INVALIDARG; - } - break; - case EOT_AppendStructuredBuffer: - case EOT_ConsumeStructuredBuffer: - if (desc.ViewDimension != D3D11_UAV_DIMENSION_BUFFER) - break; - if (desc.Buffer.Flags & D3D11_BUFFER_UAV_FLAG_APPEND) - { - return S_OK; - } - else - { - DPF(0, "%s: Resource type mismatch; %s expected, non-Append buffer provided.", pFuncName, GetTextureTypeNameFromEnum(ObjectType)); - return E_INVALIDARG; - } - break; - default: - D3DXASSERT(0); // internal error, should never get here - return E_FAIL; - } - - - DPF(0, "%s: Resource type mismatch; %s expected, %s provided.", pFuncName, GetTextureTypeNameFromEnum(ObjectType), GetUAVDimensionNameFromEnum(desc.ViewDimension)); - return E_INVALIDARG; - } - return S_OK; -} - -template -HRESULT TUnorderedAccessViewVariable::SetUnorderedAccessView(ID3D11UnorderedAccessView *pResource) -{ - HRESULT hr = S_OK; - -#ifdef _DEBUG - LPCSTR pFuncName = "ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessView"; - - VH(ValidateTextureType(pResource, pType->ObjectType, pFuncName)); -#endif - - // UAV variables don't need to be dirtied. - SAFE_ADDREF(pResource); - SAFE_RELEASE(Data.pUnorderedAccessView->pUnorderedAccessView); - Data.pUnorderedAccessView->pUnorderedAccessView = pResource; - -lExit: - return hr; -} - -template -HRESULT TUnorderedAccessViewVariable::GetUnorderedAccessView(ID3D11UnorderedAccessView **ppResource) -{ - HRESULT hr = S_OK; - -#ifdef _DEBUG - LPCSTR pFuncName = "ID3DX11EffectUnorderedAccessViewVariable::GetUnorderedAccessView"; - - VERIFYPARAMETER(ppResource); -#endif - - *ppResource = Data.pUnorderedAccessView->pUnorderedAccessView; - SAFE_ADDREF(*ppResource); - -lExit: - return hr; -} - -template -HRESULT TUnorderedAccessViewVariable::SetUnorderedAccessViewArray(ID3D11UnorderedAccessView **ppResources, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessViewArray"; - UINT i; - - CHECK_OBJECT_ARRAY_BOUNDS(Offset, Count, ppResources); - -#ifdef _DEBUG - for (i = 0; i < Count; ++ i) - { - VH(ValidateTextureType(ppResources[i], pType->ObjectType, pFuncName)); - } -#endif - - // Texture variables don't need to be dirtied. - for (i = 0; i < Count; ++ i) - { - SUnorderedAccessView *pResourceBlock = Data.pUnorderedAccessView + Offset + i; - SAFE_ADDREF(ppResources[i]); - SAFE_RELEASE(pResourceBlock->pUnorderedAccessView); - pResourceBlock->pUnorderedAccessView = ppResources[i]; - } - -lExit: - return hr; -} - -template -HRESULT TUnorderedAccessViewVariable::GetUnorderedAccessViewArray(ID3D11UnorderedAccessView **ppResources, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectUnorderedAccessViewVariable::GetUnorderedAccessViewArray"; - - CHECK_OBJECT_ARRAY_BOUNDS(Offset, Count, ppResources); - - UINT i; - for (i = 0; i < Count; ++ i) - { - ppResources[i] = (Data.pUnorderedAccessView + Offset + i)->pUnorderedAccessView; - SAFE_ADDREF(ppResources[i]); - } - -lExit: - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectRenderTargetViewVariable (TRenderTargetViewVariable implementation) -////////////////////////////////////////////////////////////////////////// - -template -struct TRenderTargetViewVariable : public IBaseInterface -{ - STDMETHOD(SetRenderTarget)(ID3D11RenderTargetView *pResource); - STDMETHOD(GetRenderTarget)(ID3D11RenderTargetView **ppResource); - - STDMETHOD(SetRenderTargetArray)(ID3D11RenderTargetView **ppResources, UINT Offset, UINT Count); - STDMETHOD(GetRenderTargetArray)(ID3D11RenderTargetView **ppResources, UINT Offset, UINT Count); -}; - - -template -HRESULT TRenderTargetViewVariable::SetRenderTarget(ID3D11RenderTargetView *pResource) -{ - HRESULT hr = S_OK; - -#ifdef _DEBUG - LPCSTR pFuncName = "ID3DX11EffectRenderTargetVariable::SetRenderTarget"; - -#endif - - // Texture variables don't need to be dirtied. - SAFE_ADDREF(pResource); - SAFE_RELEASE(Data.pRenderTargetView->pRenderTargetView); - Data.pRenderTargetView->pRenderTargetView = pResource; - -lExit: - return hr; -} - -template -HRESULT TRenderTargetViewVariable::GetRenderTarget(ID3D11RenderTargetView **ppResource) -{ - HRESULT hr = S_OK; - - *ppResource = Data.pRenderTargetView->pRenderTargetView; - SAFE_ADDREF(*ppResource); - -lExit: - return hr; -} - -template -HRESULT TRenderTargetViewVariable::SetRenderTargetArray(ID3D11RenderTargetView **ppResources, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectRenderTargetVariable::SetRenderTargetArray"; - UINT i; - - CHECK_OBJECT_ARRAY_BOUNDS(Offset, Count, ppResources); - - // Texture variables don't need to be dirtied. - for (i = 0; i < Count; ++ i) - { - SRenderTargetView *pResourceBlock = Data.pRenderTargetView + Offset + i; - SAFE_ADDREF(ppResources[i]); - SAFE_RELEASE(pResourceBlock->pRenderTargetView); - pResourceBlock->pRenderTargetView = ppResources[i]; - } - -lExit: - return hr; -} - -template -HRESULT TRenderTargetViewVariable::GetRenderTargetArray(ID3D11RenderTargetView **ppResources, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3DX11EffectRenderTargetVariable::GetRenderTargetArray"; - - CHECK_OBJECT_ARRAY_BOUNDS(Offset, Count, ppResources); - - UINT i; - for (i = 0; i < Count; ++ i) - { - ppResources[i] = (Data.pRenderTargetView + Offset + i)->pRenderTargetView; - SAFE_ADDREF(ppResources[i]); - } - -lExit: - return hr; -} - -////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectDepthStencilViewVariable (TDepthStencilViewVariable implementation) -////////////////////////////////////////////////////////////////////////// - -template -struct TDepthStencilViewVariable : public IBaseInterface -{ - STDMETHOD(SetDepthStencil)(ID3D11DepthStencilView *pResource); - STDMETHOD(GetDepthStencil)(ID3D11DepthStencilView **ppResource); - - STDMETHOD(SetDepthStencilArray)(ID3D11DepthStencilView **ppResources, UINT Offset, UINT Count); - STDMETHOD(GetDepthStencilArray)(ID3D11DepthStencilView **ppResources, UINT Offset, UINT Count); -}; - - -template -HRESULT TDepthStencilViewVariable::SetDepthStencil(ID3D11DepthStencilView *pResource) -{ - HRESULT hr = S_OK; - -#ifdef _DEBUG - LPCSTR pFuncName = "ID3D11DepthStencilViewVariable::SetDepthStencil"; - -#endif - - // Texture variables don't need to be dirtied. - SAFE_ADDREF(pResource); - SAFE_RELEASE(Data.pDepthStencilView->pDepthStencilView); - Data.pDepthStencilView->pDepthStencilView = pResource; - -lExit: - return hr; -} - -template -HRESULT TDepthStencilViewVariable::GetDepthStencil(ID3D11DepthStencilView **ppResource) -{ - HRESULT hr = S_OK; - -#ifdef _DEBUG - LPCSTR pFuncName = "ID3D11DepthStencilViewVariable::GetDepthStencil"; - - VERIFYPARAMETER(ppResource); -#endif - - *ppResource = Data.pDepthStencilView->pDepthStencilView; - SAFE_ADDREF(*ppResource); - -lExit: - return hr; -} - -template -HRESULT TDepthStencilViewVariable::SetDepthStencilArray(ID3D11DepthStencilView **ppResources, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3D11DepthStencilViewVariable::SetDepthStencilArray"; - UINT i; - - CHECK_OBJECT_ARRAY_BOUNDS(Offset, Count, ppResources); - - // Texture variables don't need to be dirtied. - for (i = 0; i < Count; ++ i) - { - SDepthStencilView *pResourceBlock = Data.pDepthStencilView + Offset + i; - SAFE_ADDREF(ppResources[i]); - SAFE_RELEASE(pResourceBlock->pDepthStencilView); - pResourceBlock->pDepthStencilView = ppResources[i]; - } - -lExit: - return hr; -} - -template -HRESULT TDepthStencilViewVariable::GetDepthStencilArray(ID3D11DepthStencilView **ppResources, UINT Offset, UINT Count) -{ - LPCSTR pFuncName = "ID3D11DepthStencilViewVariable::GetDepthStencilArray"; - - CHECK_OBJECT_ARRAY_BOUNDS(Offset, Count, ppResources); - - UINT i; - for (i = 0; i < Count; ++ i) - { - ppResources[i] = (Data.pDepthStencilView + Offset + i)->pDepthStencilView; - SAFE_ADDREF(ppResources[i]); - } - -lExit: - return hr; -} - - - -//////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectShaderVariable (TShaderVariable implementation) -//////////////////////////////////////////////////////////////////////////////// - -template -struct TShaderVariable : public IBaseInterface -{ - STDMETHOD(GetShaderDesc)(UINT ShaderIndex, D3DX11_EFFECT_SHADER_DESC *pDesc); - - STDMETHOD(GetVertexShader)(UINT ShaderIndex, ID3D11VertexShader **ppVS); - STDMETHOD(GetGeometryShader)(UINT ShaderIndex, ID3D11GeometryShader **ppGS); - STDMETHOD(GetPixelShader)(UINT ShaderIndex, ID3D11PixelShader **ppPS); - STDMETHOD(GetHullShader)(UINT ShaderIndex, ID3D11HullShader **ppPS); - STDMETHOD(GetDomainShader)(UINT ShaderIndex, ID3D11DomainShader **ppPS); - STDMETHOD(GetComputeShader)(UINT ShaderIndex, ID3D11ComputeShader **ppPS); - - STDMETHOD(GetInputSignatureElementDesc)(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc); - STDMETHOD(GetOutputSignatureElementDesc)(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc); - STDMETHOD(GetPatchConstantSignatureElementDesc)(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc); - - STDMETHOD_(BOOL, IsValid)(); -}; - -template -HRESULT TShaderVariable::GetShaderDesc(UINT ShaderIndex, D3DX11_EFFECT_SHADER_DESC *pDesc) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetShaderDesc"; - - CHECK_OBJECT_SCALAR_BOUNDS(ShaderIndex, pDesc); - - Data.pShader[ShaderIndex].GetShaderDesc(pDesc, FALSE); - -lExit: - return hr; -} - -template -HRESULT TShaderVariable::GetVertexShader(UINT ShaderIndex, ID3D11VertexShader **ppVS) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetVertexShader"; - - CHECK_OBJECT_SCALAR_BOUNDS(ShaderIndex, ppVS); - - VH( Data.pShader[ShaderIndex].GetVertexShader(ppVS) ); - -lExit: - return hr; -} - -template -HRESULT TShaderVariable::GetGeometryShader(UINT ShaderIndex, ID3D11GeometryShader **ppGS) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetGeometryShader"; - - CHECK_OBJECT_SCALAR_BOUNDS(ShaderIndex, ppGS); - - VH( Data.pShader[ShaderIndex].GetGeometryShader(ppGS) ); - -lExit: - return hr; -} - -template -HRESULT TShaderVariable::GetPixelShader(UINT ShaderIndex, ID3D11PixelShader **ppPS) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetPixelShader"; - - CHECK_OBJECT_SCALAR_BOUNDS(ShaderIndex, ppPS); - - VH( Data.pShader[ShaderIndex].GetPixelShader(ppPS) ); - -lExit: - return hr; -} - -template -HRESULT TShaderVariable::GetHullShader(UINT ShaderIndex, ID3D11HullShader **ppHS) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetHullShader"; - - CHECK_OBJECT_SCALAR_BOUNDS(ShaderIndex, ppHS); - - VH( Data.pShader[ShaderIndex].GetHullShader(ppHS) ); - -lExit: - return hr; -} - -template -HRESULT TShaderVariable::GetDomainShader(UINT ShaderIndex, ID3D11DomainShader **ppDS) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetDomainShader"; - - CHECK_OBJECT_SCALAR_BOUNDS(ShaderIndex, ppDS); - - VH( Data.pShader[ShaderIndex].GetDomainShader(ppDS) ); - -lExit: - return hr; -} - -template -HRESULT TShaderVariable::GetComputeShader(UINT ShaderIndex, ID3D11ComputeShader **ppCS) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetComputeShader"; - - CHECK_OBJECT_SCALAR_BOUNDS(ShaderIndex, ppCS); - - VH( Data.pShader[ShaderIndex].GetComputeShader(ppCS) ); - -lExit: - return hr; -} - -template -HRESULT TShaderVariable::GetInputSignatureElementDesc(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetInputSignatureElementDesc"; - - CHECK_OBJECT_SCALAR_BOUNDS(ShaderIndex, pDesc); - - VH( Data.pShader[ShaderIndex].GetSignatureElementDesc(SShaderBlock::ST_Input, Element, pDesc) ); - -lExit: - return hr; -} - -template -HRESULT TShaderVariable::GetOutputSignatureElementDesc(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetOutputSignatureElementDesc"; - - CHECK_OBJECT_SCALAR_BOUNDS(ShaderIndex, pDesc); - - VH( Data.pShader[ShaderIndex].GetSignatureElementDesc(SShaderBlock::ST_Output, Element, pDesc) ); - -lExit: - return hr; -} - -template -HRESULT TShaderVariable::GetPatchConstantSignatureElementDesc(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) -{ - LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetPatchConstantSignatureElementDesc"; - - CHECK_OBJECT_SCALAR_BOUNDS(ShaderIndex, pDesc); - - VH( Data.pShader[ShaderIndex].GetSignatureElementDesc(SShaderBlock::ST_PatchConstant, Element, pDesc) ); - -lExit: - return hr; -} - -template -BOOL TShaderVariable::IsValid() -{ - UINT numElements = IsArray()? pType->Elements : 1; - BOOL valid = TRUE; - while( numElements > 0 && ( valid = Data.pShader[ numElements-1 ].IsValid ) ) - numElements--; - return valid; -} - -//////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectBlendVariable (TBlendVariable implementation) -//////////////////////////////////////////////////////////////////////////////// - -template -struct TBlendVariable : public IBaseInterface -{ -public: - STDMETHOD(GetBlendState)(UINT Index, ID3D11BlendState **ppBlendState); - STDMETHOD(SetBlendState)(UINT Index, ID3D11BlendState *pBlendState); - STDMETHOD(UndoSetBlendState)(UINT Index); - STDMETHOD(GetBackingStore)(UINT Index, D3D11_BLEND_DESC *pBlendDesc); - STDMETHOD_(BOOL, IsValid)(); -}; - -template -HRESULT TBlendVariable::GetBlendState(UINT Index, ID3D11BlendState **ppBlendState) -{ - LPCSTR pFuncName = "ID3DX11EffectBlendVariable::GetBlendState"; - - CHECK_OBJECT_SCALAR_BOUNDS(Index, ppBlendState); - - *ppBlendState = Data.pBlend[Index].pBlendObject; - SAFE_ADDREF(*ppBlendState); - -lExit: - return hr; -} - -template -HRESULT TBlendVariable::SetBlendState(UINT Index, ID3D11BlendState *pBlendState) -{ - LPCSTR pFuncName = "ID3DX11EffectBlendState::SetBlendState"; - - CHECK_SCALAR_BOUNDS(Index); - - if( !Data.pBlend[Index].IsUserManaged ) - { - // Save original state object in case we UndoSet - D3DXASSERT( pMemberData[Index].Type == MDT_BlendState ); - VB( pMemberData[Index].Data.pD3DEffectsManagedBlendState == NULL ); - pMemberData[Index].Data.pD3DEffectsManagedBlendState = Data.pBlend[Index].pBlendObject; - Data.pBlend[Index].pBlendObject = NULL; - Data.pBlend[Index].IsUserManaged = TRUE; - } - - SAFE_ADDREF( pBlendState ); - SAFE_RELEASE( Data.pBlend[Index].pBlendObject ); - Data.pBlend[Index].pBlendObject = pBlendState; - Data.pBlend[Index].IsValid = TRUE; -lExit: - return hr; -} - -template -HRESULT TBlendVariable::UndoSetBlendState(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11EffectBlendState::UndoSetBlendState"; - - CHECK_SCALAR_BOUNDS(Index); - - if( !Data.pBlend[Index].IsUserManaged ) - { - return S_FALSE; - } - - // Revert to original state object - SAFE_RELEASE( Data.pBlend[Index].pBlendObject ); - Data.pBlend[Index].pBlendObject = pMemberData[Index].Data.pD3DEffectsManagedBlendState; - pMemberData[Index].Data.pD3DEffectsManagedBlendState = NULL; - Data.pBlend[Index].IsUserManaged = FALSE; - -lExit: - return hr; -} - -template -HRESULT TBlendVariable::GetBackingStore(UINT Index, D3D11_BLEND_DESC *pBlendDesc) -{ - LPCSTR pFuncName = "ID3DX11EffectBlendVariable::GetBackingStore"; - - CHECK_OBJECT_SCALAR_BOUNDS(Index, pBlendDesc); - - if( Data.pBlend[Index].IsUserManaged ) - { - if( Data.pBlend[Index].pBlendObject ) - { - Data.pBlend[Index].pBlendObject->GetDesc( pBlendDesc ); - } - else - { - *pBlendDesc = CD3D11_BLEND_DESC( D3D11_DEFAULT ); - } - } - else - { - SBlendBlock *pBlock = Data.pBlend + Index; - if (pBlock->ApplyAssignments(GetTopLevelEntity()->pEffect)) - { - pBlock->pAssignments[0].LastRecomputedTime = 0; // Force a recreate of this block the next time ApplyRenderStateBlock is called - } - - memcpy( pBlendDesc, &pBlock->BackingStore, sizeof(D3D11_BLEND_DESC) ); - } - -lExit: - return hr; -} - -template -BOOL TBlendVariable::IsValid() -{ - UINT numElements = IsArray()? pType->Elements : 1; - BOOL valid = TRUE; - while( numElements > 0 && ( valid = Data.pBlend[ numElements-1 ].IsValid ) ) - numElements--; - return valid; -} - - -//////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectDepthStencilVariable (TDepthStencilVariable implementation) -//////////////////////////////////////////////////////////////////////////////// - -template -struct TDepthStencilVariable : public IBaseInterface -{ -public: - STDMETHOD(GetDepthStencilState)(UINT Index, ID3D11DepthStencilState **ppDepthStencilState); - STDMETHOD(SetDepthStencilState)(UINT Index, ID3D11DepthStencilState *pDepthStencilState); - STDMETHOD(UndoSetDepthStencilState)(UINT Index); - STDMETHOD(GetBackingStore)(UINT Index, D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc); - STDMETHOD_(BOOL, IsValid)(); -}; - -template -HRESULT TDepthStencilVariable::GetDepthStencilState(UINT Index, ID3D11DepthStencilState **ppDepthStencilState) -{ - LPCSTR pFuncName = "ID3DX11EffectDepthStencilVariable::GetDepthStencilState"; - - CHECK_OBJECT_SCALAR_BOUNDS(Index, ppDepthStencilState); - - *ppDepthStencilState = Data.pDepthStencil[Index].pDSObject; - SAFE_ADDREF(*ppDepthStencilState); - -lExit: - return hr; -} - -template -HRESULT TDepthStencilVariable::SetDepthStencilState(UINT Index, ID3D11DepthStencilState *pDepthStencilState) -{ - LPCSTR pFuncName = "ID3DX11EffectDepthStencilState::SetDepthStencilState"; - - CHECK_SCALAR_BOUNDS(Index); - - if( !Data.pDepthStencil[Index].IsUserManaged ) - { - // Save original state object in case we UndoSet - D3DXASSERT( pMemberData[Index].Type == MDT_DepthStencilState ); - VB( pMemberData[Index].Data.pD3DEffectsManagedDepthStencilState == NULL ); - pMemberData[Index].Data.pD3DEffectsManagedDepthStencilState = Data.pDepthStencil[Index].pDSObject; - Data.pDepthStencil[Index].pDSObject = NULL; - Data.pDepthStencil[Index].IsUserManaged = TRUE; - } - - SAFE_ADDREF( pDepthStencilState ); - SAFE_RELEASE( Data.pDepthStencil[Index].pDSObject ); - Data.pDepthStencil[Index].pDSObject = pDepthStencilState; - Data.pDepthStencil[Index].IsValid = TRUE; -lExit: - return hr; -} - -template -HRESULT TDepthStencilVariable::UndoSetDepthStencilState(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11EffectDepthStencilState::UndoSetDepthStencilState"; - - CHECK_SCALAR_BOUNDS(Index); - - if( !Data.pDepthStencil[Index].IsUserManaged ) - { - return S_FALSE; - } - - // Revert to original state object - SAFE_RELEASE( Data.pDepthStencil[Index].pDSObject ); - Data.pDepthStencil[Index].pDSObject = pMemberData[Index].Data.pD3DEffectsManagedDepthStencilState; - pMemberData[Index].Data.pD3DEffectsManagedDepthStencilState = NULL; - Data.pDepthStencil[Index].IsUserManaged = FALSE; - -lExit: - return hr; -} - -template -HRESULT TDepthStencilVariable::GetBackingStore(UINT Index, D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc) -{ - LPCSTR pFuncName = "ID3DX11EffectDepthStencilVariable::GetBackingStore"; - - CHECK_OBJECT_SCALAR_BOUNDS(Index, pDepthStencilDesc); - - if( Data.pDepthStencil[Index].IsUserManaged ) - { - if( Data.pDepthStencil[Index].pDSObject ) - { - Data.pDepthStencil[Index].pDSObject->GetDesc( pDepthStencilDesc ); - } - else - { - *pDepthStencilDesc = CD3D11_DEPTH_STENCIL_DESC( D3D11_DEFAULT ); - } - } - else - { - SDepthStencilBlock *pBlock = Data.pDepthStencil + Index; - if (pBlock->ApplyAssignments(GetTopLevelEntity()->pEffect)) - { - pBlock->pAssignments[0].LastRecomputedTime = 0; // Force a recreate of this block the next time ApplyRenderStateBlock is called - } - - memcpy(pDepthStencilDesc, &pBlock->BackingStore, sizeof(D3D11_DEPTH_STENCIL_DESC)); - } - -lExit: - return hr; -} - -template -BOOL TDepthStencilVariable::IsValid() -{ - UINT numElements = IsArray()? pType->Elements : 1; - BOOL valid = TRUE; - while( numElements > 0 && ( valid = Data.pDepthStencil[ numElements-1 ].IsValid ) ) - numElements--; - return valid; -} - -//////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectRasterizerVariable (TRasterizerVariable implementation) -//////////////////////////////////////////////////////////////////////////////// - -template -struct TRasterizerVariable : public IBaseInterface -{ -public: - - STDMETHOD(GetRasterizerState)(UINT Index, ID3D11RasterizerState **ppRasterizerState); - STDMETHOD(SetRasterizerState)(UINT Index, ID3D11RasterizerState *pRasterizerState); - STDMETHOD(UndoSetRasterizerState)(UINT Index); - STDMETHOD(GetBackingStore)(UINT Index, D3D11_RASTERIZER_DESC *pRasterizerDesc); - STDMETHOD_(BOOL, IsValid)(); -}; - -template -HRESULT TRasterizerVariable::GetRasterizerState(UINT Index, ID3D11RasterizerState **ppRasterizerState) -{ - LPCSTR pFuncName = "ID3DX11EffectRasterizerVariable::GetRasterizerState"; - - CHECK_OBJECT_SCALAR_BOUNDS(Index, ppRasterizerState); - - *ppRasterizerState = Data.pRasterizer[Index].pRasterizerObject; - SAFE_ADDREF(*ppRasterizerState); - -lExit: - return hr; -} - -template -HRESULT TRasterizerVariable::SetRasterizerState(UINT Index, ID3D11RasterizerState *pRasterizerState) -{ - LPCSTR pFuncName = "ID3DX11EffectRasterizerState::SetRasterizerState"; - - CHECK_SCALAR_BOUNDS(Index); - - if( !Data.pRasterizer[Index].IsUserManaged ) - { - // Save original state object in case we UndoSet - D3DXASSERT( pMemberData[Index].Type == MDT_RasterizerState ); - VB( pMemberData[Index].Data.pD3DEffectsManagedRasterizerState == NULL ); - pMemberData[Index].Data.pD3DEffectsManagedRasterizerState = Data.pRasterizer[Index].pRasterizerObject; - Data.pRasterizer[Index].pRasterizerObject = NULL; - Data.pRasterizer[Index].IsUserManaged = TRUE; - } - - SAFE_ADDREF( pRasterizerState ); - SAFE_RELEASE( Data.pRasterizer[Index].pRasterizerObject ); - Data.pRasterizer[Index].pRasterizerObject = pRasterizerState; - Data.pRasterizer[Index].IsValid = TRUE; -lExit: - return hr; -} - -template -HRESULT TRasterizerVariable::UndoSetRasterizerState(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11EffectRasterizerState::UndoSetRasterizerState"; - - CHECK_SCALAR_BOUNDS(Index); - - if( !Data.pRasterizer[Index].IsUserManaged ) - { - return S_FALSE; - } - - // Revert to original state object - SAFE_RELEASE( Data.pRasterizer[Index].pRasterizerObject ); - Data.pRasterizer[Index].pRasterizerObject = pMemberData[Index].Data.pD3DEffectsManagedRasterizerState; - pMemberData[Index].Data.pD3DEffectsManagedRasterizerState = NULL; - Data.pRasterizer[Index].IsUserManaged = FALSE; - -lExit: - return hr; -} - -template -HRESULT TRasterizerVariable::GetBackingStore(UINT Index, D3D11_RASTERIZER_DESC *pRasterizerDesc) -{ - LPCSTR pFuncName = "ID3DX11EffectRasterizerVariable::GetBackingStore"; - - CHECK_OBJECT_SCALAR_BOUNDS(Index, pRasterizerDesc); - - if( Data.pRasterizer[Index].IsUserManaged ) - { - if( Data.pRasterizer[Index].pRasterizerObject ) - { - Data.pRasterizer[Index].pRasterizerObject->GetDesc( pRasterizerDesc ); - } - else - { - *pRasterizerDesc = CD3D11_RASTERIZER_DESC( D3D11_DEFAULT ); - } - } - else - { - SRasterizerBlock *pBlock = Data.pRasterizer + Index; - if (pBlock->ApplyAssignments(GetTopLevelEntity()->pEffect)) - { - pBlock->pAssignments[0].LastRecomputedTime = 0; // Force a recreate of this block the next time ApplyRenderStateBlock is called - } - - memcpy(pRasterizerDesc, &pBlock->BackingStore, sizeof(D3D11_RASTERIZER_DESC)); - } - -lExit: - return hr; -} - -template -BOOL TRasterizerVariable::IsValid() -{ - UINT numElements = IsArray()? pType->Elements : 1; - BOOL valid = TRUE; - while( numElements > 0 && ( valid = Data.pRasterizer[ numElements-1 ].IsValid ) ) - numElements--; - return valid; -} - -//////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectSamplerVariable (TSamplerVariable implementation) -//////////////////////////////////////////////////////////////////////////////// - -template -struct TSamplerVariable : public IBaseInterface -{ -public: - - STDMETHOD(GetSampler)(UINT Index, ID3D11SamplerState **ppSampler); - STDMETHOD(SetSampler)(UINT Index, ID3D11SamplerState *pSampler); - STDMETHOD(UndoSetSampler)(UINT Index); - STDMETHOD(GetBackingStore)(UINT Index, D3D11_SAMPLER_DESC *pSamplerDesc); -}; - -template -HRESULT TSamplerVariable::GetSampler(UINT Index, ID3D11SamplerState **ppSampler) -{ - LPCSTR pFuncName = "ID3DX11EffectSamplerVariable::GetSampler"; - - CHECK_OBJECT_SCALAR_BOUNDS(Index, ppSampler); - - *ppSampler = Data.pSampler[Index].pD3DObject; - SAFE_ADDREF(*ppSampler); - -lExit: - return hr; -} - -template -HRESULT TSamplerVariable::SetSampler(UINT Index, ID3D11SamplerState *pSampler) -{ - LPCSTR pFuncName = "ID3DX11EffectSamplerState::SetSampler"; - - CHECK_SCALAR_BOUNDS(Index); - - // Replace all references to the old shader block with this one - GetEffect()->ReplaceSamplerReference(&Data.pSampler[Index], pSampler); - - if( !Data.pSampler[Index].IsUserManaged ) - { - // Save original state object in case we UndoSet - D3DXASSERT( pMemberData[Index].Type == MDT_SamplerState ); - VB( pMemberData[Index].Data.pD3DEffectsManagedSamplerState == NULL ); - pMemberData[Index].Data.pD3DEffectsManagedSamplerState = Data.pSampler[Index].pD3DObject; - Data.pSampler[Index].pD3DObject = NULL; - Data.pSampler[Index].IsUserManaged = TRUE; - } - - SAFE_ADDREF( pSampler ); - SAFE_RELEASE( Data.pSampler[Index].pD3DObject ); - Data.pSampler[Index].pD3DObject = pSampler; -lExit: - return hr; -} - -template -HRESULT TSamplerVariable::UndoSetSampler(UINT Index) -{ - LPCSTR pFuncName = "ID3DX11EffectSamplerState::UndoSetSampler"; - - CHECK_SCALAR_BOUNDS(Index); - - if( !Data.pSampler[Index].IsUserManaged ) - { - return S_FALSE; - } - - // Replace all references to the old shader block with this one - GetEffect()->ReplaceSamplerReference(&Data.pSampler[Index], pMemberData[Index].Data.pD3DEffectsManagedSamplerState); - - // Revert to original state object - SAFE_RELEASE( Data.pSampler[Index].pD3DObject ); - Data.pSampler[Index].pD3DObject = pMemberData[Index].Data.pD3DEffectsManagedSamplerState; - pMemberData[Index].Data.pD3DEffectsManagedSamplerState = NULL; - Data.pSampler[Index].IsUserManaged = FALSE; - -lExit: - return hr; -} - -template -HRESULT TSamplerVariable::GetBackingStore(UINT Index, D3D11_SAMPLER_DESC *pSamplerDesc) -{ - LPCSTR pFuncName = "ID3DX11EffectSamplerVariable::GetBackingStore"; - - CHECK_OBJECT_SCALAR_BOUNDS(Index, pSamplerDesc); - - if( Data.pSampler[Index].IsUserManaged ) - { - if( Data.pSampler[Index].pD3DObject ) - { - Data.pSampler[Index].pD3DObject->GetDesc( pSamplerDesc ); - } - else - { - *pSamplerDesc = CD3D11_SAMPLER_DESC( D3D11_DEFAULT ); - } - } - else - { - SSamplerBlock *pBlock = Data.pSampler + Index; - if (pBlock->ApplyAssignments(GetTopLevelEntity()->pEffect)) - { - pBlock->pAssignments[0].LastRecomputedTime = 0; // Force a recreate of this block the next time ApplyRenderStateBlock is called - } - - memcpy(pSamplerDesc, &pBlock->BackingStore.SamplerDesc, sizeof(D3D11_SAMPLER_DESC)); - } - -lExit: - return hr; -} - -//////////////////////////////////////////////////////////////////////////////// -// TUncastableVariable -//////////////////////////////////////////////////////////////////////////////// - -template -struct TUncastableVariable : public IBaseInterface -{ - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(); - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(); - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(); - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(); - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(); - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(); - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(); - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(); - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(); - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(); - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(); - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(); - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(); - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(); - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(); - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(); -}; - -template -ID3DX11EffectScalarVariable * TUncastableVariable::AsScalar() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsScalar"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidScalarVariable; -} - -template -ID3DX11EffectVectorVariable * TUncastableVariable::AsVector() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsVector"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidVectorVariable; -} - -template -ID3DX11EffectMatrixVariable * TUncastableVariable::AsMatrix() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsMatrix"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidMatrixVariable; -} - -template -ID3DX11EffectStringVariable * TUncastableVariable::AsString() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsString"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidStringVariable; -} - -template -ID3DX11EffectClassInstanceVariable * TUncastableVariable::AsClassInstance() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsClassInstance"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidClassInstanceVariable; -} - -template -ID3DX11EffectInterfaceVariable * TUncastableVariable::AsInterface() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsInterface"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidInterfaceVariable; -} - -template -ID3DX11EffectShaderResourceVariable * TUncastableVariable::AsShaderResource() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsShaderResource"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidShaderResourceVariable; -} - -template -ID3DX11EffectUnorderedAccessViewVariable * TUncastableVariable::AsUnorderedAccessView() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsUnorderedAccessView"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidUnorderedAccessViewVariable; -} - -template -ID3DX11EffectRenderTargetViewVariable * TUncastableVariable::AsRenderTargetView() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsRenderTargetView"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidRenderTargetViewVariable; -} - -template -ID3DX11EffectDepthStencilViewVariable * TUncastableVariable::AsDepthStencilView() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsDepthStencilView"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidDepthStencilViewVariable; -} - -template -ID3DX11EffectConstantBuffer * TUncastableVariable::AsConstantBuffer() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsConstantBuffer"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidConstantBuffer; -} - -template -ID3DX11EffectShaderVariable * TUncastableVariable::AsShader() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsShader"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidShaderVariable; -} - -template -ID3DX11EffectBlendVariable * TUncastableVariable::AsBlend() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsBlend"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidBlendVariable; -} - -template -ID3DX11EffectDepthStencilVariable * TUncastableVariable::AsDepthStencil() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsDepthStencil"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidDepthStencilVariable; -} - -template -ID3DX11EffectRasterizerVariable * TUncastableVariable::AsRasterizer() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsRasterizer"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidRasterizerVariable; -} - -template -ID3DX11EffectSamplerVariable * TUncastableVariable::AsSampler() -{ - LPCSTR pFuncName = "ID3DX11EffectVariable::AsSampler"; - DPF(0, "%s: Invalid typecast", pFuncName); - return &g_InvalidSamplerVariable; -} - -//////////////////////////////////////////////////////////////////////////////// -// Macros to instantiate the myriad templates -//////////////////////////////////////////////////////////////////////////////// - -// generates a global variable, annotation, global variable member, and annotation member of each struct type -#define GenerateReflectionClasses(Type, BaseInterface) \ -struct S##Type##GlobalVariable : public T##Type##Variable, FALSE> { }; \ -struct S##Type##Annotation : public T##Type##Variable, TRUE> { }; \ -struct S##Type##GlobalVariableMember : public T##Type##Variable >, FALSE> { }; \ -struct S##Type##AnnotationMember : public T##Type##Variable >, TRUE> { }; - -#define GenerateVectorReflectionClasses(Type, BaseType, BaseInterface) \ -struct S##Type##GlobalVariable : public TVectorVariable, FALSE, BaseType> { }; \ -struct S##Type##Annotation : public TVectorVariable, TRUE, BaseType> { }; \ -struct S##Type##GlobalVariableMember : public TVectorVariable >, FALSE, BaseType> { }; \ -struct S##Type##AnnotationMember : public TVectorVariable >, TRUE, BaseType> { }; - -#define GenerateReflectionGlobalOnlyClasses(Type) \ -struct S##Type##GlobalVariable : public T##Type##Variable > { }; \ -struct S##Type##GlobalVariableMember : public T##Type##Variable > > { }; \ - -GenerateReflectionClasses(Numeric, ID3DX11EffectVariable); -GenerateReflectionClasses(FloatScalar, ID3DX11EffectScalarVariable); -GenerateReflectionClasses(IntScalar, ID3DX11EffectScalarVariable); -GenerateReflectionClasses(BoolScalar, ID3DX11EffectScalarVariable); -GenerateVectorReflectionClasses(FloatVector, ETVT_Float, ID3DX11EffectVectorVariable); -GenerateVectorReflectionClasses(BoolVector, ETVT_Bool, ID3DX11EffectVectorVariable); -GenerateVectorReflectionClasses(IntVector, ETVT_Int, ID3DX11EffectVectorVariable); -GenerateReflectionClasses(Matrix, ID3DX11EffectMatrixVariable); -GenerateReflectionClasses(String, ID3DX11EffectStringVariable); -GenerateReflectionGlobalOnlyClasses(ClassInstance); -GenerateReflectionGlobalOnlyClasses(Interface); -GenerateReflectionGlobalOnlyClasses(ShaderResource); -GenerateReflectionGlobalOnlyClasses(UnorderedAccessView); -GenerateReflectionGlobalOnlyClasses(RenderTargetView); -GenerateReflectionGlobalOnlyClasses(DepthStencilView); -GenerateReflectionGlobalOnlyClasses(Shader); -GenerateReflectionGlobalOnlyClasses(Blend); -GenerateReflectionGlobalOnlyClasses(DepthStencil); -GenerateReflectionGlobalOnlyClasses(Rasterizer); -GenerateReflectionGlobalOnlyClasses(Sampler); - -// Optimized matrix classes -struct SMatrix4x4ColumnMajorGlobalVariable : public TMatrix4x4Variable, TRUE> { }; -struct SMatrix4x4RowMajorGlobalVariable : public TMatrix4x4Variable, FALSE> { }; - -struct SMatrix4x4ColumnMajorGlobalVariableMember : public TMatrix4x4Variable >, TRUE> { }; -struct SMatrix4x4RowMajorGlobalVariableMember : public TMatrix4x4Variable >, FALSE> { }; - -// Optimized vector classes -struct SFloatVector4GlobalVariable : public TVector4Variable > { }; -struct SFloatVector4GlobalVariableMember : public TVector4Variable > > { }; - -// These 3 classes should never be used directly - -// The "base" global variable struct (all global variables should be the same size in bytes, -// but we pick this as the default). -struct SGlobalVariable : public TGlobalVariable -{ - -}; - -// The "base" annotation struct (all annotations should be the same size in bytes, -// but we pick this as the default). -struct SAnnotation : public TAnnotation -{ - -}; - -// The "base" variable member struct (all annotation/global variable members should be the -// same size in bytes, but we pick this as the default). -struct SMember : public TVariable > -{ - -}; - -// creates a new variable of the appropriate polymorphic type where pVar was -HRESULT PlacementNewVariable(void *pVar, SType *pType, BOOL IsAnnotation); -SMember * CreateNewMember(SType *pType, BOOL IsAnnotation); - - diff --git a/sample/d3d11/Effects11/Inc/d3dx11dbg.h b/sample/d3d11/Effects11/Inc/d3dx11dbg.h deleted file mode 100644 index 49ed3b3..0000000 --- a/sample/d3d11/Effects11/Inc/d3dx11dbg.h +++ /dev/null @@ -1,66 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: d3dx11dbg.h -// Content: D3DX11 debugging functions -// -////////////////////////////////////////////////////////////////////////////// - - -#ifndef __D3DX11DBG_H__ -#define __D3DX11DBG_H__ - -#ifndef _PREFAST_ - -#pragma warning( disable: 4068 ) - -#endif - - -#include -#include - -#undef NEW -#undef DELETE - -#define NEW new (std::nothrow) -#define NEW_PROTO_ARGS size_t s, const std::nothrow_t& t - - - -typedef signed char INT8; -typedef signed short INT16; -typedef unsigned char UINT8; -typedef unsigned short UINT16; - - -//---------------------------------------------------------------------------- -// DPF -//---------------------------------------------------------------------------- - -#ifdef FXDPF -void cdecl D3DXDebugPrintf(UINT lvl, LPCSTR szFormat, ...); -#define DPF D3DXDebugPrintf -#else // !FXDPF -#pragma warning(disable:4002) -#define DPF() 0 -#endif // !FXDPF - - -//---------------------------------------------------------------------------- -// D3DXASSERT -//---------------------------------------------------------------------------- - -#if _DEBUG -int WINAPI D3DXDebugAssert(LPCSTR szFile, int nLine, LPCSTR szCondition); -#define D3DXASSERT(condition) \ - do { if(!(condition)) D3DXDebugAssert(__FILE__, __LINE__, #condition); } while(0) -#else // !_DEBUG -#define D3DXASSERT(condition) 0 -#endif // !_DEBUG - - - -#endif // __D3DX11DBG_H__ - diff --git a/sample/d3d11/Effects11/Inc/d3dx11effect.h b/sample/d3d11/Effects11/Inc/d3dx11effect.h deleted file mode 100644 index fc162fc..0000000 --- a/sample/d3d11/Effects11/Inc/d3dx11effect.h +++ /dev/null @@ -1,1566 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// File: D3DX11Effect.h -// Content: D3DX11 Effect Types & APIs Header -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef __D3DX11EFFECT_H__ -#define __D3DX11EFFECT_H__ - -#include "d3d11.h" -#include "d3d11shader.h" - -////////////////////////////////////////////////////////////////////////////// -// File contents: -// -// 1) Stateblock enums, structs, interfaces, flat APIs -// 2) Effect enums, structs, interfaces, flat APIs -////////////////////////////////////////////////////////////////////////////// - -#ifndef D3DX11_BYTES_FROM_BITS -#define D3DX11_BYTES_FROM_BITS(x) (((x) + 7) / 8) -#endif // D3DX11_BYTES_FROM_BITS - -typedef struct _D3DX11_STATE_BLOCK_MASK -{ - BYTE VS; - BYTE VSSamplers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT)]; - BYTE VSShaderResources[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)]; - BYTE VSConstantBuffers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)]; - BYTE VSInterfaces[D3DX11_BYTES_FROM_BITS(D3D11_SHADER_MAX_INTERFACES)]; - - BYTE HS; - BYTE HSSamplers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT)]; - BYTE HSShaderResources[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)]; - BYTE HSConstantBuffers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)]; - BYTE HSInterfaces[D3DX11_BYTES_FROM_BITS(D3D11_SHADER_MAX_INTERFACES)]; - - BYTE DS; - BYTE DSSamplers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT)]; - BYTE DSShaderResources[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)]; - BYTE DSConstantBuffers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)]; - BYTE DSInterfaces[D3DX11_BYTES_FROM_BITS(D3D11_SHADER_MAX_INTERFACES)]; - - BYTE GS; - BYTE GSSamplers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT)]; - BYTE GSShaderResources[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)]; - BYTE GSConstantBuffers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)]; - BYTE GSInterfaces[D3DX11_BYTES_FROM_BITS(D3D11_SHADER_MAX_INTERFACES)]; - - BYTE PS; - BYTE PSSamplers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT)]; - BYTE PSShaderResources[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)]; - BYTE PSConstantBuffers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)]; - BYTE PSInterfaces[D3DX11_BYTES_FROM_BITS(D3D11_SHADER_MAX_INTERFACES)]; - BYTE PSUnorderedAccessViews; - - BYTE CS; - BYTE CSSamplers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT)]; - BYTE CSShaderResources[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)]; - BYTE CSConstantBuffers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)]; - BYTE CSInterfaces[D3DX11_BYTES_FROM_BITS(D3D11_SHADER_MAX_INTERFACES)]; - BYTE CSUnorderedAccessViews; - - BYTE IAVertexBuffers[D3DX11_BYTES_FROM_BITS(D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT)]; - BYTE IAIndexBuffer; - BYTE IAInputLayout; - BYTE IAPrimitiveTopology; - - BYTE OMRenderTargets; - BYTE OMDepthStencilState; - BYTE OMBlendState; - - BYTE RSViewports; - BYTE RSScissorRects; - BYTE RSRasterizerState; - - BYTE SOBuffers; - - BYTE Predication; -} D3DX11_STATE_BLOCK_MASK; - -//---------------------------------------------------------------------------- -// D3DX11_EFFECT flags: -// ------------------------------------- -// -// These flags are passed in when creating an effect, and affect -// the runtime effect behavior: -// -// (Currently none) -// -// -// These flags are set by the effect runtime: -// -// D3DX11_EFFECT_OPTIMIZED -// This effect has been optimized. Reflection functions that rely on -// names/semantics/strings should fail. This is set when Optimize() is -// called, but CEffect::IsOptimized() should be used to test for this. -// -// D3DX11_EFFECT_CLONE -// This effect is a clone of another effect. Single CBs will never be -// updated when internal variable values are changed. -// This flag is not set when the D3DX11_EFFECT_CLONE_FORCE_NONSINGLE flag -// is used in cloning. -// -//---------------------------------------------------------------------------- - -#define D3DX11_EFFECT_OPTIMIZED (1 << 21) -#define D3DX11_EFFECT_CLONE (1 << 22) - -// These are the only valid parameter flags to D3DX11CreateEffect* -#define D3DX11_EFFECT_RUNTIME_VALID_FLAGS (0) - -//---------------------------------------------------------------------------- -// D3DX11_EFFECT_VARIABLE flags: -// ---------------------------- -// -// These flags describe an effect variable (global or annotation), -// and are returned in D3DX11_EFFECT_VARIABLE_DESC::Flags. -// -// D3DX11_EFFECT_VARIABLE_ANNOTATION -// Indicates that this is an annotation on a technique, pass, or global -// variable. Otherwise, this is a global variable. Annotations cannot -// be shared. -// -// D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT -// Indicates that the variable has been explicitly bound using the -// register keyword. -//---------------------------------------------------------------------------- - -#define D3DX11_EFFECT_VARIABLE_ANNOTATION (1 << 1) -#define D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT (1 << 2) - -//---------------------------------------------------------------------------- -// D3DX11_EFFECT_CLONE flags: -// ---------------------------- -// -// These flags modify the effect cloning process and are passed into Clone. -// -// D3DX11_EFFECT_CLONE_FORCE_NONSINGLE -// Ignore all "single" qualifiers on cbuffers. All cbuffers will have their -// own ID3D11Buffer's created in the cloned effect. -//---------------------------------------------------------------------------- - -#define D3DX11_EFFECT_CLONE_FORCE_NONSINGLE (1 << 0) - -//---------------------------------------------------------------------------- -// D3DX11_EFFECT_PASS flags: -// ---------------------------- -// -// These flags modify the effect cloning process and are passed into Clone. -// -// D3DX11_EFFECT_PASS_COMMIT_CHANGES -// This flag tells the effect runtime to assume that the device state was -// not modified outside of effects, so that only updated state needs to -// be set. -// -// D3DX11_EFFECT_PASS_OMIT_* -// When applying a pass, do not set the state indicated in the flag name. -//---------------------------------------------------------------------------- - -#define D3DX11_EFFECT_PASS_COMMIT_CHANGES (1 << 0) // TODO: not yet implemented -#define D3DX11_EFFECT_PASS_OMIT_SHADERS_AND_INTERFACES (1 << 1) // TODO: not yet implemented -#define D3DX11_EFFECT_PASS_OMIT_STATE_OBJECTS (1 << 2) // TODO: not yet implemented -#define D3DX11_EFFECT_PASS_OMIT_RTVS_AND_DSVS (1 << 3) // TODO: not yet implemented -#define D3DX11_EFFECT_PASS_OMIT_SAMPLERS (1 << 4) // TODO: not yet implemented -#define D3DX11_EFFECT_PASS_OMIT_CBS (1 << 5) // TODO: not yet implemented -#define D3DX11_EFFECT_PASS_OMIT_SRVS (1 << 6) // TODO: not yet implemented -#define D3DX11_EFFECT_PASS_OMIT_UAVS (1 << 7) // TODO: not yet implemented - -#define D3DX11_EFFECT_PASS_ONLY_SET_SHADERS_AND_CBS ( D3DX11_EFFECT_PASS_OMIT_STATE_OBJECTS | \ - D3DX11_EFFECT_PASS_OMIT_RTVS_AND_DSVS | \ - D3DX11_EFFECT_PASS_OMIT_SAMPLERS | \ - D3DX11_EFFECT_PASS_OMIT_SRVS | \ - D3DX11_EFFECT_PASS_OMIT_UAVS ); - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectType ////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -//---------------------------------------------------------------------------- -// D3DX11_EFFECT_TYPE_DESC: -// -// Retrieved by ID3DX11EffectType::GetDesc() -//---------------------------------------------------------------------------- - -typedef struct _D3DX11_EFFECT_TYPE_DESC -{ - LPCSTR TypeName; // Name of the type - // (e.g. "float4" or "MyStruct") - - D3D10_SHADER_VARIABLE_CLASS Class; // (e.g. scalar, vector, object, etc.) - D3D10_SHADER_VARIABLE_TYPE Type; // (e.g. float, texture, vertexshader, etc.) - - UINT Elements; // Number of elements in this type - // (0 if not an array) - UINT Members; // Number of members - // (0 if not a structure) - UINT Rows; // Number of rows in this type - // (0 if not a numeric primitive) - UINT Columns; // Number of columns in this type - // (0 if not a numeric primitive) - - UINT PackedSize; // Number of bytes required to represent - // this data type, when tightly packed - UINT UnpackedSize; // Number of bytes occupied by this data - // type, when laid out in a constant buffer - UINT Stride; // Number of bytes to seek between elements, - // when laid out in a constant buffer -} D3DX11_EFFECT_TYPE_DESC; - -typedef interface ID3DX11EffectType ID3DX11EffectType; -typedef interface ID3DX11EffectType *LPD3D11EFFECTTYPE; - -// {4250D721-D5E5-491F-B62B-587C43186285} -DEFINE_GUID(IID_ID3DX11EffectType, - 0x4250d721, 0xd5e5, 0x491f, 0xb6, 0x2b, 0x58, 0x7c, 0x43, 0x18, 0x62, 0x85); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectType - -DECLARE_INTERFACE(ID3DX11EffectType) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_TYPE_DESC *pDesc) PURE; - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectType*, GetMemberTypeBySemantic)(THIS_ LPCSTR Semantic) PURE; - STDMETHOD_(LPCSTR, GetMemberName)(THIS_ UINT Index) PURE; - STDMETHOD_(LPCSTR, GetMemberSemantic)(THIS_ UINT Index) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectVariable ////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -//---------------------------------------------------------------------------- -// D3DX11_EFFECT_VARIABLE_DESC: -// -// Retrieved by ID3DX11EffectVariable::GetDesc() -//---------------------------------------------------------------------------- - -typedef struct _D3DX11_EFFECT_VARIABLE_DESC -{ - LPCSTR Name; // Name of this variable, annotation, - // or structure member - LPCSTR Semantic; // Semantic string of this variable - // or structure member (NULL for - // annotations or if not present) - - UINT Flags; // D3DX11_EFFECT_VARIABLE_* flags - UINT Annotations; // Number of annotations on this variable - // (always 0 for annotations) - - UINT BufferOffset; // Offset into containing cbuffer or tbuffer - // (always 0 for annotations or variables - // not in constant buffers) - - UINT ExplicitBindPoint; // Used if the variable has been explicitly bound - // using the register keyword. Check Flags for - // D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT; -} D3DX11_EFFECT_VARIABLE_DESC; - -typedef interface ID3DX11EffectVariable ID3DX11EffectVariable; -typedef interface ID3DX11EffectVariable *LPD3D11EFFECTVARIABLE; - -// {036A777D-B56E-4B25-B313-CC3DDAB71873} -DEFINE_GUID(IID_ID3DX11EffectVariable, - 0x036a777d, 0xb56e, 0x4b25, 0xb3, 0x13, 0xcc, 0x3d, 0xda, 0xb7, 0x18, 0x73); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectVariable - -// Forward defines -typedef interface ID3DX11EffectScalarVariable ID3DX11EffectScalarVariable; -typedef interface ID3DX11EffectVectorVariable ID3DX11EffectVectorVariable; -typedef interface ID3DX11EffectMatrixVariable ID3DX11EffectMatrixVariable; -typedef interface ID3DX11EffectStringVariable ID3DX11EffectStringVariable; -typedef interface ID3DX11EffectClassInstanceVariable ID3DX11EffectClassInstanceVariable; -typedef interface ID3DX11EffectInterfaceVariable ID3DX11EffectInterfaceVariable; -typedef interface ID3DX11EffectShaderResourceVariable ID3DX11EffectShaderResourceVariable; -typedef interface ID3DX11EffectUnorderedAccessViewVariable ID3DX11EffectUnorderedAccessViewVariable; -typedef interface ID3DX11EffectRenderTargetViewVariable ID3DX11EffectRenderTargetViewVariable; -typedef interface ID3DX11EffectDepthStencilViewVariable ID3DX11EffectDepthStencilViewVariable; -typedef interface ID3DX11EffectConstantBuffer ID3DX11EffectConstantBuffer; -typedef interface ID3DX11EffectShaderVariable ID3DX11EffectShaderVariable; -typedef interface ID3DX11EffectBlendVariable ID3DX11EffectBlendVariable; -typedef interface ID3DX11EffectDepthStencilVariable ID3DX11EffectDepthStencilVariable; -typedef interface ID3DX11EffectRasterizerVariable ID3DX11EffectRasterizerVariable; -typedef interface ID3DX11EffectSamplerVariable ID3DX11EffectSamplerVariable; - -DECLARE_INTERFACE(ID3DX11EffectVariable) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectScalarVariable //////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectScalarVariable ID3DX11EffectScalarVariable; -typedef interface ID3DX11EffectScalarVariable *LPD3D11EFFECTSCALARVARIABLE; - -// {921EF2E5-A65D-4E92-9FC6-4E9CC09A4ADE} -DEFINE_GUID(IID_ID3DX11EffectScalarVariable, - 0x921ef2e5, 0xa65d, 0x4e92, 0x9f, 0xc6, 0x4e, 0x9c, 0xc0, 0x9a, 0x4a, 0xde); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectScalarVariable - -DECLARE_INTERFACE_(ID3DX11EffectScalarVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT ByteOffset, UINT ByteCount) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE; - - STDMETHOD(SetFloat)(THIS_ CONST float Value) PURE; - STDMETHOD(GetFloat)(THIS_ float *pValue) PURE; - - STDMETHOD(SetFloatArray)(THIS_ CONST float *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetFloatArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(SetInt)(THIS_ CONST int Value) PURE; - STDMETHOD(GetInt)(THIS_ int *pValue) PURE; - - STDMETHOD(SetIntArray)(THIS_ CONST int *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetIntArray)(THIS_ int *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(SetBool)(THIS_ CONST BOOL Value) PURE; - STDMETHOD(GetBool)(THIS_ BOOL *pValue) PURE; - - STDMETHOD(SetBoolArray)(THIS_ CONST BOOL *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetBoolArray)(THIS_ BOOL *pData, UINT Offset, UINT Count) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectVectorVariable //////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectVectorVariable ID3DX11EffectVectorVariable; -typedef interface ID3DX11EffectVectorVariable *LPD3D11EFFECTVECTORVARIABLE; - -// {5E785D4A-D87B-48D8-B6E6-0F8CA7E7467A} -DEFINE_GUID(IID_ID3DX11EffectVectorVariable, - 0x5e785d4a, 0xd87b, 0x48d8, 0xb6, 0xe6, 0x0f, 0x8c, 0xa7, 0xe7, 0x46, 0x7a); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectVectorVariable - -DECLARE_INTERFACE_(ID3DX11EffectVectorVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT ByteOffset, UINT ByteCount) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE; - - STDMETHOD(SetBoolVector) (THIS_ CONST BOOL *pData) PURE; - STDMETHOD(SetIntVector) (THIS_ CONST int *pData) PURE; - STDMETHOD(SetFloatVector)(THIS_ CONST float *pData) PURE; - - STDMETHOD(GetBoolVector) (THIS_ BOOL *pData) PURE; - STDMETHOD(GetIntVector) (THIS_ int *pData) PURE; - STDMETHOD(GetFloatVector)(THIS_ float *pData) PURE; - - STDMETHOD(SetBoolVectorArray) (THIS_ CONST BOOL *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(SetIntVectorArray) (THIS_ CONST int *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(SetFloatVectorArray)(THIS_ CONST float *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(GetBoolVectorArray) (THIS_ BOOL *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetIntVectorArray) (THIS_ int *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetFloatVectorArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectMatrixVariable //////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectMatrixVariable ID3DX11EffectMatrixVariable; -typedef interface ID3DX11EffectMatrixVariable *LPD3D11EFFECTMATRIXVARIABLE; - -// {E1096CF4-C027-419A-8D86-D29173DC803E} -DEFINE_GUID(IID_ID3DX11EffectMatrixVariable, - 0xe1096cf4, 0xc027, 0x419a, 0x8d, 0x86, 0xd2, 0x91, 0x73, 0xdc, 0x80, 0x3e); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectMatrixVariable - -DECLARE_INTERFACE_(ID3DX11EffectMatrixVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT ByteOffset, UINT ByteCount) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE; - - STDMETHOD(SetMatrix)(THIS_ CONST float *pData) PURE; - STDMETHOD(GetMatrix)(THIS_ float *pData) PURE; - - STDMETHOD(SetMatrixArray)(THIS_ CONST float *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetMatrixArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(SetMatrixTranspose)(THIS_ CONST float *pData) PURE; - STDMETHOD(GetMatrixTranspose)(THIS_ float *pData) PURE; - - STDMETHOD(SetMatrixTransposeArray)(THIS_ CONST float *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetMatrixTransposeArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectStringVariable //////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectStringVariable ID3DX11EffectStringVariable; -typedef interface ID3DX11EffectStringVariable *LPD3D11EFFECTSTRINGVARIABLE; - -// {F355C818-01BE-4653-A7CC-60FFFEDDC76D} -DEFINE_GUID(IID_ID3DX11EffectStringVariable, - 0xf355c818, 0x01be, 0x4653, 0xa7, 0xcc, 0x60, 0xff, 0xfe, 0xdd, 0xc7, 0x6d); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectStringVariable - -DECLARE_INTERFACE_(ID3DX11EffectStringVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(GetString)(THIS_ LPCSTR *ppString) PURE; - STDMETHOD(GetStringArray)(THIS_ LPCSTR *ppStrings, UINT Offset, UINT Count) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectClassInstanceVariable //////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectClassInstanceVariable ID3DX11EffectClassInstanceVariable; -typedef interface ID3DX11EffectClassInstanceVariable *LPD3D11EFFECTCLASSINSTANCEVARIABLE; - -// {926A8053-2A39-4DB4-9BDE-CF649ADEBDC1} -DEFINE_GUID(IID_ID3DX11EffectClassInstanceVariable, - 0x926a8053, 0x2a39, 0x4db4, 0x9b, 0xde, 0xcf, 0x64, 0x9a, 0xde, 0xbd, 0xc1); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectClassInstanceVariable - -DECLARE_INTERFACE_(ID3DX11EffectClassInstanceVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(GetClassInstance)(ID3D11ClassInstance** ppClassInstance) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectInterfaceVariable //////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectInterfaceVariable ID3DX11EffectInterfaceVariable; -typedef interface ID3DX11EffectInterfaceVariable *LPD3D11EFFECTINTERFACEVARIABLE; - -// {516C8CD8-1C80-40A4-B19B-0688792F11A5} -DEFINE_GUID(IID_ID3DX11EffectInterfaceVariable, - 0x516c8cd8, 0x1c80, 0x40a4, 0xb1, 0x9b, 0x06, 0x88, 0x79, 0x2f, 0x11, 0xa5); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectInterfaceVariable - -DECLARE_INTERFACE_(ID3DX11EffectInterfaceVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(SetClassInstance)(ID3DX11EffectClassInstanceVariable *pEffectClassInstance) PURE; - STDMETHOD(GetClassInstance)(ID3DX11EffectClassInstanceVariable **ppEffectClassInstance) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectShaderResourceVariable //////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectShaderResourceVariable ID3DX11EffectShaderResourceVariable; -typedef interface ID3DX11EffectShaderResourceVariable *LPD3D11EFFECTSHADERRESOURCEVARIABLE; - -// {350DB233-BBE0-485C-9BFE-C0026B844F89} -DEFINE_GUID(IID_ID3DX11EffectShaderResourceVariable, - 0x350db233, 0xbbe0, 0x485c, 0x9b, 0xfe, 0xc0, 0x02, 0x6b, 0x84, 0x4f, 0x89); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectShaderResourceVariable - -DECLARE_INTERFACE_(ID3DX11EffectShaderResourceVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(SetResource)(THIS_ ID3D11ShaderResourceView *pResource) PURE; - STDMETHOD(GetResource)(THIS_ ID3D11ShaderResourceView **ppResource) PURE; - - STDMETHOD(SetResourceArray)(THIS_ ID3D11ShaderResourceView **ppResources, UINT Offset, UINT Count) PURE; - STDMETHOD(GetResourceArray)(THIS_ ID3D11ShaderResourceView **ppResources, UINT Offset, UINT Count) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectUnorderedAccessViewVariable //////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectUnorderedAccessViewVariable ID3DX11EffectUnorderedAccessViewVariable; -typedef interface ID3DX11EffectUnorderedAccessViewVariable *LPD3D11EFFECTUNORDEREDACCESSVIEWVARIABLE; - -// {79B4AC8C-870A-47D2-B05A-8BD5CC3EE6C9} -DEFINE_GUID(IID_ID3DX11EffectUnorderedAccessViewVariable, - 0x79b4ac8c, 0x870a, 0x47d2, 0xb0, 0x5a, 0x8b, 0xd5, 0xcc, 0x3e, 0xe6, 0xc9); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectUnorderedAccessViewVariable - -DECLARE_INTERFACE_(ID3DX11EffectUnorderedAccessViewVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(SetUnorderedAccessView)(THIS_ ID3D11UnorderedAccessView *pResource) PURE; - STDMETHOD(GetUnorderedAccessView)(THIS_ ID3D11UnorderedAccessView **ppResource) PURE; - - STDMETHOD(SetUnorderedAccessViewArray)(THIS_ ID3D11UnorderedAccessView **ppResources, UINT Offset, UINT Count) PURE; - STDMETHOD(GetUnorderedAccessViewArray)(THIS_ ID3D11UnorderedAccessView **ppResources, UINT Offset, UINT Count) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectRenderTargetViewVariable ////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectRenderTargetViewVariable ID3DX11EffectRenderTargetViewVariable; -typedef interface ID3DX11EffectRenderTargetViewVariable *LPD3D11EFFECTRENDERTARGETVIEWVARIABLE; - -// {D5066909-F40C-43F8-9DB5-057C2A208552} -DEFINE_GUID(IID_ID3DX11EffectRenderTargetViewVariable, - 0xd5066909, 0xf40c, 0x43f8, 0x9d, 0xb5, 0x05, 0x7c, 0x2a, 0x20, 0x85, 0x52); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectRenderTargetViewVariable - -DECLARE_INTERFACE_(ID3DX11EffectRenderTargetViewVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(SetRenderTarget)(THIS_ ID3D11RenderTargetView *pResource) PURE; - STDMETHOD(GetRenderTarget)(THIS_ ID3D11RenderTargetView **ppResource) PURE; - - STDMETHOD(SetRenderTargetArray)(THIS_ ID3D11RenderTargetView **ppResources, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRenderTargetArray)(THIS_ ID3D11RenderTargetView **ppResources, UINT Offset, UINT Count) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectDepthStencilViewVariable ////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectDepthStencilViewVariable ID3DX11EffectDepthStencilViewVariable; -typedef interface ID3DX11EffectDepthStencilViewVariable *LPD3D11EFFECTDEPTHSTENCILVIEWVARIABLE; - -// {33C648AC-2E9E-4A2E-9CD6-DE31ACC5B347} -DEFINE_GUID(IID_ID3DX11EffectDepthStencilViewVariable, - 0x33c648ac, 0x2e9e, 0x4a2e, 0x9c, 0xd6, 0xde, 0x31, 0xac, 0xc5, 0xb3, 0x47); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectDepthStencilViewVariable - -DECLARE_INTERFACE_(ID3DX11EffectDepthStencilViewVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(SetDepthStencil)(THIS_ ID3D11DepthStencilView *pResource) PURE; - STDMETHOD(GetDepthStencil)(THIS_ ID3D11DepthStencilView **ppResource) PURE; - - STDMETHOD(SetDepthStencilArray)(THIS_ ID3D11DepthStencilView **ppResources, UINT Offset, UINT Count) PURE; - STDMETHOD(GetDepthStencilArray)(THIS_ ID3D11DepthStencilView **ppResources, UINT Offset, UINT Count) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectConstantBuffer //////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectConstantBuffer ID3DX11EffectConstantBuffer; -typedef interface ID3DX11EffectConstantBuffer *LPD3D11EFFECTCONSTANTBUFFER; - -// {2CB6C733-82D2-4000-B3DA-6219D9A99BF2} -DEFINE_GUID(IID_ID3DX11EffectConstantBuffer, - 0x2cb6c733, 0x82d2, 0x4000, 0xb3, 0xda, 0x62, 0x19, 0xd9, 0xa9, 0x9b, 0xf2); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectConstantBuffer - -DECLARE_INTERFACE_(ID3DX11EffectConstantBuffer, ID3DX11EffectVariable) -{ - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(SetConstantBuffer)(THIS_ ID3D11Buffer *pConstantBuffer) PURE; - STDMETHOD(UndoSetConstantBuffer)(THIS) PURE; - STDMETHOD(GetConstantBuffer)(THIS_ ID3D11Buffer **ppConstantBuffer) PURE; - - STDMETHOD(SetTextureBuffer)(THIS_ ID3D11ShaderResourceView *pTextureBuffer) PURE; - STDMETHOD(UndoSetTextureBuffer)(THIS) PURE; - STDMETHOD(GetTextureBuffer)(THIS_ ID3D11ShaderResourceView **ppTextureBuffer) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectShaderVariable //////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -//---------------------------------------------------------------------------- -// D3DX11_EFFECT_SHADER_DESC: -// -// Retrieved by ID3DX11EffectShaderVariable::GetShaderDesc() -//---------------------------------------------------------------------------- - -typedef struct _D3DX11_EFFECT_SHADER_DESC -{ - CONST BYTE *pInputSignature; // Passed into CreateInputLayout, - // valid on VS and GS only - - BOOL IsInline; // Is this an anonymous shader variable - // resulting from an inline shader assignment? - - - // -- The following fields are not valid after Optimize() -- - CONST BYTE *pBytecode; // Shader bytecode - UINT BytecodeLength; - - LPCSTR SODecls[D3D11_SO_STREAM_COUNT]; // Stream out declaration string (for GS with SO) - UINT RasterizedStream; - - UINT NumInputSignatureEntries; // Number of entries in the input signature - UINT NumOutputSignatureEntries; // Number of entries in the output signature - UINT NumPatchConstantSignatureEntries; // Number of entries in the patch constant signature -} D3DX11_EFFECT_SHADER_DESC; - - -typedef interface ID3DX11EffectShaderVariable ID3DX11EffectShaderVariable; -typedef interface ID3DX11EffectShaderVariable *LPD3D11EFFECTSHADERVARIABLE; - -// {7508B344-020A-4EC7-9118-62CDD36C88D7} -DEFINE_GUID(IID_ID3DX11EffectShaderVariable, - 0x7508b344, 0x020a, 0x4ec7, 0x91, 0x18, 0x62, 0xcd, 0xd3, 0x6c, 0x88, 0xd7); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectShaderVariable - -DECLARE_INTERFACE_(ID3DX11EffectShaderVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(GetShaderDesc)(THIS_ UINT ShaderIndex, D3DX11_EFFECT_SHADER_DESC *pDesc) PURE; - - STDMETHOD(GetVertexShader)(THIS_ UINT ShaderIndex, ID3D11VertexShader **ppVS) PURE; - STDMETHOD(GetGeometryShader)(THIS_ UINT ShaderIndex, ID3D11GeometryShader **ppGS) PURE; - STDMETHOD(GetPixelShader)(THIS_ UINT ShaderIndex, ID3D11PixelShader **ppPS) PURE; - STDMETHOD(GetHullShader)(THIS_ UINT ShaderIndex, ID3D11HullShader **ppPS) PURE; - STDMETHOD(GetDomainShader)(THIS_ UINT ShaderIndex, ID3D11DomainShader **ppPS) PURE; - STDMETHOD(GetComputeShader)(THIS_ UINT ShaderIndex, ID3D11ComputeShader **ppPS) PURE; - - STDMETHOD(GetInputSignatureElementDesc)(THIS_ UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE; - STDMETHOD(GetOutputSignatureElementDesc)(THIS_ UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE; - STDMETHOD(GetPatchConstantSignatureElementDesc)(THIS_ UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectBlendVariable ///////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectBlendVariable ID3DX11EffectBlendVariable; -typedef interface ID3DX11EffectBlendVariable *LPD3D11EFFECTBLENDVARIABLE; - -// {D664F4D7-3B81-4805-B277-C1DF58C39F53} -DEFINE_GUID(IID_ID3DX11EffectBlendVariable, - 0xd664f4d7, 0x3b81, 0x4805, 0xb2, 0x77, 0xc1, 0xdf, 0x58, 0xc3, 0x9f, 0x53); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectBlendVariable - -DECLARE_INTERFACE_(ID3DX11EffectBlendVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(GetBlendState)(THIS_ UINT Index, ID3D11BlendState **ppBlendState) PURE; - STDMETHOD(SetBlendState)(THIS_ UINT Index, ID3D11BlendState *pBlendState) PURE; - STDMETHOD(UndoSetBlendState)(THIS_ UINT Index) PURE; - STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D11_BLEND_DESC *pBlendDesc) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectDepthStencilVariable ////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectDepthStencilVariable ID3DX11EffectDepthStencilVariable; -typedef interface ID3DX11EffectDepthStencilVariable *LPD3D11EFFECTDEPTHSTENCILVARIABLE; - -// {69B5751B-61A5-48E5-BD41-D93988111563} -DEFINE_GUID(IID_ID3DX11EffectDepthStencilVariable, - 0x69b5751b, 0x61a5, 0x48e5, 0xbd, 0x41, 0xd9, 0x39, 0x88, 0x11, 0x15, 0x63); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectDepthStencilVariable - -DECLARE_INTERFACE_(ID3DX11EffectDepthStencilVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(GetDepthStencilState)(THIS_ UINT Index, ID3D11DepthStencilState **ppDepthStencilState) PURE; - STDMETHOD(SetDepthStencilState)(THIS_ UINT Index, ID3D11DepthStencilState *pDepthStencilState) PURE; - STDMETHOD(UndoSetDepthStencilState)(THIS_ UINT Index) PURE; - STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectRasterizerVariable //////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectRasterizerVariable ID3DX11EffectRasterizerVariable; -typedef interface ID3DX11EffectRasterizerVariable *LPD3D11EFFECTRASTERIZERVARIABLE; - -// {53A262F6-5F74-4151-A132-E3DD19A62C9D} -DEFINE_GUID(IID_ID3DX11EffectRasterizerVariable, - 0x53a262f6, 0x5f74, 0x4151, 0xa1, 0x32, 0xe3, 0xdd, 0x19, 0xa6, 0x2c, 0x9d); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectRasterizerVariable - -DECLARE_INTERFACE_(ID3DX11EffectRasterizerVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(GetRasterizerState)(THIS_ UINT Index, ID3D11RasterizerState **ppRasterizerState) PURE; - STDMETHOD(SetRasterizerState)(THIS_ UINT Index, ID3D11RasterizerState *pRasterizerState) PURE; - STDMETHOD(UndoSetRasterizerState)(THIS_ UINT Index) PURE; - STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D11_RASTERIZER_DESC *pRasterizerDesc) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectSamplerVariable /////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3DX11EffectSamplerVariable ID3DX11EffectSamplerVariable; -typedef interface ID3DX11EffectSamplerVariable *LPD3D11EFFECTSAMPLERVARIABLE; - -// {C6402E55-1095-4D95-8931-F92660513DD9} -DEFINE_GUID(IID_ID3DX11EffectSamplerVariable, - 0xc6402e55, 0x1095, 0x4d95, 0x89, 0x31, 0xf9, 0x26, 0x60, 0x51, 0x3d, 0xd9); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectSamplerVariable - -DECLARE_INTERFACE_(ID3DX11EffectSamplerVariable, ID3DX11EffectVariable) -{ - STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; - - STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE; - STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE; - STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE; - STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE; - STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE; - STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; - STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE; - STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE; - STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; - STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; - STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE; - - STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE; - STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; - - STDMETHOD(GetSampler)(THIS_ UINT Index, ID3D11SamplerState **ppSampler) PURE; - STDMETHOD(SetSampler)(THIS_ UINT Index, ID3D11SamplerState *pSampler) PURE; - STDMETHOD(UndoSetSampler)(THIS_ UINT Index) PURE; - STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D11_SAMPLER_DESC *pSamplerDesc) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectPass ////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -//---------------------------------------------------------------------------- -// D3DX11_PASS_DESC: -// -// Retrieved by ID3DX11EffectPass::GetDesc() -//---------------------------------------------------------------------------- - -typedef struct _D3DX11_PASS_DESC -{ - LPCSTR Name; // Name of this pass (NULL if not anonymous) - UINT Annotations; // Number of annotations on this pass - - BYTE *pIAInputSignature; // Signature from VS or GS (if there is no VS) - // or NULL if neither exists - SIZE_T IAInputSignatureSize; // Singature size in bytes - - UINT StencilRef; // Specified in SetDepthStencilState() - UINT SampleMask; // Specified in SetBlendState() - FLOAT BlendFactor[4]; // Specified in SetBlendState() -} D3DX11_PASS_DESC; - -//---------------------------------------------------------------------------- -// D3DX11_PASS_SHADER_DESC: -// -// Retrieved by ID3DX11EffectPass::Get**ShaderDesc() -//---------------------------------------------------------------------------- - -typedef struct _D3DX11_PASS_SHADER_DESC -{ - ID3DX11EffectShaderVariable *pShaderVariable; // The variable that this shader came from. - // 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() == FALSE. - - UINT ShaderIndex; // The element of pShaderVariable (if an array) - // or 0 if not applicable -} D3DX11_PASS_SHADER_DESC; - -typedef interface ID3DX11EffectPass ID3DX11EffectPass; -typedef interface ID3DX11EffectPass *LPD3D11EFFECTPASS; - -// {3437CEC4-4AC1-4D87-8916-F4BD5A41380C} -DEFINE_GUID(IID_ID3DX11EffectPass, - 0x3437cec4, 0x4ac1, 0x4d87, 0x89, 0x16, 0xf4, 0xbd, 0x5a, 0x41, 0x38, 0x0c); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectPass - -DECLARE_INTERFACE(ID3DX11EffectPass) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_PASS_DESC *pDesc) PURE; - - STDMETHOD(GetVertexShaderDesc)(THIS_ D3DX11_PASS_SHADER_DESC *pDesc) PURE; - STDMETHOD(GetGeometryShaderDesc)(THIS_ D3DX11_PASS_SHADER_DESC *pDesc) PURE; - STDMETHOD(GetPixelShaderDesc)(THIS_ D3DX11_PASS_SHADER_DESC *pDesc) PURE; - STDMETHOD(GetHullShaderDesc)(THIS_ D3DX11_PASS_SHADER_DESC *pDesc) PURE; - STDMETHOD(GetDomainShaderDesc)(THIS_ D3DX11_PASS_SHADER_DESC *pDesc) PURE; - STDMETHOD(GetComputeShaderDesc)(THIS_ D3DX11_PASS_SHADER_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD(Apply)(THIS_ UINT Flags, ID3D11DeviceContext* pContext) PURE; - - STDMETHOD(ComputeStateBlockMask)(THIS_ D3DX11_STATE_BLOCK_MASK *pStateBlockMask) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectTechnique ///////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -//---------------------------------------------------------------------------- -// D3DX11_TECHNIQUE_DESC: -// -// Retrieved by ID3DX11EffectTechnique::GetDesc() -//---------------------------------------------------------------------------- - -typedef struct _D3DX11_TECHNIQUE_DESC -{ - LPCSTR Name; // Name of this technique (NULL if not anonymous) - UINT Passes; // Number of passes contained within - UINT Annotations; // Number of annotations on this technique -} D3DX11_TECHNIQUE_DESC; - -typedef interface ID3DX11EffectTechnique ID3DX11EffectTechnique; -typedef interface ID3DX11EffectTechnique *LPD3D11EFFECTTECHNIQUE; - -// {51198831-1F1D-4F47-BD76-41CB0835B1DE} -DEFINE_GUID(IID_ID3DX11EffectTechnique, - 0x51198831, 0x1f1d, 0x4f47, 0xbd, 0x76, 0x41, 0xcb, 0x08, 0x35, 0xb1, 0xde); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectTechnique - -DECLARE_INTERFACE(ID3DX11EffectTechnique) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_TECHNIQUE_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectPass*, GetPassByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectPass*, GetPassByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD(ComputeStateBlockMask)(THIS_ D3DX11_STATE_BLOCK_MASK *pStateBlockMask) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11EffectTechnique ///////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -//---------------------------------------------------------------------------- -// D3DX11_GROUP_DESC: -// -// Retrieved by ID3DX11EffectTechnique::GetDesc() -//---------------------------------------------------------------------------- - -typedef struct _D3DX11_GROUP_DESC -{ - LPCSTR Name; // Name of this group (only NULL if global) - UINT Techniques; // Number of techniques contained within - UINT Annotations; // Number of annotations on this group -} D3DX11_GROUP_DESC; - -typedef interface ID3DX11EffectGroup ID3DX11EffectGroup; -typedef interface ID3DX11EffectGroup *LPD3D11EFFECTGROUP; - -// {03074acf-97de-485f-b201-cb775264afd6} -DEFINE_GUID(IID_ID3DX11EffectGroup, - 0x03074acf, 0x97de, 0x485f, 0xb2, 0x01, 0xcb, 0x77, 0x52, 0x64, 0xaf, 0xd6); - -#undef INTERFACE -#define INTERFACE ID3DX11EffectGroup - -DECLARE_INTERFACE(ID3DX11EffectGroup) -{ - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - STDMETHOD(GetDesc)(THIS_ D3DX11_GROUP_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectTechnique*, GetTechniqueByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectTechnique*, GetTechniqueByName)(THIS_ LPCSTR Name) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// ID3DX11Effect ////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -//---------------------------------------------------------------------------- -// D3DX11_EFFECT_DESC: -// -// Retrieved by ID3DX11Effect::GetDesc() -//---------------------------------------------------------------------------- - -typedef struct _D3DX11_EFFECT_DESC -{ - UINT ConstantBuffers; // Number of constant buffers in this effect - UINT GlobalVariables; // Number of global variables in this effect - UINT InterfaceVariables; // Number of global interfaces in this effect - UINT Techniques; // Number of techniques in this effect - UINT Groups; // Number of groups in this effect -} D3DX11_EFFECT_DESC; - -typedef interface ID3DX11Effect ID3DX11Effect; -typedef interface ID3DX11Effect *LPD3D11EFFECT; - -// {FA61CA24-E4BA-4262-9DB8-B132E8CAE319} -DEFINE_GUID(IID_ID3DX11Effect, - 0xfa61ca24, 0xe4ba, 0x4262, 0x9d, 0xb8, 0xb1, 0x32, 0xe8, 0xca, 0xe3, 0x19); - -#undef INTERFACE -#define INTERFACE ID3DX11Effect - -DECLARE_INTERFACE_(ID3DX11Effect, IUnknown) -{ - // IUnknown - STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; - STDMETHOD_(ULONG, AddRef)(THIS) PURE; - STDMETHOD_(ULONG, Release)(THIS) PURE; - - STDMETHOD_(BOOL, IsValid)(THIS) PURE; - - // Managing D3D Device - STDMETHOD(GetDevice)(THIS_ ID3D11Device** ppDevice) PURE; - - // New Reflection APIs - STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_DESC *pDesc) PURE; - - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetConstantBufferByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectConstantBuffer*, GetConstantBufferByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectVariable*, GetVariableByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetVariableByName)(THIS_ LPCSTR Name) PURE; - STDMETHOD_(ID3DX11EffectVariable*, GetVariableBySemantic)(THIS_ LPCSTR Semantic) PURE; - - STDMETHOD_(ID3DX11EffectGroup*, GetGroupByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectGroup*, GetGroupByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3DX11EffectTechnique*, GetTechniqueByIndex)(THIS_ UINT Index) PURE; - STDMETHOD_(ID3DX11EffectTechnique*, GetTechniqueByName)(THIS_ LPCSTR Name) PURE; - - STDMETHOD_(ID3D11ClassLinkage*, GetClassLinkage)(THIS) PURE; - - STDMETHOD(CloneEffect)(THIS_ UINT Flags, ID3DX11Effect** ppClonedEffect ) PURE; - STDMETHOD(Optimize)(THIS) PURE; - STDMETHOD_(BOOL, IsOptimized)(THIS) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// APIs ////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -#ifdef __cplusplus -extern "C" { -#endif //__cplusplus - -//---------------------------------------------------------------------------- -// D3DX11CreateEffectFromMemory: -// -------------------------- -// Creates an effect from a binary effect or file -// -// Parameters: -// -// [in] -// -// -// pData -// Blob of compiled effect data -// DataLength -// Length of the data blob -// FXFlags -// Compilation flags pertaining to Effect compilation, honored -// by the Effect compiler -// pDevice -// Pointer to the D3D11 device on which to create Effect resources -// -// [out] -// -// ppEffect -// Address of the newly created Effect interface -// -//---------------------------------------------------------------------------- - -HRESULT WINAPI D3DX11CreateEffectFromMemory(CONST void *pData, SIZE_T DataLength, UINT FXFlags, ID3D11Device *pDevice, ID3DX11Effect **ppEffect); - -#ifdef __cplusplus -} -#endif //__cplusplus - -#endif //__D3DX11EFFECT_H__ - diff --git a/sample/d3d11/Effects11/Inc/d3dxGlobal.h b/sample/d3d11/Effects11/Inc/d3dxGlobal.h deleted file mode 100644 index 3b5cdf8..0000000 --- a/sample/d3d11/Effects11/Inc/d3dxGlobal.h +++ /dev/null @@ -1,1337 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: D3DXGlobal.h -// Content: D3DX11 Effects helper defines and data structures -// -////////////////////////////////////////////////////////////////////////////// - -#pragma once - -#pragma warning(disable : 4100 4127 4189 4201 4245 4389 4505 4701 4706) - -namespace D3DX11Debug -{ -} - -using namespace D3DX11Debug; - -#include "d3dx11dbg.h" - -#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p) = NULL; } } -#define SAFE_ADDREF(p) { if (p) { (p)->AddRef(); } } - -#define SAFE_DELETE_ARRAY(p) { delete [](p); p = NULL; } -#define SAFE_DELETE(p) { delete (p); p = NULL; } - -#if FXDEBUG -#define __BREAK_ON_FAIL { __debugbreak(); } -#else -#define __BREAK_ON_FAIL -#endif - -#define VA(x, action) { hr = (x); if (FAILED(hr)) { action; __BREAK_ON_FAIL; return hr; } } -#define VNA(x,action) { if (!(x)) { action; __BREAK_ON_FAIL; hr = E_OUTOFMEMORY; goto lExit; } } -#define VBA(x,action) { if (!(x)) { action; __BREAK_ON_FAIL; hr = E_FAIL; goto lExit; } } -#define VHA(x,action) { hr = (x); if (FAILED(hr)) { action; __BREAK_ON_FAIL; goto lExit; } } - -#define V(x) { VA (x, 0) } -#define VN(x) { VNA(x, 0) } -#define VB(x) { VBA(x, 0) } -#define VH(x) { VHA(x, 0) } - -#define VBD(x,str) { VBA(x, DPF(1,str)) } -#define VHD(x,str) { VHA(x, DPF(1,str)) } - -#define VEASSERT(x) { hr = (x); if (FAILED(hr)) { __BREAK_ON_FAIL; D3DXASSERT(!#x); goto lExit; } } -#define VNASSERT(x) { if (!(x)) { __BREAK_ON_FAIL; D3DXASSERT(!#x); hr = E_OUTOFMEMORY; goto lExit; } } - -#define ANALYSIS_ASSUME(x) { D3DXASSERT(x); __analysis_assume(x); __assume(x); } - -#define D3DX11FLTASSIGN(a,b) { *reinterpret_cast< UINT32* >(&(a)) = *reinterpret_cast< UINT32* >(&(b)); } - -// Preferred data alignment -- must be a power of 2! -static const UINT c_DataAlignment = sizeof(UINT_PTR); - -D3DX11INLINE UINT AlignToPowerOf2(UINT Value, UINT Alignment) -{ - D3DXASSERT((Alignment & (Alignment - 1)) == 0); - // to align to 2^N, add 2^N - 1 and AND with all but lowest N bits set - ANALYSIS_ASSUME(Alignment > 0 && Value < MAXDWORD - Alignment); - return (Value + Alignment - 1) & (~(Alignment - 1)); -} - -D3DX11INLINE void * AlignToPowerOf2(void *pValue, UINT_PTR Alignment) -{ - D3DXASSERT((Alignment & (Alignment - 1)) == 0); - // to align to 2^N, add 2^N - 1 and AND with all but lowest N bits set - return (void *)(((UINT_PTR)pValue + Alignment - 1) & (~((UINT_PTR)Alignment - 1))); -} - - -// Fast memcpy -D3DX11INLINE void dwordMemcpy( __out_bcount(uByteCount) void * __restrict pDest, __in_bcount(uByteCount) CONST void * __restrict pSource, UINT uByteCount) -{ - UINT i; - D3DXASSERT(uByteCount % 4 == 0); -#ifdef _AMD64_ - const UINT qwordCount = uByteCount >> 3; - - __int64* src64 = (__int64*) pSource; - __int64* dst64 = (__int64*) pDest; - - for (i=0; i<(qwordCount & 0x3); i++) - { - *(dst64) = *(src64); - dst64++; - src64++; - } - - for (; i(pDest) <= uByteCount - 4 ); - ANALYSIS_ASSUME( src64 - static_cast< const __int64* >(pSource) <= uByteCount - 4 ); - if( uByteCount & 0x4 ) - { - *((UINT*)dst64) = *((UINT*)src64); - } -#else - const UINT dwordCount = uByteCount >> 2; - - for (i=0; i<(dwordCount & 0x3); i++) - { -#pragma prefast(suppress: __WARNING_UNRELATED_LOOP_TERMINATION, "(dwordCount & 03) < dwordCount") - ((UINT*)pDest)[i ] = ((UINT*)pSource)[i ]; - } - for (; i class CEffectVector -{ -protected: -#if _DEBUG - T *m_pCastData; // makes debugging easier to have a casted version of the data -#endif // _DEBUG - - BYTE *m_pData; - UINT m_MaxSize; - UINT m_CurSize; - - HRESULT Grow() - { - return Reserve(m_CurSize + 1); - } - - HRESULT Reserve(UINT DesiredSize) - { - if (DesiredSize > m_MaxSize) - { - BYTE *pNewData; - UINT newSize = max(m_MaxSize * 2, DesiredSize); - - if (newSize < 16) - newSize = 16; - - if ((newSize < m_MaxSize) || (newSize < m_CurSize) || (newSize >= UINT_MAX / sizeof(T))) - { - m_hLastError = E_OUTOFMEMORY; - return m_hLastError; - } - - pNewData = NEW BYTE[newSize * sizeof(T)]; - if (pNewData == NULL) - { - m_hLastError = E_OUTOFMEMORY; - return m_hLastError; - } - - if (m_pData) - { - memcpy(pNewData, m_pData, m_CurSize * sizeof(T)); - delete []m_pData; - } - - m_pData = pNewData; - m_MaxSize = newSize; - } -#if _DEBUG - m_pCastData = (T*) m_pData; -#endif // _DEBUG - return S_OK; - } - -public: - HRESULT m_hLastError; - - CEffectVector() - { - m_hLastError = S_OK; -#if _DEBUG - m_pCastData = NULL; -#endif // _DEBUG - m_pData = NULL; - m_CurSize = m_MaxSize = 0; - } - - ~CEffectVector() - { - Clear(); - } - - // cleanly swaps two vectors -- useful for when you want - // to reallocate a vector and copy data over, then swap them back - void SwapVector(CEffectVector &vOther) - { - BYTE tempData[sizeof(*this)]; - - memcpy(tempData, this, sizeof(*this)); - memcpy(this, &vOther, sizeof(*this)); - memcpy(&vOther, tempData, sizeof(*this)); - } - - HRESULT CopyFrom(CEffectVector &vOther) - { - HRESULT hr = S_OK; - Clear(); - VN( m_pData = NEW BYTE[vOther.m_MaxSize * sizeof(T)] ); - - m_CurSize = vOther.m_CurSize; - m_MaxSize = vOther.m_MaxSize; - m_hLastError = vOther.m_hLastError; - - UINT i; - for (i = 0; i < m_CurSize; ++ i) - { - ((T*)m_pData)[i] = ((T*)vOther.m_pData)[i]; - } - -lExit: - -#if _DEBUG - m_pCastData = (T*) m_pData; -#endif // _DEBUG - - return hr; - } - - void Clear() - { - Empty(); - SAFE_DELETE_ARRAY(m_pData); - m_MaxSize = 0; -#if _DEBUG - m_pCastData = NULL; -#endif // _DEBUG - } - - void ClearWithoutDestructor() - { - m_CurSize = 0; - m_hLastError = S_OK; - SAFE_DELETE_ARRAY(m_pData); - m_MaxSize = 0; - -#if _DEBUG - m_pCastData = NULL; -#endif // _DEBUG - } - - void Empty() - { - UINT i; - - // manually invoke destructor on all elements - for (i = 0; i < m_CurSize; ++ i) - { - ((T*)m_pData + i)->~T(); - } - m_CurSize = 0; - m_hLastError = S_OK; - } - - T* Add() - { - if (FAILED(Grow())) - return NULL; - - // placement new - return new((T*)m_pData + (m_CurSize ++)) T; - } - - T* AddRange(UINT count) - { - if (m_CurSize + count < m_CurSize) - { - m_hLastError = E_OUTOFMEMORY; - return NULL; - } - - if (FAILED(Reserve(m_CurSize + count))) - return NULL; - - T *pData = (T*)m_pData + m_CurSize; - UINT i; - for (i = 0; i < count; ++ i) - { - new(pData + i) T; - } - m_CurSize += count; - return pData; - } - - HRESULT Add(const T& var) - { - if (FAILED(Grow())) - return m_hLastError; - - memcpy((T*)m_pData + m_CurSize, &var, sizeof(T)); - m_CurSize++; - - return S_OK; - } - - HRESULT AddRange(const T *pVar, UINT count) - { - if (m_CurSize + count < m_CurSize) - { - m_hLastError = E_OUTOFMEMORY; - return m_hLastError; - } - - if (FAILED(Reserve(m_CurSize + count))) - return m_hLastError; - - memcpy((T*)m_pData + m_CurSize, pVar, count * sizeof(T)); - m_CurSize += count; - - return S_OK; - } - - HRESULT Insert(const T& var, UINT index) - { - D3DXASSERT(index < m_CurSize); - - if (FAILED(Grow())) - return m_hLastError; - - memmove((T*)m_pData + index + 1, (T*)m_pData + index, (m_CurSize - index) * sizeof(T)); - memcpy((T*)m_pData + index, &var, sizeof(T)); - m_CurSize++; - - return S_OK; - } - - HRESULT InsertRange(const T *pVar, UINT index, UINT count) - { - D3DXASSERT(index < m_CurSize); - - if (m_CurSize + count < m_CurSize) - { - m_hLastError = E_OUTOFMEMORY; - return m_hLastError; - } - - if (FAILED(Reserve(m_CurSize + count))) - return m_hLastError; - - memmove((T*)m_pData + index + count, (T*)m_pData + index, (m_CurSize - index) * sizeof(T)); - memcpy((T*)m_pData + index, pVar, count * sizeof(T)); - m_CurSize += count; - - return S_OK; - } - - inline T& operator[](UINT index) - { - D3DXASSERT(index < m_CurSize); - return ((T*)m_pData)[index]; - } - - // Deletes element at index and shifts all other values down - void Delete(UINT index) - { - D3DXASSERT(index < m_CurSize); - - -- m_CurSize; - memmove((T*)m_pData + index, (T*)m_pData + index + 1, (m_CurSize - index) * sizeof(T)); - } - - // Deletes element at index and moves the last element into its place - void QuickDelete(UINT index) - { - D3DXASSERT(index < m_CurSize); - - -- m_CurSize; - memcpy((T*)m_pData + index, (T*)m_pData + m_CurSize, sizeof(T)); - } - - inline UINT GetSize() const - { - return m_CurSize; - } - - inline T* GetData() const - { - return (T*)m_pData; - } - - UINT FindIndexOf(void *pEntry) const - { - UINT i; - - for (i = 0; i < m_CurSize; ++ i) - { - if (((T*)m_pData + i) == pEntry) - return i; - } - - return -1; - } - - void Sort(int (__cdecl *pfnCompare)(const void *pElem1, const void *pElem2)) - { - qsort(m_pData, m_CurSize, sizeof(T), pfnCompare); - } -}; - -////////////////////////////////////////////////////////////////////////// -// CEffectVectorOwner - implements a vector of ptrs to objects. The vector owns the objects. -////////////////////////////////////////////////////////////////////////// -template class CEffectVectorOwner : public CEffectVector -{ -public: - ~CEffectVectorOwner() - { - Clear(); - UINT i; - - for (i=0; i::Delete(index); - } -}; - - -////////////////////////////////////////////////////////////////////////// -// Checked UINT, DWORD64 -// Use CheckedNumber only with UINT and DWORD64 -////////////////////////////////////////////////////////////////////////// -template class CheckedNumber -{ - T m_Value; - BOOL m_bValid; - -public: - CheckedNumber() - { - m_Value = 0; - m_bValid = TRUE; - } - - CheckedNumber(const T &value) - { - m_Value = value; - m_bValid = TRUE; - } - - CheckedNumber(const CheckedNumber &value) - { - m_bValid = value.m_bValid; - m_Value = value.m_Value; - } - - CheckedNumber &operator+(const CheckedNumber &other) - { - CheckedNumber Res(*this); - return Res+=other; - } - - CheckedNumber &operator+=(const CheckedNumber &other) - { - if (!other.m_bValid) - { - m_bValid = FALSE; - } - else - { - m_Value += other.m_Value; - - if (m_Value < other.m_Value) - m_bValid = FALSE; - } - - return *this; - } - - CheckedNumber &operator*(const CheckedNumber &other) - { - CheckedNumber Res(*this); - return Res*=other; - } - - CheckedNumber &operator*=(const CheckedNumber &other) - { - if (!other.m_bValid) - { - m_bValid = FALSE; - } - else - { - if (other.m_Value != 0) - { - if (m_Value > MaxValue / other.m_Value) - { - m_bValid = FALSE; - } - } - m_Value *= other.m_Value; - } - - return *this; - } - - HRESULT GetValue(T *pValue) - { - if (!m_bValid) - { - *pValue = -1; - return E_FAIL; - } - - *pValue = m_Value; - return S_OK; - } -}; - -typedef CheckedNumber CCheckedDword; -typedef CheckedNumber CCheckedDword64; - - -////////////////////////////////////////////////////////////////////////// -// Data Block Store - A linked list of allocations -////////////////////////////////////////////////////////////////////////// - -class CDataBlock -{ -protected: - UINT m_size; - UINT m_maxSize; - BYTE *m_pData; - CDataBlock *m_pNext; - - BOOL m_IsAligned; // Whether or not to align the data to c_DataAlignment - -public: - // AddData appends an existing use buffer to the data block - HRESULT AddData(const void *pNewData, UINT bufferSize, CDataBlock **ppBlock); - - // Allocate reserves bufferSize bytes of contiguous memory and returns a pointer to the user - void* Allocate(UINT bufferSize, CDataBlock **ppBlock); - - void EnableAlignment(); - - CDataBlock(); - ~CDataBlock(); - - friend class CDataBlockStore; -}; - - -class CDataBlockStore -{ -protected: - CDataBlock *m_pFirst; - CDataBlock *m_pLast; - UINT m_Size; - UINT m_Offset; // m_Offset gets added to offsets returned from AddData & AddString. Use this to set a global for the entire string block - BOOL m_IsAligned; // Whether or not to align the data to c_DataAlignment - -public: -#if _DEBUG - UINT m_cAllocations; -#endif - -public: - HRESULT AddString(LPCSTR pString, UINT *pOffset); // Writes a null-terminated string to buffer - HRESULT AddData(const void *pNewData, UINT bufferSize, UINT *pOffset); // Writes data block to buffer - - void* Allocate(UINT buffferSize); // Memory allocator support - UINT GetSize(); - void EnableAlignment(); - - CDataBlockStore(); - ~CDataBlockStore(); -}; - -// Custom allocator that uses CDataBlockStore -// The trick is that we never free, so we don't have to keep as much state around -// Use PRIVATENEW in CEffectLoader - -static void* __cdecl operator new(size_t s, CDataBlockStore &pAllocator) -{ - D3DXASSERT( s <= 0xffffffff ); - return pAllocator.Allocate( (UINT)s ); -} - -static void __cdecl operator delete(void* p, CDataBlockStore &pAllocator) -{ -} - - -////////////////////////////////////////////////////////////////////////// -// Hash table -////////////////////////////////////////////////////////////////////////// - -#define HASH_MIX(a,b,c) \ -{ \ - a -= b; a -= c; a ^= (c>>13); \ - b -= c; b -= a; b ^= (a<<8); \ - c -= a; c -= b; c ^= (b>>13); \ - a -= b; a -= c; a ^= (c>>12); \ - b -= c; b -= a; b ^= (a<<16); \ - c -= a; c -= b; c ^= (b>>5); \ - a -= b; a -= c; a ^= (c>>3); \ - b -= c; b -= a; b ^= (a<<10); \ - c -= a; c -= b; c ^= (b>>15); \ -} - -static UINT ComputeHash(BYTE *pb, UINT cbToHash) -{ - UINT a; - UINT b; - UINT c; - UINT cbLeft; - - cbLeft = cbToHash; - - a = b = 0x9e3779b9; // the golden ratio; an arbitrary value - c = 0; - - while (cbLeft >= 12) - { - UINT *pdw = reinterpret_cast(pb); - - a += pdw[0]; - b += pdw[1]; - c += pdw[2]; - - HASH_MIX(a,b,c); - pb += 12; - cbLeft -= 12; - } - - c += cbToHash; - - switch(cbLeft) // all the case statements fall through - { - case 11: c+=((UINT) pb[10] << 24); - case 10: c+=((UINT) pb[9] << 16); - case 9 : c+=((UINT) pb[8] << 8); - // the first byte of c is reserved for the length - case 8 : b+=((UINT) pb[7] << 24); - case 7 : b+=((UINT) pb[6] << 16); - case 6 : b+=((UINT) pb[5] << 8); - case 5 : b+=pb[4]; - case 4 : a+=((UINT) pb[3] << 24); - case 3 : a+=((UINT) pb[2] << 16); - case 2 : a+=((UINT) pb[1] << 8); - case 1 : a+=pb[0]; - } - - HASH_MIX(a,b,c); - - return c; -} - -static UINT ComputeHashLower(BYTE *pb, UINT cbToHash) -{ - UINT a; - UINT b; - UINT c; - UINT cbLeft; - - cbLeft = cbToHash; - - a = b = 0x9e3779b9; // the golden ratio; an arbitrary value - c = 0; - - while (cbLeft >= 12) - { - BYTE pbT[12]; - for( UINT i = 0; i < 12; i++ ) - pbT[i] = (BYTE)tolower(pb[i]); - - UINT *pdw = reinterpret_cast(pbT); - - a += pdw[0]; - b += pdw[1]; - c += pdw[2]; - - HASH_MIX(a,b,c); - pb += 12; - cbLeft -= 12; - } - - c += cbToHash; - - BYTE pbT[12]; - for( UINT i = 0; i < cbLeft; i++ ) - pbT[i] = (BYTE)tolower(pb[i]); - - switch(cbLeft) // all the case statements fall through - { - case 11: c+=((UINT) pbT[10] << 24); - case 10: c+=((UINT) pbT[9] << 16); - case 9 : c+=((UINT) pbT[8] << 8); - // the first byte of c is reserved for the length - case 8 : b+=((UINT) pbT[7] << 24); - case 7 : b+=((UINT) pbT[6] << 16); - case 6 : b+=((UINT) pbT[5] << 8); - case 5 : b+=pbT[4]; - case 4 : a+=((UINT) pbT[3] << 24); - case 3 : a+=((UINT) pbT[2] << 16); - case 2 : a+=((UINT) pbT[1] << 8); - case 1 : a+=pbT[0]; - } - - HASH_MIX(a,b,c); - - return c; -} - - -static UINT ComputeHash(LPCSTR pString) -{ - return ComputeHash((BYTE*) pString, (UINT)strlen(pString)); -} - - -// 1) these numbers are prime -// 2) each is slightly less than double the last -// 4) each is roughly in between two powers of 2; -// (2^n hash table sizes are VERY BAD; they effectively truncate your -// precision down to the n least significant bits of the hash) -static const UINT c_PrimeSizes[] = -{ - 11, - 23, - 53, - 97, - 193, - 389, - 769, - 1543, - 3079, - 6151, - 12289, - 24593, - 49157, - 98317, - 196613, - 393241, - 786433, - 1572869, - 3145739, - 6291469, - 12582917, - 25165843, - 50331653, - 100663319, - 201326611, - 402653189, - 805306457, - 1610612741, -}; - -static const UINT c_NumPrimes = sizeof(c_PrimeSizes) / sizeof(UINT); - -template -class CEffectHashTable -{ -protected: - - struct SHashEntry - { - UINT Hash; - T Data; - SHashEntry *pNext; - }; - - // Array of hash entries - SHashEntry **m_rgpHashEntries; - UINT m_NumHashSlots; - UINT m_NumEntries; - bool m_bOwnHashEntryArray; - -public: - class CIterator - { - friend class CEffectHashTable; - - protected: - SHashEntry **ppHashSlot; - SHashEntry *pHashEntry; - - public: - T GetData() - { - D3DXASSERT(NULL != pHashEntry); - return pHashEntry->Data; - } - - UINT GetHash() - { - D3DXASSERT(NULL != pHashEntry); - return pHashEntry->Hash; - } - }; - - CEffectHashTable() - { - m_rgpHashEntries = NULL; - m_NumHashSlots = 0; - m_NumEntries = 0; - m_bOwnHashEntryArray = false; - } - - HRESULT Initialize(CEffectHashTable *pOther) - { - HRESULT hr = S_OK; - SHashEntry **rgpNewHashEntries = NULL; - SHashEntry ***rgppListEnds = NULL; - UINT i; - UINT valuesMigrated = 0; - UINT actualSize; - - Cleanup(); - - actualSize = pOther->m_NumHashSlots; - VN( rgpNewHashEntries = NEW SHashEntry*[actualSize] ); - - ZeroMemory(rgpNewHashEntries, sizeof(SHashEntry*) * actualSize); - - // Expensive operation: rebuild the hash table - CIterator iter, nextIter; - pOther->GetFirstEntry(&iter); - while (!pOther->PastEnd(&iter)) - { - UINT index = iter.GetHash() % actualSize; - - // we need to advance to the next element - // before we seize control of this element and move - // it to the new table - nextIter = iter; - pOther->GetNextEntry(&nextIter); - - // seize this hash entry, migrate it to the new table - SHashEntry *pNewEntry; - VN( pNewEntry = NEW SHashEntry ); - - pNewEntry->pNext = rgpNewHashEntries[index]; - pNewEntry->Data = iter.pHashEntry->Data; - pNewEntry->Hash = iter.pHashEntry->Hash; - rgpNewHashEntries[index] = pNewEntry; - - iter = nextIter; - ++ valuesMigrated; - } - - D3DXASSERT(valuesMigrated == pOther->m_NumEntries); - - m_rgpHashEntries = rgpNewHashEntries; - m_NumHashSlots = actualSize; - m_NumEntries = pOther->m_NumEntries; - m_bOwnHashEntryArray = true; - rgpNewHashEntries = NULL; - -lExit: - SAFE_DELETE_ARRAY( rgpNewHashEntries ); - return hr; - } - -protected: - void CleanArray() - { - if (m_bOwnHashEntryArray) - { - SAFE_DELETE_ARRAY(m_rgpHashEntries); - m_bOwnHashEntryArray = false; - } - } - -public: - void Cleanup() - { - UINT i; - for (i = 0; i < m_NumHashSlots; ++ i) - { - SHashEntry *pCurrentEntry = m_rgpHashEntries[i]; - SHashEntry *pTempEntry; - while (NULL != pCurrentEntry) - { - pTempEntry = pCurrentEntry->pNext; - SAFE_DELETE(pCurrentEntry); - pCurrentEntry = pTempEntry; - -- m_NumEntries; - } - } - CleanArray(); - m_NumHashSlots = 0; - D3DXASSERT(m_NumEntries == 0); - } - - ~CEffectHashTable() - { - Cleanup(); - } - - static UINT GetNextHashTableSize(__in UINT DesiredSize) - { - // figure out the next logical size to use - for (UINT i = 0; i < c_NumPrimes; ++ i) - { - if (c_PrimeSizes[i] >= DesiredSize) - { - return c_PrimeSizes[i]; - } - } - - return DesiredSize; - } - - // O(n) function - // Grows to the next suitable size (based off of the prime number table) - // DesiredSize is merely a suggestion - HRESULT Grow(__in UINT DesiredSize, - __in UINT ProvidedArraySize = 0, - __in_ecount_opt(ProvidedArraySize) - void** ProvidedArray = NULL, - __in bool OwnProvidedArray = false) - { - HRESULT hr = S_OK; - SHashEntry **rgpNewHashEntries = NULL; - SHashEntry ***rgppListEnds = NULL; - UINT valuesMigrated = 0; - UINT actualSize; - - VB( DesiredSize > m_NumHashSlots ); - - actualSize = GetNextHashTableSize(DesiredSize); - - if (ProvidedArray && - ProvidedArraySize >= actualSize) - { - rgpNewHashEntries = reinterpret_cast(ProvidedArray); - } - else - { - OwnProvidedArray = true; - - VN( rgpNewHashEntries = NEW SHashEntry*[actualSize] ); - } - - ZeroMemory(rgpNewHashEntries, sizeof(SHashEntry*) * actualSize); - - // Expensive operation: rebuild the hash table - CIterator iter, nextIter; - GetFirstEntry(&iter); - while (!PastEnd(&iter)) - { - UINT index = iter.GetHash() % actualSize; - - // we need to advance to the next element - // before we seize control of this element and move - // it to the new table - nextIter = iter; - GetNextEntry(&nextIter); - - // seize this hash entry, migrate it to the new table - iter.pHashEntry->pNext = rgpNewHashEntries[index]; - rgpNewHashEntries[index] = iter.pHashEntry; - - iter = nextIter; - ++ valuesMigrated; - } - - D3DXASSERT(valuesMigrated == m_NumEntries); - - CleanArray(); - m_rgpHashEntries = rgpNewHashEntries; - m_NumHashSlots = actualSize; - m_bOwnHashEntryArray = OwnProvidedArray; - -lExit: - return hr; - } - - HRESULT AutoGrow() - { - // arbitrary heuristic -- grow if 1:1 - if (m_NumEntries >= m_NumHashSlots) - { - // grows this hash table so that it is roughly 50% full - return Grow(m_NumEntries * 2 + 1); - } - return S_OK; - } - -#if _DEBUG - void PrintHashTableStats() - { - if (m_NumHashSlots == 0) - { - DPF(0, "Uninitialized hash table!"); - return; - } - - UINT i; - float variance = 0.0f; - float mean = (float)m_NumEntries / (float)m_NumHashSlots; - UINT unusedSlots = 0; - - DPF(0, "Hash table slots: %d, Entries in table: %d", m_NumHashSlots, m_NumEntries); - - for (i = 0; i < m_NumHashSlots; ++ i) - { - UINT entries = 0; - SHashEntry *pCurrentEntry = m_rgpHashEntries[i]; - - while (NULL != pCurrentEntry) - { - SHashEntry *pCurrentEntry2 = m_rgpHashEntries[i]; - - // check other hash entries in this slot for hash collisions or duplications - while (pCurrentEntry2 != pCurrentEntry) - { - if (pCurrentEntry->Hash == pCurrentEntry2->Hash) - { - if (pfnIsEqual(pCurrentEntry->Data, pCurrentEntry2->Data)) - { - D3DXASSERT(0); - DPF(0, "Duplicate entry (identical hash, identical data) found!"); - } - else - { - DPF(0, "Hash collision (hash: %d)", pCurrentEntry->Hash); - } - } - pCurrentEntry2 = pCurrentEntry2->pNext; - } - - pCurrentEntry = pCurrentEntry->pNext; - ++ entries; - } - - if (0 == entries) - { - ++ unusedSlots; - } - - // mean must be greater than 0 at this point - variance += (float)entries * (float)entries / mean; - } - - variance /= max(1.0f, (m_NumHashSlots - 1)); - variance -= (mean * mean); - - DPF(0, "Mean number of entries per slot: %f, Standard deviation: %f, Unused slots; %d", mean, variance, unusedSlots); - } -#endif // _DEBUG - - // S_OK if element is found, E_FAIL otherwise - HRESULT FindValueWithHash(T Data, UINT Hash, CIterator *pIterator) - { - D3DXASSERT(m_NumHashSlots > 0); - - UINT index = Hash % m_NumHashSlots; - SHashEntry *pEntry = m_rgpHashEntries[index]; - while (NULL != pEntry) - { - if (Hash == pEntry->Hash && pfnIsEqual(pEntry->Data, Data)) - { - pIterator->ppHashSlot = m_rgpHashEntries + index; - pIterator->pHashEntry = pEntry; - return S_OK; - } - pEntry = pEntry->pNext; - } - return E_FAIL; - } - - // S_OK if element is found, E_FAIL otherwise - HRESULT FindFirstMatchingValue(UINT Hash, CIterator *pIterator) - { - D3DXASSERT(m_NumHashSlots > 0); - - UINT index = Hash % m_NumHashSlots; - SHashEntry *pEntry = m_rgpHashEntries[index]; - while (NULL != pEntry) - { - if (Hash == pEntry->Hash) - { - pIterator->ppHashSlot = m_rgpHashEntries + index; - pIterator->pHashEntry = pEntry; - return S_OK; - } - pEntry = pEntry->pNext; - } - return E_FAIL; - } - - // Adds data at the specified hash slot without checking for existence - HRESULT AddValueWithHash(T Data, UINT Hash) - { - HRESULT hr = S_OK; - - D3DXASSERT(m_NumHashSlots > 0); - - SHashEntry *pHashEntry; - UINT index = Hash % m_NumHashSlots; - - VN( pHashEntry = NEW SHashEntry ); - pHashEntry->pNext = m_rgpHashEntries[index]; - pHashEntry->Data = Data; - pHashEntry->Hash = Hash; - m_rgpHashEntries[index] = pHashEntry; - - ++ m_NumEntries; - -lExit: - return hr; - } - - // Iterator code: - // - // CMyHashTable::CIterator myIt; - // for (myTable.GetFirstEntry(&myIt); !myTable.PastEnd(&myIt); myTable.GetNextEntry(&myIt) - // { myTable.GetData(&myIt); } - void GetFirstEntry(CIterator *pIterator) - { - SHashEntry **ppEnd = m_rgpHashEntries + m_NumHashSlots; - pIterator->ppHashSlot = m_rgpHashEntries; - while (pIterator->ppHashSlot < ppEnd) - { - if (NULL != *(pIterator->ppHashSlot)) - { - pIterator->pHashEntry = *(pIterator->ppHashSlot); - return; - } - ++ pIterator->ppHashSlot; - } - } - - BOOL PastEnd(CIterator *pIterator) - { - SHashEntry **ppEnd = m_rgpHashEntries + m_NumHashSlots; - D3DXASSERT(pIterator->ppHashSlot >= m_rgpHashEntries && pIterator->ppHashSlot <= ppEnd); - return (pIterator->ppHashSlot == ppEnd); - } - - void GetNextEntry(CIterator *pIterator) - { - SHashEntry **ppEnd = m_rgpHashEntries + m_NumHashSlots; - D3DXASSERT(pIterator->ppHashSlot >= m_rgpHashEntries && pIterator->ppHashSlot <= ppEnd); - D3DXASSERT(NULL != pIterator->pHashEntry); - - pIterator->pHashEntry = pIterator->pHashEntry->pNext; - if (NULL != pIterator->pHashEntry) - { - return; - } - - ++ pIterator->ppHashSlot; - while (pIterator->ppHashSlot < ppEnd) - { - pIterator->pHashEntry = *(pIterator->ppHashSlot); - if (NULL != pIterator->pHashEntry) - { - return; - } - ++ pIterator->ppHashSlot; - } - // hit the end of the list, ppHashSlot == ppEnd - } - - void RemoveEntry(CIterator *pIterator) - { - SHashEntry *pTemp; - SHashEntry **ppPrev; - SHashEntry **ppEnd = m_rgpHashEntries + m_NumHashSlots; - - D3DXASSERT(pIterator && !PastEnd(pIterator)); - ppPrev = pIterator->ppHashSlot; - pTemp = *ppPrev; - while (pTemp) - { - if (pTemp == pIterator->pHashEntry) - { - *ppPrev = pTemp->pNext; - pIterator->ppHashSlot = ppEnd; - delete pTemp; - return; - } - ppPrev = &pTemp->pNext; - pTemp = pTemp->pNext; - } - - // Should never get here - D3DXASSERT(0); - } - -}; - -// Allocates the hash slots on the regular heap (since the -// hash table can grow), but all hash entries are allocated on -// a private heap - -template -class CEffectHashTableWithPrivateHeap : public CEffectHashTable -{ -protected: - CDataBlockStore *m_pPrivateHeap; - -public: - CEffectHashTableWithPrivateHeap() - { - m_pPrivateHeap = NULL; - } - - void Cleanup() - { - CleanArray(); - m_NumHashSlots = 0; - m_NumEntries = 0; - } - - ~CEffectHashTableWithPrivateHeap() - { - Cleanup(); - } - - // Call this only once - void SetPrivateHeap(CDataBlockStore *pPrivateHeap) - { - D3DXASSERT(NULL == m_pPrivateHeap); - m_pPrivateHeap = pPrivateHeap; - } - - // Adds data at the specified hash slot without checking for existence - HRESULT AddValueWithHash(T Data, UINT Hash) - { - HRESULT hr = S_OK; - - D3DXASSERT(NULL != m_pPrivateHeap); - D3DXASSERT(m_NumHashSlots > 0); - - SHashEntry *pHashEntry; - UINT index = Hash % m_NumHashSlots; - - VN( pHashEntry = new(*m_pPrivateHeap) SHashEntry ); - pHashEntry->pNext = m_rgpHashEntries[index]; - pHashEntry->Data = Data; - pHashEntry->Hash = Hash; - m_rgpHashEntries[index] = pHashEntry; - - ++ m_NumEntries; - -lExit: - return hr; - } -}; diff --git a/sample/d3d11/Effects11/d3dx11dbg.cpp b/sample/d3d11/Effects11/d3dx11dbg.cpp deleted file mode 100644 index 330e8d9..0000000 --- a/sample/d3d11/Effects11/d3dx11dbg.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: d3dx11dbg.cpp -// Content: D3DX11 Effects debugging functions -// -/////////////////////////////////////////////////////////////////////////// - -#include "pchfx.h" - - -#ifdef FXDPF - -// -// DPF -// - -void cdecl D3DXDebugPrintf(UINT lvl, LPCSTR szFormat, ...) -{ - static UINT uDebugLevel = (UINT) -1; - - char strA[4096]; - char strB[4096]; - - va_list ap; - va_start(ap, szFormat); - StringCchVPrintfA(strA, sizeof(strA), szFormat, ap); - strA[4095] = '\0'; - va_end(ap); - - StringCchPrintfA(strB, sizeof(strB), "Effects11: %s\r\n", strA); - - strB[4095] = '\0'; - - OutputDebugStringA(strB); -} -#else -// This is defined so warning LNK4211 is not generated (object file has no public symbols) -void cdecl D3DXDebugPrintf(UINT lvl, LPCSTR szFormat, ...) {} -#endif - - -// -// D3DXASSERT -// - -#ifdef _DEBUG - -int WINAPI D3DXDebugAssert(LPCSTR szFile, int nLine, LPCSTR szCondition) -{ - char str[512]; - - // Print message to debug console - StringCchPrintfA(str, sizeof(str), "Assertion failure! (%s %d): %s\r\n", szFile, nLine, szCondition); - str[511] = 0; - OutputDebugStringA(str); - - return 0; -} -#endif - diff --git a/sample/d3d11/Effects11/d3dxGlobal.cpp b/sample/d3d11/Effects11/d3dxGlobal.cpp deleted file mode 100644 index 72f4efb..0000000 --- a/sample/d3d11/Effects11/d3dxGlobal.cpp +++ /dev/null @@ -1,351 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: d3dxGlobal.cpp -// Content: D3DX11 Effects implementation for helper data structures -// -////////////////////////////////////////////////////////////////////////////// - -#include "pchfx.h" -#include - -namespace D3DX11Core -{ - -////////////////////////////////////////////////////////////////////////// -// CMemoryStream - A class to simplify reading binary data -////////////////////////////////////////////////////////////////////////// - -CMemoryStream::CMemoryStream() -{ - m_pData = NULL; - m_cbData = 0; - m_readPtr = 0; -} - -CMemoryStream::~CMemoryStream() -{ -} - -HRESULT CMemoryStream::SetData(const void *pData, SIZE_T size) -{ - m_pData = (BYTE*) pData; - m_cbData = size; - m_readPtr = 0; - - return S_OK; -} - -HRESULT CMemoryStream::ReadAtOffset(SIZE_T offset, SIZE_T size, void **ppData) -{ - if (offset >= m_cbData) - return E_FAIL; - - m_readPtr = offset; - return Read(ppData, size); -} - -HRESULT CMemoryStream::ReadAtOffset(SIZE_T offset, LPCSTR *ppString) -{ - if (offset >= m_cbData) - return E_FAIL; - - m_readPtr = offset; - return Read(ppString); -} - -HRESULT CMemoryStream::Read(void **ppData, SIZE_T size) -{ - SIZE_T temp = m_readPtr + size; - - if (temp < m_readPtr || temp > m_cbData) - return E_FAIL; - - *ppData = m_pData + m_readPtr; - m_readPtr = temp; - return S_OK; -} - -HRESULT CMemoryStream::Read(UINT *pDword) -{ - UINT *pTempDword; - HRESULT hr; - - hr = Read((void**) &pTempDword, sizeof(UINT)); - if (FAILED(hr)) - return E_FAIL; - - *pDword = *pTempDword; - return S_OK; -} - -HRESULT CMemoryStream::Read(LPCSTR *ppString) -{ - SIZE_T iChar; - - for(iChar=m_readPtr; m_pData[iChar]; iChar++) - { - if (iChar > m_cbData) - return E_FAIL; - } - - *ppString = (LPCSTR) (m_pData + m_readPtr); - m_readPtr = iChar; - - return S_OK; -} - -SIZE_T CMemoryStream::GetPosition() -{ - return m_readPtr; -} - -HRESULT CMemoryStream::Seek(SIZE_T offset) -{ - if (offset > m_cbData) - return E_FAIL; - - m_readPtr = offset; - return S_OK; -} - -} - -////////////////////////////////////////////////////////////////////////// -// CDataBlock - used to dynamically build up the effect file in memory -////////////////////////////////////////////////////////////////////////// - -CDataBlock::CDataBlock() -{ - m_size = 0; - m_maxSize = 0; - m_pData = NULL; - m_pNext = NULL; - m_IsAligned = FALSE; -} - -CDataBlock::~CDataBlock() -{ - SAFE_DELETE_ARRAY(m_pData); - SAFE_DELETE(m_pNext); -} - -void CDataBlock::EnableAlignment() -{ - m_IsAligned = TRUE; -} - -HRESULT CDataBlock::AddData(const void *pvNewData, UINT bufferSize, CDataBlock **ppBlock) -{ - HRESULT hr = S_OK; - UINT bytesToCopy; - const BYTE *pNewData = (const BYTE*) pvNewData; - - if (m_maxSize == 0) - { - // This is a brand new DataBlock, fill it up - m_maxSize = max(8192, bufferSize); - - VN( m_pData = NEW BYTE[m_maxSize] ); - } - - D3DXASSERT(m_pData == AlignToPowerOf2(m_pData, c_DataAlignment)); - - bytesToCopy = min(m_maxSize - m_size, bufferSize); - memcpy(m_pData + m_size, pNewData, bytesToCopy); - pNewData += bytesToCopy; - - if (m_IsAligned) - { - D3DXASSERT(m_size == AlignToPowerOf2(m_size, c_DataAlignment)); - m_size += AlignToPowerOf2(bytesToCopy, c_DataAlignment); - } - else - { - m_size += bytesToCopy; - } - - bufferSize -= bytesToCopy; - *ppBlock = this; - - if (bufferSize != 0) - { - D3DXASSERT(NULL == m_pNext); // make sure we're not overwriting anything - - // Couldn't fit all data into this block, spill over into next - VN( m_pNext = NEW CDataBlock() ); - if (m_IsAligned) - { - m_pNext->EnableAlignment(); - } - VH( m_pNext->AddData(pNewData, bufferSize, ppBlock) ); - } - -lExit: - return hr; -} - -void* CDataBlock::Allocate(UINT bufferSize, CDataBlock **ppBlock) -{ - void *pRetValue; - UINT temp = m_size + bufferSize; - - if (temp < m_size) - return NULL; - - *ppBlock = this; - - if (m_maxSize == 0) - { - // This is a brand new DataBlock, fill it up - m_maxSize = max(8192, bufferSize); - - m_pData = NEW BYTE[m_maxSize]; - if (!m_pData) - return NULL; - memset(m_pData, 0xDD, m_maxSize); - } - else if (temp > m_maxSize) - { - D3DXASSERT(NULL == m_pNext); // make sure we're not overwriting anything - - // Couldn't fit data into this block, spill over into next - m_pNext = NEW CDataBlock(); - if (!m_pNext) - return NULL; - if (m_IsAligned) - { - m_pNext->EnableAlignment(); - } - - return m_pNext->Allocate(bufferSize, ppBlock); - } - - D3DXASSERT(m_pData == AlignToPowerOf2(m_pData, c_DataAlignment)); - - pRetValue = m_pData + m_size; - if (m_IsAligned) - { - D3DXASSERT(m_size == AlignToPowerOf2(m_size, c_DataAlignment)); - m_size = AlignToPowerOf2(temp, c_DataAlignment); - } - else - { - m_size = temp; - } - - return pRetValue; -} - - -////////////////////////////////////////////////////////////////////////// - -CDataBlockStore::CDataBlockStore() -{ - m_pFirst = NULL; - m_pLast = NULL; - m_Size = 0; - m_Offset = 0; - m_IsAligned = FALSE; - -#if _DEBUG - m_cAllocations = 0; -#endif -} - -CDataBlockStore::~CDataBlockStore() -{ - // Can't just do SAFE_DELETE(m_pFirst) since it blows the stack when deleting long chains of data - CDataBlock* pData = m_pFirst; - while(pData) - { - CDataBlock* pCurrent = pData; - pData = pData->m_pNext; - pCurrent->m_pNext = NULL; - delete pCurrent; - } - - // m_pLast will be deleted automatically -} - -void CDataBlockStore::EnableAlignment() -{ - m_IsAligned = TRUE; -} - -HRESULT CDataBlockStore::AddString(LPCSTR pString, UINT *pOffset) -{ - size_t strSize = strlen(pString) + 1; - D3DXASSERT( strSize <= 0xffffffff ); - return AddData(pString, (UINT)strSize, pOffset); -} - -HRESULT CDataBlockStore::AddData(const void *pNewData, UINT bufferSize, UINT *pCurOffset) -{ - HRESULT hr = S_OK; - - if (bufferSize == 0) - { - if (pCurOffset) - { - *pCurOffset = 0; - } - goto lExit; - } - - if (!m_pFirst) - { - VN( m_pFirst = NEW CDataBlock() ); - if (m_IsAligned) - { - m_pFirst->EnableAlignment(); - } - m_pLast = m_pFirst; - } - - if (pCurOffset) - *pCurOffset = m_Size + m_Offset; - - VH( m_pLast->AddData(pNewData, bufferSize, &m_pLast) ); - m_Size += bufferSize; - -lExit: - return hr; -} - -void* CDataBlockStore::Allocate(UINT bufferSize) -{ - void *pRetValue = NULL; - -#if _DEBUG - m_cAllocations++; -#endif - - if (!m_pFirst) - { - m_pFirst = NEW CDataBlock(); - if (!m_pFirst) - return NULL; - - if (m_IsAligned) - { - m_pFirst->EnableAlignment(); - } - m_pLast = m_pFirst; - } - - if (FAILED(UIntAdd(m_Size, bufferSize, &m_Size))) - return NULL; - - pRetValue = m_pLast->Allocate(bufferSize, &m_pLast); - if (!pRetValue) - return NULL; - - return pRetValue; -} - -UINT CDataBlockStore::GetSize() -{ - return m_Size; -} diff --git a/sample/d3d11/Effects11/pchfx.h b/sample/d3d11/Effects11/pchfx.h deleted file mode 100644 index a374084..0000000 --- a/sample/d3d11/Effects11/pchfx.h +++ /dev/null @@ -1,44 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) Microsoft Corporation. All Rights Reserved. -// -// File: pchfx.h -// Content: D3D shader effects precompiled header -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef __D3DX11_PCHFX_H__ -#define __D3DX11_PCHFX_H__ - -#define WIN32_LEAN_AND_MEAN - -#include "d3d11.h" -#include "d3dx11.h" -#undef DEFINE_GUID -#include "INITGUID.h" -#include "d3dx11effect.h" - -#define UNUSED -1 - -////////////////////////////////////////////////////////////////////////// - -#define offsetof_fx( a, b ) (UINT)offsetof( a, b ) - -#include "d3dxGlobal.h" - -#include -#include - -#include "Effect.h" -#include "EffectStateBase11.h" -#include "EffectLoad.h" - -#include "D3DCompiler.h" - -////////////////////////////////////////////////////////////////////////// - -namespace D3DX11Effects -{ -} // end namespace D3DX11Effects - -#endif // __D3DX11_PCHFX_H__ diff --git a/sample/d3d11/Media/UI/DXUTShared.fx b/sample/d3d11/Media/UI/DXUTShared.fx deleted file mode 100644 index f6d590b..0000000 --- a/sample/d3d11/Media/UI/DXUTShared.fx +++ /dev/null @@ -1,69 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTShared.fx -// -// -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- - - -//-------------------------------------------------------------------------------------- -// Global variables -//-------------------------------------------------------------------------------------- -float4 g_MaterialDiffuseColor; // Material's diffuse color -float3 g_LightDir; // Light's direction in world space -float4x4 g_mWorld; // World matrix for object -float4x4 g_mWorldViewProjection; // World * View * Projection matrix - - - -//-------------------------------------------------------------------------------------- -// Vertex shader output structure -//-------------------------------------------------------------------------------------- -struct VS_OUTPUT -{ - float4 Position : POSITION; // vertex position - float4 Diffuse : COLOR0; // vertex diffuse color -}; - - -//-------------------------------------------------------------------------------------- -// This shader computes standard transform and lighting -//-------------------------------------------------------------------------------------- -VS_OUTPUT RenderWith1LightNoTextureVS( float4 vPos : POSITION, - float3 vNormal : NORMAL ) -{ - VS_OUTPUT Output; - - // Transform the position from object space to homogeneous projection space - Output.Position = mul(vPos, g_mWorldViewProjection); - - // Transform the normal from object space to world space - float3 vNormalWorldSpace; - vNormalWorldSpace = normalize(mul(vNormal, (float3x3)g_mWorld)); // normal (world space) - - // Compute simple directional lighting equation - Output.Diffuse.rgb = g_MaterialDiffuseColor * max(0,dot(vNormalWorldSpace, g_LightDir)); - Output.Diffuse.a = 1.0f; - - return Output; -} - - -//-------------------------------------------------------------------------------------- -float4 RenderWith1LightNoTexturePS( float4 Diffuse : COLOR0 ) : COLOR0 -{ - return Diffuse; -} - - -//-------------------------------------------------------------------------------------- -technique RenderWith1LightNoTexture -{ - pass P0 - { - VertexShader = compile vs_1_1 RenderWith1LightNoTextureVS(); - PixelShader = compile ps_1_1 RenderWith1LightNoTexturePS(); - } -} - diff --git a/sample/d3d11/Media/UI/Font.dds b/sample/d3d11/Media/UI/Font.dds deleted file mode 100644 index 37514f5..0000000 Binary files a/sample/d3d11/Media/UI/Font.dds and /dev/null differ diff --git a/sample/d3d11/Media/UI/arrow.x b/sample/d3d11/Media/UI/arrow.x deleted file mode 100644 index da3c323..0000000 --- a/sample/d3d11/Media/UI/arrow.x +++ /dev/null @@ -1,1050 +0,0 @@ -xof 0303txt 0032 -template XSkinMeshHeader { - <3cf169ce-ff7c-44ab-93c0-f78f62d172e2> - WORD nMaxSkinWeightsPerVertex; - WORD nMaxSkinWeightsPerFace; - WORD nBones; -} - -template VertexDuplicationIndices { - - 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; -} - - -Frame Scene_Root { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; - } - - Frame Arrow { - - - FrameTransformMatrix { - 0.004058,0.000000,0.000000,0.000000,0.000000,0.000000,0.004058,0.000000,0.000000,-0.004058,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; - } - - Frame Cylinder01 { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000002,116.363640,0.000002,1.000000;; - } - - Frame { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,-0.000000,0.000000,0.000003,1.000000;; - } - - Mesh { - 58; - 0.000000;0.000000;0.000000;, - 24.461134;0.000000;0.000000;, - 22.038719;-10.613288;0.000000;, - 15.251267;-19.124485;0.000000;, - 5.443114;-23.847843;0.000000;, - -5.443115;-23.847841;0.000000;, - -15.251268;-19.124485;0.000000;, - -22.038721;-10.613288;0.000000;, - -24.461134;0.000001;0.000000;, - -22.038719;10.613289;0.000000;, - -15.251266;19.124485;0.000000;, - -5.443113;23.847843;0.000000;, - 5.443115;23.847841;0.000000;, - 15.251268;19.124483;0.000000;, - 22.038721;10.613287;0.000000;, - 24.461134;0.000000;-140.000000;, - 22.038719;-10.613288;-140.000000;, - 15.251267;-19.124485;-140.000000;, - 5.443114;-23.847843;-140.000000;, - -5.443115;-23.847841;-140.000000;, - -15.251268;-19.124485;-140.000000;, - -22.038721;-10.613288;-140.000000;, - -24.461134;0.000001;-140.000000;, - -22.038719;10.613289;-140.000000;, - -15.251266;19.124485;-140.000000;, - -5.443113;23.847843;-140.000000;, - 5.443115;23.847841;-140.000000;, - 15.251268;19.124483;-140.000000;, - 22.038721;10.613287;-140.000000;, - 0.000000;0.000000;-140.000000;, - 24.461134;0.000000;0.000000;, - 22.038719;-10.613288;0.000000;, - 15.251267;-19.124485;0.000000;, - 5.443114;-23.847843;0.000000;, - -5.443115;-23.847841;0.000000;, - -15.251268;-19.124485;0.000000;, - -22.038721;-10.613288;0.000000;, - -24.461134;0.000001;0.000000;, - -22.038719;10.613289;0.000000;, - -15.251266;19.124485;0.000000;, - -5.443113;23.847843;0.000000;, - 5.443115;23.847841;0.000000;, - 15.251268;19.124483;0.000000;, - 22.038721;10.613287;0.000000;, - 24.461134;0.000000;-140.000000;, - 22.038719;-10.613288;-140.000000;, - 15.251267;-19.124485;-140.000000;, - 5.443114;-23.847843;-140.000000;, - -5.443115;-23.847841;-140.000000;, - -15.251268;-19.124485;-140.000000;, - -22.038721;-10.613288;-140.000000;, - -24.461134;0.000001;-140.000000;, - -22.038719;10.613289;-140.000000;, - -15.251266;19.124485;-140.000000;, - -5.443113;23.847843;-140.000000;, - 5.443115;23.847841;-140.000000;, - 15.251268;19.124483;-140.000000;, - 22.038721;10.613287;-140.000000;; - 56; - 3;0,2,1;, - 3;0,3,2;, - 3;0,4,3;, - 3;0,5,4;, - 3;0,6,5;, - 3;0,7,6;, - 3;0,8,7;, - 3;0,9,8;, - 3;0,10,9;, - 3;0,11,10;, - 3;0,12,11;, - 3;0,13,12;, - 3;0,14,13;, - 3;0,1,14;, - 3;30,16,15;, - 3;30,31,16;, - 3;31,17,16;, - 3;31,32,17;, - 3;32,18,17;, - 3;32,33,18;, - 3;33,19,18;, - 3;33,34,19;, - 3;34,20,19;, - 3;34,35,20;, - 3;35,21,20;, - 3;35,36,21;, - 3;36,22,21;, - 3;36,37,22;, - 3;37,23,22;, - 3;37,38,23;, - 3;38,24,23;, - 3;38,39,24;, - 3;39,25,24;, - 3;39,40,25;, - 3;40,26,25;, - 3;40,41,26;, - 3;41,27,26;, - 3;41,42,27;, - 3;42,28,27;, - 3;42,43,28;, - 3;43,15,28;, - 3;43,30,15;, - 3;29,44,45;, - 3;29,45,46;, - 3;29,46,47;, - 3;29,47,48;, - 3;29,48,49;, - 3;29,49,50;, - 3;29,50,51;, - 3;29,51,52;, - 3;29,52,53;, - 3;29,53,54;, - 3;29,54,55;, - 3;29,55,56;, - 3;29,56,57;, - 3;29,57,44;; - - MeshNormals { - 58; - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.000000;0.000000;1.000000;, - 0.997118;0.075862;0.000000;, - 0.931288;-0.364284;0.000000;, - 0.681004;-0.732279;0.000000;, - 0.295840;-0.955238;0.000000;, - -0.147920;-0.988999;0.000000;, - -0.562382;-0.826878;0.000000;, - -0.865457;-0.500983;0.000000;, - -0.997118;-0.075862;0.000000;, - -0.931288;0.364284;0.000000;, - -0.681004;0.732279;0.000000;, - -0.295840;0.955238;0.000000;, - 0.147920;0.988999;0.000000;, - 0.562382;0.826878;0.000000;, - 0.865457;0.500983;0.000000;, - 0.000000;0.000000;-1.000000;, - 0.997118;-0.075862;0.000000;, - 0.865457;-0.500983;0.000000;, - 0.562382;-0.826878;0.000000;, - 0.147920;-0.988999;0.000000;, - -0.295840;-0.955238;0.000000;, - -0.681004;-0.732279;0.000000;, - -0.931288;-0.364284;0.000000;, - -0.997118;0.075862;0.000000;, - -0.865457;0.500983;0.000000;, - -0.562382;0.826878;0.000000;, - -0.147920;0.988999;0.000000;, - 0.295840;0.955238;0.000000;, - 0.681004;0.732279;0.000000;, - 0.931288;0.364284;0.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;; - 56; - 3;0,2,1;, - 3;0,3,2;, - 3;0,4,3;, - 3;0,5,4;, - 3;0,6,5;, - 3;0,7,6;, - 3;0,8,7;, - 3;0,9,8;, - 3;0,10,9;, - 3;0,11,10;, - 3;0,12,11;, - 3;0,13,12;, - 3;0,14,13;, - 3;0,1,14;, - 3;30,16,15;, - 3;30,31,16;, - 3;31,17,16;, - 3;31,32,17;, - 3;32,18,17;, - 3;32,33,18;, - 3;33,19,18;, - 3;33,34,19;, - 3;34,20,19;, - 3;34,35,20;, - 3;35,21,20;, - 3;35,36,21;, - 3;36,22,21;, - 3;36,37,22;, - 3;37,23,22;, - 3;37,38,23;, - 3;38,24,23;, - 3;38,39,24;, - 3;39,25,24;, - 3;39,40,25;, - 3;40,26,25;, - 3;40,41,26;, - 3;41,27,26;, - 3;41,42,27;, - 3;42,28,27;, - 3;42,43,28;, - 3;43,15,28;, - 3;43,30,15;, - 3;29,44,45;, - 3;29,45,46;, - 3;29,46,47;, - 3;29,47,48;, - 3;29,48,49;, - 3;29,49,50;, - 3;29,50,51;, - 3;29,51,52;, - 3;29,52,53;, - 3;29,53,54;, - 3;29,54,55;, - 3;29,55,56;, - 3;29,56,57;, - 3;29,57,44;; - } - - VertexDuplicationIndices { - 58; - 30; - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28; - } - - MeshMaterialList { - 1; - 56; - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0; - - Material { - 1.000000;1.000000;1.000000;1.000000;; - 0.000000; - 1.000000;1.000000;1.000000;; - 0.000000;0.000000;0.000000;; - } - } - } - } - } - - Frame Cone01 { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,116.363640,0.000000,1.000000;; - } - - Frame { - - - FrameTransformMatrix { - 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000003,1.000000;; - } - - Mesh { - 98; - 0.000000;0.000000;0.000000;, - 58.922840;0.000000;0.000000;, - 56.915092;15.250354;0.000000;, - 51.028675;29.461420;0.000000;, - 41.664738;41.664742;0.000000;, - 29.461418;51.028679;0.000000;, - 15.250351;56.915092;0.000000;, - -0.000003;58.922840;0.000000;, - -15.250356;56.915092;0.000000;, - -29.461424;51.028675;0.000000;, - -41.664742;41.664738;0.000000;, - -51.028679;29.461416;0.000000;, - -56.915092;15.250349;0.000000;, - -58.922840;-0.000005;0.000000;, - -56.915092;-15.250359;0.000000;, - -51.028675;-29.461426;0.000000;, - -41.664734;-41.664745;0.000000;, - -29.461414;-51.028679;0.000000;, - -15.250346;-56.915096;0.000000;, - 0.000008;-58.922840;0.000000;, - 15.250361;-56.915092;0.000000;, - 29.461428;-51.028671;0.000000;, - 41.664745;-41.664734;0.000000;, - 51.028683;-29.461412;0.000000;, - 56.915096;-15.250343;0.000000;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 58.922840;0.000000;0.000000;, - 56.915092;15.250354;0.000000;, - 51.028675;29.461420;0.000000;, - 41.664738;41.664742;0.000000;, - 29.461418;51.028679;0.000000;, - 15.250351;56.915092;0.000000;, - -0.000003;58.922840;0.000000;, - -15.250356;56.915092;0.000000;, - -29.461424;51.028675;0.000000;, - -41.664742;41.664738;0.000000;, - -51.028679;29.461416;0.000000;, - -56.915092;15.250349;0.000000;, - -58.922840;-0.000005;0.000000;, - -56.915092;-15.250359;0.000000;, - -51.028675;-29.461426;0.000000;, - -41.664734;-41.664745;0.000000;, - -29.461414;-51.028679;0.000000;, - -15.250346;-56.915096;0.000000;, - 0.000008;-58.922840;0.000000;, - 15.250361;-56.915092;0.000000;, - 29.461428;-51.028671;0.000000;, - 41.664745;-41.664734;0.000000;, - 51.028683;-29.461412;0.000000;, - 56.915096;-15.250343;0.000000;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;, - 0.000000;0.000000;116.363632;; - 96; - 3;0,2,1;, - 3;0,3,2;, - 3;0,4,3;, - 3;0,5,4;, - 3;0,6,5;, - 3;0,7,6;, - 3;0,8,7;, - 3;0,9,8;, - 3;0,10,9;, - 3;0,11,10;, - 3;0,12,11;, - 3;0,13,12;, - 3;0,14,13;, - 3;0,15,14;, - 3;0,16,15;, - 3;0,17,16;, - 3;0,18,17;, - 3;0,19,18;, - 3;0,20,19;, - 3;0,21,20;, - 3;0,22,21;, - 3;0,23,22;, - 3;0,24,23;, - 3;0,1,24;, - 3;50,26,25;, - 3;50,51,26;, - 3;51,27,26;, - 3;51,52,27;, - 3;52,28,27;, - 3;52,53,28;, - 3;53,29,28;, - 3;53,54,29;, - 3;54,30,29;, - 3;54,55,30;, - 3;55,31,30;, - 3;55,56,31;, - 3;56,32,31;, - 3;56,57,32;, - 3;57,33,32;, - 3;57,58,33;, - 3;58,34,33;, - 3;58,59,34;, - 3;59,35,34;, - 3;59,60,35;, - 3;60,36,35;, - 3;60,61,36;, - 3;61,37,36;, - 3;61,62,37;, - 3;62,38,37;, - 3;62,63,38;, - 3;63,39,38;, - 3;63,64,39;, - 3;64,40,39;, - 3;64,65,40;, - 3;65,41,40;, - 3;65,66,41;, - 3;66,42,41;, - 3;66,67,42;, - 3;67,43,42;, - 3;67,68,43;, - 3;68,44,43;, - 3;68,69,44;, - 3;69,45,44;, - 3;69,70,45;, - 3;70,46,45;, - 3;70,71,46;, - 3;71,47,46;, - 3;71,72,47;, - 3;72,48,47;, - 3;72,73,48;, - 3;73,25,48;, - 3;73,50,25;, - 3;49,74,75;, - 3;49,75,76;, - 3;49,76,77;, - 3;49,77,78;, - 3;49,78,79;, - 3;49,79,80;, - 3;49,80,81;, - 3;49,81,82;, - 3;49,82,83;, - 3;49,83,84;, - 3;49,84,85;, - 3;49,85,86;, - 3;49,86,87;, - 3;49,87,88;, - 3;49,88,89;, - 3;49,89,90;, - 3;49,90,91;, - 3;49,91,92;, - 3;49,92,93;, - 3;49,93,94;, - 3;49,94,95;, - 3;49,95,96;, - 3;49,96,97;, - 3;49,97,74;; - - MeshNormals { - 98; - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.000000;0.000000;-1.000000;, - 0.886052;-0.116651;0.448669;, - 0.886052;0.116651;0.448669;, - 0.825669;0.342004;0.448669;, - 0.709018;0.544049;0.448669;, - 0.544049;0.709018;0.448669;, - 0.342003;0.825669;0.448669;, - 0.116651;0.886052;0.448669;, - -0.116651;0.886052;0.448669;, - -0.342003;0.825669;0.448669;, - -0.544049;0.709018;0.448669;, - -0.709018;0.544049;0.448669;, - -0.825669;0.342003;0.448669;, - -0.886052;0.116651;0.448669;, - -0.886052;-0.116651;0.448669;, - -0.825669;-0.342003;0.448669;, - -0.709018;-0.544049;0.448669;, - -0.544049;-0.709018;0.448669;, - -0.342003;-0.825669;0.448669;, - -0.116651;-0.886052;0.448669;, - 0.116651;-0.886052;0.448669;, - 0.342004;-0.825669;0.448669;, - 0.544049;-0.709018;0.448669;, - 0.709018;-0.544049;0.448669;, - 0.825669;-0.342003;0.448669;, - 1.000000;0.000000;0.000000;, - 0.892143;0.000000;0.451753;, - 0.861744;0.230904;0.451753;, - 0.772619;0.446072;0.451753;, - 0.630840;0.630840;0.451753;, - 0.446072;0.772619;0.451753;, - 0.230904;0.861744;0.451753;, - 0.000000;0.892143;0.451753;, - -0.230904;0.861744;0.451753;, - -0.446072;0.772619;0.451753;, - -0.630840;0.630840;0.451753;, - -0.772619;0.446071;0.451753;, - -0.861744;0.230904;0.451753;, - -0.892143;-0.000000;0.451753;, - -0.861744;-0.230904;0.451753;, - -0.772619;-0.446072;0.451753;, - -0.630840;-0.630841;0.451753;, - -0.446072;-0.772619;0.451753;, - -0.230904;-0.861744;0.451753;, - 0.000000;-0.892143;0.451753;, - 0.230904;-0.861744;0.451753;, - 0.446072;-0.772619;0.451753;, - 0.630840;-0.630840;0.451753;, - 0.772619;-0.446071;0.451753;, - 0.861744;-0.230903;0.451753;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;, - 1.000000;0.000000;0.000000;; - 96; - 3;0,2,1;, - 3;0,3,2;, - 3;0,4,3;, - 3;0,5,4;, - 3;0,6,5;, - 3;0,7,6;, - 3;0,8,7;, - 3;0,9,8;, - 3;0,10,9;, - 3;0,11,10;, - 3;0,12,11;, - 3;0,13,12;, - 3;0,14,13;, - 3;0,15,14;, - 3;0,16,15;, - 3;0,17,16;, - 3;0,18,17;, - 3;0,19,18;, - 3;0,20,19;, - 3;0,21,20;, - 3;0,22,21;, - 3;0,23,22;, - 3;0,24,23;, - 3;0,1,24;, - 3;50,26,25;, - 3;50,51,26;, - 3;51,27,26;, - 3;51,52,27;, - 3;52,28,27;, - 3;52,53,28;, - 3;53,29,28;, - 3;53,54,29;, - 3;54,30,29;, - 3;54,55,30;, - 3;55,31,30;, - 3;55,56,31;, - 3;56,32,31;, - 3;56,57,32;, - 3;57,33,32;, - 3;57,58,33;, - 3;58,34,33;, - 3;58,59,34;, - 3;59,35,34;, - 3;59,60,35;, - 3;60,36,35;, - 3;60,61,36;, - 3;61,37,36;, - 3;61,62,37;, - 3;62,38,37;, - 3;62,63,38;, - 3;63,39,38;, - 3;63,64,39;, - 3;64,40,39;, - 3;64,65,40;, - 3;65,41,40;, - 3;65,66,41;, - 3;66,42,41;, - 3;66,67,42;, - 3;67,43,42;, - 3;67,68,43;, - 3;68,44,43;, - 3;68,69,44;, - 3;69,45,44;, - 3;69,70,45;, - 3;70,46,45;, - 3;70,71,46;, - 3;71,47,46;, - 3;71,72,47;, - 3;72,48,47;, - 3;72,73,48;, - 3;73,25,48;, - 3;73,50,25;, - 3;49,74,75;, - 3;49,75,76;, - 3;49,76,77;, - 3;49,77,78;, - 3;49,78,79;, - 3;49,79,80;, - 3;49,80,81;, - 3;49,81,82;, - 3;49,82,83;, - 3;49,83,84;, - 3;49,84,85;, - 3;49,85,86;, - 3;49,86,87;, - 3;49,87,88;, - 3;49,88,89;, - 3;49,89,90;, - 3;49,90,91;, - 3;49,91,92;, - 3;49,92,93;, - 3;49,93,94;, - 3;49,94,95;, - 3;49,95,96;, - 3;49,96,97;, - 3;49,97,74;; - } - - VertexDuplicationIndices { - 98; - 50; - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48; - } - - MeshMaterialList { - 1; - 96; - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0; - - Material { - 1.000000;1.000000;1.000000;1.000000;; - 0.000000; - 1.000000;1.000000;1.000000;; - 0.000000;0.000000;0.000000;; - } - } - } - } - } - } -} \ No newline at end of file diff --git a/sample/d3d11/Media/UI/dxutcontrols.dds b/sample/d3d11/Media/UI/dxutcontrols.dds deleted file mode 100644 index b5f52e1..0000000 Binary files a/sample/d3d11/Media/UI/dxutcontrols.dds and /dev/null differ diff --git a/sample/d3d11/Media/ocean_surface_d3d11.fxo b/sample/d3d11/Media/ocean_surface_d3d11.fxo deleted file mode 100644 index 0f2430f..0000000 Binary files a/sample/d3d11/Media/ocean_surface_d3d11.fxo and /dev/null differ diff --git a/sample/d3d11/Media/sample_d3d11.fxo b/sample/d3d11/Media/sample_d3d11.fxo deleted file mode 100644 index 9040c57..0000000 Binary files a/sample/d3d11/Media/sample_d3d11.fxo and /dev/null differ diff --git a/sample/d3d11/common.fx b/sample/d3d11/common.fx deleted file mode 100644 index fab5e59..0000000 --- a/sample/d3d11/common.fx +++ /dev/null @@ -1,235 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed -// under the Mutual Non-Disclosure Agreement. -// -// Notice -// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES -// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. -// -// NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. No third party distribution is allowed unless -// expressly authorized by NVIDIA. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright © 2008- 2013 NVIDIA Corporation. All rights reserved. -// -// NVIDIA Corporation and its licensors retain all intellectual property and proprietary -// rights in and to this software and related documentation and any modifications thereto. -// Any use, reproduction, disclosure or distribution of this software and related -// documentation without an express license agreement from NVIDIA Corporation is -// strictly prohibited. -// - -cbuffer QuadObject -{ - static const float2 QuadVertices[4] = - { - {-1.0, -1.0}, - { 1.0, -1.0}, - {-1.0, 1.0}, - { 1.0, 1.0} - }; - - static const float2 QuadTexCoordinates[4] = - { - {0.0, 1.0}, - {1.0, 1.0}, - {0.0, 0.0}, - {1.0, 0.0} - }; -} - -SamplerState SamplerPointClamp -{ - Filter = MIN_MAG_MIP_POINT; - AddressU = Clamp; - AddressV = Clamp; -}; - -SamplerState SamplerLinearClamp -{ - Filter = MIN_MAG_MIP_LINEAR; - AddressU = Clamp; - AddressV = Clamp; -}; - -SamplerState SamplerLinearWrap -{ - Filter = MIN_MAG_MIP_LINEAR; - AddressU = Wrap; - AddressV = Wrap; -}; - -SamplerState SamplerAnisotropicWrap -{ - Filter = ANISOTROPIC; - AddressU = Wrap; - AddressV = Wrap; - MaxAnisotropy = 16; -}; - -SamplerState SamplerCube -{ - Filter = MIN_MAG_MIP_POINT; - AddressU = Clamp; - AddressV = Clamp; - AddressW = Clamp; -}; - -SamplerState SamplerLinearMirror -{ - Filter = MIN_MAG_MIP_LINEAR; - AddressU = Mirror; - AddressV = Mirror; -}; - -SamplerState SamplerLinearBorderBlack -{ - Filter = MIN_MAG_MIP_LINEAR; - AddressU = Border; - AddressV = Border; - AddressW = Border; - BorderColor = float4(0, 0, 0, 0); -}; - -SamplerState SamplerLinearBorder -{ - Filter = MIN_MAG_MIP_LINEAR; - AddressU = Border; - AddressV = Border; -}; - -SamplerComparisonState SamplerBackBufferDepth -{ - Filter = COMPARISON_MIN_MAG_LINEAR_MIP_POINT; - AddressU = Border; - AddressV = Border; - BorderColor = float4(1, 1, 1, 1); - ComparisonFunc = LESS_EQUAL; -}; - -SamplerComparisonState SamplerDepthAnisotropic -{ - Filter = COMPARISON_ANISOTROPIC; - AddressU = Border; - AddressV = Border; - ComparisonFunc = LESS; - BorderColor = float4(1, 1, 1, 0); - MaxAnisotropy = 16; -}; - -RasterizerState CullBack -{ - CullMode = Back; - FrontCounterClockwise = TRUE; -}; - -RasterizerState CullBackMS -{ - CullMode = Back; - FrontCounterClockwise = TRUE; - MultisampleEnable = TRUE; -}; - -RasterizerState CullFrontNoClip -{ - CullMode = Front; - FrontCounterClockwise = TRUE; - DepthClipEnable = FALSE; -}; - -RasterizerState CullFrontMS -{ - CullMode = Front; - FrontCounterClockwise = TRUE; - MultisampleEnable = TRUE; -}; - -RasterizerState NoCull -{ - CullMode = NONE; -}; - -RasterizerState NoCullMS -{ - CullMode = NONE; - MultisampleEnable = TRUE; -}; - -RasterizerState Wireframe -{ - CullMode = NONE; - FillMode = WIREFRAME; -}; - -RasterizerState WireframeMS -{ - CullMode = NONE; - FillMode = WIREFRAME; - MultisampleEnable = TRUE; -}; - -DepthStencilState DepthNormal -{ - DepthEnable = TRUE; - DepthWriteMask = ALL; - DepthFunc = LESS_EQUAL; - StencilEnable = FALSE; -}; - -DepthStencilState NoDepthStencil -{ - DepthEnable = FALSE; - StencilEnable = FALSE; -}; - -DepthStencilState DepthAlways -{ - DepthEnable = TRUE; - DepthWriteMask = ALL; - DepthFunc = ALWAYS; - StencilEnable = FALSE; -}; - - -BlendState NoBlending -{ - BlendEnable[0] = FALSE; -}; - -BlendState Translucent -{ - BlendEnable[0] = TRUE; - RenderTargetWriteMask[0] = 0xF; - - SrcBlend = SRC_ALPHA; - DestBlend = INV_SRC_ALPHA; - BlendOp = Add; -}; - - -float4 ColorPS(uniform float4 color) : SV_Target -{ - return color; -} - -technique11 Default -{ - pass p0 - { - SetRasterizerState(NoCull); - SetDepthStencilState(DepthNormal, 0); - SetBlendState(NoBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); - SetVertexShader(NULL); - SetHullShader(NULL); - SetDomainShader(NULL); - SetGeometryShader(NULL); - SetPixelShader(NULL); - } -} diff --git a/sample/d3d11/common/DXUT.cpp b/sample/d3d11/common/DXUT.cpp deleted file mode 100644 index 888efd3..0000000 --- a/sample/d3d11/common/DXUT.cpp +++ /dev/null @@ -1,5846 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUT.cpp -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#define DXUT_MIN_WINDOW_SIZE_X 200 -#define DXUT_MIN_WINDOW_SIZE_Y 200 -#define DXUT_COUNTER_STAT_LENGTH 2048 -#undef min // use __min instead inside this source file -#undef max // use __max instead inside this source file - -#ifndef ARRAYSIZE -extern "C++" // templates cannot be declared to have 'C' linkage -template -char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N]; - -#define RTL_NUMBER_OF_V2(A) (sizeof(*RtlpNumberOf(A))) -#define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A) -#endif - -//-------------------------------------------------------------------------------------- -// Thread safety -//-------------------------------------------------------------------------------------- -CRITICAL_SECTION g_cs; -bool g_bThreadSafe = true; - - -//-------------------------------------------------------------------------------------- -// Automatically enters & leaves the CS upon object creation/deletion -//-------------------------------------------------------------------------------------- -class DXUTLock -{ -public: - inline DXUTLock() { if( g_bThreadSafe ) EnterCriticalSection( &g_cs ); } - inline ~DXUTLock() { if( g_bThreadSafe ) LeaveCriticalSection( &g_cs ); } -}; - -//-------------------------------------------------------------------------------------- -// Helper macros to build member functions that access member variables with thread safety -//-------------------------------------------------------------------------------------- -#define SET_ACCESSOR( x, y ) inline void Set##y( x t ) { DXUTLock l; m_state.m_##y = t; }; -#define GET_ACCESSOR( x, y ) inline x Get##y() { DXUTLock l; return m_state.m_##y; }; -#define GET_SET_ACCESSOR( x, y ) SET_ACCESSOR( x, y ) GET_ACCESSOR( x, y ) - -#define SETP_ACCESSOR( x, y ) inline void Set##y( x* t ) { DXUTLock l; m_state.m_##y = *t; }; -#define GETP_ACCESSOR( x, y ) inline x* Get##y() { DXUTLock l; return &m_state.m_##y; }; -#define GETP_SETP_ACCESSOR( x, y ) SETP_ACCESSOR( x, y ) GETP_ACCESSOR( x, y ) - - -//-------------------------------------------------------------------------------------- -// Stores timer callback info -//-------------------------------------------------------------------------------------- -struct DXUT_TIMER -{ - LPDXUTCALLBACKTIMER pCallbackTimer; - void* pCallbackUserContext; - float fTimeoutInSecs; - float fCountdown; - bool bEnabled; - UINT nID; -}; - - - -//-------------------------------------------------------------------------------------- -// Stores DXUT state and data access is done with thread safety (if g_bThreadSafe==true) -//-------------------------------------------------------------------------------------- -class DXUTState -{ -protected: - struct STATE - { - // D3D9 specific - IDirect3D9* m_D3D9; // the main D3D9 object - IDirect3DDevice9* m_D3D9Device; // the D3D9 rendering device - DXUTDeviceSettings* m_CurrentDeviceSettings; // current device settings - D3DSURFACE_DESC m_BackBufferSurfaceDesc9; // D3D9 back buffer surface description - D3DCAPS9 m_Caps; // D3D caps for current device - - // D3D11 specific - IDXGIFactory1* m_DXGIFactory; // DXGI Factory object - IDXGIAdapter1* m_DXGIAdapter; // The DXGI adapter object for the D3D11 device - IDXGIOutput** m_DXGIOutputArray; // The array of output obj for the D3D11 adapter obj - UINT m_DXGIOutputArraySize; // Number of elements in m_D3D11OutputArray - IDXGISwapChain* m_DXGISwapChain; // the D3D11 swapchain - DXGI_SURFACE_DESC m_BackBufferSurfaceDescDXGI; // D3D11 back buffer surface description - bool m_RenderingOccluded; // Rendering is occluded by another window - bool m_DoNotStoreBufferSize; // Do not store the buffer size on WM_SIZE messages - - // D3D11 specific - bool m_D3D11Available; // if true, then D3D11 is available - ID3D11Device* m_D3D11Device; // the D3D11 rendering device - ID3D11DeviceContext* m_D3D11DeviceContext; // the D3D11 immediate device context - D3D_FEATURE_LEVEL m_D3D11FeatureLevel; // the D3D11 feature level that this device supports - ID3D11Texture2D* m_D3D11DepthStencil; // the D3D11 depth stencil texture (optional) - ID3D11DepthStencilView* m_D3D11DepthStencilView; // the D3D11 depth stencil view (optional) - ID3D11RenderTargetView* m_D3D11RenderTargetView; // the D3D11 render target view - ID3D11RasterizerState* m_D3D11RasterizerState; // the D3D11 Rasterizer state - - // General - HWND m_HWNDFocus; // the main app focus window - HWND m_HWNDDeviceFullScreen; // the main app device window in fullscreen mode - HWND m_HWNDDeviceWindowed; // the main app device window in windowed mode - HMONITOR m_AdapterMonitor; // the monitor of the adapter - HMENU m_Menu; // handle to menu - - UINT m_FullScreenBackBufferWidthAtModeChange; // back buffer size of fullscreen mode right before switching to windowed mode. Used to restore to same resolution when toggling back to fullscreen - UINT m_FullScreenBackBufferHeightAtModeChange; // back buffer size of fullscreen mode right before switching to windowed mode. Used to restore to same resolution when toggling back to fullscreen - UINT m_WindowBackBufferWidthAtModeChange; // back buffer size of windowed mode right before switching to fullscreen mode. Used to restore to same resolution when toggling back to windowed mode - UINT m_WindowBackBufferHeightAtModeChange; // back buffer size of windowed mode right before switching to fullscreen mode. Used to restore to same resolution when toggling back to windowed mode - DWORD m_WindowedStyleAtModeChange; // window style - WINDOWPLACEMENT m_WindowedPlacement;// record of windowed HWND position/show state/etc - bool m_TopmostWhileWindowed; // if true, the windowed HWND is topmost - bool m_Minimized; // if true, the HWND is minimized - bool m_Maximized; // if true, the HWND is maximized - bool m_MinimizedWhileFullscreen; // if true, the HWND is minimized due to a focus switch away when fullscreen mode - bool m_IgnoreSizeChange; // if true, DXUT won't reset the device upon HWND size change - - double m_Time; // current time in seconds - double m_AbsoluteTime; // absolute time in seconds - float m_ElapsedTime; // time elapsed since last frame - - HINSTANCE m_HInstance; // handle to the app instance - double m_LastStatsUpdateTime; // last time the stats were updated - DWORD m_LastStatsUpdateFrames; // frames count since last time the stats were updated - float m_FPS; // frames per second - int m_CurrentFrameNumber; // the current frame number - HHOOK m_KeyboardHook; // handle to keyboard hook - bool m_AllowShortcutKeysWhenFullscreen; // if true, when fullscreen enable shortcut keys (Windows keys, StickyKeys shortcut, ToggleKeys shortcut, FilterKeys shortcut) - bool m_AllowShortcutKeysWhenWindowed; // if true, when windowed enable shortcut keys (Windows keys, StickyKeys shortcut, ToggleKeys shortcut, FilterKeys shortcut) - bool m_AllowShortcutKeys; // if true, then shortcut keys are currently disabled (Windows key, etc) - bool m_CallDefWindowProc; // if true, DXUTStaticWndProc will call DefWindowProc for unhandled messages. Applications rendering to a dialog may need to set this to false. - STICKYKEYS m_StartupStickyKeys; // StickyKey settings upon startup so they can be restored later - TOGGLEKEYS m_StartupToggleKeys; // ToggleKey settings upon startup so they can be restored later - FILTERKEYS m_StartupFilterKeys; // FilterKey settings upon startup so they can be restored later - - bool m_AppSupportsD3D9Override; // true if app sets via DXUTSetD3DVersionSupport() - bool m_AppSupportsD3D11Override; // true if app sets via DXUTSetD3DVersionSupport() - bool m_UseD3DVersionOverride; // true if the app ever calls DXUTSetD3DVersionSupport() - - bool m_HandleEscape; // if true, then DXUT will handle escape to quit - bool m_HandleAltEnter; // if true, then DXUT will handle alt-enter to toggle fullscreen - bool m_HandlePause; // if true, then DXUT will handle pause to toggle time pausing - bool m_ShowMsgBoxOnError; // if true, then msgboxes are displayed upon errors - bool m_NoStats; // if true, then DXUTGetFrameStats() and DXUTGetDeviceStats() will return blank strings - bool m_ClipCursorWhenFullScreen; // if true, then DXUT will keep the cursor from going outside the window when full screen - bool m_ShowCursorWhenFullScreen; // if true, then DXUT will show a cursor when full screen - bool m_ConstantFrameTime; // if true, then elapsed frame time will always be 0.05f seconds which is good for debugging or automated capture - float m_TimePerFrame; // the constant time per frame in seconds, only valid if m_ConstantFrameTime==true - bool m_WireframeMode; // if true, then D3DRS_FILLMODE==D3DFILL_WIREFRAME else D3DRS_FILLMODE==D3DFILL_SOLID - bool m_AutoChangeAdapter; // if true, then the adapter will automatically change if the window is different monitor - bool m_WindowCreatedWithDefaultPositions; // if true, then CW_USEDEFAULT was used and the window should be moved to the right adapter - int m_ExitCode; // the exit code to be returned to the command line - - bool m_DXUTInited; // if true, then DXUTInit() has succeeded - bool m_WindowCreated; // if true, then DXUTCreateWindow() or DXUTSetWindow() has succeeded - bool m_DeviceCreated; // if true, then DXUTCreateDevice() or DXUTSetD3D*Device() has succeeded - - bool m_DXUTInitCalled; // if true, then DXUTInit() was called - bool m_WindowCreateCalled; // if true, then DXUTCreateWindow() or DXUTSetWindow() was called - bool m_DeviceCreateCalled; // if true, then DXUTCreateDevice() or DXUTSetD3D*Device() was called - - bool m_DeviceObjectsCreated; // if true, then DeviceCreated callback has been called (if non-NULL) - bool m_DeviceObjectsReset; // if true, then DeviceReset callback has been called (if non-NULL) - bool m_InsideDeviceCallback; // if true, then the framework is inside an app device callback - bool m_InsideMainloop; // if true, then the framework is inside the main loop - bool m_Active; // if true, then the app is the active top level window - bool m_TimePaused; // if true, then time is paused - bool m_RenderingPaused; // if true, then rendering is paused - int m_PauseRenderingCount; // pause rendering ref count - int m_PauseTimeCount; // pause time ref count - bool m_DeviceLost; // if true, then the device is lost and needs to be reset - bool m_NotifyOnMouseMove; // if true, include WM_MOUSEMOVE in mousecallback - bool m_Automation; // if true, automation is enabled - bool m_InSizeMove; // if true, app is inside a WM_ENTERSIZEMOVE - UINT m_TimerLastID; // last ID of the DXUT timer - bool m_MessageWhenD3D11NotAvailable; - - D3D_FEATURE_LEVEL m_OverrideForceFeatureLevel; // if != -1, then overrid to use a featurelevel - WCHAR m_ScreenShotName[256]; // command line screen shot name - bool m_SaveScreenShot; // command line save screen shot - bool m_ExitAfterScreenShot; // command line exit after screen shot - - int m_OverrideForceAPI; // if != -1, then override to use this Direct3D API version - int m_OverrideAdapterOrdinal; // if != -1, then override to use this adapter ordinal - bool m_OverrideWindowed; // if true, then force to start windowed - int m_OverrideOutput; // if != -1, then override to use the particular output on the adapter - bool m_OverrideFullScreen; // if true, then force to start full screen - int m_OverrideStartX; // if != -1, then override to this X position of the window - int m_OverrideStartY; // if != -1, then override to this Y position of the window - int m_OverrideWidth; // if != 0, then override to this width - int m_OverrideHeight; // if != 0, then override to this height - bool m_OverrideForceHAL; // if true, then force to HAL device (failing if one doesn't exist) - bool m_OverrideForceREF; // if true, then force to REF device (failing if one doesn't exist) - bool m_OverrideConstantFrameTime; // if true, then force to constant frame time - float m_OverrideConstantTimePerFrame; // the constant time per frame in seconds if m_OverrideConstantFrameTime==true - int m_OverrideQuitAfterFrame; // if != 0, then it will force the app to quit after that frame - int m_OverrideForceVsync; // if == 0, then it will force the app to use D3DPRESENT_INTERVAL_IMMEDIATE, if == 1 force use of D3DPRESENT_INTERVAL_DEFAULT - bool m_OverrideRelaunchMCE; // if true, then force relaunch of MCE at exit - bool m_AppCalledWasKeyPressed; // true if the app ever calls DXUTWasKeyPressed(). Allows for optimzation - bool m_ReleasingSwapChain; // if true, the app is releasing its swapchain - bool m_IsInGammaCorrectMode; // Tell DXUTRes and DXUTMisc that we are in gamma correct mode - - LPDXUTCALLBACKMODIFYDEVICESETTINGS m_ModifyDeviceSettingsFunc; // modify Direct3D device settings callback - LPDXUTCALLBACKDEVICEREMOVED m_DeviceRemovedFunc; // Direct3D device removed callback - LPDXUTCALLBACKFRAMEMOVE m_FrameMoveFunc; // frame move callback - LPDXUTCALLBACKKEYBOARD m_KeyboardFunc; // keyboard callback - LPDXUTCALLBACKMOUSE m_MouseFunc; // mouse callback - LPDXUTCALLBACKMSGPROC m_WindowMsgFunc; // window messages callback - - LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE m_IsD3D9DeviceAcceptableFunc; // D3D9 is device acceptable callback - LPDXUTCALLBACKD3D9DEVICECREATED m_D3D9DeviceCreatedFunc; // D3D9 device created callback - LPDXUTCALLBACKD3D9DEVICERESET m_D3D9DeviceResetFunc; // D3D9 device reset callback - LPDXUTCALLBACKD3D9DEVICELOST m_D3D9DeviceLostFunc; // D3D9 device lost callback - LPDXUTCALLBACKD3D9DEVICEDESTROYED m_D3D9DeviceDestroyedFunc; // D3D9 device destroyed callback - LPDXUTCALLBACKD3D9FRAMERENDER m_D3D9FrameRenderFunc; // D3D9 frame render callback - - LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE m_IsD3D11DeviceAcceptableFunc; // D3D11 is device acceptable callback - LPDXUTCALLBACKD3D11DEVICECREATED m_D3D11DeviceCreatedFunc; // D3D11 device created callback - LPDXUTCALLBACKD3D11SWAPCHAINRESIZED m_D3D11SwapChainResizedFunc; // D3D11 SwapChain reset callback - LPDXUTCALLBACKD3D11SWAPCHAINRELEASING m_D3D11SwapChainReleasingFunc; // D3D11 SwapChain lost callback - LPDXUTCALLBACKD3D11DEVICEDESTROYED m_D3D11DeviceDestroyedFunc; // D3D11 device destroyed callback - LPDXUTCALLBACKD3D11FRAMERENDER m_D3D11FrameRenderFunc; // D3D11 frame render callback - - - void* m_ModifyDeviceSettingsFuncUserContext; // user context for modify Direct3D device settings callback - void* m_DeviceRemovedFuncUserContext; // user context for Direct3D device removed callback - void* m_FrameMoveFuncUserContext; // user context for frame move callback - void* m_KeyboardFuncUserContext; // user context for keyboard callback - void* m_MouseFuncUserContext; // user context for mouse callback - void* m_WindowMsgFuncUserContext; // user context for window messages callback - - void* m_IsD3D9DeviceAcceptableFuncUserContext; // user context for is D3D9 device acceptable callback - void* m_D3D9DeviceCreatedFuncUserContext; // user context for D3D9 device created callback - void* m_D3D9DeviceResetFuncUserContext; // user context for D3D9 device reset callback - void* m_D3D9DeviceLostFuncUserContext; // user context for D3D9 device lost callback - void* m_D3D9DeviceDestroyedFuncUserContext; // user context for D3D9 device destroyed callback - void* m_D3D9FrameRenderFuncUserContext; // user context for D3D9 frame render callback - - void* m_IsD3D11DeviceAcceptableFuncUserContext; // user context for is D3D11 device acceptable callback - void* m_D3D11DeviceCreatedFuncUserContext; // user context for D3D11 device created callback - void* m_D3D11SwapChainResizedFuncUserContext; // user context for D3D11 SwapChain resized callback - void* m_D3D11SwapChainReleasingFuncUserContext; // user context for D3D11 SwapChain releasing callback - void* m_D3D11DeviceDestroyedFuncUserContext; // user context for D3D11 device destroyed callback - void* m_D3D11FrameRenderFuncUserContext; // user context for D3D11 frame render callback - - bool m_Keys[256]; // array of key state - bool m_LastKeys[256]; // array of last key state - bool m_MouseButtons[5]; // array of mouse states - - CGrowableArray* m_TimerList; // list of DXUT_TIMER structs - WCHAR m_StaticFrameStats[256]; // static part of frames stats - WCHAR m_FPSStats[64]; // fps stats - WCHAR m_FrameStats[256]; // frame stats (fps, width, etc) - WCHAR m_DeviceStats[256]; // device stats (description, device type, etc) - WCHAR m_WindowTitle[256]; // window title - }; - - STATE m_state; - -public: - DXUTState() { Create(); } - ~DXUTState() { Destroy(); } - - void Create() - { - g_bThreadSafe = true; - InitializeCriticalSectionAndSpinCount( &g_cs, 1000 ); - - ZeroMemory( &m_state, sizeof( STATE ) ); - m_state.m_OverrideStartX = -1; - m_state.m_OverrideStartY = -1; - m_state.m_OverrideForceFeatureLevel = (D3D_FEATURE_LEVEL)0; - m_state.m_ScreenShotName[0] = 0; - m_state.m_SaveScreenShot = false; - m_state.m_ExitAfterScreenShot = false; - m_state.m_OverrideForceAPI = -1; - m_state.m_OverrideAdapterOrdinal = -1; - m_state.m_OverrideOutput = -1; - m_state.m_OverrideForceVsync = -1; - m_state.m_AutoChangeAdapter = true; - m_state.m_ShowMsgBoxOnError = true; - m_state.m_AllowShortcutKeysWhenWindowed = true; - m_state.m_Active = true; - m_state.m_CallDefWindowProc = true; - m_state.m_HandleEscape = true; - m_state.m_HandleAltEnter = true; - m_state.m_HandlePause = true; - m_state.m_IsInGammaCorrectMode = true; - m_state.m_FPS = 1.0f; - m_state.m_MessageWhenD3D11NotAvailable = true; - } - - void Destroy() - { - SAFE_DELETE( m_state.m_TimerList ); - DXUTShutdown(); - DeleteCriticalSection( &g_cs ); - } - - // Macros to define access functions for thread safe access into m_state - GET_SET_ACCESSOR( DXUTDeviceSettings*, CurrentDeviceSettings ); - - // D3D9 specific - GET_SET_ACCESSOR( IDirect3D9*, D3D9 ); - GET_SET_ACCESSOR( IDirect3DDevice9*, D3D9Device ); - GETP_SETP_ACCESSOR( D3DSURFACE_DESC, BackBufferSurfaceDesc9 ); - GETP_SETP_ACCESSOR( D3DCAPS9, Caps ); - - // D3D11 specific - GET_SET_ACCESSOR( IDXGIFactory1*, DXGIFactory ); - GET_SET_ACCESSOR( IDXGIAdapter1*, DXGIAdapter ); - GET_SET_ACCESSOR( IDXGIOutput**, DXGIOutputArray ); - GET_SET_ACCESSOR( UINT, DXGIOutputArraySize ); - GET_SET_ACCESSOR( IDXGISwapChain*, DXGISwapChain ); - GETP_SETP_ACCESSOR( DXGI_SURFACE_DESC, BackBufferSurfaceDescDXGI ); - GET_SET_ACCESSOR( bool, RenderingOccluded ); - GET_SET_ACCESSOR( bool, DoNotStoreBufferSize ); - - // D3D11 specific - GET_SET_ACCESSOR( bool, D3D11Available ); - GET_SET_ACCESSOR( ID3D11Device*, D3D11Device ); - GET_SET_ACCESSOR( ID3D11DeviceContext*, D3D11DeviceContext ); - GET_SET_ACCESSOR( D3D_FEATURE_LEVEL, D3D11FeatureLevel ); - GET_SET_ACCESSOR( ID3D11Texture2D*, D3D11DepthStencil ); - GET_SET_ACCESSOR( ID3D11DepthStencilView*, D3D11DepthStencilView ); - GET_SET_ACCESSOR( ID3D11RenderTargetView*, D3D11RenderTargetView ); - GET_SET_ACCESSOR( ID3D11RasterizerState*, D3D11RasterizerState ); - - - GET_SET_ACCESSOR( HWND, HWNDFocus ); - GET_SET_ACCESSOR( HWND, HWNDDeviceFullScreen ); - GET_SET_ACCESSOR( HWND, HWNDDeviceWindowed ); - GET_SET_ACCESSOR( HMONITOR, AdapterMonitor ); - GET_SET_ACCESSOR( HMENU, Menu ); - - - GET_SET_ACCESSOR( UINT, FullScreenBackBufferWidthAtModeChange ); - GET_SET_ACCESSOR( UINT, FullScreenBackBufferHeightAtModeChange ); - GET_SET_ACCESSOR( UINT, WindowBackBufferWidthAtModeChange ); - GET_SET_ACCESSOR( UINT, WindowBackBufferHeightAtModeChange ); - GETP_SETP_ACCESSOR( WINDOWPLACEMENT, WindowedPlacement ); - GET_SET_ACCESSOR( DWORD, WindowedStyleAtModeChange ); - GET_SET_ACCESSOR( bool, TopmostWhileWindowed ); - GET_SET_ACCESSOR( bool, Minimized ); - GET_SET_ACCESSOR( bool, Maximized ); - GET_SET_ACCESSOR( bool, MinimizedWhileFullscreen ); - GET_SET_ACCESSOR( bool, IgnoreSizeChange ); - - GET_SET_ACCESSOR( double, Time ); - GET_SET_ACCESSOR( double, AbsoluteTime ); - GET_SET_ACCESSOR( float, ElapsedTime ); - - GET_SET_ACCESSOR( HINSTANCE, HInstance ); - GET_SET_ACCESSOR( double, LastStatsUpdateTime ); - GET_SET_ACCESSOR( DWORD, LastStatsUpdateFrames ); - GET_SET_ACCESSOR( float, FPS ); - GET_SET_ACCESSOR( int, CurrentFrameNumber ); - GET_SET_ACCESSOR( HHOOK, KeyboardHook ); - GET_SET_ACCESSOR( bool, AllowShortcutKeysWhenFullscreen ); - GET_SET_ACCESSOR( bool, AllowShortcutKeysWhenWindowed ); - GET_SET_ACCESSOR( bool, AllowShortcutKeys ); - GET_SET_ACCESSOR( bool, CallDefWindowProc ); - GET_SET_ACCESSOR( STICKYKEYS, StartupStickyKeys ); - GET_SET_ACCESSOR( TOGGLEKEYS, StartupToggleKeys ); - GET_SET_ACCESSOR( FILTERKEYS, StartupFilterKeys ); - - GET_SET_ACCESSOR( bool, AppSupportsD3D9Override ); - GET_SET_ACCESSOR( bool, AppSupportsD3D11Override ); - GET_SET_ACCESSOR( bool, UseD3DVersionOverride ); - - GET_SET_ACCESSOR( bool, HandleEscape ); - GET_SET_ACCESSOR( bool, HandleAltEnter ); - GET_SET_ACCESSOR( bool, HandlePause ); - GET_SET_ACCESSOR( bool, ShowMsgBoxOnError ); - GET_SET_ACCESSOR( bool, NoStats ); - GET_SET_ACCESSOR( bool, ClipCursorWhenFullScreen ); - GET_SET_ACCESSOR( bool, ShowCursorWhenFullScreen ); - GET_SET_ACCESSOR( bool, ConstantFrameTime ); - GET_SET_ACCESSOR( float, TimePerFrame ); - GET_SET_ACCESSOR( bool, WireframeMode ); - GET_SET_ACCESSOR( bool, AutoChangeAdapter ); - GET_SET_ACCESSOR( bool, WindowCreatedWithDefaultPositions ); - GET_SET_ACCESSOR( int, ExitCode ); - - GET_SET_ACCESSOR( bool, DXUTInited ); - GET_SET_ACCESSOR( bool, WindowCreated ); - GET_SET_ACCESSOR( bool, DeviceCreated ); - GET_SET_ACCESSOR( bool, DXUTInitCalled ); - GET_SET_ACCESSOR( bool, WindowCreateCalled ); - GET_SET_ACCESSOR( bool, DeviceCreateCalled ); - GET_SET_ACCESSOR( bool, InsideDeviceCallback ); - GET_SET_ACCESSOR( bool, InsideMainloop ); - GET_SET_ACCESSOR( bool, DeviceObjectsCreated ); - GET_SET_ACCESSOR( bool, DeviceObjectsReset ); - GET_SET_ACCESSOR( bool, Active ); - GET_SET_ACCESSOR( bool, RenderingPaused ); - GET_SET_ACCESSOR( bool, TimePaused ); - GET_SET_ACCESSOR( int, PauseRenderingCount ); - GET_SET_ACCESSOR( int, PauseTimeCount ); - GET_SET_ACCESSOR( bool, DeviceLost ); - GET_SET_ACCESSOR( bool, NotifyOnMouseMove ); - GET_SET_ACCESSOR( bool, Automation ); - GET_SET_ACCESSOR( bool, InSizeMove ); - GET_SET_ACCESSOR( UINT, TimerLastID ); - GET_SET_ACCESSOR( bool, MessageWhenD3D11NotAvailable ); - GET_SET_ACCESSOR( bool, AppCalledWasKeyPressed ); - - GET_SET_ACCESSOR( D3D_FEATURE_LEVEL, OverrideForceFeatureLevel ); - GET_ACCESSOR( WCHAR*, ScreenShotName ); - GET_SET_ACCESSOR( bool, SaveScreenShot ); - GET_SET_ACCESSOR( bool, ExitAfterScreenShot ); - - - GET_SET_ACCESSOR( int, OverrideForceAPI ); - GET_SET_ACCESSOR( int, OverrideAdapterOrdinal ); - GET_SET_ACCESSOR( bool, OverrideWindowed ); - GET_SET_ACCESSOR( int, OverrideOutput ); - GET_SET_ACCESSOR( bool, OverrideFullScreen ); - GET_SET_ACCESSOR( int, OverrideStartX ); - GET_SET_ACCESSOR( int, OverrideStartY ); - GET_SET_ACCESSOR( int, OverrideWidth ); - GET_SET_ACCESSOR( int, OverrideHeight ); - GET_SET_ACCESSOR( bool, OverrideForceHAL ); - GET_SET_ACCESSOR( bool, OverrideForceREF ); - GET_SET_ACCESSOR( bool, OverrideConstantFrameTime ); - GET_SET_ACCESSOR( float, OverrideConstantTimePerFrame ); - GET_SET_ACCESSOR( int, OverrideQuitAfterFrame ); - GET_SET_ACCESSOR( int, OverrideForceVsync ); - GET_SET_ACCESSOR( bool, OverrideRelaunchMCE ); - GET_SET_ACCESSOR( bool, ReleasingSwapChain ); - GET_SET_ACCESSOR( bool, IsInGammaCorrectMode ); - - GET_SET_ACCESSOR( LPDXUTCALLBACKMODIFYDEVICESETTINGS, ModifyDeviceSettingsFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKDEVICEREMOVED, DeviceRemovedFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKFRAMEMOVE, FrameMoveFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKKEYBOARD, KeyboardFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKMOUSE, MouseFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKMSGPROC, WindowMsgFunc ); - - GET_SET_ACCESSOR( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE, IsD3D9DeviceAcceptableFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D9DEVICECREATED, D3D9DeviceCreatedFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D9DEVICERESET, D3D9DeviceResetFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D9DEVICELOST, D3D9DeviceLostFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D9DEVICEDESTROYED, D3D9DeviceDestroyedFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D9FRAMERENDER, D3D9FrameRenderFunc ); - - GET_SET_ACCESSOR( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE, IsD3D11DeviceAcceptableFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D11DEVICECREATED, D3D11DeviceCreatedFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D11SWAPCHAINRESIZED, D3D11SwapChainResizedFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D11SWAPCHAINRELEASING, D3D11SwapChainReleasingFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D11DEVICEDESTROYED, D3D11DeviceDestroyedFunc ); - GET_SET_ACCESSOR( LPDXUTCALLBACKD3D11FRAMERENDER, D3D11FrameRenderFunc ); - - GET_SET_ACCESSOR( void*, ModifyDeviceSettingsFuncUserContext ); - GET_SET_ACCESSOR( void*, DeviceRemovedFuncUserContext ); - GET_SET_ACCESSOR( void*, FrameMoveFuncUserContext ); - GET_SET_ACCESSOR( void*, KeyboardFuncUserContext ); - GET_SET_ACCESSOR( void*, MouseFuncUserContext ); - GET_SET_ACCESSOR( void*, WindowMsgFuncUserContext ); - - GET_SET_ACCESSOR( void*, IsD3D9DeviceAcceptableFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D9DeviceCreatedFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D9DeviceResetFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D9DeviceLostFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D9DeviceDestroyedFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D9FrameRenderFuncUserContext ); - - GET_SET_ACCESSOR( void*, IsD3D11DeviceAcceptableFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D11DeviceCreatedFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D11DeviceDestroyedFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D11SwapChainResizedFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D11SwapChainReleasingFuncUserContext ); - GET_SET_ACCESSOR( void*, D3D11FrameRenderFuncUserContext ); - - GET_SET_ACCESSOR( CGrowableArray*, TimerList ); - GET_ACCESSOR( bool*, Keys ); - GET_ACCESSOR( bool*, LastKeys ); - GET_ACCESSOR( bool*, MouseButtons ); - GET_ACCESSOR( WCHAR*, StaticFrameStats ); - GET_ACCESSOR( WCHAR*, FPSStats ); - GET_ACCESSOR( WCHAR*, FrameStats ); - GET_ACCESSOR( WCHAR*, DeviceStats ); - GET_ACCESSOR( WCHAR*, WindowTitle ); -}; - - -//-------------------------------------------------------------------------------------- -// Global state -//-------------------------------------------------------------------------------------- -DXUTState* g_pDXUTState = NULL; - -HRESULT WINAPI DXUTCreateState() -{ - if( g_pDXUTState == NULL ) - { - g_pDXUTState = new DXUTState; - if( NULL == g_pDXUTState ) - return E_OUTOFMEMORY; - } - return S_OK; -} - -void WINAPI DXUTDestroyState() -{ - SAFE_DELETE( g_pDXUTState ); -} - -class DXUTMemoryHelper -{ -public: - DXUTMemoryHelper() { DXUTCreateState(); } - ~DXUTMemoryHelper() { DXUTDestroyState(); } -}; - - -DXUTState& GetDXUTState() -{ - // This class will auto create the memory when its first accessed and delete it after the program exits WinMain. - // However the application can also call DXUTCreateState() & DXUTDestroyState() independantly if its wants - static DXUTMemoryHelper memory; - - return *g_pDXUTState; -} - - -//-------------------------------------------------------------------------------------- -// Internal functions forward declarations -//-------------------------------------------------------------------------------------- -void DXUTParseCommandLine( __inout WCHAR* strCommandLine, - bool bIgnoreFirstCommand = true ); -bool DXUTIsNextArg( __inout WCHAR*& strCmdLine, - __inout WCHAR* strArg ); -bool DXUTGetCmdParam( __inout WCHAR*& strCmdLine, - __inout_ecount(MAX_PATH) WCHAR* strFlag ); -void DXUTAllowShortcutKeys( bool bAllowKeys ); -void DXUTUpdateStaticFrameStats(); -void DXUTUpdateFrameStats(); - -LRESULT CALLBACK DXUTStaticWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); -void DXUTHandleTimers(); -void DXUTDisplayErrorMessage( HRESULT hr ); -int DXUTMapButtonToArrayIndex( BYTE vButton ); - -HRESULT DXUTChangeDevice( DXUTDeviceSettings* pNewDeviceSettings, - IDirect3DDevice9* pd3d9DeviceFromApp, - ID3D11Device* pd3d11DeviceFromApp, - bool bForceRecreate, - bool bClipWindowToSingleAdapter ); - -bool DXUTCanDeviceBeReset( DXUTDeviceSettings* pOldDeviceSettings, - DXUTDeviceSettings* pNewDeviceSettings, - IDirect3DDevice9* pd3d9DeviceFromApp, - ID3D11Device* pd3d11DeviceFromApp ); - - -HRESULT DXUTDelayLoadDXGI(); -HRESULT DXUTDelayLoadD3D9(); -HRESULT DXUTSnapDeviceSettingsToEnumDevice( DXUTDeviceSettings* pDeviceSettings, bool forceEnum, D3D_FEATURE_LEVEL forceFL = D3D_FEATURE_LEVEL(0) ); -void DXUTUpdateDeviceSettingsWithOverrides( DXUTDeviceSettings* pDeviceSettings ); -void DXUTCheckForDXGIFullScreenSwitch(); -void DXUTResizeDXGIBuffers( UINT Width, UINT Height, BOOL bFullscreen ); -void DXUTCheckForDXGIBufferChange(); -void DXUTCheckForWindowSizeChange(); -void DXUTCheckForWindowChangingMonitors(); -void DXUTCleanup3DEnvironment( bool bReleaseSettings ); -HMONITOR DXUTGetMonitorFromAdapter( DXUTDeviceSettings* pDeviceSettings ); -HRESULT DXUTGetAdapterOrdinalFromMonitor( HMONITOR hMonitor, UINT* pAdapterOrdinal ); -HRESULT DXUTGetOutputOrdinalFromMonitor( HMONITOR hMonitor, UINT* pOutputOrdinal ); -HRESULT DXUTHandleDeviceRemoved(); -void DXUTUpdateBackBufferDesc(); -void DXUTSetupCursor(); - -// Direct3D 9 -HRESULT DXUTCreate3DEnvironment9( IDirect3DDevice9* pd3dDeviceFromApp ); -HRESULT DXUTReset3DEnvironment9(); -void DXUTRender3DEnvironment9(); -void DXUTCleanup3DEnvironment9( bool bReleaseSettings = true ); -HRESULT DXUTSetD3D9DeviceCursor( IDirect3DDevice9* pd3dDevice, HCURSOR hCursor, bool bAddWatermark ); -void DXUTUpdateD3D9DeviceStats( D3DDEVTYPE DeviceType, DWORD BehaviorFlags, - D3DADAPTER_IDENTIFIER9* pAdapterIdentifier ); -HRESULT DXUTFindD3D9AdapterFormat( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, D3DFORMAT BackBufferFormat, - BOOL Windowed, D3DFORMAT* pAdapterFormat ); - -// Direct3D 11 -HRESULT DXUTCreateD3D11Views( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dDeviceContext, DXUTDeviceSettings* pDeviceSettings ); -HRESULT DXUTCreate3DEnvironment11( ID3D11Device* pd3dDeviceFromApp ); -HRESULT DXUTReset3DEnvironment11(); -void DXUTRender3DEnvironment11(); -void DXUTCleanup3DEnvironment11( bool bReleaseSettings = true ); -void DXUTUpdateD3D11DeviceStats( D3D_DRIVER_TYPE DeviceType, DXGI_ADAPTER_DESC* pAdapterDesc ); - - -//-------------------------------------------------------------------------------------- -// Internal helper functions -//-------------------------------------------------------------------------------------- -bool DXUTIsD3D9( DXUTDeviceSettings* pDeviceSettings ) { return (pDeviceSettings && pDeviceSettings->ver == DXUT_D3D9_DEVICE ); }; -bool DXUTIsCurrentDeviceD3D9() { DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); return DXUTIsD3D9(pDeviceSettings); }; -UINT DXUTGetBackBufferWidthFromDS( DXUTDeviceSettings* pNewDeviceSettings ) -{ - if( DXUTIsD3D9( pNewDeviceSettings ) ) - return pNewDeviceSettings->d3d9.pp.BackBufferWidth; - else - return pNewDeviceSettings->d3d11.sd.BufferDesc.Width; -} -UINT DXUTGetBackBufferHeightFromDS( DXUTDeviceSettings* pNewDeviceSettings ) -{ - if( DXUTIsD3D9(pNewDeviceSettings) ) - return pNewDeviceSettings->d3d9.pp.BackBufferHeight; - else - return pNewDeviceSettings->d3d11.sd.BufferDesc.Height; -} -bool DXUTGetIsWindowedFromDS( DXUTDeviceSettings* pNewDeviceSettings ) -{ - if (!pNewDeviceSettings) - return true; - - if( DXUTIsD3D9(pNewDeviceSettings) ) - return pNewDeviceSettings->d3d9.pp.Windowed ? true : false; - else - return pNewDeviceSettings->d3d11.sd.Windowed ? true : false; -} - - -//-------------------------------------------------------------------------------------- -// External state access functions -//-------------------------------------------------------------------------------------- -BOOL WINAPI DXUTGetMSAASwapChainCreated() { - DXUTDeviceSettings *psettings = GetDXUTState().GetCurrentDeviceSettings(); - if (psettings->ver == DXUT_D3D11_DEVICE) { - return psettings->d3d11.sd.SampleDesc.Count > 1; - }else if (psettings->ver == DXUT_D3D9_DEVICE) { - return (psettings->d3d9.pp.MultiSampleType >= D3DMULTISAMPLE_2_SAMPLES); - } - else return false; -} -IDirect3DDevice9* WINAPI DXUTGetD3D9Device() { return GetDXUTState().GetD3D9Device(); } -const D3DSURFACE_DESC* WINAPI DXUTGetD3D9BackBufferSurfaceDesc() { return GetDXUTState().GetBackBufferSurfaceDesc9(); } -const D3DCAPS9* WINAPI DXUTGetD3D9DeviceCaps() { return GetDXUTState().GetCaps(); } -ID3D11Device* WINAPI DXUTGetD3D11Device() { return GetDXUTState().GetD3D11Device(); } -D3D_FEATURE_LEVEL WINAPI DXUTGetD3D11DeviceFeatureLevel() { return GetDXUTState().GetD3D11FeatureLevel(); } -ID3D11DeviceContext* WINAPI DXUTGetD3D11DeviceContext() { return GetDXUTState().GetD3D11DeviceContext(); } -IDXGISwapChain* WINAPI DXUTGetDXGISwapChain() { return GetDXUTState().GetDXGISwapChain(); } -ID3D11RenderTargetView* WINAPI DXUTGetD3D11RenderTargetView() { return GetDXUTState().GetD3D11RenderTargetView(); } -ID3D11DepthStencilView* WINAPI DXUTGetD3D11DepthStencilView() { return GetDXUTState().GetD3D11DepthStencilView(); } -const DXGI_SURFACE_DESC* WINAPI DXUTGetDXGIBackBufferSurfaceDesc() { return GetDXUTState().GetBackBufferSurfaceDescDXGI(); } -HINSTANCE WINAPI DXUTGetHINSTANCE() { return GetDXUTState().GetHInstance(); } -HWND WINAPI DXUTGetHWND() { return DXUTIsWindowed() ? GetDXUTState().GetHWNDDeviceWindowed() : GetDXUTState().GetHWNDDeviceFullScreen(); } -HWND WINAPI DXUTGetHWNDFocus() { return GetDXUTState().GetHWNDFocus(); } -HWND WINAPI DXUTGetHWNDDeviceFullScreen() { return GetDXUTState().GetHWNDDeviceFullScreen(); } -HWND WINAPI DXUTGetHWNDDeviceWindowed() { return GetDXUTState().GetHWNDDeviceWindowed(); } -RECT WINAPI DXUTGetWindowClientRect() { RECT rc; GetClientRect( DXUTGetHWND(), &rc ); return rc; } -LONG WINAPI DXUTGetWindowWidth() { RECT rc = DXUTGetWindowClientRect(); return ((LONG)rc.right - rc.left); } -LONG WINAPI DXUTGetWindowHeight() { RECT rc = DXUTGetWindowClientRect(); return ((LONG)rc.bottom - rc.top); } -RECT WINAPI DXUTGetWindowClientRectAtModeChange() { RECT rc = { 0, 0, GetDXUTState().GetWindowBackBufferWidthAtModeChange(), GetDXUTState().GetWindowBackBufferHeightAtModeChange() }; return rc; } -RECT WINAPI DXUTGetFullsceenClientRectAtModeChange() { RECT rc = { 0, 0, GetDXUTState().GetFullScreenBackBufferWidthAtModeChange(), GetDXUTState().GetFullScreenBackBufferHeightAtModeChange() }; return rc; } -double WINAPI DXUTGetTime() { return GetDXUTState().GetTime(); } -float WINAPI DXUTGetElapsedTime() { return GetDXUTState().GetElapsedTime(); } -float WINAPI DXUTGetFPS() { return GetDXUTState().GetFPS(); } -LPCWSTR WINAPI DXUTGetWindowTitle() { return GetDXUTState().GetWindowTitle(); } -LPCWSTR WINAPI DXUTGetDeviceStats() { return GetDXUTState().GetDeviceStats(); } -bool WINAPI DXUTIsRenderingPaused() { return GetDXUTState().GetPauseRenderingCount() > 0; } -bool WINAPI DXUTIsTimePaused() { return GetDXUTState().GetPauseTimeCount() > 0; } -bool WINAPI DXUTIsActive() { return GetDXUTState().GetActive(); } -int WINAPI DXUTGetExitCode() { return GetDXUTState().GetExitCode(); } -bool WINAPI DXUTGetShowMsgBoxOnError() { return GetDXUTState().GetShowMsgBoxOnError(); } -bool WINAPI DXUTGetAutomation() { return GetDXUTState().GetAutomation(); } -bool WINAPI DXUTIsWindowed() { return DXUTGetIsWindowedFromDS( GetDXUTState().GetCurrentDeviceSettings() ); } -bool WINAPI DXUTIsInGammaCorrectMode() { return GetDXUTState().GetIsInGammaCorrectMode(); } -IDirect3D9* WINAPI DXUTGetD3D9Object() { DXUTDelayLoadD3D9(); return GetDXUTState().GetD3D9(); } -IDXGIFactory1* WINAPI DXUTGetDXGIFactory() { DXUTDelayLoadDXGI(); return GetDXUTState().GetDXGIFactory(); } -bool WINAPI DXUTIsD3D11Available() { DXUTDelayLoadDXGI(); return GetDXUTState().GetD3D11Available(); } -bool WINAPI DXUTIsAppRenderingWithD3D9() { return (GetDXUTState().GetD3D9Device() != NULL); } -bool WINAPI DXUTIsAppRenderingWithD3D11() { return (GetDXUTState().GetD3D11Device() != NULL); } - -//-------------------------------------------------------------------------------------- -// External callback setup functions -//-------------------------------------------------------------------------------------- - -// General callbacks -void WINAPI DXUTSetCallbackDeviceChanging( LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallback, void* pUserContext ) { GetDXUTState().SetModifyDeviceSettingsFunc( pCallback ); GetDXUTState().SetModifyDeviceSettingsFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackDeviceRemoved( LPDXUTCALLBACKDEVICEREMOVED pCallback, void* pUserContext ) { GetDXUTState().SetDeviceRemovedFunc( pCallback ); GetDXUTState().SetDeviceRemovedFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackFrameMove( LPDXUTCALLBACKFRAMEMOVE pCallback, void* pUserContext ) { GetDXUTState().SetFrameMoveFunc( pCallback ); GetDXUTState().SetFrameMoveFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackKeyboard( LPDXUTCALLBACKKEYBOARD pCallback, void* pUserContext ) { GetDXUTState().SetKeyboardFunc( pCallback ); GetDXUTState().SetKeyboardFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackMouse( LPDXUTCALLBACKMOUSE pCallback, bool bIncludeMouseMove, void* pUserContext ) { GetDXUTState().SetMouseFunc( pCallback ); GetDXUTState().SetNotifyOnMouseMove( bIncludeMouseMove ); GetDXUTState().SetMouseFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackMsgProc( LPDXUTCALLBACKMSGPROC pCallback, void* pUserContext ) { GetDXUTState().SetWindowMsgFunc( pCallback ); GetDXUTState().SetWindowMsgFuncUserContext( pUserContext ); } - -// Direct3D 9 callbacks -void WINAPI DXUTSetCallbackD3D9DeviceAcceptable( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE pCallback, void* pUserContext ) { GetDXUTState().SetIsD3D9DeviceAcceptableFunc( pCallback ); GetDXUTState().SetIsD3D9DeviceAcceptableFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D9DeviceCreated( LPDXUTCALLBACKD3D9DEVICECREATED pCallback, void* pUserContext ) { GetDXUTState().SetD3D9DeviceCreatedFunc( pCallback ); GetDXUTState().SetD3D9DeviceCreatedFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D9DeviceReset( LPDXUTCALLBACKD3D9DEVICERESET pCallback, void* pUserContext ) { GetDXUTState().SetD3D9DeviceResetFunc( pCallback ); GetDXUTState().SetD3D9DeviceResetFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D9DeviceLost( LPDXUTCALLBACKD3D9DEVICELOST pCallback, void* pUserContext ) { GetDXUTState().SetD3D9DeviceLostFunc( pCallback ); GetDXUTState().SetD3D9DeviceLostFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D9DeviceDestroyed( LPDXUTCALLBACKD3D9DEVICEDESTROYED pCallback, void* pUserContext ) { GetDXUTState().SetD3D9DeviceDestroyedFunc( pCallback ); GetDXUTState().SetD3D9DeviceDestroyedFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D9FrameRender( LPDXUTCALLBACKD3D9FRAMERENDER pCallback, void* pUserContext ) { GetDXUTState().SetD3D9FrameRenderFunc( pCallback ); GetDXUTState().SetD3D9FrameRenderFuncUserContext( pUserContext ); } -void DXUTGetCallbackD3D9DeviceAcceptable( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE* ppCallback, void** ppUserContext ) { *ppCallback = GetDXUTState().GetIsD3D9DeviceAcceptableFunc(); *ppUserContext = GetDXUTState().GetIsD3D9DeviceAcceptableFuncUserContext(); } - -// Direct3D 11 callbacks -void WINAPI DXUTSetCallbackD3D11DeviceAcceptable( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE pCallback, void* pUserContext ) { GetDXUTState().SetIsD3D11DeviceAcceptableFunc( pCallback ); GetDXUTState().SetIsD3D11DeviceAcceptableFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D11DeviceCreated( LPDXUTCALLBACKD3D11DEVICECREATED pCallback, void* pUserContext ) { GetDXUTState().SetD3D11DeviceCreatedFunc( pCallback ); GetDXUTState().SetD3D11DeviceCreatedFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D11SwapChainResized( LPDXUTCALLBACKD3D11SWAPCHAINRESIZED pCallback, void* pUserContext ) { GetDXUTState().SetD3D11SwapChainResizedFunc( pCallback ); GetDXUTState().SetD3D11SwapChainResizedFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D11FrameRender( LPDXUTCALLBACKD3D11FRAMERENDER pCallback, void* pUserContext ) { GetDXUTState().SetD3D11FrameRenderFunc( pCallback ); GetDXUTState().SetD3D11FrameRenderFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D11SwapChainReleasing( LPDXUTCALLBACKD3D11SWAPCHAINRELEASING pCallback, void* pUserContext ) { GetDXUTState().SetD3D11SwapChainReleasingFunc( pCallback ); GetDXUTState().SetD3D11SwapChainReleasingFuncUserContext( pUserContext ); } -void WINAPI DXUTSetCallbackD3D11DeviceDestroyed( LPDXUTCALLBACKD3D11DEVICEDESTROYED pCallback, void* pUserContext ) { GetDXUTState().SetD3D11DeviceDestroyedFunc( pCallback ); GetDXUTState().SetD3D11DeviceDestroyedFuncUserContext( pUserContext ); } -void DXUTGetCallbackD3D11DeviceAcceptable( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE* ppCallback, void** ppUserContext ) { *ppCallback = GetDXUTState().GetIsD3D11DeviceAcceptableFunc(); *ppUserContext = GetDXUTState().GetIsD3D11DeviceAcceptableFuncUserContext(); } - - -//-------------------------------------------------------------------------------------- -// Optionally parses the command line and sets if default hotkeys are handled -// -// Possible command line parameters are: -// -forcefeaturelevel:fl forces app to use a specified direct3D11 feature level -// -screenshotexit:filename save a screenshot to the filename.bmp and exit. -// -forceapi:# forces app to use specified Direct3D API version (fails if the application doesn't support this API or if no device is found) -// -adapter:# forces app to use this adapter # (fails if the adapter doesn't exist) -// -output:# [D3D11 only] forces app to use a particular output on the adapter (fails if the output doesn't exist) -// -windowed forces app to start windowed -// -fullscreen forces app to start full screen -// -forcehal forces app to use HAL (fails if HAL doesn't exist) -// -forceref forces app to use REF (fails if REF doesn't exist) -// -forcepurehwvp [D3D9 only] forces app to use pure HWVP (fails if device doesn't support it) -// -forcehwvp [D3D9 only] forces app to use HWVP (fails if device doesn't support it) -// -forceswvp [D3D9 only] forces app to use SWVP -// -forcevsync:# if # is 0, then vsync is disabled -// -width:# forces app to use # for width. for full screen, it will pick the closest possible supported mode -// -height:# forces app to use # for height. for full screen, it will pick the closest possible supported mode -// -startx:# forces app to use # for the x coord of the window position for windowed mode -// -starty:# forces app to use # for the y coord of the window position for windowed mode -// -constantframetime:# forces app to use constant frame time, where # is the time/frame in seconds -// -quitafterframe:x forces app to quit after # frames -// -noerrormsgboxes prevents the display of message boxes generated by the framework so the application can be run without user interaction -// -nostats prevents the display of the stats -// -relaunchmce re-launches the MCE UI after the app exits -// -automation a hint to other components that automation is active -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTInit( bool bParseCommandLine, - bool bShowMsgBoxOnError, - __in_opt WCHAR* strExtraCommandLineParams, - bool bThreadSafeDXUT ) -{ - g_bThreadSafe = bThreadSafeDXUT; - - GetDXUTState().SetDXUTInitCalled( true ); - - // Not always needed, but lets the app create GDI dialogs - InitCommonControls(); - - // Save the current sticky/toggle/filter key settings so DXUT can restore them later - STICKYKEYS sk = {sizeof(STICKYKEYS), 0}; - SystemParametersInfo(SPI_GETSTICKYKEYS, sizeof(STICKYKEYS), &sk, 0); - GetDXUTState().SetStartupStickyKeys( sk ); - - TOGGLEKEYS tk = {sizeof(TOGGLEKEYS), 0}; - SystemParametersInfo(SPI_GETTOGGLEKEYS, sizeof(TOGGLEKEYS), &tk, 0); - GetDXUTState().SetStartupToggleKeys( tk ); - - FILTERKEYS fk = {sizeof(FILTERKEYS), 0}; - SystemParametersInfo(SPI_GETFILTERKEYS, sizeof(FILTERKEYS), &fk, 0); - GetDXUTState().SetStartupFilterKeys( fk ); - - GetDXUTState().SetShowMsgBoxOnError( bShowMsgBoxOnError ); - - if( bParseCommandLine ) - DXUTParseCommandLine( GetCommandLine() ); - if( strExtraCommandLineParams ) - DXUTParseCommandLine( strExtraCommandLineParams, false ); - - // Reset the timer - DXUTGetGlobalTimer()->Reset(); - - GetDXUTState().SetDXUTInited( true ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Parses the command line for parameters. See DXUTInit() for list -//-------------------------------------------------------------------------------------- -void DXUTParseCommandLine(__inout WCHAR* strCommandLine, - bool bIgnoreFirstCommand ) -{ - WCHAR* strCmdLine; - WCHAR strFlag[MAX_PATH]; - - int nNumArgs; - LPWSTR* pstrArgList = CommandLineToArgvW( strCommandLine, &nNumArgs ); - int iArgStart = 0; - if( bIgnoreFirstCommand ) - iArgStart = 1; - for( int iArg = iArgStart; iArg < nNumArgs; iArg++ ) - { - strCmdLine = pstrArgList[iArg]; - - // Handle flag args - if( *strCmdLine == L'/' || *strCmdLine == L'-' ) - { - strCmdLine++; - - if( DXUTIsNextArg( strCmdLine, L"forcefeaturelevel" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - if (_wcsnicmp( strFlag, L"D3D_FEATURE_LEVEL_11_0", MAX_PATH) == 0 ) { - GetDXUTState().SetOverrideForceFeatureLevel(D3D_FEATURE_LEVEL_11_0); - }else if (_wcsnicmp( strFlag, L"D3D_FEATURE_LEVEL_10_1", MAX_PATH) == 0 ) { - GetDXUTState().SetOverrideForceFeatureLevel(D3D_FEATURE_LEVEL_10_1); - }else if (_wcsnicmp( strFlag, L"D3D_FEATURE_LEVEL_10_0", MAX_PATH) == 0 ) { - GetDXUTState().SetOverrideForceFeatureLevel(D3D_FEATURE_LEVEL_10_0); - }else if (_wcsnicmp( strFlag, L"D3D_FEATURE_LEVEL_9_3", MAX_PATH) == 0 ) { - GetDXUTState().SetOverrideForceFeatureLevel(D3D_FEATURE_LEVEL_9_3); - }else if (_wcsnicmp( strFlag, L"D3D_FEATURE_LEVEL_9_2", MAX_PATH) == 0 ) { - GetDXUTState().SetOverrideForceFeatureLevel(D3D_FEATURE_LEVEL_9_2); - }else if (_wcsnicmp( strFlag, L"D3D_FEATURE_LEVEL_9_1", MAX_PATH) == 0 ) { - GetDXUTState().SetOverrideForceFeatureLevel(D3D_FEATURE_LEVEL_9_1); - } - - - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"forceapi" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nAPIVersion = _wtoi( strFlag ); - GetDXUTState().SetOverrideForceAPI( nAPIVersion ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"adapter" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nAdapter = _wtoi( strFlag ); - GetDXUTState().SetOverrideAdapterOrdinal( nAdapter ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"windowed" ) ) - { - GetDXUTState().SetOverrideWindowed( true ); - continue; - } - - if( DXUTIsNextArg( strCmdLine, L"output" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int Output = _wtoi( strFlag ); - GetDXUTState().SetOverrideOutput( Output ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"fullscreen" ) ) - { - GetDXUTState().SetOverrideFullScreen( true ); - continue; - } - - if( DXUTIsNextArg( strCmdLine, L"forcehal" ) ) - { - GetDXUTState().SetOverrideForceHAL( true ); - continue; - } - if( DXUTIsNextArg( strCmdLine, L"screenshotexit" ) ) { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - GetDXUTState().SetExitAfterScreenShot( true ); - GetDXUTState().SetSaveScreenShot( true ); - swprintf_s( GetDXUTState().GetScreenShotName(), 256, L"%s.bmp", strFlag ); - continue; - } - } - if( DXUTIsNextArg( strCmdLine, L"forceref" ) ) - { - GetDXUTState().SetOverrideForceREF( true ); - continue; - } - - if( DXUTIsNextArg( strCmdLine, L"forcevsync" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nOn = _wtoi( strFlag ); - GetDXUTState().SetOverrideForceVsync( nOn ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"width" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nWidth = _wtoi( strFlag ); - GetDXUTState().SetOverrideWidth( nWidth ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"height" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nHeight = _wtoi( strFlag ); - GetDXUTState().SetOverrideHeight( nHeight ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"startx" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nX = _wtoi( strFlag ); - GetDXUTState().SetOverrideStartX( nX ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"starty" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nY = _wtoi( strFlag ); - GetDXUTState().SetOverrideStartY( nY ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"constantframetime" ) ) - { - float fTimePerFrame; - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - fTimePerFrame = ( float )wcstod( strFlag, NULL ); - else - fTimePerFrame = 0.0333f; - GetDXUTState().SetOverrideConstantFrameTime( true ); - GetDXUTState().SetOverrideConstantTimePerFrame( fTimePerFrame ); - DXUTSetConstantFrameTime( true, fTimePerFrame ); - continue; - } - - if( DXUTIsNextArg( strCmdLine, L"quitafterframe" ) ) - { - if( DXUTGetCmdParam( strCmdLine, strFlag ) ) - { - int nFrame = _wtoi( strFlag ); - GetDXUTState().SetOverrideQuitAfterFrame( nFrame ); - continue; - } - } - - if( DXUTIsNextArg( strCmdLine, L"noerrormsgboxes" ) ) - { - GetDXUTState().SetShowMsgBoxOnError( false ); - continue; - } - - if( DXUTIsNextArg( strCmdLine, L"nostats" ) ) - { - GetDXUTState().SetNoStats( true ); - continue; - } - - if( DXUTIsNextArg( strCmdLine, L"relaunchmce" ) ) - { - GetDXUTState().SetOverrideRelaunchMCE( true ); - continue; - } - - if( DXUTIsNextArg( strCmdLine, L"automation" ) ) - { - GetDXUTState().SetAutomation( true ); - continue; - } - } - - // Unrecognized flag - wcscpy_s( strFlag, 256, strCmdLine ); - WCHAR* strSpace = strFlag; - while( *strSpace && ( *strSpace > L' ' ) ) - strSpace++; - *strSpace = 0; - - DXUTOutputDebugString( L"Unrecognized flag: %s", strFlag ); - strCmdLine += wcslen( strFlag ); - } - - LocalFree( pstrArgList ); -} - - -//-------------------------------------------------------------------------------------- -// Helper function for DXUTParseCommandLine -//-------------------------------------------------------------------------------------- -bool DXUTIsNextArg( __inout WCHAR*& strCmdLine, - __inout WCHAR* strArg ) -{ - int nArgLen = ( int )wcslen( strArg ); - int nCmdLen = ( int )wcslen( strCmdLine ); - - if( nCmdLen >= nArgLen && - _wcsnicmp( strCmdLine, strArg, nArgLen ) == 0 && - ( strCmdLine[nArgLen] == 0 || strCmdLine[nArgLen] == L':' ) ) - { - strCmdLine += nArgLen; - return true; - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -// Helper function for DXUTParseCommandLine. Updates strCmdLine and strFlag -// Example: if strCmdLine=="-width:1024 -forceref" -// then after: strCmdLine==" -forceref" and strFlag=="1024" -//-------------------------------------------------------------------------------------- -bool DXUTGetCmdParam( __inout WCHAR*& strCmdLine, - __inout_ecount(MAX_PATH) WCHAR* strFlag ) -{ - if( *strCmdLine == L':' ) - { - strCmdLine++; // Skip ':' - - // Place NULL terminator in strFlag after current token - wcscpy_s( strFlag, 256, strCmdLine ); - WCHAR* strSpace = strFlag; - while( *strSpace && ( *strSpace > L' ' ) ) - strSpace++; - *strSpace = 0; - - // Update strCmdLine - strCmdLine += wcslen( strFlag ); - return true; - } - else - { - strFlag[0] = 0; - return false; - } -} - - -//-------------------------------------------------------------------------------------- -// Creates a window with the specified window title, icon, menu, and -// starting position. If DXUTInit() has not already been called, it will -// call it with the default parameters. Instead of calling this, you can -// call DXUTSetWindow() to use an existing window. -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateWindow( const WCHAR* strWindowTitle, HINSTANCE hInstance, - HICON hIcon, HMENU hMenu, int x, int y ) -{ - HRESULT hr; - - // Not allowed to call this from inside the device callbacks - if( GetDXUTState().GetInsideDeviceCallback() ) - return DXUT_ERR_MSGBOX( L"DXUTCreateWindow", E_FAIL ); - - GetDXUTState().SetWindowCreateCalled( true ); - - if( !GetDXUTState().GetDXUTInited() ) - { - // If DXUTInit() was already called and failed, then fail. - // DXUTInit() must first succeed for this function to succeed - if( GetDXUTState().GetDXUTInitCalled() ) - return E_FAIL; - - // If DXUTInit() hasn't been called, then automatically call it - // with default params - hr = DXUTInit(); - if( FAILED( hr ) ) - return hr; - } - - if( DXUTGetHWNDFocus() == NULL ) - { - if( hInstance == NULL ) - hInstance = ( HINSTANCE )GetModuleHandle( NULL ); - GetDXUTState().SetHInstance( hInstance ); - - WCHAR szExePath[MAX_PATH]; - GetModuleFileName( NULL, szExePath, MAX_PATH ); - if( hIcon == NULL ) // If the icon is NULL, then use the first one found in the exe - hIcon = ExtractIcon( hInstance, szExePath, 0 ); - - // Register the windows class - WNDCLASS wndClass; - wndClass.style = CS_DBLCLKS; - wndClass.lpfnWndProc = DXUTStaticWndProc; - wndClass.cbClsExtra = 0; - wndClass.cbWndExtra = 0; - wndClass.hInstance = hInstance; - wndClass.hIcon = hIcon; - wndClass.hCursor = LoadCursor( NULL, IDC_ARROW ); - wndClass.hbrBackground = ( HBRUSH )GetStockObject( BLACK_BRUSH ); - wndClass.lpszMenuName = NULL; - wndClass.lpszClassName = L"Direct3DWindowClass"; - - if( !RegisterClass( &wndClass ) ) - { - DWORD dwError = GetLastError(); - if( dwError != ERROR_CLASS_ALREADY_EXISTS ) - return DXUT_ERR_MSGBOX( L"RegisterClass", HRESULT_FROM_WIN32(dwError) ); - } - - // Override the window's initial & size position if there were cmd line args - if( GetDXUTState().GetOverrideStartX() != -1 ) - x = GetDXUTState().GetOverrideStartX(); - if( GetDXUTState().GetOverrideStartY() != -1 ) - y = GetDXUTState().GetOverrideStartY(); - - GetDXUTState().SetWindowCreatedWithDefaultPositions( false ); - if( x == CW_USEDEFAULT && y == CW_USEDEFAULT ) - GetDXUTState().SetWindowCreatedWithDefaultPositions( true ); - - // Find the window's initial size, but it might be changed later - int nDefaultWidth = 640; - int nDefaultHeight = 480; - if( GetDXUTState().GetOverrideWidth() != 0 ) - nDefaultWidth = GetDXUTState().GetOverrideWidth(); - if( GetDXUTState().GetOverrideHeight() != 0 ) - nDefaultHeight = GetDXUTState().GetOverrideHeight(); - - RECT rc; - SetRect( &rc, 0, 0, nDefaultWidth, nDefaultHeight ); - AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, ( hMenu != NULL ) ? true : false ); - - WCHAR* strCachedWindowTitle = GetDXUTState().GetWindowTitle(); - wcscpy_s( strCachedWindowTitle, 256, strWindowTitle ); - - // Create the render window - HWND hWnd = CreateWindow( L"Direct3DWindowClass", strWindowTitle, WS_OVERLAPPEDWINDOW, - x, y, ( rc.right - rc.left ), ( rc.bottom - rc.top ), 0, - hMenu, hInstance, 0 ); - if( hWnd == NULL ) - { - DWORD dwError = GetLastError(); - return DXUT_ERR_MSGBOX( L"CreateWindow", HRESULT_FROM_WIN32(dwError) ); - } - - GetDXUTState().SetWindowCreated( true ); - GetDXUTState().SetHWNDFocus( hWnd ); - GetDXUTState().SetHWNDDeviceFullScreen( hWnd ); - GetDXUTState().SetHWNDDeviceWindowed( hWnd ); - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Sets a previously created window for the framework to use. If DXUTInit() -// has not already been called, it will call it with the default parameters. -// Instead of calling this, you can call DXUTCreateWindow() to create a new window. -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTSetWindow( HWND hWndFocus, HWND hWndDeviceFullScreen, HWND hWndDeviceWindowed, bool bHandleMessages ) -{ - HRESULT hr; - - // Not allowed to call this from inside the device callbacks - if( GetDXUTState().GetInsideDeviceCallback() ) - return DXUT_ERR_MSGBOX( L"DXUTCreateWindow", E_FAIL ); - - GetDXUTState().SetWindowCreateCalled( true ); - - // To avoid confusion, we do not allow any HWND to be NULL here. The - // caller must pass in valid HWND for all three parameters. The same - // HWND may be used for more than one parameter. - if( hWndFocus == NULL || hWndDeviceFullScreen == NULL || hWndDeviceWindowed == NULL ) - return DXUT_ERR_MSGBOX( L"DXUTSetWindow", E_INVALIDARG ); - - // If subclassing the window, set the pointer to the local window procedure - if( bHandleMessages ) - { - // Switch window procedures -#ifdef _WIN64 - LONG_PTR nResult = SetWindowLongPtr( hWndFocus, GWLP_WNDPROC, (LONG_PTR)DXUTStaticWndProc ); -#else - LONG_PTR nResult = SetWindowLongPtr( hWndFocus, GWLP_WNDPROC, ( LONG )( LONG_PTR )DXUTStaticWndProc ); -#endif - - DWORD dwError = GetLastError(); - if( nResult == 0 ) - return DXUT_ERR_MSGBOX( L"SetWindowLongPtr", HRESULT_FROM_WIN32(dwError) ); - } - - if( !GetDXUTState().GetDXUTInited() ) - { - // If DXUTInit() was already called and failed, then fail. - // DXUTInit() must first succeed for this function to succeed - if( GetDXUTState().GetDXUTInitCalled() ) - return E_FAIL; - - // If DXUTInit() hasn't been called, then automatically call it - // with default params - hr = DXUTInit(); - if( FAILED( hr ) ) - return hr; - } - - WCHAR* strCachedWindowTitle = GetDXUTState().GetWindowTitle(); - GetWindowText( hWndFocus, strCachedWindowTitle, 255 ); - strCachedWindowTitle[255] = 0; - - HINSTANCE hInstance = ( HINSTANCE )( LONG_PTR )GetWindowLongPtr( hWndFocus, GWLP_HINSTANCE ); - GetDXUTState().SetHInstance( hInstance ); - GetDXUTState().SetWindowCreatedWithDefaultPositions( false ); - GetDXUTState().SetWindowCreated( true ); - GetDXUTState().SetHWNDFocus( hWndFocus ); - GetDXUTState().SetHWNDDeviceFullScreen( hWndDeviceFullScreen ); - GetDXUTState().SetHWNDDeviceWindowed( hWndDeviceWindowed ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Handles window messages -//-------------------------------------------------------------------------------------- -LRESULT CALLBACK DXUTStaticWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - - // Consolidate the keyboard messages and pass them to the app's keyboard callback - if( uMsg == WM_KEYDOWN || - uMsg == WM_SYSKEYDOWN || - uMsg == WM_KEYUP || - uMsg == WM_SYSKEYUP ) - { - bool bKeyDown = ( uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN ); - DWORD dwMask = ( 1 << 29 ); - bool bAltDown = ( ( lParam & dwMask ) != 0 ); - - bool* bKeys = GetDXUTState().GetKeys(); - bKeys[ ( BYTE )( wParam & 0xFF ) ] = bKeyDown; - - LPDXUTCALLBACKKEYBOARD pCallbackKeyboard = GetDXUTState().GetKeyboardFunc(); - if( pCallbackKeyboard ) - pCallbackKeyboard( ( UINT )wParam, bKeyDown, bAltDown, GetDXUTState().GetKeyboardFuncUserContext() ); - } - - // Consolidate the mouse button messages and pass them to the app's mouse callback - if( uMsg == WM_LBUTTONDOWN || - uMsg == WM_LBUTTONUP || - uMsg == WM_LBUTTONDBLCLK || - uMsg == WM_MBUTTONDOWN || - uMsg == WM_MBUTTONUP || - uMsg == WM_MBUTTONDBLCLK || - uMsg == WM_RBUTTONDOWN || - uMsg == WM_RBUTTONUP || - uMsg == WM_RBUTTONDBLCLK || - uMsg == WM_XBUTTONDOWN || - uMsg == WM_XBUTTONUP || - uMsg == WM_XBUTTONDBLCLK || - uMsg == WM_MOUSEWHEEL || - ( GetDXUTState().GetNotifyOnMouseMove() && uMsg == WM_MOUSEMOVE ) ) - { - int xPos = ( short )LOWORD( lParam ); - int yPos = ( short )HIWORD( lParam ); - - if( uMsg == WM_MOUSEWHEEL ) - { - // WM_MOUSEWHEEL passes screen mouse coords - // so convert them to client coords - POINT pt; - pt.x = xPos; pt.y = yPos; - ScreenToClient( hWnd, &pt ); - xPos = pt.x; yPos = pt.y; - } - - int nMouseWheelDelta = 0; - if( uMsg == WM_MOUSEWHEEL ) - nMouseWheelDelta = ( short )HIWORD( wParam ); - - int nMouseButtonState = LOWORD( wParam ); - bool bLeftButton = ( ( nMouseButtonState & MK_LBUTTON ) != 0 ); - bool bRightButton = ( ( nMouseButtonState & MK_RBUTTON ) != 0 ); - bool bMiddleButton = ( ( nMouseButtonState & MK_MBUTTON ) != 0 ); - bool bSideButton1 = ( ( nMouseButtonState & MK_XBUTTON1 ) != 0 ); - bool bSideButton2 = ( ( nMouseButtonState & MK_XBUTTON2 ) != 0 ); - - bool* bMouseButtons = GetDXUTState().GetMouseButtons(); - bMouseButtons[0] = bLeftButton; - bMouseButtons[1] = bMiddleButton; - bMouseButtons[2] = bRightButton; - bMouseButtons[3] = bSideButton1; - bMouseButtons[4] = bSideButton2; - - LPDXUTCALLBACKMOUSE pCallbackMouse = GetDXUTState().GetMouseFunc(); - if( pCallbackMouse ) - pCallbackMouse( bLeftButton, bRightButton, bMiddleButton, bSideButton1, bSideButton2, nMouseWheelDelta, - xPos, yPos, GetDXUTState().GetMouseFuncUserContext() ); - } - - // Pass all messages to the app's MsgProc callback, and don't - // process further messages if the apps says not to. - LPDXUTCALLBACKMSGPROC pCallbackMsgProc = GetDXUTState().GetWindowMsgFunc(); - if( pCallbackMsgProc ) - { - bool bNoFurtherProcessing = false; - LRESULT nResult = pCallbackMsgProc( hWnd, uMsg, wParam, lParam, &bNoFurtherProcessing, - GetDXUTState().GetWindowMsgFuncUserContext() ); - if( bNoFurtherProcessing ) - return nResult; - } - - switch( uMsg ) - { - case WM_PAINT: - { - - // Handle paint messages when the app is paused - if( DXUTIsRenderingPaused() && - GetDXUTState().GetDeviceObjectsCreated() && GetDXUTState().GetDeviceObjectsReset() ) - { - HRESULT hr; - double fTime = DXUTGetTime(); - float fElapsedTime = DXUTGetElapsedTime(); - - if( DXUTIsCurrentDeviceD3D9() ) - { - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - if( pd3dDevice ) - { - LPDXUTCALLBACKD3D9FRAMERENDER pCallbackFrameRender = GetDXUTState().GetD3D9FrameRenderFunc(); - if( pCallbackFrameRender != NULL ) - pCallbackFrameRender( pd3dDevice, fTime, fElapsedTime, - GetDXUTState().GetD3D9FrameRenderFuncUserContext() ); - - hr = pd3dDevice->Present( NULL, NULL, NULL, NULL ); - if( D3DERR_DEVICELOST == hr ) - { - GetDXUTState().SetDeviceLost( true ); - } - else if( D3DERR_DRIVERINTERNALERROR == hr ) - { - // When D3DERR_DRIVERINTERNALERROR is returned from Present(), - // the application can do one of the following: - // - // - End, with the pop-up window saying that the application cannot continue - // because of problems in the display adapter and that the user should - // contact the adapter manufacturer. - // - // - Attempt to restart by calling IDirect3DDevice9::Reset, which is essentially the same - // path as recovering from a lost device. If IDirect3DDevice9::Reset fails with - // D3DERR_DRIVERINTERNALERROR, the application should end immediately with the message - // that the user should contact the adapter manufacturer. - // - // The framework attempts the path of resetting the device - // - GetDXUTState().SetDeviceLost( true ); - } - } - } - else - { - ID3D11Device* pd3dDevice = DXUTGetD3D11Device(); - ID3D11DeviceContext *pDeferred = DXUTGetD3D11DeviceContext(); - if( pd3dDevice ) - { - LPDXUTCALLBACKD3D11FRAMERENDER pCallbackFrameRender = GetDXUTState().GetD3D11FrameRenderFunc(); - if( pCallbackFrameRender != NULL && - !GetDXUTState().GetRenderingOccluded() ) - { - pCallbackFrameRender( pd3dDevice,pDeferred, fTime, fElapsedTime, - GetDXUTState().GetD3D11FrameRenderFuncUserContext() ); - } - - DWORD dwFlags = 0; - if( GetDXUTState().GetRenderingOccluded() ) - dwFlags = DXGI_PRESENT_TEST; - else - dwFlags = GetDXUTState().GetCurrentDeviceSettings()->d3d11.PresentFlags; - - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - hr = pSwapChain->Present( 0, GetDXUTState().GetCurrentDeviceSettings()->d3d11.PresentFlags ); - if( DXGI_STATUS_OCCLUDED == hr ) - { - // There is a window covering our entire rendering area. - // Don't render until we're visible again. - GetDXUTState().SetRenderingOccluded( true ); - } - else if( SUCCEEDED( hr ) ) - { - if( GetDXUTState().GetRenderingOccluded() ) - { - // Now that we're no longer occluded - // allow us to render again - GetDXUTState().SetRenderingOccluded( false ); - } - } - } - } - } - break; - } - - case WM_SIZE: - - if( SIZE_MINIMIZED == wParam ) - { - DXUTPause( true, true ); // Pause while we're minimized - - GetDXUTState().SetMinimized( true ); - GetDXUTState().SetMaximized( false ); - } - else - { - RECT rcCurrentClient; - GetClientRect( DXUTGetHWND(), &rcCurrentClient ); - if( rcCurrentClient.top == 0 && rcCurrentClient.bottom == 0 ) - { - // Rapidly clicking the task bar to minimize and restore a window - // can cause a WM_SIZE message with SIZE_RESTORED when - // the window has actually become minimized due to rapid change - // so just ignore this message - } - else if( SIZE_MAXIMIZED == wParam ) - { - if( GetDXUTState().GetMinimized() ) - DXUTPause( false, false ); // Unpause since we're no longer minimized - GetDXUTState().SetMinimized( false ); - GetDXUTState().SetMaximized( true ); - DXUTCheckForWindowSizeChange(); - DXUTCheckForWindowChangingMonitors(); - } - else if( SIZE_RESTORED == wParam ) - { - //DXUTCheckForDXGIFullScreenSwitch(); - if( GetDXUTState().GetMaximized() ) - { - GetDXUTState().SetMaximized( false ); - DXUTCheckForWindowSizeChange(); - DXUTCheckForWindowChangingMonitors(); - } - else if( GetDXUTState().GetMinimized() ) - { - DXUTPause( false, false ); // Unpause since we're no longer minimized - GetDXUTState().SetMinimized( false ); - DXUTCheckForWindowSizeChange(); - DXUTCheckForWindowChangingMonitors(); - } - else if( GetDXUTState().GetInSizeMove() ) - { - // If we're neither maximized nor minimized, the window size - // is changing by the user dragging the window edges. In this - // case, we don't reset the device yet -- we wait until the - // user stops dragging, and a WM_EXITSIZEMOVE message comes. - } - else - { - // This WM_SIZE come from resizing the window via an API like SetWindowPos() so - // resize and reset the device now. - DXUTCheckForWindowSizeChange(); - DXUTCheckForWindowChangingMonitors(); - } - } - } - - break; - - - case WM_GETMINMAXINFO: - ( ( MINMAXINFO* )lParam )->ptMinTrackSize.x = DXUT_MIN_WINDOW_SIZE_X; - ( ( MINMAXINFO* )lParam )->ptMinTrackSize.y = DXUT_MIN_WINDOW_SIZE_Y; - break; - - case WM_ENTERSIZEMOVE: - // Halt frame movement while the app is sizing or moving - DXUTPause( true, true ); - GetDXUTState().SetInSizeMove( true ); - break; - - case WM_EXITSIZEMOVE: - DXUTPause( false, false ); - DXUTCheckForWindowSizeChange(); - DXUTCheckForWindowChangingMonitors(); - GetDXUTState().SetInSizeMove( false ); - break; - - case WM_MOUSEMOVE: - if( DXUTIsActive() && !DXUTIsWindowed() ) - { - if( DXUTIsCurrentDeviceD3D9() ) - { - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - if( pd3dDevice ) - { - POINT ptCursor; - GetCursorPos( &ptCursor ); - pd3dDevice->SetCursorPosition( ptCursor.x, ptCursor.y, 0 ); - } - } - else - { - // For D3D11, no processing is necessary. D3D11 cursor - // is handled in the traditional Windows manner. - } - } - break; - - case WM_SETCURSOR: - if( DXUTIsActive() && !DXUTIsWindowed() ) - { - if( DXUTIsCurrentDeviceD3D9() ) - { - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - if( pd3dDevice && GetDXUTState().GetShowCursorWhenFullScreen() ) - pd3dDevice->ShowCursor( true ); - } - else - { - if( !GetDXUTState().GetShowCursorWhenFullScreen() ) - SetCursor( NULL ); - } - - return true; // prevent Windows from setting cursor to window class cursor - } - break; - - case WM_ACTIVATEAPP: - if( wParam == TRUE && !DXUTIsActive() ) // Handle only if previously not active - { - GetDXUTState().SetActive( true ); - - // Enable controller rumble & input when activating app - DXUTEnableXInput( true ); - - // The GetMinimizedWhileFullscreen() varible is used instead of !DXUTIsWindowed() - // to handle the rare case toggling to windowed mode while the fullscreen application - // is minimized and thus making the pause count wrong - if( GetDXUTState().GetMinimizedWhileFullscreen() ) - { - if( DXUTIsD3D9( GetDXUTState().GetCurrentDeviceSettings() ) ) - DXUTPause( false, false ); // Unpause since we're no longer minimized - GetDXUTState().SetMinimizedWhileFullscreen( false ); - - if( DXUTIsAppRenderingWithD3D11() ) - { - DXUTToggleFullScreen(); - } - } - - // Upon returning to this app, potentially disable shortcut keys - // (Windows key, accessibility shortcuts) - DXUTAllowShortcutKeys( ( DXUTIsWindowed() ) ? GetDXUTState().GetAllowShortcutKeysWhenWindowed() : - GetDXUTState().GetAllowShortcutKeysWhenFullscreen() ); - - } - else if( wParam == FALSE && DXUTIsActive() ) // Handle only if previously active - { - GetDXUTState().SetActive( false ); - - // Disable any controller rumble & input when de-activating app - DXUTEnableXInput( false ); - - if( !DXUTIsWindowed() ) - { - // Going from full screen to a minimized state - ClipCursor( NULL ); // don't limit the cursor anymore - if( DXUTIsD3D9( GetDXUTState().GetCurrentDeviceSettings() ) ) - DXUTPause( true, true ); // Pause while we're minimized (take care not to pause twice by handling this message twice) - GetDXUTState().SetMinimizedWhileFullscreen( true ); - } - - // Restore shortcut keys (Windows key, accessibility shortcuts) to original state - // - // This is important to call here if the shortcuts are disabled, - // because if this is not done then the Windows key will continue to - // be disabled while this app is running which is very bad. - // If the app crashes, the Windows key will return to normal. - DXUTAllowShortcutKeys( true ); - } - break; - - case WM_ENTERMENULOOP: - // Pause the app when menus are displayed - DXUTPause( true, true ); - break; - - case WM_EXITMENULOOP: - DXUTPause( false, false ); - break; - - case WM_MENUCHAR: - // A menu is active and the user presses a key that does not correspond to any mnemonic or accelerator key - // So just ignore and don't beep - return MAKELRESULT( 0, MNC_CLOSE ); - break; - - case WM_NCHITTEST: - // Prevent the user from selecting the menu in full screen mode - if( !DXUTIsWindowed() ) - return HTCLIENT; - break; - - case WM_POWERBROADCAST: - switch( wParam ) - { -#ifndef PBT_APMQUERYSUSPEND -#define PBT_APMQUERYSUSPEND 0x0000 -#endif - case PBT_APMQUERYSUSPEND: - // At this point, the app should save any data for open - // network connections, files, etc., and prepare to go into - // a suspended mode. The app can use the MsgProc callback - // to handle this if desired. - return true; - -#ifndef PBT_APMRESUMESUSPEND -#define PBT_APMRESUMESUSPEND 0x0007 -#endif - case PBT_APMRESUMESUSPEND: - // At this point, the app should recover any data, network - // connections, files, etc., and resume running from when - // the app was suspended. The app can use the MsgProc callback - // to handle this if desired. - - // QPC may lose consistency when suspending, so reset the timer - // upon resume. - DXUTGetGlobalTimer()->Reset(); - GetDXUTState().SetLastStatsUpdateTime( 0 ); - return true; - } - break; - - case WM_SYSCOMMAND: - // Prevent moving/sizing in full screen mode - switch( ( wParam & 0xFFF0 ) ) - { - case SC_MOVE: - case SC_SIZE: - case SC_MAXIMIZE: - case SC_KEYMENU: - if( !DXUTIsWindowed() ) - return 0; - break; - } - break; - - case WM_SYSKEYDOWN: - { - switch( wParam ) - { - case VK_RETURN: - { - if( GetDXUTState().GetHandleAltEnter() && DXUTIsAppRenderingWithD3D9() ) - { - // Toggle full screen upon alt-enter - DWORD dwMask = ( 1 << 29 ); - if( ( lParam & dwMask ) != 0 ) // Alt is down also - { - // Toggle the full screen/window mode - DXUTPause( true, true ); - DXUTToggleFullScreen(); - DXUTPause( false, false ); - return 0; - } - } - - } - } - break; - } - - case WM_KEYDOWN: - { - switch( wParam ) - { - case VK_ESCAPE: - { - if( GetDXUTState().GetHandleEscape() ) - SendMessage( hWnd, WM_CLOSE, 0, 0 ); - break; - } - - case VK_PAUSE: - { - if( GetDXUTState().GetHandlePause() ) - { - bool bTimePaused = DXUTIsTimePaused(); - bTimePaused = !bTimePaused; - if( bTimePaused ) - DXUTPause( true, false ); - else - DXUTPause( false, false ); - } - break; - } - } - break; - } - - case WM_CLOSE: - { - HMENU hMenu; - hMenu = GetMenu( hWnd ); - if( hMenu != NULL ) - DestroyMenu( hMenu ); - DestroyWindow( hWnd ); - UnregisterClass( L"Direct3DWindowClass", NULL ); - GetDXUTState().SetHWNDFocus( NULL ); - GetDXUTState().SetHWNDDeviceFullScreen( NULL ); - GetDXUTState().SetHWNDDeviceWindowed( NULL ); - return 0; - } - - case WM_DESTROY: - PostQuitMessage( 0 ); - break; - } - - // Don't allow the F10 key to act as a shortcut to the menu bar - // by not passing these messages to the DefWindowProc only when - // there's no menu present - if( !GetDXUTState().GetCallDefWindowProc() || GetDXUTState().GetMenu() == NULL && - ( uMsg == WM_SYSKEYDOWN || uMsg == WM_SYSKEYUP ) && wParam == VK_F10 ) - return 0; - else - return DefWindowProc( hWnd, uMsg, wParam, lParam ); -} - - -//-------------------------------------------------------------------------------------- -// Handles app's message loop and rendering when idle. If DXUTCreateDevice() or DXUTSetD3D*Device() -// has not already been called, it will call DXUTCreateWindow() with the default parameters. -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTMainLoop( HACCEL hAccel ) -{ - HRESULT hr; - - // Not allowed to call this from inside the device callbacks or reenter - if( GetDXUTState().GetInsideDeviceCallback() || GetDXUTState().GetInsideMainloop() ) - { - if( ( GetDXUTState().GetExitCode() == 0 ) || ( GetDXUTState().GetExitCode() == 10 ) ) - GetDXUTState().SetExitCode( 1 ); - return DXUT_ERR_MSGBOX( L"DXUTMainLoop", E_FAIL ); - } - - GetDXUTState().SetInsideMainloop( true ); - - // If DXUTCreateDevice() or DXUTSetD3D*Device() has not already been called, - // then call DXUTCreateDevice() with the default parameters. - if( !GetDXUTState().GetDeviceCreated() ) - { - if( GetDXUTState().GetDeviceCreateCalled() ) - { - if( ( GetDXUTState().GetExitCode() == 0 ) || ( GetDXUTState().GetExitCode() == 10 ) ) - GetDXUTState().SetExitCode( 1 ); - return E_FAIL; // DXUTCreateDevice() must first succeed for this function to succeed - } - - hr = DXUTCreateDevice(D3D_FEATURE_LEVEL_10_0, true, 640, 480); - if( FAILED( hr ) ) - { - if( ( GetDXUTState().GetExitCode() == 0 ) || ( GetDXUTState().GetExitCode() == 10 ) ) - GetDXUTState().SetExitCode( 1 ); - return hr; - } - } - - HWND hWnd = DXUTGetHWND(); - - // DXUTInit() must have been called and succeeded for this function to proceed - // DXUTCreateWindow() or DXUTSetWindow() must have been called and succeeded for this function to proceed - // DXUTCreateDevice() or DXUTCreateDeviceFromSettings() or DXUTSetD3D*Device() must have been called and succeeded for this function to proceed - if( !GetDXUTState().GetDXUTInited() || !GetDXUTState().GetWindowCreated() || !GetDXUTState().GetDeviceCreated() ) - { - if( ( GetDXUTState().GetExitCode() == 0 ) || ( GetDXUTState().GetExitCode() == 10 ) ) - GetDXUTState().SetExitCode( 1 ); - return DXUT_ERR_MSGBOX( L"DXUTMainLoop", E_FAIL ); - } - - // Now we're ready to receive and process Windows messages. - bool bGotMsg; - MSG msg; - msg.message = WM_NULL; - PeekMessage( &msg, NULL, 0U, 0U, PM_NOREMOVE ); - - while( WM_QUIT != msg.message ) - { - // Use PeekMessage() so we can use idle time to render the scene. - bGotMsg = ( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) != 0 ); - - if( bGotMsg ) - { - // Translate and dispatch the message - if( hAccel == NULL || hWnd == NULL || - 0 == TranslateAccelerator( hWnd, hAccel, &msg ) ) - { - TranslateMessage( &msg ); - DispatchMessage( &msg ); - } - } - else - { - // Render a frame during idle time (no messages are waiting) - DXUTRender3DEnvironment(); - } - } - - // Cleanup the accelerator table - if( hAccel != NULL ) - DestroyAcceleratorTable( hAccel ); - - GetDXUTState().SetInsideMainloop( false ); - - return S_OK; -} - - -//====================================================================================== -//====================================================================================== -// Direct3D section -//====================================================================================== -//====================================================================================== -HRESULT WINAPI DXUTCreateDevice(D3D_FEATURE_LEVEL reqFL, bool bWindowed, int nSuggestedWidth, int nSuggestedHeight) { - HRESULT hr = S_OK; - - - // Not allowed to call this from inside the device callbacks - if( GetDXUTState().GetInsideDeviceCallback() ) - return DXUT_ERR_MSGBOX( L"DXUTCreateWindow", E_FAIL ); - - GetDXUTState().SetDeviceCreateCalled( true ); - - // If DXUTCreateWindow() or DXUTSetWindow() has not already been called, - // then call DXUTCreateWindow() with the default parameters. - if( !GetDXUTState().GetWindowCreated() ) - { - // If DXUTCreateWindow() or DXUTSetWindow() was already called and failed, then fail. - // DXUTCreateWindow() or DXUTSetWindow() must first succeed for this function to succeed - if( GetDXUTState().GetWindowCreateCalled() ) - return E_FAIL; - - // If DXUTCreateWindow() or DXUTSetWindow() hasn't been called, then - // automatically call DXUTCreateWindow() with default params - hr = DXUTCreateWindow(); - if( FAILED( hr ) ) - return hr; - } - - DXUTDeviceSettings deviceSettings ; - DXUTApplyDefaultDeviceSettings(&deviceSettings); - deviceSettings.MinimumFeatureLevel = reqFL; - deviceSettings.d3d11.sd.BufferDesc.Width = nSuggestedWidth; - deviceSettings.d3d11.sd.BufferDesc.Height = nSuggestedHeight; - - deviceSettings.d3d9.pp.BackBufferWidth= nSuggestedWidth; - deviceSettings.d3d9.pp.BackBufferHeight = nSuggestedHeight; - - - //deviceSettings.d3d11.sd.BufferDesc.Width = 480; - - bool bAppSupportsD3D9 = DXUTDoesAppSupportD3D9(); - bool bAppSupportsD3D11 = DXUTDoesAppSupportD3D11(); - - if (bAppSupportsD3D11) { - deviceSettings.ver = DXUT_D3D11_DEVICE; - } - else if (bAppSupportsD3D9) { - deviceSettings.ver = DXUT_D3D9_DEVICE; - } - - DXUTUpdateDeviceSettingsWithOverrides(&deviceSettings); - - - // Change to a Direct3D device created from the new device settings. - // If there is an existing device, then either reset or recreated the scene - hr = DXUTChangeDevice( &deviceSettings, NULL, NULL, false, true ); - - if ( hr == DXUTERR_NODIRECT3D11 && GetDXUTState().GetMessageWhenD3D11NotAvailable() ) { - - OSVERSIONINFOEX osv; - memset( &osv, 0, sizeof(osv) ); - osv.dwOSVersionInfoSize = sizeof(osv); - GetVersionEx( (LPOSVERSIONINFO)&osv ); - - - if ( ( osv.dwMajorVersion > 6 ) - || ( osv.dwMajorVersion == 6 && osv.dwMinorVersion >= 1 ) - || ( osv.dwMajorVersion == 6 && osv.dwMinorVersion == 0 && osv.dwBuildNumber > 6002 ) ) - { - - MessageBox( 0, L"Direct3D 11 components were not found.", L"Error", MB_ICONEXCLAMATION ); - // This should not happen, but is here for completeness as the system could be - // corrupted or some future OS version could pull D3D11.DLL for some reason - } - else if ( osv.dwMajorVersion == 6 && osv.dwMinorVersion == 0 && osv.dwBuildNumber == 6002 ) - { - - MessageBox( 0, L"Direct3D 11 components were not found, but are available for"\ - L" this version of Windows.\n"\ - L"For details see Microsoft Knowledge Base Article #971644\n"\ - L"http://go.microsoft.com/fwlink/?LinkId=160189", L"Error", MB_ICONEXCLAMATION ); - - } - else if ( osv.dwMajorVersion == 6 && osv.dwMinorVersion == 0 ) - { - MessageBox( 0, L"Direct3D 11 components were not found. Please install the latest Service Pack.\n"\ - L"For details see Microsoft Knowledge Base Article #935791\n"\ - L"http://support.microsoft.com/kb/935791/", L"Error", MB_ICONEXCLAMATION ); - - } - else - { - MessageBox( 0, L"Direct3D 11 is not supported on this OS.", L"Error", MB_ICONEXCLAMATION ); - } - - - - } - - - if( FAILED( hr ) ) - return hr; - - return hr; -} - -//-------------------------------------------------------------------------------------- -// Tells the framework to change to a device created from the passed in device settings -// If DXUTCreateWindow() has not already been called, it will call it with the -// default parameters. Instead of calling this, you can call DXUTCreateDevice() -// or DXUTSetD3D*Device() -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateDeviceFromSettings( DXUTDeviceSettings* pDeviceSettings, bool bPreserveInput, - bool bClipWindowToSingleAdapter ) -{ - HRESULT hr; - - GetDXUTState().SetDeviceCreateCalled( true ); - - // If DXUTCreateWindow() or DXUTSetWindow() has not already been called, - // then call DXUTCreateWindow() with the default parameters. - if( !GetDXUTState().GetWindowCreated() ) - { - // If DXUTCreateWindow() or DXUTSetWindow() was already called and failed, then fail. - // DXUTCreateWindow() or DXUTSetWindow() must first succeed for this function to succeed - if( GetDXUTState().GetWindowCreateCalled() ) - return E_FAIL; - - // If DXUTCreateWindow() or DXUTSetWindow() hasn't been called, then - // automatically call DXUTCreateWindow() with default params - hr = DXUTCreateWindow(); - if( FAILED( hr ) ) - return hr; - } - DXUTUpdateDeviceSettingsWithOverrides(pDeviceSettings); - - - // Change to a Direct3D device created from the new device settings. - // If there is an existing device, then either reset or recreate the scene - hr = DXUTChangeDevice( pDeviceSettings, NULL, NULL, false, bClipWindowToSingleAdapter ); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// All device changes are sent to this function. It looks at the current -// device (if any) and the new device and determines the best course of action. It -// also remembers and restores the window state if toggling between windowed and fullscreen -// as well as sets the proper window and system state for switching to the new device. -//-------------------------------------------------------------------------------------- -HRESULT DXUTChangeDevice( DXUTDeviceSettings* pNewDeviceSettings, - IDirect3DDevice9* pd3d9DeviceFromApp, - ID3D11Device* pd3d11DeviceFromApp, - bool bForceRecreate, bool bClipWindowToSingleAdapter ) -{ - HRESULT hr = S_OK; - DXUTDeviceSettings* pOldDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - - if( !pNewDeviceSettings ) - return S_FALSE; - - - - if ( pNewDeviceSettings->ver == DXUT_D3D11_DEVICE ) { - hr = DXUTDelayLoadDXGI(); - } - - - if ( pNewDeviceSettings->ver == DXUT_D3D9_DEVICE || - ( FAILED( hr ) && DXUTDoesAppSupportD3D9() ) ) { - hr = DXUTDelayLoadD3D9(); - pNewDeviceSettings->ver = DXUT_D3D9_DEVICE; - if ( !FAILED( hr ) ) { - pNewDeviceSettings->ver = DXUT_D3D9_DEVICE; - } - } - - if( FAILED( hr ) ) - return hr; - - // Make a copy of the pNewDeviceSettings on the heap - DXUTDeviceSettings* pNewDeviceSettingsOnHeap = new DXUTDeviceSettings; - if( pNewDeviceSettingsOnHeap == NULL ) - return E_OUTOFMEMORY; - memcpy( pNewDeviceSettingsOnHeap, pNewDeviceSettings, sizeof( DXUTDeviceSettings ) ); - pNewDeviceSettings = pNewDeviceSettingsOnHeap; - - - GetDXUTState().SetCurrentDeviceSettings(pNewDeviceSettingsOnHeap); - DXUTSnapDeviceSettingsToEnumDevice(pNewDeviceSettingsOnHeap, false); - - if( FAILED( hr ) ) // the call will fail if no valid devices were found - { - DXUTDisplayErrorMessage( hr ); - return DXUT_ERR( L"DXUTFindValidDeviceSettings", hr ); - } - - // If the ModifyDeviceSettings callback is non-NULL, then call it to let the app - // change the settings or reject the device change by returning false. - LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallbackModifyDeviceSettings = GetDXUTState().GetModifyDeviceSettingsFunc(); - if( pCallbackModifyDeviceSettings && pd3d9DeviceFromApp == NULL ) - { - bool bContinue = pCallbackModifyDeviceSettings( pNewDeviceSettings, - GetDXUTState().GetModifyDeviceSettingsFuncUserContext() ); - if( !bContinue ) - { - // The app rejected the device change by returning false, so just use the current device if there is one. - if( pOldDeviceSettings == NULL ) - DXUTDisplayErrorMessage( DXUTERR_NOCOMPATIBLEDEVICES ); - SAFE_DELETE( pNewDeviceSettings ); - return E_ABORT; - } - if( GetDXUTState().GetD3D9() == NULL && GetDXUTState().GetDXGIFactory() == NULL ) // if DXUTShutdown() was called in the modify callback, just return - { - SAFE_DELETE( pNewDeviceSettings ); - return S_FALSE; - } - DXUTSnapDeviceSettingsToEnumDevice(pNewDeviceSettingsOnHeap, false); // modify the app specified settings to the closed enumerated settigns - - if( FAILED( hr ) ) // the call will fail if no valid devices were found - { - DXUTDisplayErrorMessage( hr ); - return DXUT_ERR( L"DXUTFindValidDeviceSettings", hr ); - } - - } - - GetDXUTState().SetCurrentDeviceSettings( pNewDeviceSettingsOnHeap ); - - DXUTPause( true, true ); - - // When a WM_SIZE message is received, it calls DXUTCheckForWindowSizeChange(). - // A WM_SIZE message might be sent when adjusting the window, so tell - // DXUTCheckForWindowSizeChange() to ignore size changes temporarily - if( DXUTIsCurrentDeviceD3D9() ) - GetDXUTState().SetIgnoreSizeChange( true ); - - - // Take note if the backbuffer width & height are 0 now as they will change after pd3dDevice->Reset() - bool bKeepCurrentWindowSize = false; - if( DXUTGetBackBufferWidthFromDS( pNewDeviceSettings ) == 0 && - DXUTGetBackBufferHeightFromDS( pNewDeviceSettings ) == 0 ) - bKeepCurrentWindowSize = true; - - ////////////////////////// - // Before reset - ///////////////////////// - - // If we are using D3D9, adjust window style when switching from windowed to fullscreen and - // vice versa. Note that this is not necessary in D3D11 because DXGI handles this. If both - // DXUT and DXGI handle this, incorrect behavior would result. - if( DXUTIsCurrentDeviceD3D9() ) - { - if( DXUTGetIsWindowedFromDS( pNewDeviceSettings ) ) - { - // Going to windowed mode - - if( pOldDeviceSettings && !DXUTGetIsWindowedFromDS( pOldDeviceSettings ) ) - { - // Going from fullscreen -> windowed - GetDXUTState().SetFullScreenBackBufferWidthAtModeChange( DXUTGetBackBufferWidthFromDS( - pOldDeviceSettings ) ); - GetDXUTState().SetFullScreenBackBufferHeightAtModeChange( DXUTGetBackBufferHeightFromDS( - pOldDeviceSettings ) ); - - // Restore windowed mode style - SetWindowLong( DXUTGetHWNDDeviceWindowed(), GWL_STYLE, GetDXUTState().GetWindowedStyleAtModeChange() ); - } - - // If different device windows are used for windowed mode and fullscreen mode, - // hide the fullscreen window so that it doesn't obscure the screen. - if( DXUTGetHWNDDeviceFullScreen() != DXUTGetHWNDDeviceWindowed() ) - ShowWindow( DXUTGetHWNDDeviceFullScreen(), SW_HIDE ); - - // If using the same window for windowed and fullscreen mode, reattach menu if one exists - if( DXUTGetHWNDDeviceFullScreen() == DXUTGetHWNDDeviceWindowed() ) - { - if( GetDXUTState().GetMenu() != NULL ) - SetMenu( DXUTGetHWNDDeviceWindowed(), GetDXUTState().GetMenu() ); - } - } - else - { - // Going to fullscreen mode - - if( pOldDeviceSettings == NULL || ( pOldDeviceSettings && DXUTGetIsWindowedFromDS( pOldDeviceSettings ) ) ) - { - // Transistioning to full screen mode from a standard window so - // save current window position/size/style now in case the user toggles to windowed mode later - WINDOWPLACEMENT* pwp = GetDXUTState().GetWindowedPlacement(); - ZeroMemory( pwp, sizeof( WINDOWPLACEMENT ) ); - pwp->length = sizeof( WINDOWPLACEMENT ); - GetWindowPlacement( DXUTGetHWNDDeviceWindowed(), pwp ); - bool bIsTopmost = ( ( GetWindowLong( DXUTGetHWNDDeviceWindowed(), - GWL_EXSTYLE ) & WS_EX_TOPMOST ) != 0 ); - GetDXUTState().SetTopmostWhileWindowed( bIsTopmost ); - DWORD dwStyle = GetWindowLong( DXUTGetHWNDDeviceWindowed(), GWL_STYLE ); - dwStyle &= ~WS_MAXIMIZE & ~WS_MINIMIZE; // remove minimize/maximize style - GetDXUTState().SetWindowedStyleAtModeChange( dwStyle ); - if( pOldDeviceSettings ) - { - GetDXUTState().SetWindowBackBufferWidthAtModeChange( DXUTGetBackBufferWidthFromDS( - pOldDeviceSettings ) ); - GetDXUTState().SetWindowBackBufferHeightAtModeChange( DXUTGetBackBufferHeightFromDS( - pOldDeviceSettings ) ); - } - } - - // Hide the window to avoid animation of blank windows - ShowWindow( DXUTGetHWNDDeviceFullScreen(), SW_HIDE ); - - // Set FS window style - SetWindowLong( DXUTGetHWNDDeviceFullScreen(), GWL_STYLE, WS_POPUP | WS_SYSMENU ); - - // If using the same window for windowed and fullscreen mode, save and remove menu - if( DXUTGetHWNDDeviceFullScreen() == DXUTGetHWNDDeviceWindowed() ) - { - HMENU hMenu = GetMenu( DXUTGetHWNDDeviceFullScreen() ); - GetDXUTState().SetMenu( hMenu ); - SetMenu( DXUTGetHWNDDeviceFullScreen(), NULL ); - } - - WINDOWPLACEMENT wpFullscreen; - ZeroMemory( &wpFullscreen, sizeof( WINDOWPLACEMENT ) ); - wpFullscreen.length = sizeof( WINDOWPLACEMENT ); - GetWindowPlacement( DXUTGetHWNDDeviceFullScreen(), &wpFullscreen ); - if( ( wpFullscreen.flags & WPF_RESTORETOMAXIMIZED ) != 0 ) - { - // Restore the window to normal if the window was maximized then minimized. This causes the - // WPF_RESTORETOMAXIMIZED flag to be set which will cause SW_RESTORE to restore the - // window from minimized to maxmized which isn't what we want - wpFullscreen.flags &= ~WPF_RESTORETOMAXIMIZED; - wpFullscreen.showCmd = SW_RESTORE; - SetWindowPlacement( DXUTGetHWNDDeviceFullScreen(), &wpFullscreen ); - } - } - } - else - { - if( DXUTGetIsWindowedFromDS( pNewDeviceSettings ) ) - { - // Going to windowed mode - if( pOldDeviceSettings && !DXUTGetIsWindowedFromDS( pOldDeviceSettings ) ) - { - // Going from fullscreen -> windowed - GetDXUTState().SetFullScreenBackBufferWidthAtModeChange( DXUTGetBackBufferWidthFromDS( - pOldDeviceSettings ) ); - GetDXUTState().SetFullScreenBackBufferHeightAtModeChange( DXUTGetBackBufferHeightFromDS( - pOldDeviceSettings ) ); - //DXGI should handle this, but in the case where switching from d3d9 full screen to windowed d3d11 it does not. - SetWindowLong( DXUTGetHWNDDeviceWindowed(), GWL_STYLE, GetDXUTState().GetWindowedStyleAtModeChange() ); - - } - } - else - { - // Going to fullscreen mode - if( pOldDeviceSettings == NULL || ( pOldDeviceSettings && DXUTGetIsWindowedFromDS( pOldDeviceSettings ) ) ) - { - // Transistioning to full screen mode from a standard window so - if( pOldDeviceSettings ) - { - GetDXUTState().SetWindowBackBufferWidthAtModeChange( DXUTGetBackBufferWidthFromDS( - pOldDeviceSettings ) ); - GetDXUTState().SetWindowBackBufferHeightAtModeChange( DXUTGetBackBufferHeightFromDS( - pOldDeviceSettings ) ); - } - } - } - } - - if( pOldDeviceSettings ) - DXUTCleanup3DEnvironment( false ); - - // Create the D3D device and call the app's device callbacks - if( DXUTIsD3D9( pNewDeviceSettings ) ) { - hr = DXUTCreate3DEnvironment9( pd3d9DeviceFromApp ); - } - else { - hr = DXUTCreate3DEnvironment11( pd3d11DeviceFromApp ); - } - if( FAILED( hr ) ) - { - SAFE_DELETE( pOldDeviceSettings ); - DXUTCleanup3DEnvironment( true ); - DXUTDisplayErrorMessage( hr ); - DXUTPause( false, false ); - GetDXUTState().SetIgnoreSizeChange( false ); - return hr; - } - - // Enable/disable StickKeys shortcut, ToggleKeys shortcut, FilterKeys shortcut, and Windows key - // to prevent accidental task switching - DXUTAllowShortcutKeys( ( DXUTGetIsWindowedFromDS( pNewDeviceSettings ) ) ? - GetDXUTState().GetAllowShortcutKeysWhenWindowed() : - GetDXUTState().GetAllowShortcutKeysWhenFullscreen() ); - - HMONITOR hAdapterMonitor = DXUTGetMonitorFromAdapter( pNewDeviceSettings ); - GetDXUTState().SetAdapterMonitor( hAdapterMonitor ); - - // Update the device stats text - DXUTUpdateStaticFrameStats(); - - if( pOldDeviceSettings && !DXUTGetIsWindowedFromDS( pOldDeviceSettings ) && - DXUTGetIsWindowedFromDS( pNewDeviceSettings ) ) - { - // Going from fullscreen -> windowed - - // Restore the show state, and positions/size of the window to what it was - // It is important to adjust the window size - // after resetting the device rather than beforehand to ensure - // that the monitor resolution is correct and does not limit the size of the new window. - WINDOWPLACEMENT* pwp = GetDXUTState().GetWindowedPlacement(); - SetWindowPlacement( DXUTGetHWNDDeviceWindowed(), pwp ); - - // Also restore the z-order of window to previous state - HWND hWndInsertAfter = GetDXUTState().GetTopmostWhileWindowed() ? HWND_TOPMOST : HWND_NOTOPMOST; - SetWindowPos( DXUTGetHWNDDeviceWindowed(), hWndInsertAfter, 0, 0, 0, 0, - SWP_NOMOVE | SWP_NOREDRAW | SWP_NOSIZE ); - } - - // Check to see if the window needs to be resized. - // Handle cases where the window is minimized and maxmimized as well. - - bool bNeedToResize = false; - if( DXUTGetIsWindowedFromDS( pNewDeviceSettings ) && // only resize if in windowed mode - !bKeepCurrentWindowSize ) // only resize if pp.BackbufferWidth/Height were not 0 - { - UINT nClientWidth; - UINT nClientHeight; - if( IsIconic( DXUTGetHWNDDeviceWindowed() ) ) - { - // Window is currently minimized. To tell if it needs to resize, - // get the client rect of window when its restored the - // hard way using GetWindowPlacement() - WINDOWPLACEMENT wp; - ZeroMemory( &wp, sizeof( WINDOWPLACEMENT ) ); - wp.length = sizeof( WINDOWPLACEMENT ); - GetWindowPlacement( DXUTGetHWNDDeviceWindowed(), &wp ); - - if( ( wp.flags & WPF_RESTORETOMAXIMIZED ) != 0 && wp.showCmd == SW_SHOWMINIMIZED ) - { - // WPF_RESTORETOMAXIMIZED means that when the window is restored it will - // be maximized. So maximize the window temporarily to get the client rect - // when the window is maximized. GetSystemMetrics( SM_CXMAXIMIZED ) will give this - // information if the window is on the primary but this will work on multimon. - ShowWindow( DXUTGetHWNDDeviceWindowed(), SW_RESTORE ); - RECT rcClient; - GetClientRect( DXUTGetHWNDDeviceWindowed(), &rcClient ); - nClientWidth = ( UINT )( rcClient.right - rcClient.left ); - nClientHeight = ( UINT )( rcClient.bottom - rcClient.top ); - ShowWindow( DXUTGetHWNDDeviceWindowed(), SW_MINIMIZE ); - } - else - { - // Use wp.rcNormalPosition to get the client rect, but wp.rcNormalPosition - // includes the window frame so subtract it - RECT rcFrame = {0}; - AdjustWindowRect( &rcFrame, GetDXUTState().GetWindowedStyleAtModeChange(), GetDXUTState().GetMenu() != NULL ); - LONG nFrameWidth = rcFrame.right - rcFrame.left; - LONG nFrameHeight = rcFrame.bottom - rcFrame.top; - nClientWidth = ( UINT )( wp.rcNormalPosition.right - wp.rcNormalPosition.left - nFrameWidth ); - nClientHeight = ( UINT )( wp.rcNormalPosition.bottom - wp.rcNormalPosition.top - nFrameHeight ); - } - } - else - { - // Window is restored or maximized so just get its client rect - RECT rcClient; - GetClientRect( DXUTGetHWNDDeviceWindowed(), &rcClient ); - nClientWidth = ( UINT )( rcClient.right - rcClient.left ); - nClientHeight = ( UINT )( rcClient.bottom - rcClient.top ); - } - - // Now that we know the client rect, compare it against the back buffer size - // to see if the client rect is already the right size - if( nClientWidth != DXUTGetBackBufferWidthFromDS( pNewDeviceSettings ) || - nClientHeight != DXUTGetBackBufferHeightFromDS( pNewDeviceSettings ) ) - { - bNeedToResize = true; - } - - if( bClipWindowToSingleAdapter && !IsIconic( DXUTGetHWNDDeviceWindowed() ) ) - { - // Get the rect of the monitor attached to the adapter - MONITORINFO miAdapter; - miAdapter.cbSize = sizeof( MONITORINFO ); - HMONITOR hAdapterMonitor = DXUTGetMonitorFromAdapter( pNewDeviceSettings ); - DXUTGetMonitorInfo( hAdapterMonitor, &miAdapter ); - HMONITOR hWindowMonitor = DXUTMonitorFromWindow( DXUTGetHWND(), MONITOR_DEFAULTTOPRIMARY ); - - // Get the rect of the window - RECT rcWindow; - GetWindowRect( DXUTGetHWNDDeviceWindowed(), &rcWindow ); - - // Check if the window rect is fully inside the adapter's vitural screen rect - if( ( rcWindow.left < miAdapter.rcWork.left || - rcWindow.right > miAdapter.rcWork.right || - rcWindow.top < miAdapter.rcWork.top || - rcWindow.bottom > miAdapter.rcWork.bottom ) ) - { - if( hWindowMonitor == hAdapterMonitor && IsZoomed( DXUTGetHWNDDeviceWindowed() ) ) - { - // If the window is maximized and on the same monitor as the adapter, then - // no need to clip to single adapter as the window is already clipped - // even though the rcWindow rect is outside of the miAdapter.rcWork - } - else - { - bNeedToResize = true; - } - } - } - } - - // Only resize window if needed - - if( bNeedToResize ) - { - // Need to resize, so if window is maximized or minimized then restore the window - if( IsIconic( DXUTGetHWNDDeviceWindowed() ) ) - ShowWindow( DXUTGetHWNDDeviceWindowed(), SW_RESTORE ); - if( IsZoomed( DXUTGetHWNDDeviceWindowed() ) ) // doing the IsIconic() check first also handles the WPF_RESTORETOMAXIMIZED case - ShowWindow( DXUTGetHWNDDeviceWindowed(), SW_RESTORE ); - - if( bClipWindowToSingleAdapter ) - { - // Get the rect of the monitor attached to the adapter - MONITORINFO miAdapter; - miAdapter.cbSize = sizeof( MONITORINFO ); - HMONITOR hAdapterMonitor = DXUTGetMonitorFromAdapter( pNewDeviceSettings ); - DXUTGetMonitorInfo( hAdapterMonitor, &miAdapter ); - - // Get the rect of the monitor attached to the window - MONITORINFO miWindow; - miWindow.cbSize = sizeof( MONITORINFO ); - DXUTGetMonitorInfo( DXUTMonitorFromWindow( DXUTGetHWND(), MONITOR_DEFAULTTOPRIMARY ), &miWindow ); - - // Do something reasonable if the BackBuffer size is greater than the monitor size - int nAdapterMonitorWidth = miAdapter.rcWork.right - miAdapter.rcWork.left; - int nAdapterMonitorHeight = miAdapter.rcWork.bottom - miAdapter.rcWork.top; - - int nClientWidth = DXUTGetBackBufferWidthFromDS( pNewDeviceSettings ); - int nClientHeight = DXUTGetBackBufferHeightFromDS( pNewDeviceSettings ); - - // Get the rect of the window - RECT rcWindow; - GetWindowRect( DXUTGetHWNDDeviceWindowed(), &rcWindow ); - - // Make a window rect with a client rect that is the same size as the backbuffer - RECT rcResizedWindow; - rcResizedWindow.left = 0; - rcResizedWindow.right = nClientWidth; - rcResizedWindow.top = 0; - rcResizedWindow.bottom = nClientHeight; - AdjustWindowRect( &rcResizedWindow, GetWindowLong( DXUTGetHWNDDeviceWindowed(), GWL_STYLE ), - GetDXUTState().GetMenu() != NULL ); - - int nWindowWidth = rcResizedWindow.right - rcResizedWindow.left; - int nWindowHeight = rcResizedWindow.bottom - rcResizedWindow.top; - - if( nWindowWidth > nAdapterMonitorWidth ) - nWindowWidth = nAdapterMonitorWidth; - if( nWindowHeight > nAdapterMonitorHeight ) - nWindowHeight = nAdapterMonitorHeight; - - if( rcResizedWindow.left < miAdapter.rcWork.left || - rcResizedWindow.top < miAdapter.rcWork.top || - rcResizedWindow.right > miAdapter.rcWork.right || - rcResizedWindow.bottom > miAdapter.rcWork.bottom ) - { - int nWindowOffsetX = ( nAdapterMonitorWidth - nWindowWidth ) / 2; - int nWindowOffsetY = ( nAdapterMonitorHeight - nWindowHeight ) / 2; - - rcResizedWindow.left = miAdapter.rcWork.left + nWindowOffsetX; - rcResizedWindow.top = miAdapter.rcWork.top + nWindowOffsetY; - rcResizedWindow.right = miAdapter.rcWork.left + nWindowOffsetX + nWindowWidth; - rcResizedWindow.bottom = miAdapter.rcWork.top + nWindowOffsetY + nWindowHeight; - } - - // Resize the window. It is important to adjust the window size - // after resetting the device rather than beforehand to ensure - // that the monitor resolution is correct and does not limit the size of the new window. - SetWindowPos( DXUTGetHWNDDeviceWindowed(), 0, rcResizedWindow.left, rcResizedWindow.top, nWindowWidth, - nWindowHeight, SWP_NOZORDER ); - } - else - { - // Make a window rect with a client rect that is the same size as the backbuffer - RECT rcWindow = {0}; - rcWindow.right = (long)( DXUTGetBackBufferWidthFromDS(pNewDeviceSettings) ); - rcWindow.bottom = (long)( DXUTGetBackBufferHeightFromDS(pNewDeviceSettings) ); - AdjustWindowRect( &rcWindow, GetWindowLong( DXUTGetHWNDDeviceWindowed(), GWL_STYLE ), GetDXUTState().GetMenu() != NULL ); - - // Resize the window. It is important to adjust the window size - // after resetting the device rather than beforehand to ensure - // that the monitor resolution is correct and does not limit the size of the new window. - int cx = ( int )( rcWindow.right - rcWindow.left ); - int cy = ( int )( rcWindow.bottom - rcWindow.top ); - SetWindowPos( DXUTGetHWNDDeviceWindowed(), 0, 0, 0, cx, cy, SWP_NOZORDER | SWP_NOMOVE ); - } - - // Its possible that the new window size is not what we asked for. - // No window can be sized larger than the desktop, so see if the Windows OS resized the - // window to something smaller to fit on the desktop. Also if WM_GETMINMAXINFO - // will put a limit on the smallest/largest window size. - RECT rcClient; - GetClientRect( DXUTGetHWNDDeviceWindowed(), &rcClient ); - UINT nClientWidth = ( UINT )( rcClient.right - rcClient.left ); - UINT nClientHeight = ( UINT )( rcClient.bottom - rcClient.top ); - if( nClientWidth != DXUTGetBackBufferWidthFromDS( pNewDeviceSettings ) || - nClientHeight != DXUTGetBackBufferHeightFromDS( pNewDeviceSettings ) ) - { - // If its different, then resize the backbuffer again. This time create a backbuffer that matches the - // client rect of the current window w/o resizing the window. - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - if( DXUTIsD3D9( &deviceSettings ) ) deviceSettings.d3d9.pp.BackBufferWidth = 0; else deviceSettings.d3d11.sd.BufferDesc.Width = 0; - if( DXUTIsD3D9( &deviceSettings ) ) deviceSettings.d3d9.pp.BackBufferHeight = 0; else deviceSettings.d3d11.sd.BufferDesc.Height = 0; - - hr = DXUTChangeDevice( &deviceSettings, NULL, NULL, false, bClipWindowToSingleAdapter ); - if( FAILED( hr ) ) - { - SAFE_DELETE( pOldDeviceSettings ); - DXUTCleanup3DEnvironment( true ); - DXUTPause( false, false ); - GetDXUTState().SetIgnoreSizeChange( false ); - return hr; - } - } - } - - //if (DXUTGetIsWindowedFromDS( pNewDeviceSettings )) { - // RECT rcFrame = {0}; - // AdjustWindowRect( &rcFrame, GetDXUTState().GetWindowedStyleAtModeChange(), GetDXUTState().GetMenu() != NULL ); - // } - - // Make the window visible - if( !IsWindowVisible( DXUTGetHWND() ) ) - ShowWindow( DXUTGetHWND(), SW_SHOW ); - - // Ensure that the display doesn't power down when fullscreen but does when windowed - if( !DXUTIsWindowed() ) - SetThreadExecutionState( ES_DISPLAY_REQUIRED | ES_CONTINUOUS ); - else - SetThreadExecutionState( ES_CONTINUOUS ); - - SAFE_DELETE( pOldDeviceSettings ); - GetDXUTState().SetIgnoreSizeChange( false ); - DXUTPause( false, false ); - GetDXUTState().SetDeviceCreated( true ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Creates a DXGI factory object if one has not already been created -//-------------------------------------------------------------------------------------- -HRESULT DXUTDelayLoadDXGI() -{ - IDXGIFactory1* pDXGIFactory = GetDXUTState().GetDXGIFactory(); - if( pDXGIFactory == NULL ) - { - DXUT_Dynamic_CreateDXGIFactory1( __uuidof( IDXGIFactory1 ), ( LPVOID* )&pDXGIFactory ); - GetDXUTState().SetDXGIFactory( pDXGIFactory ); - if( pDXGIFactory == NULL ) - { - // If still NULL, then DXGI is not availible - GetDXUTState().SetD3D11Available( false ); - return DXUTERR_NODIRECT3D11; - } - - // TODO: check for D3D11 support - GetDXUTState().SetD3D11Available( true ); - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Creates a Direct3D object if one has not already been created -//-------------------------------------------------------------------------------------- -HRESULT DXUTDelayLoadD3D9() -{ - IDirect3D9* pD3D = GetDXUTState().GetD3D9(); - if( pD3D == NULL ) - { - // This may fail if Direct3D 9 isn't installed - // This may also fail if the Direct3D headers are somehow out of sync with the installed Direct3D DLLs - pD3D = DXUT_Dynamic_Direct3DCreate9( D3D_SDK_VERSION ); - if( pD3D == NULL ) - { - // If still NULL, then D3D9 is not availible - return DXUTERR_NODIRECT3D; - } - - GetDXUTState().SetD3D9( pD3D ); - } - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -// Updates the device settings with default values.. -//-------------------------------------------------------------------------------------- -void DXUTUpdateDeviceSettingsWithOverrides( DXUTDeviceSettings* pDeviceSettings ) -{ - // Override with settings from the command line - if( GetDXUTState().GetOverrideWidth() != 0 ) - { - pDeviceSettings->d3d9.pp.BackBufferWidth = GetDXUTState().GetOverrideWidth(); - pDeviceSettings->d3d11.sd.BufferDesc.Width = GetDXUTState().GetOverrideWidth(); - } - if( GetDXUTState().GetOverrideHeight() != 0 ) - { - pDeviceSettings->d3d9.pp.BackBufferHeight = GetDXUTState().GetOverrideHeight(); - pDeviceSettings->d3d11.sd.BufferDesc.Height = GetDXUTState().GetOverrideHeight(); - } - - if( GetDXUTState().GetOverrideAdapterOrdinal() != -1 ) - { - pDeviceSettings->d3d9.AdapterOrdinal = GetDXUTState().GetOverrideAdapterOrdinal(); - pDeviceSettings->d3d11.AdapterOrdinal = GetDXUTState().GetOverrideAdapterOrdinal(); - } - - if( GetDXUTState().GetOverrideFullScreen() ) - { - pDeviceSettings->d3d9.pp.Windowed = FALSE; - pDeviceSettings->d3d11.sd.Windowed = FALSE; - } - - if( GetDXUTState().GetOverrideWindowed() ) { - pDeviceSettings->d3d9.pp.Windowed = TRUE; - pDeviceSettings->d3d11.sd.Windowed = TRUE; - } - - if( GetDXUTState().GetOverrideForceHAL() ) - { - pDeviceSettings->d3d9.DeviceType = D3DDEVTYPE_HAL; - pDeviceSettings->d3d11.DriverType = D3D_DRIVER_TYPE_HARDWARE; - } - - if( GetDXUTState().GetOverrideForceREF() ) - { - pDeviceSettings->d3d9.DeviceType = D3DDEVTYPE_REF; - pDeviceSettings->d3d11.DriverType = D3D_DRIVER_TYPE_REFERENCE; - } - - if( GetDXUTState().GetOverrideForceVsync() == 0 ) - { - pDeviceSettings->d3d9.pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; - pDeviceSettings->d3d11.SyncInterval = 0; - } - else if( GetDXUTState().GetOverrideForceVsync() == 1 ) - { - pDeviceSettings->d3d9.pp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; - pDeviceSettings->d3d11.SyncInterval = 1; - } - - if( GetDXUTState().GetOverrideForceAPI() != -1 ) - { - if( GetDXUTState().GetOverrideForceAPI() == 9 ) - { - pDeviceSettings->ver = DXUT_D3D9_DEVICE; - } - else if( GetDXUTState().GetOverrideForceAPI() == 11 ) - { - pDeviceSettings->ver = DXUT_D3D11_DEVICE; - } - } - - if (GetDXUTState().GetOverrideForceFeatureLevel() != 0) { - pDeviceSettings->d3d11.DeviceFeatureLevel = (D3D_FEATURE_LEVEL)GetDXUTState().GetOverrideForceFeatureLevel(); - } -} - - -//-------------------------------------------------------------------------------------- -// Allows the app to explictly state if it supports D3D9 or D3D11. Typically -// calling this is not needed as DXUT will auto-detect this based on the callbacks set. -//-------------------------------------------------------------------------------------- -void WINAPI DXUTSetD3DVersionSupport( bool bAppCanUseD3D9, bool bAppCanUseD3D11 ) -{ - GetDXUTState().SetUseD3DVersionOverride( true ); - GetDXUTState().SetAppSupportsD3D9Override( bAppCanUseD3D9 ); - GetDXUTState().SetAppSupportsD3D11Override( bAppCanUseD3D11 ); -} - - -//-------------------------------------------------------------------------------------- -// Returns true if app has registered any D3D9 callbacks or -// used the DXUTSetD3DVersionSupport API and passed true for bAppCanUseD3D9 -//-------------------------------------------------------------------------------------- -bool WINAPI DXUTDoesAppSupportD3D9() -{ - if( GetDXUTState().GetUseD3DVersionOverride() ) - return GetDXUTState().GetAppSupportsD3D9Override(); - else - return GetDXUTState().GetIsD3D9DeviceAcceptableFunc() || - GetDXUTState().GetD3D9DeviceCreatedFunc() || - GetDXUTState().GetD3D9DeviceResetFunc() || - GetDXUTState().GetD3D9DeviceLostFunc() || - GetDXUTState().GetD3D9DeviceDestroyedFunc() || - GetDXUTState().GetD3D9FrameRenderFunc(); -} - - -//-------------------------------------------------------------------------------------- -// Returns true if app has registered any D3D11 callbacks or -// used the DXUTSetD3DVersionSupport API and passed true for bAppCanUseD3D11 -//-------------------------------------------------------------------------------------- -bool WINAPI DXUTDoesAppSupportD3D11() -{ - if( GetDXUTState().GetUseD3DVersionOverride() ) - return GetDXUTState().GetAppSupportsD3D11Override(); - else - return GetDXUTState().GetIsD3D11DeviceAcceptableFunc() || - GetDXUTState().GetD3D11DeviceCreatedFunc() || - GetDXUTState().GetD3D11SwapChainResizedFunc() || - GetDXUTState().GetD3D11FrameRenderFunc() || - GetDXUTState().GetD3D11SwapChainReleasingFunc() || - GetDXUTState().GetD3D11DeviceDestroyedFunc(); -} - - -//====================================================================================== -//====================================================================================== -// Direct3D 9 section -//====================================================================================== -//====================================================================================== - - -//-------------------------------------------------------------------------------------- -// Passes a previously created Direct3D9 device for use by the framework. -// If DXUTCreateWindow() has not already been called, it will call it with the -// default parameters. Instead of calling this, you can call DXUTCreateDevice() or -// DXUTCreateDeviceFromSettings() -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTSetD3D9Device( IDirect3DDevice9* pd3dDevice ) -{ - HRESULT hr; - - if( pd3dDevice == NULL ) - return DXUT_ERR_MSGBOX( L"DXUTSetD3D9Device", E_INVALIDARG ); - - // Not allowed to call this from inside the device callbacks - if( GetDXUTState().GetInsideDeviceCallback() ) - return DXUT_ERR_MSGBOX( L"DXUTSetD3D9Device", E_FAIL ); - - GetDXUTState().SetDeviceCreateCalled( true ); - - // If DXUTCreateWindow() or DXUTSetWindow() has not already been called, - // then call DXUTCreateWindow() with the default parameters. - if( !GetDXUTState().GetWindowCreated() ) - { - // If DXUTCreateWindow() or DXUTSetWindow() was already called and failed, then fail. - // DXUTCreateWindow() or DXUTSetWindow() must first succeed for this function to succeed - if( GetDXUTState().GetWindowCreateCalled() ) - return E_FAIL; - - // If DXUTCreateWindow() or DXUTSetWindow() hasn't been called, then - // automatically call DXUTCreateWindow() with default params - hr = DXUTCreateWindow(); - if( FAILED( hr ) ) - return hr; - } - - DXUTDeviceSettings DeviceSettings; - ZeroMemory( &DeviceSettings, sizeof( DXUTDeviceSettings ) ); - DeviceSettings.ver = DXUT_D3D9_DEVICE; - - // Get the present params from the swap chain - IDirect3DSurface9* pBackBuffer = NULL; - hr = pd3dDevice->GetBackBuffer( 0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer ); - if( SUCCEEDED( hr ) ) - { - IDirect3DSwapChain9* pSwapChain = NULL; - hr = pBackBuffer->GetContainer( IID_IDirect3DSwapChain9, ( void** )&pSwapChain ); - if( SUCCEEDED( hr ) ) - { - pSwapChain->GetPresentParameters( &DeviceSettings.d3d9.pp ); - SAFE_RELEASE( pSwapChain ); - } - - SAFE_RELEASE( pBackBuffer ); - } - - D3DDEVICE_CREATION_PARAMETERS d3dCreationParams; - pd3dDevice->GetCreationParameters( &d3dCreationParams ); - - // Fill out the rest of the device settings struct - DeviceSettings.d3d9.AdapterOrdinal = d3dCreationParams.AdapterOrdinal; - DeviceSettings.d3d9.DeviceType = d3dCreationParams.DeviceType; - DXUTFindD3D9AdapterFormat( DeviceSettings.d3d9.AdapterOrdinal, DeviceSettings.d3d9.DeviceType, - DeviceSettings.d3d9.pp.BackBufferFormat, DeviceSettings.d3d9.pp.Windowed, - &DeviceSettings.d3d9.AdapterFormat ); - DeviceSettings.d3d9.BehaviorFlags = d3dCreationParams.BehaviorFlags; - - // Change to the Direct3D device passed in - hr = DXUTChangeDevice( &DeviceSettings, pd3dDevice, NULL, false, false ); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Creates the 3D environment -//-------------------------------------------------------------------------------------- -HRESULT DXUTCreate3DEnvironment9( IDirect3DDevice9* pd3dDeviceFromApp ) -{ - HRESULT hr = S_OK; - - IDirect3DDevice9* pd3dDevice = NULL; - DXUTDeviceSettings* pNewDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - - // Only create a Direct3D device if one hasn't been supplied by the app - if( pd3dDeviceFromApp == NULL ) - { - // Try to create the device with the chosen settings - IDirect3D9* pD3D = DXUTGetD3D9Object(); - hr = pD3D->CreateDevice( pNewDeviceSettings->d3d9.AdapterOrdinal, pNewDeviceSettings->d3d9.DeviceType, - DXUTGetHWNDFocus(), pNewDeviceSettings->d3d9.BehaviorFlags, - &pNewDeviceSettings->d3d9.pp, &pd3dDevice ); - if( hr == D3DERR_DEVICELOST ) - { - GetDXUTState().SetDeviceLost( true ); - return S_OK; - } - else if( FAILED( hr ) ) - { - DXUT_ERR( L"CreateDevice", hr ); - return DXUTERR_CREATINGDEVICE; - } - } - else - { - pd3dDeviceFromApp->AddRef(); - pd3dDevice = pd3dDeviceFromApp; - } - - GetDXUTState().SetD3D9Device( pd3dDevice ); - - // If switching to REF, set the exit code to 10. If switching to HAL and exit code was 10, then set it back to 0. - if( pNewDeviceSettings->d3d9.DeviceType == D3DDEVTYPE_REF && GetDXUTState().GetExitCode() == 0 ) - GetDXUTState().SetExitCode( 10 ); - else if( pNewDeviceSettings->d3d9.DeviceType == D3DDEVTYPE_HAL && GetDXUTState().GetExitCode() == 10 ) - GetDXUTState().SetExitCode( 0 ); - - // Update back buffer desc before calling app's device callbacks - DXUTUpdateBackBufferDesc(); - - // Setup cursor based on current settings (window/fullscreen mode, show cursor state, clip cursor state) - DXUTSetupCursor(); - - // Update GetDXUTState()'s copy of D3D caps - D3DCAPS9* pd3dCaps = GetDXUTState().GetCaps(); - DXUTGetD3D9Device()->GetDeviceCaps( pd3dCaps ); - - // Update the device stats text - CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration(); - CD3D9EnumAdapterInfo* pAdapterInfo = pd3dEnum->GetAdapterInfo( pNewDeviceSettings->d3d9.AdapterOrdinal ); - DXUTUpdateD3D9DeviceStats( pNewDeviceSettings->d3d9.DeviceType, - pNewDeviceSettings->d3d9.BehaviorFlags, - &pAdapterInfo->AdapterIdentifier ); - - // Call the app's device created callback if non-NULL - const D3DSURFACE_DESC* pBackBufferSurfaceDesc = DXUTGetD3D9BackBufferSurfaceDesc(); - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D9DEVICECREATED pCallbackDeviceCreated = GetDXUTState().GetD3D9DeviceCreatedFunc(); - hr = S_OK; - if( pCallbackDeviceCreated != NULL ) - hr = pCallbackDeviceCreated( DXUTGetD3D9Device(), pBackBufferSurfaceDesc, - GetDXUTState().GetD3D9DeviceCreatedFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - if( DXUTGetD3D9Device() == NULL ) // Handle DXUTShutdown from inside callback - return E_FAIL; - if( FAILED( hr ) ) - { - DXUT_ERR( L"DeviceCreated callback", hr ); - return ( hr == DXUTERR_MEDIANOTFOUND ) ? DXUTERR_MEDIANOTFOUND : DXUTERR_CREATINGDEVICEOBJECTS; - } - GetDXUTState().SetDeviceObjectsCreated( true ); - - // Call the app's device reset callback if non-NULL - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D9DEVICERESET pCallbackDeviceReset = GetDXUTState().GetD3D9DeviceResetFunc(); - hr = S_OK; - if( pCallbackDeviceReset != NULL ) - hr = pCallbackDeviceReset( DXUTGetD3D9Device(), pBackBufferSurfaceDesc, - GetDXUTState().GetD3D9DeviceResetFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - if( DXUTGetD3D9Device() == NULL ) // Handle DXUTShutdown from inside callback - return E_FAIL; - if( FAILED( hr ) ) - { - DXUT_ERR( L"DeviceReset callback", hr ); - return ( hr == DXUTERR_MEDIANOTFOUND ) ? DXUTERR_MEDIANOTFOUND : DXUTERR_RESETTINGDEVICEOBJECTS; - } - GetDXUTState().SetDeviceObjectsReset( true ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Resets the 3D environment by: -// - Calls the device lost callback -// - Resets the device -// - Stores the back buffer description -// - Sets up the full screen Direct3D cursor if requested -// - Calls the device reset callback -//-------------------------------------------------------------------------------------- -HRESULT DXUTReset3DEnvironment9() -{ - HRESULT hr; - - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - assert( pd3dDevice != NULL ); - - // Call the app's device lost callback - if( GetDXUTState().GetDeviceObjectsReset() == true ) - { - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D9DEVICELOST pCallbackDeviceLost = GetDXUTState().GetD3D9DeviceLostFunc(); - if( pCallbackDeviceLost != NULL ) - pCallbackDeviceLost( GetDXUTState().GetD3D9DeviceLostFuncUserContext() ); - GetDXUTState().SetDeviceObjectsReset( false ); - GetDXUTState().SetInsideDeviceCallback( false ); - } - - // Reset the device - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - hr = pd3dDevice->Reset( &pDeviceSettings->d3d9.pp ); - if( FAILED( hr ) ) - { - if( hr == D3DERR_DEVICELOST ) - return D3DERR_DEVICELOST; // Reset could legitimately fail if the device is lost - else - return DXUT_ERR( L"Reset", DXUTERR_RESETTINGDEVICE ); - } - - // Update back buffer desc before calling app's device callbacks - DXUTUpdateBackBufferDesc(); - - // Setup cursor based on current settings (window/fullscreen mode, show cursor state, clip cursor state) - DXUTSetupCursor(); - - // Call the app's OnDeviceReset callback - GetDXUTState().SetInsideDeviceCallback( true ); - const D3DSURFACE_DESC* pBackBufferSurfaceDesc = DXUTGetD3D9BackBufferSurfaceDesc(); - LPDXUTCALLBACKD3D9DEVICERESET pCallbackDeviceReset = GetDXUTState().GetD3D9DeviceResetFunc(); - hr = S_OK; - if( pCallbackDeviceReset != NULL ) - hr = pCallbackDeviceReset( pd3dDevice, pBackBufferSurfaceDesc, - GetDXUTState().GetD3D9DeviceResetFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - if( FAILED( hr ) ) - { - // If callback failed, cleanup - DXUT_ERR( L"DeviceResetCallback", hr ); - if( hr != DXUTERR_MEDIANOTFOUND ) - hr = DXUTERR_RESETTINGDEVICEOBJECTS; - - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D9DEVICELOST pCallbackDeviceLost = GetDXUTState().GetD3D9DeviceLostFunc(); - if( pCallbackDeviceLost != NULL ) - pCallbackDeviceLost( GetDXUTState().GetD3D9DeviceLostFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - return hr; - } - - // Success - GetDXUTState().SetDeviceObjectsReset( true ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Render the 3D environment by: -// - Checking if the device is lost and trying to reset it if it is -// - Get the elapsed time since the last frame -// - Calling the app's framemove and render callback -// - Calling Present() -//-------------------------------------------------------------------------------------- -void DXUTRender3DEnvironment9() -{ - HRESULT hr; - - if( GetDXUTState().GetDeviceLost() || DXUTIsRenderingPaused() || !DXUTIsActive() ) - { - // Window is minimized or paused so yield CPU time to other processes - Sleep( 50 ); - } - - // If no device created yet because device was lost (ie. another fullscreen exclusive device exists), - // then wait and try to create every so often. - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - if( NULL == pd3dDevice ) - { - if( GetDXUTState().GetDeviceLost() ) - { - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - DXUTChangeDevice( &deviceSettings, NULL, NULL, false, true ); - } - - return; - } - - if( GetDXUTState().GetDeviceLost() && !GetDXUTState().GetRenderingPaused() ) - { - // Test the cooperative level to see if it's okay to render. - if( FAILED( hr = pd3dDevice->TestCooperativeLevel() ) ) - { - if( D3DERR_DEVICELOST == hr ) - { - // The device has been lost but cannot be reset at this time. - // So wait until it can be reset. - return; - } - - // If we are windowed, read the desktop format and - // ensure that the Direct3D device is using the same format - // since the user could have changed the desktop bitdepth - if( DXUTIsWindowed() ) - { - D3DDISPLAYMODE adapterDesktopDisplayMode; - IDirect3D9* pD3D = DXUTGetD3D9Object(); - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - pD3D->GetAdapterDisplayMode( pDeviceSettings->d3d9.AdapterOrdinal, &adapterDesktopDisplayMode ); - if( pDeviceSettings->d3d9.AdapterFormat != adapterDesktopDisplayMode.Format ) - { - - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - deviceSettings.d3d9.AdapterFormat = adapterDesktopDisplayMode.Format; - - hr = DXUTSnapDeviceSettingsToEnumDevice(&deviceSettings, false); - if( FAILED( hr ) ) // the call will fail if no valid devices were found - { - DXUTDisplayErrorMessage( DXUTERR_NOCOMPATIBLEDEVICES ); - DXUTShutdown(); - } - - // Change to a Direct3D device created from the new device settings. - // If there is an existing device, then either reset or recreate the scene - hr = DXUTChangeDevice( &deviceSettings, NULL, NULL, false, false ); - if( FAILED( hr ) ) - { - // If this fails, try to go fullscreen and if this fails also shutdown. - if( FAILED( DXUTToggleFullScreen() ) ) - DXUTShutdown(); - } - - return; - } - } - - // Try to reset the device - if( FAILED( hr = DXUTReset3DEnvironment9() ) ) - { - if( D3DERR_DEVICELOST == hr ) - { - // The device was lost again, so continue waiting until it can be reset. - return; - } - else if( DXUTERR_RESETTINGDEVICEOBJECTS == hr || - DXUTERR_MEDIANOTFOUND == hr ) - { - DXUTDisplayErrorMessage( hr ); - DXUTShutdown(); - return; - } - else - { - // Reset failed, but the device wasn't lost so something bad happened, - // so recreate the device to try to recover - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - if( FAILED( DXUTChangeDevice( pDeviceSettings, NULL, NULL, true, false ) ) ) - { - DXUTShutdown(); - return; - } - } - } - } - - GetDXUTState().SetDeviceLost( false ); - } - - // Get the app's time, in seconds. Skip rendering if no time elapsed - double fTime, fAbsTime; float fElapsedTime; - DXUTGetGlobalTimer()->GetTimeValues( &fTime, &fAbsTime, &fElapsedTime ); - - // Store the time for the app - if( GetDXUTState().GetConstantFrameTime() ) - { - fElapsedTime = GetDXUTState().GetTimePerFrame(); - fTime = DXUTGetTime() + fElapsedTime; - } - - GetDXUTState().SetTime( fTime ); - GetDXUTState().SetAbsoluteTime( fAbsTime ); - GetDXUTState().SetElapsedTime( fElapsedTime ); - - // Update the FPS stats - DXUTUpdateFrameStats(); - - DXUTHandleTimers(); - - // Animate the scene by calling the app's frame move callback - LPDXUTCALLBACKFRAMEMOVE pCallbackFrameMove = GetDXUTState().GetFrameMoveFunc(); - if( pCallbackFrameMove != NULL ) - { - pCallbackFrameMove( fTime, fElapsedTime, GetDXUTState().GetFrameMoveFuncUserContext() ); - pd3dDevice = DXUTGetD3D9Device(); - if( NULL == pd3dDevice ) // Handle DXUTShutdown from inside callback - return; - } - - if( !GetDXUTState().GetRenderingPaused() ) - { - // Render the scene by calling the app's render callback - LPDXUTCALLBACKD3D9FRAMERENDER pCallbackFrameRender = GetDXUTState().GetD3D9FrameRenderFunc(); - if( pCallbackFrameRender != NULL ) - { - pCallbackFrameRender( pd3dDevice, fTime, fElapsedTime, - GetDXUTState().GetD3D9FrameRenderFuncUserContext() ); - pd3dDevice = DXUTGetD3D9Device(); - if( NULL == pd3dDevice ) // Handle DXUTShutdown from inside callback - return; - } - -#if defined(DEBUG) || defined(_DEBUG) - // The back buffer should always match the client rect - // if the Direct3D backbuffer covers the entire window - RECT rcClient; - GetClientRect( DXUTGetHWND(), &rcClient ); - if( !IsIconic( DXUTGetHWND() ) ) - { - GetClientRect( DXUTGetHWND(), &rcClient ); - assert( DXUTGetD3D9BackBufferSurfaceDesc()->Width == (UINT)rcClient.right ); - assert( DXUTGetD3D9BackBufferSurfaceDesc()->Height == (UINT)rcClient.bottom ); - } -#endif - - // Show the frame on the primary surface. - hr = pd3dDevice->Present( NULL, NULL, NULL, NULL ); - if( FAILED( hr ) ) - { - if( D3DERR_DEVICELOST == hr ) - { - GetDXUTState().SetDeviceLost( true ); - } - else if( D3DERR_DRIVERINTERNALERROR == hr ) - { - // When D3DERR_DRIVERINTERNALERROR is returned from Present(), - // the application can do one of the following: - // - // - End, with the pop-up window saying that the application cannot continue - // because of problems in the display adapter and that the user should - // contact the adapter manufacturer. - // - // - Attempt to restart by calling IDirect3DDevice9::Reset, which is essentially the same - // path as recovering from a lost device. If IDirect3DDevice9::Reset fails with - // D3DERR_DRIVERINTERNALERROR, the application should end immediately with the message - // that the user should contact the adapter manufacturer. - // - // The framework attempts the path of resetting the device - // - GetDXUTState().SetDeviceLost( true ); - } - } - } - - // If the app called DXUTWasKeyPressed() then do the work - // to store the current state of the keys in bLastKeys - if( GetDXUTState().GetAppCalledWasKeyPressed() ) - { - bool* bLastKeys = GetDXUTState().GetLastKeys(); - bool* bKeys = GetDXUTState().GetKeys(); - memcpy( bLastKeys, bKeys, sizeof( bool ) * 256 ); - } - - // Update current frame # - int nFrame = GetDXUTState().GetCurrentFrameNumber(); - nFrame++; - GetDXUTState().SetCurrentFrameNumber( nFrame ); - - // Check to see if the app should shutdown due to cmdline - if( GetDXUTState().GetOverrideQuitAfterFrame() != 0 ) - { - if( nFrame > GetDXUTState().GetOverrideQuitAfterFrame() ) - DXUTShutdown(); - } - - return; -} - - -//-------------------------------------------------------------------------------------- -// Cleans up the 3D environment by: -// - Calls the device lost callback -// - Calls the device destroyed callback -// - Releases the D3D device -//-------------------------------------------------------------------------------------- -void DXUTCleanup3DEnvironment9( bool bReleaseSettings ) -{ - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - if( pd3dDevice != NULL ) - { - GetDXUTState().SetInsideDeviceCallback( true ); - - // Call the app's device lost callback - if( GetDXUTState().GetDeviceObjectsReset() == true ) - { - LPDXUTCALLBACKD3D9DEVICELOST pCallbackDeviceLost = GetDXUTState().GetD3D9DeviceLostFunc(); - if( pCallbackDeviceLost != NULL ) - pCallbackDeviceLost( GetDXUTState().GetD3D9DeviceLostFuncUserContext() ); - GetDXUTState().SetDeviceObjectsReset( false ); - } - - // Call the app's device destroyed callback - if( GetDXUTState().GetDeviceObjectsCreated() == true ) - { - LPDXUTCALLBACKD3D9DEVICEDESTROYED pCallbackDeviceDestroyed = GetDXUTState().GetD3D9DeviceDestroyedFunc(); - if( pCallbackDeviceDestroyed != NULL ) - pCallbackDeviceDestroyed( GetDXUTState().GetD3D9DeviceDestroyedFuncUserContext() ); - GetDXUTState().SetDeviceObjectsCreated( false ); - } - - GetDXUTState().SetInsideDeviceCallback( false ); - - // Release the D3D device and in debug configs, displays a message box if there - // are unrelease objects. - if( pd3dDevice ) - { - UINT references = pd3dDevice->Release(); - if( references > 0 ) - { - DXUTDisplayErrorMessage( DXUTERR_NONZEROREFCOUNT ); - DXUT_ERR( L"DXUTCleanup3DEnvironment", DXUTERR_NONZEROREFCOUNT ); - } - } - GetDXUTState().SetD3D9Device( NULL ); - - if( bReleaseSettings ) - { - DXUTDeviceSettings* pOldDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - SAFE_DELETE(pOldDeviceSettings); - GetDXUTState().SetCurrentDeviceSettings( NULL ); - } - - D3DSURFACE_DESC* pBackBufferSurfaceDesc = GetDXUTState().GetBackBufferSurfaceDesc9(); - ZeroMemory( pBackBufferSurfaceDesc, sizeof( D3DSURFACE_DESC ) ); - - D3DCAPS9* pd3dCaps = GetDXUTState().GetCaps(); - ZeroMemory( pd3dCaps, sizeof( D3DCAPS9 ) ); - - GetDXUTState().SetDeviceCreated( false ); - } -} - - -//-------------------------------------------------------------------------------------- -// Gives the D3D device a cursor with image and hotspot from hCursor. -//-------------------------------------------------------------------------------------- -HRESULT DXUTSetD3D9DeviceCursor( IDirect3DDevice9* pd3dDevice, HCURSOR hCursor, bool bAddWatermark ) -{ - HRESULT hr = E_FAIL; - ICONINFO iconinfo; - bool bBWCursor = false; - LPDIRECT3DSURFACE9 pCursorSurface = NULL; - HDC hdcColor = NULL; - HDC hdcMask = NULL; - HDC hdcScreen = NULL; - BITMAP bm; - DWORD dwWidth = 0; - DWORD dwHeightSrc = 0; - DWORD dwHeightDest = 0; - COLORREF crColor; - COLORREF crMask; - UINT x; - UINT y; - BITMAPINFO bmi; - COLORREF* pcrArrayColor = NULL; - COLORREF* pcrArrayMask = NULL; - DWORD* pBitmap; - HGDIOBJ hgdiobjOld; - - ZeroMemory( &iconinfo, sizeof( iconinfo ) ); - if( !GetIconInfo( hCursor, &iconinfo ) ) - goto End; - - if( 0 == GetObject( ( HGDIOBJ )iconinfo.hbmMask, sizeof( BITMAP ), ( LPVOID )&bm ) ) - goto End; - dwWidth = bm.bmWidth; - dwHeightSrc = bm.bmHeight; - - if( iconinfo.hbmColor == NULL ) - { - bBWCursor = TRUE; - dwHeightDest = dwHeightSrc / 2; - } - else - { - bBWCursor = FALSE; - dwHeightDest = dwHeightSrc; - } - - // Create a surface for the fullscreen cursor - if( FAILED( hr = pd3dDevice->CreateOffscreenPlainSurface( dwWidth, dwHeightDest, - D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &pCursorSurface, - NULL ) ) ) - { - goto End; - } - - pcrArrayMask = new DWORD[dwWidth * dwHeightSrc]; - - ZeroMemory( &bmi, sizeof( bmi ) ); - bmi.bmiHeader.biSize = sizeof( bmi.bmiHeader ); - bmi.bmiHeader.biWidth = dwWidth; - bmi.bmiHeader.biHeight = dwHeightSrc; - bmi.bmiHeader.biPlanes = 1; - bmi.bmiHeader.biBitCount = 32; - bmi.bmiHeader.biCompression = BI_RGB; - - hdcScreen = GetDC( NULL ); - hdcMask = CreateCompatibleDC( hdcScreen ); - if( hdcMask == NULL ) - { - hr = E_FAIL; - goto End; - } - hgdiobjOld = SelectObject( hdcMask, iconinfo.hbmMask ); - GetDIBits( hdcMask, iconinfo.hbmMask, 0, dwHeightSrc, - pcrArrayMask, &bmi, DIB_RGB_COLORS ); - SelectObject( hdcMask, hgdiobjOld ); - - if( !bBWCursor ) - { - pcrArrayColor = new DWORD[dwWidth * dwHeightDest]; - hdcColor = CreateCompatibleDC( hdcScreen ); - if( hdcColor == NULL ) - { - hr = E_FAIL; - goto End; - } - SelectObject( hdcColor, iconinfo.hbmColor ); - GetDIBits( hdcColor, iconinfo.hbmColor, 0, dwHeightDest, - pcrArrayColor, &bmi, DIB_RGB_COLORS ); - } - - // Transfer cursor image into the surface - D3DLOCKED_RECT lr; - pCursorSurface->LockRect( &lr, NULL, 0 ); - pBitmap = ( DWORD* )lr.pBits; - for( y = 0; y < dwHeightDest; y++ ) - { - for( x = 0; x < dwWidth; x++ ) - { - if( bBWCursor ) - { - crColor = pcrArrayMask[dwWidth * ( dwHeightDest - 1 - y ) + x]; - crMask = pcrArrayMask[dwWidth * ( dwHeightSrc - 1 - y ) + x]; - } - else - { - crColor = pcrArrayColor[dwWidth * ( dwHeightDest - 1 - y ) + x]; - crMask = pcrArrayMask[dwWidth * ( dwHeightDest - 1 - y ) + x]; - } - if( crMask == 0 ) - pBitmap[dwWidth * y + x] = 0xff000000 | crColor; - else - pBitmap[dwWidth * y + x] = 0x00000000; - - // It may be helpful to make the D3D cursor look slightly - // different from the Windows cursor so you can distinguish - // between the two when developing/testing code. When - // bAddWatermark is TRUE, the following code adds some - // small grey "D3D" characters to the upper-left corner of - // the D3D cursor image. - if( bAddWatermark && x < 12 && y < 5 ) - { - // 11.. 11.. 11.. .... CCC0 - // 1.1. ..1. 1.1. .... A2A0 - // 1.1. .1.. 1.1. .... A4A0 - // 1.1. ..1. 1.1. .... A2A0 - // 11.. 11.. 11.. .... CCC0 - - const WORD wMask[5] = { 0xccc0, 0xa2a0, 0xa4a0, 0xa2a0, 0xccc0 }; - if( wMask[y] & (1 << (15 - x)) ) - { - pBitmap[dwWidth*y + x] |= 0xff808080; - } - } - } - } - pCursorSurface->UnlockRect(); - - // Set the device cursor - if( FAILED( hr = pd3dDevice->SetCursorProperties( iconinfo.xHotspot, - iconinfo.yHotspot, pCursorSurface ) ) ) - { - goto End; - } - - hr = S_OK; - -End: - if( iconinfo.hbmMask != NULL ) - DeleteObject( iconinfo.hbmMask ); - if( iconinfo.hbmColor != NULL ) - DeleteObject( iconinfo.hbmColor ); - if( hdcScreen != NULL ) - ReleaseDC( NULL, hdcScreen ); - if( hdcColor != NULL ) - DeleteDC( hdcColor ); - if( hdcMask != NULL ) - DeleteDC( hdcMask ); - SAFE_DELETE_ARRAY( pcrArrayColor ); - SAFE_DELETE_ARRAY( pcrArrayMask ); - SAFE_RELEASE( pCursorSurface ); - return hr; -} - - -//-------------------------------------------------------------------------------------- -// Internal helper function to return the adapter format from the first device settings -// combo that matches the passed adapter ordinal, device type, backbuffer format, and windowed. -//-------------------------------------------------------------------------------------- -HRESULT DXUTFindD3D9AdapterFormat( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, D3DFORMAT BackBufferFormat, - BOOL Windowed, D3DFORMAT* pAdapterFormat ) -{ - CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration( false ); - CD3D9EnumDeviceInfo* pDeviceInfo = pd3dEnum->GetDeviceInfo( AdapterOrdinal, DeviceType ); - if( pDeviceInfo ) - { - for( int iDeviceCombo = 0; iDeviceCombo < pDeviceInfo->deviceSettingsComboList.GetSize(); iDeviceCombo++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( - iDeviceCombo ); - if( pDeviceSettingsCombo->BackBufferFormat == BackBufferFormat && - pDeviceSettingsCombo->Windowed == Windowed ) - { - // Return the adapter format from the first match - *pAdapterFormat = pDeviceSettingsCombo->AdapterFormat; - return S_OK; - } - } - } - - *pAdapterFormat = BackBufferFormat; - return E_FAIL; -} - -//-------------------------------------------------------------------------------------- -// Sets the viewport, render target view, and depth stencil view. -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTSetupD3D11Views( ID3D11DeviceContext* pd3dDeviceContext ) -{ - HRESULT hr = S_OK; - - // Setup the viewport to match the backbuffer - D3D11_VIEWPORT vp; - vp.Width = (FLOAT)DXUTGetDXGIBackBufferSurfaceDesc()->Width; - vp.Height = (FLOAT)DXUTGetDXGIBackBufferSurfaceDesc()->Height; - vp.MinDepth = 0; - vp.MaxDepth = 1; - vp.TopLeftX = 0; - vp.TopLeftY = 0; - pd3dDeviceContext->RSSetViewports( 1, &vp ); - - // Set the render targets - ID3D11RenderTargetView* pRTV = GetDXUTState().GetD3D11RenderTargetView(); - ID3D11DepthStencilView* pDSV = GetDXUTState().GetD3D11DepthStencilView(); - pd3dDeviceContext->OMSetRenderTargets( 1, &pRTV, pDSV ); - - return hr; -} - - -//-------------------------------------------------------------------------------------- -// Creates a render target view, and depth stencil texture and view. -//-------------------------------------------------------------------------------------- -HRESULT DXUTCreateD3D11Views( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext, - DXUTDeviceSettings* pDeviceSettings ) -{ - HRESULT hr = S_OK; - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - ID3D11DepthStencilView* pDSV = NULL; - ID3D11RenderTargetView* pRTV = NULL; - - // Get the back buffer and desc - ID3D11Texture2D* pBackBuffer; - hr = pSwapChain->GetBuffer( 0, __uuidof( *pBackBuffer ), ( LPVOID* )&pBackBuffer ); - if( FAILED( hr ) ) - return hr; - D3D11_TEXTURE2D_DESC backBufferSurfaceDesc; - pBackBuffer->GetDesc( &backBufferSurfaceDesc ); - - // Create the render target view - hr = pd3dDevice->CreateRenderTargetView( pBackBuffer, NULL, &pRTV ); - SAFE_RELEASE( pBackBuffer ); - if( FAILED( hr ) ) - return hr; - GetDXUTState().SetD3D11RenderTargetView( pRTV ); - - if( pDeviceSettings->d3d11.AutoCreateDepthStencil ) - { - // Create depth stencil texture - ID3D11Texture2D* pDepthStencil = NULL; - D3D11_TEXTURE2D_DESC descDepth; - descDepth.Width = backBufferSurfaceDesc.Width; - descDepth.Height = backBufferSurfaceDesc.Height; - descDepth.MipLevels = 1; - descDepth.ArraySize = 1; - descDepth.Format = pDeviceSettings->d3d11.AutoDepthStencilFormat; - descDepth.SampleDesc.Count = pDeviceSettings->d3d11.sd.SampleDesc.Count; - descDepth.SampleDesc.Quality = pDeviceSettings->d3d11.sd.SampleDesc.Quality; - descDepth.Usage = D3D11_USAGE_DEFAULT; - descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL; - descDepth.CPUAccessFlags = 0; - descDepth.MiscFlags = 0; - hr = pd3dDevice->CreateTexture2D( &descDepth, NULL, &pDepthStencil ); - if( FAILED( hr ) ) - return hr; - GetDXUTState().SetD3D11DepthStencil( pDepthStencil ); - - // Create the depth stencil view - D3D11_DEPTH_STENCIL_VIEW_DESC descDSV; - descDSV.Format = descDepth.Format; - descDSV.Flags = 0; - if( descDepth.SampleDesc.Count > 1 ) - descDSV.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DMS; - else - descDSV.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; - descDSV.Texture2D.MipSlice = 0; - hr = pd3dDevice->CreateDepthStencilView( pDepthStencil, &descDSV, &pDSV ); - if( FAILED( hr ) ) - return hr; - GetDXUTState().SetD3D11DepthStencilView( pDSV ); - } - - hr = DXUTSetupD3D11Views( pd3dImmediateContext ); - if( FAILED( hr ) ) - return hr; - - return hr; -} - - -//-------------------------------------------------------------------------------------- -// Creates the 3D environment -//-------------------------------------------------------------------------------------- -HRESULT DXUTCreate3DEnvironment11( ID3D11Device* pd3d11DeviceFromApp ) -{ - HRESULT hr = S_OK; - - ID3D11Device* pd3d11Device = NULL; - ID3D11DeviceContext* pd3dImmediateContext = NULL; - D3D_FEATURE_LEVEL FeatureLevel = D3D_FEATURE_LEVEL_11_0; - - IDXGISwapChain* pSwapChain = NULL; - DXUTDeviceSettings* pNewDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - - IDXGIFactory1* pDXGIFactory = DXUTGetDXGIFactory(); - hr = pDXGIFactory->MakeWindowAssociation( DXUTGetHWND(), 0 ); - - // Only create a Direct3D device if one hasn't been supplied by the app - if( pd3d11DeviceFromApp == NULL ) - { - // Try to create the device with the chosen settings - IDXGIAdapter1* pAdapter = NULL; - - hr = S_OK; - D3D_DRIVER_TYPE ddt = pNewDeviceSettings->d3d11.DriverType; - if( pNewDeviceSettings->d3d11.DriverType == D3D_DRIVER_TYPE_HARDWARE ) - { - hr = pDXGIFactory->EnumAdapters1( pNewDeviceSettings->d3d11.AdapterOrdinal, &pAdapter ); - if ( FAILED( hr) ) - { - return E_FAIL; - } - ddt = D3D_DRIVER_TYPE_UNKNOWN; - } - else if (pNewDeviceSettings->d3d11.DriverType == D3D_DRIVER_TYPE_WARP) - { - ddt = D3D_DRIVER_TYPE_WARP; - pAdapter = NULL; - } - else if (pNewDeviceSettings->d3d11.DriverType == D3D_DRIVER_TYPE_REFERENCE) - { - ddt = D3D_DRIVER_TYPE_REFERENCE; - pAdapter = NULL; - } - - if( SUCCEEDED( hr ) ) - { - - hr = DXUT_Dynamic_D3D11CreateDevice( pAdapter, - ddt, - ( HMODULE )0, - pNewDeviceSettings->d3d11.CreateFlags, - &pNewDeviceSettings->d3d11.DeviceFeatureLevel, - 1, - D3D11_SDK_VERSION, - &pd3d11Device, - &FeatureLevel, - &pd3dImmediateContext - ); - - if ( FAILED( hr ) ) { - pAdapter = NULL; - // Remote desktop does not allow you to enumerate the adapter. In this case, we let D3D11 do the enumeration. - if ( ddt == D3D_DRIVER_TYPE_UNKNOWN ) { - hr = DXUT_Dynamic_D3D11CreateDevice( pAdapter, - D3D_DRIVER_TYPE_HARDWARE, - ( HMODULE )0, - pNewDeviceSettings->d3d11.CreateFlags, - &pNewDeviceSettings->d3d11.DeviceFeatureLevel, - 1, - D3D11_SDK_VERSION, - &pd3d11Device, - &FeatureLevel, - &pd3dImmediateContext - ); - } - if ( FAILED ( hr ) ) { - DXUT_ERR( L"D3D11CreateDevice", hr ); - return DXUTERR_CREATINGDEVICE; - } - } - } - - if( SUCCEEDED( hr ) ) - { - IDXGIDevice1* pDXGIDev = NULL; - hr = pd3d11Device->QueryInterface( __uuidof( IDXGIDevice1 ), ( LPVOID* )&pDXGIDev ); - if( SUCCEEDED( hr ) && pDXGIDev ) - { - if ( pAdapter == NULL ) - { - IDXGIAdapter *pTempAdapter; - pDXGIDev->GetAdapter( &pTempAdapter ); - V_RETURN( pTempAdapter->QueryInterface( __uuidof( IDXGIAdapter1 ), (LPVOID*) &pAdapter ) ); - V_RETURN( pAdapter->GetParent( __uuidof( IDXGIFactory1 ), (LPVOID*) &pDXGIFactory ) ); - SAFE_RELEASE ( pTempAdapter ); - GetDXUTState().SetDXGIFactory( pDXGIFactory ); - } - } - SAFE_RELEASE( pDXGIDev ); - GetDXUTState().SetDXGIAdapter( pAdapter ); - } - - // set default render state to msaa enabled - D3D11_RASTERIZER_DESC drd = { - D3D11_FILL_SOLID, //D3D11_FILL_MODE FillMode; - D3D11_CULL_BACK,//D3D11_CULL_MODE CullMode; - FALSE, //BOOL FrontCounterClockwise; - 0, //INT DepthBias; - 0.0f,//FLOAT DepthBiasClamp; - 0.0f,//FLOAT SlopeScaledDepthBias; - TRUE,//BOOL DepthClipEnable; - FALSE,//BOOL ScissorEnable; - TRUE,//BOOL MultisampleEnable; - FALSE//BOOL AntialiasedLineEnable; - }; - if( FAILED( hr ) ) - { - DXUT_ERR( L"D3D11CreateDevice", hr ); - return DXUTERR_CREATINGDEVICE; - } - ID3D11RasterizerState* pRS = NULL; - pd3d11Device->CreateRasterizerState(&drd, &pRS); - GetDXUTState().SetD3D11RasterizerState(pRS); - pd3dImmediateContext->RSSetState(pRS); - - - - - // Enumerate its outputs. - UINT OutputCount, iOutput; - for( OutputCount = 0; ; ++OutputCount ) - { - IDXGIOutput* pOutput; - if( FAILED( pAdapter->EnumOutputs( OutputCount, &pOutput ) ) ) - break; - SAFE_RELEASE( pOutput ); - } - IDXGIOutput** ppOutputArray = new IDXGIOutput*[OutputCount]; - if( !ppOutputArray ) - return E_OUTOFMEMORY; - for( iOutput = 0; iOutput < OutputCount; ++iOutput ) - pAdapter->EnumOutputs( iOutput, ppOutputArray + iOutput ); - GetDXUTState().SetDXGIOutputArray( ppOutputArray ); - GetDXUTState().SetDXGIOutputArraySize( OutputCount ); - - // Create the swapchain - - hr = pDXGIFactory->CreateSwapChain( pd3d11Device, &pNewDeviceSettings->d3d11.sd, &pSwapChain ); - - if( FAILED( hr ) ) - { - DXUT_ERR( L"CreateSwapChain", hr ); - return DXUTERR_CREATINGDEVICE; - } - } - else - { - pd3d11DeviceFromApp->AddRef(); - pd3d11Device = pd3d11DeviceFromApp; - } - - GetDXUTState().SetD3D11Device( pd3d11Device ); - GetDXUTState().SetD3D11DeviceContext( pd3dImmediateContext ); - GetDXUTState().SetD3D11FeatureLevel( FeatureLevel ); - GetDXUTState().SetDXGISwapChain( pSwapChain ); - - // If switching to REF, set the exit code to 11. If switching to HAL and exit code was 11, then set it back to 0. - if( pNewDeviceSettings->d3d11.DriverType == D3D_DRIVER_TYPE_REFERENCE && GetDXUTState().GetExitCode() == 0 ) - GetDXUTState().SetExitCode( 10 ); - else if( pNewDeviceSettings->d3d11.DriverType == D3D_DRIVER_TYPE_HARDWARE && GetDXUTState().GetExitCode() == 10 ) - GetDXUTState().SetExitCode( 0 ); - - // Update back buffer desc before calling app's device callbacks - DXUTUpdateBackBufferDesc(); - - // Setup cursor based on current settings (window/fullscreen mode, show cursor state, clip cursor state) - DXUTSetupCursor(); - - // Update the device stats text - CD3D11Enumeration* pd3dEnum = DXUTGetD3D11Enumeration(); - CD3D11EnumAdapterInfo* pAdapterInfo = pd3dEnum->GetAdapterInfo( pNewDeviceSettings->d3d11.AdapterOrdinal ); - DXUTUpdateD3D11DeviceStats( pNewDeviceSettings->d3d11.DriverType, &pAdapterInfo->AdapterDesc ); - - // Call the app's device created callback if non-NULL - const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc = DXUTGetDXGIBackBufferSurfaceDesc(); - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D11DEVICECREATED pCallbackDeviceCreated = GetDXUTState().GetD3D11DeviceCreatedFunc(); - hr = S_OK; - if( pCallbackDeviceCreated != NULL ) - hr = pCallbackDeviceCreated( DXUTGetD3D11Device(), pBackBufferSurfaceDesc, - GetDXUTState().GetD3D11DeviceCreatedFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - if( DXUTGetD3D11Device() == NULL ) // Handle DXUTShutdown from inside callback - return E_FAIL; - if( FAILED( hr ) ) - { - DXUT_ERR( L"DeviceCreated callback", hr ); - return ( hr == DXUTERR_MEDIANOTFOUND ) ? DXUTERR_MEDIANOTFOUND : DXUTERR_CREATINGDEVICEOBJECTS; - } - GetDXUTState().SetDeviceObjectsCreated( true ); - - // Setup the render target view and viewport - hr = DXUTCreateD3D11Views( pd3d11Device, pd3dImmediateContext, pNewDeviceSettings ); - if( FAILED( hr ) ) - { - DXUT_ERR( L"DXUTCreateD3D11Views", hr ); - return DXUTERR_CREATINGDEVICEOBJECTS; - } - - // Create performance counters - //DXUTCreateD3D11Counters( pd3d11Device ); - - // Call the app's swap chain reset callback if non-NULL - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D11SWAPCHAINRESIZED pCallbackSwapChainResized = GetDXUTState().GetD3D11SwapChainResizedFunc(); - hr = S_OK; - if( pCallbackSwapChainResized != NULL ) - hr = pCallbackSwapChainResized( DXUTGetD3D11Device(), pSwapChain, pBackBufferSurfaceDesc, - GetDXUTState().GetD3D11SwapChainResizedFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - if( DXUTGetD3D11Device() == NULL ) // Handle DXUTShutdown from inside callback - return E_FAIL; - if( FAILED( hr ) ) - { - DXUT_ERR( L"DeviceReset callback", hr ); - return ( hr == DXUTERR_MEDIANOTFOUND ) ? DXUTERR_MEDIANOTFOUND : DXUTERR_RESETTINGDEVICEOBJECTS; - } - GetDXUTState().SetDeviceObjectsReset( true ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Resets the 3D environment by: -// - Calls the device lost callback -// - Resets the device -// - Stores the back buffer description -// - Sets up the full screen Direct3D cursor if requested -// - Calls the device reset callback -//-------------------------------------------------------------------------------------- -HRESULT DXUTReset3DEnvironment11() -{ - HRESULT hr; - - GetDXUTState().SetDeviceObjectsReset( false ); - DXUTPause( true, true ); - - bool bDeferredDXGIAction = false; - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - - DXGI_SWAP_CHAIN_DESC SCDesc; - pSwapChain->GetDesc( &SCDesc ); - - // Resize backbuffer and target of the swapchain in case they have changed. - // For windowed mode, use the client rect as the desired size. Unlike D3D9, - // we can't use 0 for width or height. Therefore, fill in the values from - // the window size. For fullscreen mode, the width and height should have - // already been filled with the desktop resolution, so don't change it. - if( pDeviceSettings->d3d11.sd.Windowed && SCDesc.Windowed ) - { - RECT rcWnd; - GetClientRect( DXUTGetHWND(), &rcWnd ); - pDeviceSettings->d3d11.sd.BufferDesc.Width = rcWnd.right - rcWnd.left; - pDeviceSettings->d3d11.sd.BufferDesc.Height = rcWnd.bottom - rcWnd.top; - } - - // If the app wants to switch from windowed to fullscreen or vice versa, - // call the swapchain's SetFullscreenState - // mode. - if( SCDesc.Windowed != pDeviceSettings->d3d11.sd.Windowed ) - { - // Set the fullscreen state - if( pDeviceSettings->d3d11.sd.Windowed ) - { - V_RETURN( pSwapChain->SetFullscreenState( FALSE, NULL ) ); - bDeferredDXGIAction = true; - } - else - { - // Set fullscreen state by setting the display mode to fullscreen, then changing the resolution - // to the desired value. - - // SetFullscreenState causes a WM_SIZE message to be sent to the window. The WM_SIZE message calls - // DXUTCheckForDXGIBufferChange which normally stores the new height and width in - // pDeviceSettings->d3d11.sd.BufferDesc. SetDoNotStoreBufferSize tells DXUTCheckForDXGIBufferChange - // not to store the height and width so that we have the correct values when calling ResizeTarget. - - GetDXUTState().SetDoNotStoreBufferSize( true ); - V_RETURN( pSwapChain->SetFullscreenState( TRUE, NULL ) ); - GetDXUTState().SetDoNotStoreBufferSize( false ); - - V_RETURN( pSwapChain->ResizeTarget( &pDeviceSettings->d3d11.sd.BufferDesc ) ); - bDeferredDXGIAction = true; - } - } - else - { - if( pDeviceSettings->d3d11.sd.BufferDesc.Width == SCDesc.BufferDesc.Width && - pDeviceSettings->d3d11.sd.BufferDesc.Height == SCDesc.BufferDesc.Height && - pDeviceSettings->d3d11.sd.BufferDesc.Format != SCDesc.BufferDesc.Format ) - { - DXUTResizeDXGIBuffers( 0, 0, !pDeviceSettings->d3d11.sd.Windowed ); - bDeferredDXGIAction = true; - } - else if( pDeviceSettings->d3d11.sd.BufferDesc.Width != SCDesc.BufferDesc.Width || - pDeviceSettings->d3d11.sd.BufferDesc.Height != SCDesc.BufferDesc.Height ) - { - V_RETURN( pSwapChain->ResizeTarget( &pDeviceSettings->d3d11.sd.BufferDesc ) ); - bDeferredDXGIAction = true; - } - } - - // If no deferred DXGI actions are to take place, mark the device as reset. - // If there is a deferred DXGI action, then the device isn't reset until DXGI sends us a - // window message. Only then can we mark the device as reset. - if( !bDeferredDXGIAction ) - GetDXUTState().SetDeviceObjectsReset( true ); - DXUTPause( false, false ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Render the 3D environment by: -// - Checking if the device is lost and trying to reset it if it is -// - Get the elapsed time since the last frame -// - Calling the app's framemove and render callback -// - Calling Present() -//-------------------------------------------------------------------------------------- -void DXUTRender3DEnvironment11() -{ - HRESULT hr; - - ID3D11Device* pd3dDevice = DXUTGetD3D11Device(); - if( NULL == pd3dDevice ) - return; - - ID3D11DeviceContext* pd3dImmediateContext = DXUTGetD3D11DeviceContext(); - if( NULL == pd3dImmediateContext ) - return; - - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - if( NULL == pSwapChain ) - return; - - if( DXUTIsRenderingPaused() || !DXUTIsActive() || GetDXUTState().GetRenderingOccluded() ) - { - // Window is minimized/paused/occluded/or not exclusive so yield CPU time to other processes - Sleep( 50 ); - } - - // Get the app's time, in seconds. Skip rendering if no time elapsed - double fTime, fAbsTime; float fElapsedTime; - DXUTGetGlobalTimer()->GetTimeValues( &fTime, &fAbsTime, &fElapsedTime ); - - // Store the time for the app - if( GetDXUTState().GetConstantFrameTime() ) - { - fElapsedTime = GetDXUTState().GetTimePerFrame(); - fTime = DXUTGetTime() + fElapsedTime; - } - - GetDXUTState().SetTime( fTime ); - GetDXUTState().SetAbsoluteTime( fAbsTime ); - GetDXUTState().SetElapsedTime( fElapsedTime ); - - // Start Performance Counters - - // Update the FPS stats - DXUTUpdateFrameStats(); - - DXUTHandleTimers(); - - // Animate the scene by calling the app's frame move callback - LPDXUTCALLBACKFRAMEMOVE pCallbackFrameMove = GetDXUTState().GetFrameMoveFunc(); - if( pCallbackFrameMove != NULL ) - { - pCallbackFrameMove( fTime, fElapsedTime, GetDXUTState().GetFrameMoveFuncUserContext() ); - pd3dDevice = DXUTGetD3D11Device(); - if( NULL == pd3dDevice ) // Handle DXUTShutdown from inside callback - return; - } - - if( !GetDXUTState().GetRenderingPaused() ) - { - // Render the scene by calling the app's render callback - LPDXUTCALLBACKD3D11FRAMERENDER pCallbackFrameRender = GetDXUTState().GetD3D11FrameRenderFunc(); - if( pCallbackFrameRender != NULL && !GetDXUTState().GetRenderingOccluded() ) - { - pCallbackFrameRender( pd3dDevice, pd3dImmediateContext, fTime, fElapsedTime, - GetDXUTState().GetD3D11FrameRenderFuncUserContext() ); - - pd3dDevice = DXUTGetD3D11Device(); - if( NULL == pd3dDevice ) // Handle DXUTShutdown from inside callback - return; - } - -#if defined(DEBUG) || defined(_DEBUG) - // The back buffer should always match the client rect - // if the Direct3D backbuffer covers the entire window - RECT rcClient; - GetClientRect( DXUTGetHWND(), &rcClient ); - if( !IsIconic( DXUTGetHWND() ) ) - { - GetClientRect( DXUTGetHWND(), &rcClient ); - - assert( DXUTGetDXGIBackBufferSurfaceDesc()->Width == (UINT)rcClient.right ); - assert( DXUTGetDXGIBackBufferSurfaceDesc()->Height == (UINT)rcClient.bottom ); - } -#endif - } - - if ( GetDXUTState().GetSaveScreenShot() ) { - DXUTSnapD3D11Screenshot( GetDXUTState().GetScreenShotName(), D3DX11_IFF_BMP ); - } - if ( GetDXUTState().GetExitAfterScreenShot() ) { - DXUTShutdown(); - return; - } - - DWORD dwFlags = 0; - if( GetDXUTState().GetRenderingOccluded() ) - dwFlags = DXGI_PRESENT_TEST; - else - dwFlags = GetDXUTState().GetCurrentDeviceSettings()->d3d11.PresentFlags; - UINT SyncInterval = GetDXUTState().GetCurrentDeviceSettings()->d3d11.SyncInterval; - - // Show the frame on the primary surface. - hr = pSwapChain->Present( SyncInterval, dwFlags ); - if( DXGI_STATUS_OCCLUDED == hr ) - { - // There is a window covering our entire rendering area. - // Don't render until we're visible again. - GetDXUTState().SetRenderingOccluded( true ); - } - else if( DXGI_ERROR_DEVICE_RESET == hr ) - { - // If a mode change happened, we must reset the device - if( FAILED( hr = DXUTReset3DEnvironment11() ) ) - { - if( DXUTERR_RESETTINGDEVICEOBJECTS == hr || - DXUTERR_MEDIANOTFOUND == hr ) - { - DXUTDisplayErrorMessage( hr ); - DXUTShutdown(); - return; - } - else - { - // Reset failed, but the device wasn't lost so something bad happened, - // so recreate the device to try to recover - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - if( FAILED( DXUTChangeDevice( pDeviceSettings, NULL, NULL, true, false ) ) ) - { - DXUTShutdown(); - return; - } - - // TODO: Handle display orientation changes in full-screen mode. - } - } - } - else if( DXGI_ERROR_DEVICE_REMOVED == hr ) - { - // Use a callback to ask the app if it would like to find a new device. - // If no device removed callback is set, then look for a new device - if( FAILED( DXUTHandleDeviceRemoved() ) ) - { - // TODO: use pD3DDevice->GetDeviceRemovedReason() - DXUTDisplayErrorMessage( DXUTERR_DEVICEREMOVED ); - DXUTShutdown(); - return; - } - } - else if( SUCCEEDED( hr ) ) - { - if( GetDXUTState().GetRenderingOccluded() ) - { - // Now that we're no longer occluded - // allow us to render again - GetDXUTState().SetRenderingOccluded( false ); - } - } - - // Update current frame # - int nFrame = GetDXUTState().GetCurrentFrameNumber(); - nFrame++; - GetDXUTState().SetCurrentFrameNumber( nFrame ); - - - // Update the D3D11 counter stats - //DXUTUpdateD3D11CounterStats(); - - // Check to see if the app should shutdown due to cmdline - if( GetDXUTState().GetOverrideQuitAfterFrame() != 0 ) - { - if( nFrame > GetDXUTState().GetOverrideQuitAfterFrame() ) - DXUTShutdown(); - } - - return; -} - -void ClearD3D11DeviceContext( ID3D11DeviceContext* pd3dDeviceContext ) -{ - // Unbind all objects from the immediate context - if (pd3dDeviceContext == NULL) return; - - ID3D11ShaderResourceView* pSRVs[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; - ID3D11RenderTargetView* pRTVs[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; - ID3D11DepthStencilView* pDSV = NULL; - ID3D11Buffer* pBuffers[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; - ID3D11SamplerState* pSamplers[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; - UINT StrideOffset[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; - - // Shaders - pd3dDeviceContext->VSSetShader( NULL, NULL, 0 ); - pd3dDeviceContext->HSSetShader( NULL, NULL, 0 ); - pd3dDeviceContext->DSSetShader( NULL, NULL, 0 ); - pd3dDeviceContext->GSSetShader( NULL, NULL, 0 ); - pd3dDeviceContext->PSSetShader( NULL, NULL, 0 ); - - // IA clear - pd3dDeviceContext->IASetVertexBuffers( 0, 16, pBuffers, StrideOffset, StrideOffset ); - pd3dDeviceContext->IASetIndexBuffer( NULL, DXGI_FORMAT_R16_UINT, 0 ); - pd3dDeviceContext->IASetInputLayout( NULL ); - - // Constant buffers - pd3dDeviceContext->VSSetConstantBuffers( 0, 14, pBuffers ); - pd3dDeviceContext->HSSetConstantBuffers( 0, 14, pBuffers ); - pd3dDeviceContext->DSSetConstantBuffers( 0, 14, pBuffers ); - pd3dDeviceContext->GSSetConstantBuffers( 0, 14, pBuffers ); - pd3dDeviceContext->PSSetConstantBuffers( 0, 14, pBuffers ); - - // Resources - pd3dDeviceContext->VSSetShaderResources( 0, 16, pSRVs ); - pd3dDeviceContext->HSSetShaderResources( 0, 16, pSRVs ); - pd3dDeviceContext->DSSetShaderResources( 0, 16, pSRVs ); - pd3dDeviceContext->GSSetShaderResources( 0, 16, pSRVs ); - pd3dDeviceContext->PSSetShaderResources( 0, 16, pSRVs ); - - // Samplers - pd3dDeviceContext->VSSetSamplers( 0, 16, pSamplers ); - pd3dDeviceContext->HSSetSamplers( 0, 16, pSamplers ); - pd3dDeviceContext->DSSetSamplers( 0, 16, pSamplers ); - pd3dDeviceContext->GSSetSamplers( 0, 16, pSamplers ); - pd3dDeviceContext->PSSetSamplers( 0, 16, pSamplers ); - - // Render targets - pd3dDeviceContext->OMSetRenderTargets( 8, pRTVs, pDSV ); - - // States - FLOAT blendFactor[4] = { 0,0,0,0 }; - pd3dDeviceContext->OMSetBlendState( NULL, blendFactor, 0xFFFFFFFF ); - pd3dDeviceContext->OMSetDepthStencilState( NULL, 0 ); - pd3dDeviceContext->RSSetState( NULL ); -} - -//-------------------------------------------------------------------------------------- -// Cleans up the 3D environment by: -// - Calls the device lost callback -// - Calls the device destroyed callback -// - Releases the D3D device -//-------------------------------------------------------------------------------------- -void DXUTCleanup3DEnvironment11( bool bReleaseSettings ) -{ - ID3D11Device* pd3dDevice = DXUTGetD3D11Device(); - - if( pd3dDevice != NULL ) - { - if (GetDXUTState().GetD3D11RasterizerState()!= NULL ) - GetDXUTState().GetD3D11RasterizerState()->Release(); - - // Call ClearState to avoid tons of messy debug spew telling us that we're deleting bound objects - ID3D11DeviceContext* pImmediateContext = DXUTGetD3D11DeviceContext(); - ClearD3D11DeviceContext( pImmediateContext ); - - // Clear state and flush - pImmediateContext->ClearState(); - pImmediateContext->Flush(); - - // Call the app's SwapChain lost callback - GetDXUTState().SetInsideDeviceCallback( true ); - if( GetDXUTState().GetDeviceObjectsReset() ) - { - LPDXUTCALLBACKD3D11SWAPCHAINRELEASING pCallbackSwapChainReleasing = - GetDXUTState().GetD3D11SwapChainReleasingFunc(); - if( pCallbackSwapChainReleasing != NULL ) - pCallbackSwapChainReleasing( GetDXUTState().GetD3D11SwapChainReleasingFuncUserContext() ); - GetDXUTState().SetDeviceObjectsReset( false ); - } - - // Release our old depth stencil texture and view - ID3D11Texture2D* pDS = GetDXUTState().GetD3D11DepthStencil(); - SAFE_RELEASE( pDS ); - GetDXUTState().SetD3D11DepthStencil( NULL ); - ID3D11DepthStencilView* pDSV = GetDXUTState().GetD3D11DepthStencilView(); - SAFE_RELEASE( pDSV ); - GetDXUTState().SetD3D11DepthStencilView( NULL ); - - // Cleanup the render target view - ID3D11RenderTargetView* pRTV = GetDXUTState().GetD3D11RenderTargetView(); - SAFE_RELEASE( pRTV ); - GetDXUTState().SetD3D11RenderTargetView( NULL ); - - // Call the app's device destroyed callback - if( GetDXUTState().GetDeviceObjectsCreated() ) - { - LPDXUTCALLBACKD3D11DEVICEDESTROYED pCallbackDeviceDestroyed = GetDXUTState().GetD3D11DeviceDestroyedFunc(); - if( pCallbackDeviceDestroyed != NULL ) - pCallbackDeviceDestroyed( GetDXUTState().GetD3D11DeviceDestroyedFuncUserContext() ); - GetDXUTState().SetDeviceObjectsCreated( false ); - } - - GetDXUTState().SetInsideDeviceCallback( false ); - - // Release the swap chain - GetDXUTState().SetReleasingSwapChain( true ); - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - if( pSwapChain ) - { - pSwapChain->SetFullscreenState( FALSE, 0 ); - } - SAFE_RELEASE( pSwapChain ); - GetDXUTState().SetDXGISwapChain( NULL ); - GetDXUTState().SetReleasingSwapChain( false ); - - // Release the outputs. - IDXGIOutput** ppOutputArray = GetDXUTState().GetDXGIOutputArray(); - UINT OutputCount = GetDXUTState().GetDXGIOutputArraySize(); - for( UINT o = 0; o < OutputCount; ++o ) - SAFE_RELEASE( ppOutputArray[o] ); - delete[] ppOutputArray; - GetDXUTState().SetDXGIOutputArray( NULL ); - GetDXUTState().SetDXGIOutputArraySize( 0 ); - - // Release the D3D adapter. - IDXGIAdapter* pAdapter = GetDXUTState().GetDXGIAdapter(); - SAFE_RELEASE( pAdapter ); - GetDXUTState().SetDXGIAdapter( NULL ); - - // Release the counters - //DXUTDestroyD3D11Counters(); - - // Release the D3D11 immediate context (if it exists) because it has a extra ref count on it - ID3D11DeviceContext* pd3d11DeviceContext = GetDXUTState().GetD3D11DeviceContext(); - SAFE_RELEASE( pd3d11DeviceContext ); - GetDXUTState().SetD3D11DeviceContext( NULL ); - - // Release the D3D device and in debug configs, displays a message box if there - // are unrelease objects. - if( pd3dDevice ) - { - UINT references = pd3dDevice->Release(); - if( references > 0 ) - { - DXUTDisplayErrorMessage( DXUTERR_NONZEROREFCOUNT ); - DXUT_ERR( L"DXUTCleanup3DEnvironment", DXUTERR_NONZEROREFCOUNT ); - } - } - GetDXUTState().SetD3D11Device( NULL ); - - if( bReleaseSettings ) - { - DXUTDeviceSettings* pOldDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - SAFE_DELETE(pOldDeviceSettings); - GetDXUTState().SetCurrentDeviceSettings( NULL ); - } - - DXGI_SURFACE_DESC* pBackBufferSurfaceDesc = GetDXUTState().GetBackBufferSurfaceDescDXGI(); - ZeroMemory( pBackBufferSurfaceDesc, sizeof( DXGI_SURFACE_DESC ) ); - - GetDXUTState().SetDeviceCreated( false ); - } -} - - -//-------------------------------------------------------------------------------------- -// Low level keyboard hook to disable Windows key to prevent accidental task switching. -//-------------------------------------------------------------------------------------- -LRESULT CALLBACK DXUTLowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam ) -{ - if( nCode < 0 || nCode != HC_ACTION ) // do not process message - return CallNextHookEx( GetDXUTState().GetKeyboardHook(), nCode, wParam, lParam ); - - bool bEatKeystroke = false; - KBDLLHOOKSTRUCT* p = ( KBDLLHOOKSTRUCT* )lParam; - switch( wParam ) - { - case WM_KEYDOWN: - case WM_KEYUP: - { - bEatKeystroke = ( !GetDXUTState().GetAllowShortcutKeys() && - ( p->vkCode == VK_LWIN || p->vkCode == VK_RWIN ) ); - break; - } - } - - if( bEatKeystroke ) - return 1; - else - return CallNextHookEx( GetDXUTState().GetKeyboardHook(), nCode, wParam, lParam ); -} - - - -//-------------------------------------------------------------------------------------- -// Controls how DXUT behaves when fullscreen and windowed mode with regard to -// shortcut keys (Windows keys, StickyKeys shortcut, ToggleKeys shortcut, FilterKeys shortcut) -//-------------------------------------------------------------------------------------- -void WINAPI DXUTSetShortcutKeySettings( bool bAllowWhenFullscreen, bool bAllowWhenWindowed ) -{ - GetDXUTState().SetAllowShortcutKeysWhenWindowed( bAllowWhenWindowed ); - GetDXUTState().SetAllowShortcutKeysWhenFullscreen( bAllowWhenFullscreen ); - - // DXUTInit() records initial accessibility states so don't change them until then - if( GetDXUTState().GetDXUTInited() ) - { - if( DXUTIsWindowed() ) - DXUTAllowShortcutKeys( GetDXUTState().GetAllowShortcutKeysWhenWindowed() ); - else - DXUTAllowShortcutKeys( GetDXUTState().GetAllowShortcutKeysWhenFullscreen() ); - } -} - - -//-------------------------------------------------------------------------------------- -// Enables/disables Windows keys, and disables or restores the StickyKeys/ToggleKeys/FilterKeys -// shortcut to help prevent accidental task switching -//-------------------------------------------------------------------------------------- -void DXUTAllowShortcutKeys( bool bAllowKeys ) -{ - GetDXUTState().SetAllowShortcutKeys( bAllowKeys ); - - if( bAllowKeys ) - { - // Restore StickyKeys/etc to original state and enable Windows key - STICKYKEYS sk = GetDXUTState().GetStartupStickyKeys(); - TOGGLEKEYS tk = GetDXUTState().GetStartupToggleKeys(); - FILTERKEYS fk = GetDXUTState().GetStartupFilterKeys(); - - SystemParametersInfo( SPI_SETSTICKYKEYS, sizeof( STICKYKEYS ), &sk, 0 ); - SystemParametersInfo( SPI_SETTOGGLEKEYS, sizeof( TOGGLEKEYS ), &tk, 0 ); - SystemParametersInfo( SPI_SETFILTERKEYS, sizeof( FILTERKEYS ), &fk, 0 ); - - // Remove the keyboard hoook when it isn't needed to prevent any slow down of other apps - if( GetDXUTState().GetKeyboardHook() ) - { - UnhookWindowsHookEx( GetDXUTState().GetKeyboardHook() ); - GetDXUTState().SetKeyboardHook( NULL ); - } - } - else - { - // Set low level keyboard hook if haven't already - if( GetDXUTState().GetKeyboardHook() == NULL ) - { - // Set the low-level hook procedure. Only works on Windows 2000 and above - OSVERSIONINFO OSVersionInfo; - OSVersionInfo.dwOSVersionInfoSize = sizeof( OSVersionInfo ); - GetVersionEx( &OSVersionInfo ); - if( OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT && OSVersionInfo.dwMajorVersion > 4 ) - { - HHOOK hKeyboardHook = SetWindowsHookEx( WH_KEYBOARD_LL, DXUTLowLevelKeyboardProc, - GetModuleHandle( NULL ), 0 ); - GetDXUTState().SetKeyboardHook( hKeyboardHook ); - } - } - - // Disable StickyKeys/etc shortcuts but if the accessibility feature is on, - // then leave the settings alone as its probably being usefully used - - STICKYKEYS skOff = GetDXUTState().GetStartupStickyKeys(); - if( ( skOff.dwFlags & SKF_STICKYKEYSON ) == 0 ) - { - // Disable the hotkey and the confirmation - skOff.dwFlags &= ~SKF_HOTKEYACTIVE; - skOff.dwFlags &= ~SKF_CONFIRMHOTKEY; - - SystemParametersInfo( SPI_SETSTICKYKEYS, sizeof( STICKYKEYS ), &skOff, 0 ); - } - - TOGGLEKEYS tkOff = GetDXUTState().GetStartupToggleKeys(); - if( ( tkOff.dwFlags & TKF_TOGGLEKEYSON ) == 0 ) - { - // Disable the hotkey and the confirmation - tkOff.dwFlags &= ~TKF_HOTKEYACTIVE; - tkOff.dwFlags &= ~TKF_CONFIRMHOTKEY; - - SystemParametersInfo( SPI_SETTOGGLEKEYS, sizeof( TOGGLEKEYS ), &tkOff, 0 ); - } - - FILTERKEYS fkOff = GetDXUTState().GetStartupFilterKeys(); - if( ( fkOff.dwFlags & FKF_FILTERKEYSON ) == 0 ) - { - // Disable the hotkey and the confirmation - fkOff.dwFlags &= ~FKF_HOTKEYACTIVE; - fkOff.dwFlags &= ~FKF_CONFIRMHOTKEY; - - SystemParametersInfo( SPI_SETFILTERKEYS, sizeof( FILTERKEYS ), &fkOff, 0 ); - } - } -} - - -//-------------------------------------------------------------------------------------- -// Pauses time or rendering. Keeps a ref count so pausing can be layered -//-------------------------------------------------------------------------------------- -void WINAPI DXUTPause( bool bPauseTime, bool bPauseRendering ) -{ - int nPauseTimeCount = GetDXUTState().GetPauseTimeCount(); - if( bPauseTime ) nPauseTimeCount++; - else - nPauseTimeCount--; - if( nPauseTimeCount < 0 ) nPauseTimeCount = 0; - GetDXUTState().SetPauseTimeCount( nPauseTimeCount ); - - int nPauseRenderingCount = GetDXUTState().GetPauseRenderingCount(); - if( bPauseRendering ) nPauseRenderingCount++; - else - nPauseRenderingCount--; - if( nPauseRenderingCount < 0 ) nPauseRenderingCount = 0; - GetDXUTState().SetPauseRenderingCount( nPauseRenderingCount ); - - if( nPauseTimeCount > 0 ) - { - // Stop the scene from animating - DXUTGetGlobalTimer()->Stop(); - } - else - { - // Restart the timer - DXUTGetGlobalTimer()->Start(); - } - - GetDXUTState().SetRenderingPaused( nPauseRenderingCount > 0 ); - GetDXUTState().SetTimePaused( nPauseTimeCount > 0 ); -} - - -//-------------------------------------------------------------------------------------- -// Starts a user defined timer callback -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTSetTimer( LPDXUTCALLBACKTIMER pCallbackTimer, float fTimeoutInSecs, UINT* pnIDEvent, - void* pCallbackUserContext ) -{ - if( pCallbackTimer == NULL ) - return DXUT_ERR_MSGBOX( L"DXUTSetTimer", E_INVALIDARG ); - - HRESULT hr; - DXUT_TIMER DXUTTimer; - DXUTTimer.pCallbackTimer = pCallbackTimer; - DXUTTimer.pCallbackUserContext = pCallbackUserContext; - DXUTTimer.fTimeoutInSecs = fTimeoutInSecs; - DXUTTimer.fCountdown = fTimeoutInSecs; - DXUTTimer.bEnabled = true; - DXUTTimer.nID = GetDXUTState().GetTimerLastID() + 1; - GetDXUTState().SetTimerLastID( DXUTTimer.nID ); - - CGrowableArray * pTimerList = GetDXUTState().GetTimerList(); - if( pTimerList == NULL ) - { - pTimerList = new CGrowableArray ; - if( pTimerList == NULL ) - return E_OUTOFMEMORY; - GetDXUTState().SetTimerList( pTimerList ); - } - - if( FAILED( hr = pTimerList->Add( DXUTTimer ) ) ) - return hr; - - if( pnIDEvent ) - *pnIDEvent = DXUTTimer.nID; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Stops a user defined timer callback -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTKillTimer( UINT nIDEvent ) -{ - CGrowableArray * pTimerList = GetDXUTState().GetTimerList(); - if( pTimerList == NULL ) - return S_FALSE; - - bool bFound = false; - - for( int i = 0; i < pTimerList->GetSize(); i++ ) - { - DXUT_TIMER DXUTTimer = pTimerList->GetAt( i ); - if( DXUTTimer.nID == nIDEvent ) - { - DXUTTimer.bEnabled = false; - pTimerList->SetAt( i, DXUTTimer ); - bFound = true; - break; - } - } - - if( !bFound ) - return DXUT_ERR_MSGBOX( L"DXUTKillTimer", E_INVALIDARG ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Internal helper function to handle calling the user defined timer callbacks -//-------------------------------------------------------------------------------------- -void DXUTHandleTimers() -{ - float fElapsedTime = DXUTGetElapsedTime(); - - CGrowableArray * pTimerList = GetDXUTState().GetTimerList(); - if( pTimerList == NULL ) - return; - - // Walk through the list of timer callbacks - for( int i = 0; i < pTimerList->GetSize(); i++ ) - { - DXUT_TIMER DXUTTimer = pTimerList->GetAt( i ); - if( DXUTTimer.bEnabled ) - { - DXUTTimer.fCountdown -= fElapsedTime; - - // Call the callback if count down expired - if( DXUTTimer.fCountdown < 0 ) - { - DXUTTimer.pCallbackTimer( DXUTTimer.nID, DXUTTimer.pCallbackUserContext ); - // The callback my have changed the timer. - DXUTTimer = pTimerList->GetAt( i ); - DXUTTimer.fCountdown = DXUTTimer.fTimeoutInSecs; - } - pTimerList->SetAt( i, DXUTTimer ); - } - } -} - - -//-------------------------------------------------------------------------------------- -// Display an custom error msg box -//-------------------------------------------------------------------------------------- -void DXUTDisplayErrorMessage( HRESULT hr ) -{ - WCHAR strBuffer[512]; - - int nExitCode; - bool bFound = true; - switch( hr ) - { - case DXUTERR_NODIRECT3D: - { - nExitCode = 2; - if( DXUTDoesAppSupportD3D11() && !DXUTDoesAppSupportD3D9() ) - wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"Could not initialize Direct3D 11. " ); - else - wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"Could not initialize Direct3D 9. Check that the latest version of DirectX is correctly installed on your system. Also make sure that this program was compiled with header files that match the installed DirectX DLLs." ); - break; - } - case DXUTERR_NOCOMPATIBLEDEVICES: - nExitCode = 3; - if( GetSystemMetrics(0x1000) != 0 ) // SM_REMOTESESSION - wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"Direct3D does not work over a remote session." ); - else - wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"Could not find any compatible Direct3D devices." ); - break; - case DXUTERR_MEDIANOTFOUND: nExitCode = 4; wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"Could not find required media." ); break; - case DXUTERR_NONZEROREFCOUNT: nExitCode = 5; wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"The Direct3D device has a non-zero reference count, meaning some objects were not released." ); break; - case DXUTERR_CREATINGDEVICE: nExitCode = 6; wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"Failed creating the Direct3D device." ); break; - case DXUTERR_RESETTINGDEVICE: nExitCode = 7; wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"Failed resetting the Direct3D device." ); break; - case DXUTERR_CREATINGDEVICEOBJECTS: nExitCode = 8; wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"An error occurred in the device create callback function." ); break; - case DXUTERR_RESETTINGDEVICEOBJECTS: nExitCode = 9; wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"An error occurred in the device reset callback function." ); break; - // nExitCode 10 means the app exited using a REF device - case DXUTERR_DEVICEREMOVED: nExitCode = 11; wcscpy_s( strBuffer, ARRAYSIZE(strBuffer), L"The Direct3D device was removed." ); break; - default: bFound = false; nExitCode = 1; break; // nExitCode 1 means the API was incorrectly called - - } - - GetDXUTState().SetExitCode(nExitCode); - - bool bShowMsgBoxOnError = GetDXUTState().GetShowMsgBoxOnError(); - if( bFound && bShowMsgBoxOnError ) - { - if( DXUTGetWindowTitle()[0] == 0 ) - MessageBox( DXUTGetHWND(), strBuffer, L"DXUT Application", MB_ICONERROR | MB_OK ); - else - MessageBox( DXUTGetHWND(), strBuffer, DXUTGetWindowTitle(), MB_ICONERROR | MB_OK ); - } -} - - -//-------------------------------------------------------------------------------------- -// Internal function to map MK_* to an array index -//-------------------------------------------------------------------------------------- -int DXUTMapButtonToArrayIndex( BYTE vButton ) -{ - switch( vButton ) - { - case MK_LBUTTON: - return 0; - case VK_MBUTTON: - case MK_MBUTTON: - return 1; - case MK_RBUTTON: - return 2; - case VK_XBUTTON1: - case MK_XBUTTON1: - return 3; - case VK_XBUTTON2: - case MK_XBUTTON2: - return 4; - } - - return 0; -} - - - -//-------------------------------------------------------------------------------------- -// Toggle between full screen and windowed -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTToggleFullScreen() -{ - HRESULT hr; - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - DXUTDeviceSettings orginalDeviceSettings = DXUTGetDeviceSettings(); - - if (deviceSettings.ver == DXUT_D3D11_DEVICE) { - deviceSettings.d3d11.sd.Windowed = !deviceSettings.d3d11.sd.Windowed; // datut - if (!deviceSettings.d3d11.sd.Windowed) { - DXGI_MODE_DESC adapterDesktopDisplayMode = - { - 800, 600, { 60, 1 }, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB - }; - DXUTGetD3D11AdapterDisplayMode( deviceSettings.d3d11.AdapterOrdinal, 0, &adapterDesktopDisplayMode ); - - - deviceSettings.d3d11.sd.BufferDesc = adapterDesktopDisplayMode; - }else { - RECT r = DXUTGetWindowClientRectAtModeChange(); - deviceSettings.d3d11.sd.BufferDesc.Height = r.bottom; - deviceSettings.d3d11.sd.BufferDesc.Width = r.right; - } - }else if (deviceSettings.ver == DXUT_D3D9_DEVICE){ - deviceSettings.d3d9.pp.Windowed = !deviceSettings.d3d9.pp.Windowed; - if (!deviceSettings.d3d9.pp.Windowed) { - D3DDISPLAYMODE adapterDesktopDisplayMode; - IDirect3D9* pD3D = DXUTGetD3D9Object(); - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - pD3D->GetAdapterDisplayMode( pDeviceSettings->d3d9.AdapterOrdinal, &adapterDesktopDisplayMode ); - deviceSettings.d3d9.pp.BackBufferWidth = adapterDesktopDisplayMode.Width; - deviceSettings.d3d9.pp.BackBufferHeight = adapterDesktopDisplayMode.Height; - deviceSettings.d3d9.pp.BackBufferFormat = adapterDesktopDisplayMode.Format; - } else { - RECT r = DXUTGetWindowClientRectAtModeChange(); - deviceSettings.d3d9.pp.BackBufferHeight= r.bottom; - deviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = 0; - deviceSettings.d3d9.pp.BackBufferWidth = r.right; - } - } - - hr = DXUTChangeDevice( &deviceSettings, NULL, NULL, false, false ); - - // If hr == E_ABORT, this means the app rejected the device settings in the ModifySettingsCallback so nothing changed - if( FAILED( hr ) && ( hr != E_ABORT ) ) - { - // Failed creating device, try to switch back. - HRESULT hr2 = DXUTChangeDevice( &orginalDeviceSettings, NULL, NULL, false, false ); - if( FAILED( hr2 ) ) - { - // If this failed, then shutdown - DXUTShutdown(); - } - } - - return hr; -} - - -//-------------------------------------------------------------------------------------- -// Toggle between HAL and WARP -//-------------------------------------------------------------------------------------- - -HRESULT WINAPI DXUTToggleWARP () { - HRESULT hr; - - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - DXUTDeviceSettings orginalDeviceSettings = DXUTGetDeviceSettings(); - - // Toggle between REF & HAL - if( DXUTIsCurrentDeviceD3D9() ) - { - - } - else - { - ID3D11SwitchToRef* pD3D11STR = NULL; - hr = DXUTGetD3D11Device()->QueryInterface( __uuidof( *pD3D11STR ), ( LPVOID* )&pD3D11STR ); - if( SUCCEEDED( hr ) ) - { - pD3D11STR->SetUseRef( pD3D11STR->GetUseRef() ? FALSE : TRUE ); - SAFE_RELEASE( pD3D11STR ); - return S_OK; - } - - if( deviceSettings.d3d11.DriverType == D3D_DRIVER_TYPE_HARDWARE || deviceSettings.d3d11.DriverType == D3D_DRIVER_TYPE_REFERENCE ) - deviceSettings.d3d11.DriverType = D3D_DRIVER_TYPE_WARP; - else if( deviceSettings.d3d11.DriverType == D3D_DRIVER_TYPE_REFERENCE || deviceSettings.d3d11.DriverType == D3D_DRIVER_TYPE_WARP ) - deviceSettings.d3d11.DriverType = D3D_DRIVER_TYPE_HARDWARE; - } - - hr = DXUTSnapDeviceSettingsToEnumDevice(&deviceSettings, false); - if( SUCCEEDED( hr ) ) - { - // Create a Direct3D device using the new device settings. - // If there is an existing device, then it will either reset or recreate the scene. - hr = DXUTChangeDevice( &deviceSettings, NULL, NULL, false, false ); - - // If hr == E_ABORT, this means the app rejected the device settings in the ModifySettingsCallback so nothing changed - if( FAILED( hr ) && ( hr != E_ABORT ) ) - { - // Failed creating device, try to switch back. - HRESULT hr2 = DXUTChangeDevice( &orginalDeviceSettings, NULL, NULL, false, false ); - if( FAILED( hr2 ) ) - { - // If this failed, then shutdown - DXUTShutdown(); - } - } - } - - return hr; -} -//-------------------------------------------------------------------------------------- -// Toggle between HAL and REF -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTToggleREF() -{ - HRESULT hr; - - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - DXUTDeviceSettings orginalDeviceSettings = DXUTGetDeviceSettings(); - - // Toggle between REF & HAL - if( DXUTIsCurrentDeviceD3D9() ) - { - if( deviceSettings.d3d9.DeviceType == D3DDEVTYPE_HAL ) - deviceSettings.d3d9.DeviceType = D3DDEVTYPE_REF; - else if( deviceSettings.d3d9.DeviceType == D3DDEVTYPE_REF ) - deviceSettings.d3d9.DeviceType = D3DDEVTYPE_HAL; - } - else - { - ID3D11SwitchToRef* pD3D11STR = NULL; - hr = DXUTGetD3D11Device()->QueryInterface( __uuidof( *pD3D11STR ), ( LPVOID* )&pD3D11STR ); - if( SUCCEEDED( hr ) ) - { - pD3D11STR->SetUseRef( pD3D11STR->GetUseRef() ? FALSE : TRUE ); - SAFE_RELEASE( pD3D11STR ); - return S_OK; - } - - if( deviceSettings.d3d11.DriverType == D3D_DRIVER_TYPE_HARDWARE ) - deviceSettings.d3d11.DriverType = D3D_DRIVER_TYPE_REFERENCE; - else if( deviceSettings.d3d11.DriverType == D3D_DRIVER_TYPE_REFERENCE ) - deviceSettings.d3d11.DriverType = D3D_DRIVER_TYPE_HARDWARE; - } - - hr = DXUTSnapDeviceSettingsToEnumDevice(&deviceSettings, false); - if( SUCCEEDED( hr ) ) - { - // Create a Direct3D device using the new device settings. - // If there is an existing device, then it will either reset or recreate the scene. - hr = DXUTChangeDevice( &deviceSettings, NULL, NULL, false, false ); - - // If hr == E_ABORT, this means the app rejected the device settings in the ModifySettingsCallback so nothing changed - if( FAILED( hr ) && ( hr != E_ABORT ) ) - { - // Failed creating device, try to switch back. - HRESULT hr2 = DXUTChangeDevice( &orginalDeviceSettings, NULL, NULL, false, false ); - if( FAILED( hr2 ) ) - { - // If this failed, then shutdown - DXUTShutdown(); - } - } - } - - return hr; -} - -//-------------------------------------------------------------------------------------- -// Checks to see if DXGI has switched us out of fullscreen or windowed mode -//-------------------------------------------------------------------------------------- -void DXUTCheckForDXGIFullScreenSwitch() -{ - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - if( !DXUTIsD3D9( pDeviceSettings ) ) - { - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - DXGI_SWAP_CHAIN_DESC SCDesc; - pSwapChain->GetDesc( &SCDesc ); - - BOOL bIsWindowed = ( BOOL )DXUTIsWindowed(); - if( bIsWindowed != SCDesc.Windowed ) - { - pDeviceSettings->d3d11.sd.Windowed = SCDesc.Windowed; - - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - - if( bIsWindowed ) - { - GetDXUTState().SetWindowBackBufferWidthAtModeChange( deviceSettings.d3d11.sd.BufferDesc.Width ); - GetDXUTState().SetWindowBackBufferHeightAtModeChange( deviceSettings.d3d11.sd.BufferDesc.Height ); - } - else - { - GetDXUTState().SetFullScreenBackBufferWidthAtModeChange( deviceSettings.d3d11.sd.BufferDesc.Width ); - GetDXUTState().SetFullScreenBackBufferHeightAtModeChange( deviceSettings.d3d11.sd.BufferDesc.Height ); - } - } - } -} - -void DXUTResizeDXGIBuffers( UINT Width, UINT Height, BOOL bFullScreen ) -{ - HRESULT hr = S_OK; - RECT rcCurrentClient; - GetClientRect( DXUTGetHWND(), &rcCurrentClient ); - - DXUTDeviceSettings* pDevSettings = GetDXUTState().GetCurrentDeviceSettings(); - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - - ID3D11Device* pd3dDevice = DXUTGetD3D11Device(); - ID3D11DeviceContext* pd3dImmediateContext = DXUTGetD3D11DeviceContext(); - - // Determine if we're fullscreen - pDevSettings->d3d11.sd.Windowed = !bFullScreen; - - // Call releasing - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D11SWAPCHAINRELEASING pCallbackSwapChainReleasing = GetDXUTState().GetD3D11SwapChainReleasingFunc - (); - if( pCallbackSwapChainReleasing != NULL ) - pCallbackSwapChainReleasing( GetDXUTState().GetD3D11SwapChainResizedFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - - // Release our old depth stencil texture and view - ID3D11Texture2D* pDS = GetDXUTState().GetD3D11DepthStencil(); - SAFE_RELEASE( pDS ); - GetDXUTState().SetD3D11DepthStencil( NULL ); - ID3D11DepthStencilView* pDSV = GetDXUTState().GetD3D11DepthStencilView(); - SAFE_RELEASE( pDSV ); - GetDXUTState().SetD3D11DepthStencilView( NULL ); - - // Release our old render target view - ID3D11RenderTargetView* pRTV = GetDXUTState().GetD3D11RenderTargetView(); - SAFE_RELEASE( pRTV ); - GetDXUTState().SetD3D11RenderTargetView( NULL ); - - // Alternate between 0 and DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH when resizing buffers. - // When in windowed mode, we want 0 since this allows the app to change to the desktop - // resolution from windowed mode during alt+enter. However, in fullscreen mode, we want - // the ability to change display modes from the Device Settings dialog. Therefore, we - // want to set the DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH flag. - UINT Flags = 0; - if( bFullScreen ) - Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; - - // ResizeBuffers - V( pSwapChain->ResizeBuffers( pDevSettings->d3d11.sd.BufferCount, - Width, - Height, - pDevSettings->d3d11.sd.BufferDesc.Format, - Flags ) ); - - if( !GetDXUTState().GetDoNotStoreBufferSize() ) - { - pDevSettings->d3d11.sd.BufferDesc.Width = ( UINT )rcCurrentClient.right; - pDevSettings->d3d11.sd.BufferDesc.Height = ( UINT )rcCurrentClient.bottom; - } - - // Save off backbuffer desc - DXUTUpdateBackBufferDesc(); - - // Update the device stats text - DXUTUpdateStaticFrameStats(); - - // Setup the render target view and viewport - hr = DXUTCreateD3D11Views( pd3dDevice, pd3dImmediateContext, pDevSettings ); - if( FAILED( hr ) ) - { - DXUT_ERR( L"DXUTCreateD3D11Views", hr ); - return; - } - - // Setup cursor based on current settings (window/fullscreen mode, show cursor state, clip cursor state) - DXUTSetupCursor(); - - // Call the app's SwapChain reset callback - GetDXUTState().SetInsideDeviceCallback( true ); - const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc = DXUTGetDXGIBackBufferSurfaceDesc(); - LPDXUTCALLBACKD3D11SWAPCHAINRESIZED pCallbackSwapChainResized = GetDXUTState().GetD3D11SwapChainResizedFunc(); - hr = S_OK; - if( pCallbackSwapChainResized != NULL ) - hr = pCallbackSwapChainResized( pd3dDevice, pSwapChain, pBackBufferSurfaceDesc, - GetDXUTState().GetD3D11SwapChainResizedFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - if( FAILED( hr ) ) - { - // If callback failed, cleanup - DXUT_ERR( L"DeviceResetCallback", hr ); - if( hr != DXUTERR_MEDIANOTFOUND ) - hr = DXUTERR_RESETTINGDEVICEOBJECTS; - - GetDXUTState().SetInsideDeviceCallback( true ); - LPDXUTCALLBACKD3D11SWAPCHAINRELEASING pCallbackSwapChainReleasing = - GetDXUTState().GetD3D11SwapChainReleasingFunc(); - if( pCallbackSwapChainReleasing != NULL ) - pCallbackSwapChainReleasing( GetDXUTState().GetD3D11SwapChainResizedFuncUserContext() ); - GetDXUTState().SetInsideDeviceCallback( false ); - DXUTPause( false, false ); - PostQuitMessage( 0 ); - } - else - { - GetDXUTState().SetDeviceObjectsReset( true ); - DXUTPause( false, false ); - } -} - -//-------------------------------------------------------------------------------------- -// Checks if DXGI buffers need to change -//-------------------------------------------------------------------------------------- -void DXUTCheckForDXGIBufferChange() -{ - if(DXUTGetDXGISwapChain() != NULL && !GetDXUTState().GetReleasingSwapChain() ) - { - //DXUTgetdxgi - IDXGISwapChain* pSwapChain = DXUTGetDXGISwapChain(); - - // Determine if we're fullscreen - BOOL bFullScreen; - pSwapChain->GetFullscreenState( &bFullScreen, NULL ); - - DXUTResizeDXGIBuffers( 0, 0, bFullScreen ); - - ShowWindow( DXUTGetHWND(), SW_SHOW ); - } -} - -//-------------------------------------------------------------------------------------- -// Checks if the window client rect has changed and if it has, then reset the device -//-------------------------------------------------------------------------------------- -void DXUTCheckForWindowSizeChange() -{ - // Skip the check for various reasons - - if( GetDXUTState().GetIgnoreSizeChange() || !GetDXUTState().GetDeviceCreated() || - ( DXUTIsCurrentDeviceD3D9() && !DXUTIsWindowed() ) ) - return; - - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - if( DXUTIsD3D9( &deviceSettings ) ) - { - RECT rcCurrentClient; - GetClientRect( DXUTGetHWND(), &rcCurrentClient ); - - if( ( UINT )rcCurrentClient.right != DXUTGetBackBufferWidthFromDS( &deviceSettings ) || - ( UINT )rcCurrentClient.bottom != DXUTGetBackBufferHeightFromDS( &deviceSettings ) ) - { - // A new window size will require a new backbuffer size size - // Tell DXUTChangeDevice and D3D to size according to the HWND's client rect - if( DXUTIsD3D9( &deviceSettings ) ) deviceSettings.d3d9.pp.BackBufferWidth = 0; else deviceSettings.d3d11.sd.BufferDesc.Width = 0; - if( DXUTIsD3D9( &deviceSettings ) ) deviceSettings.d3d9.pp.BackBufferHeight = 0; else deviceSettings.d3d11.sd.BufferDesc.Height = 0; - - DXUTChangeDevice( &deviceSettings, NULL, NULL, false, false ); - } - } - else - { - DXUTCheckForDXGIBufferChange(); - } -} - - -//-------------------------------------------------------------------------------------- -// Checks to see if the HWND changed monitors, and if it did it creates a device -// from the monitor's adapter and recreates the scene. -//-------------------------------------------------------------------------------------- -void DXUTCheckForWindowChangingMonitors() -{ - // Skip this check for various reasons - if( !GetDXUTState().GetAutoChangeAdapter() || - GetDXUTState().GetIgnoreSizeChange() || !GetDXUTState().GetDeviceCreated() || !DXUTIsWindowed() ) - return; - - HRESULT hr; - HMONITOR hWindowMonitor = DXUTMonitorFromWindow( DXUTGetHWND(), MONITOR_DEFAULTTOPRIMARY ); - HMONITOR hAdapterMonitor = GetDXUTState().GetAdapterMonitor(); - if( hWindowMonitor != hAdapterMonitor ) - { - UINT newOrdinal; - if( SUCCEEDED( DXUTGetAdapterOrdinalFromMonitor( hWindowMonitor, &newOrdinal ) ) ) - { - // Find the closest valid device settings with the new ordinal - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - if( DXUTIsD3D9( &deviceSettings ) ) - { - deviceSettings.d3d9.AdapterOrdinal = newOrdinal; - } - else - { - deviceSettings.d3d11.AdapterOrdinal = newOrdinal; - UINT newOutput; - if( SUCCEEDED( DXUTGetOutputOrdinalFromMonitor( hWindowMonitor, &newOutput ) ) ) - deviceSettings.d3d11.Output = newOutput; - } - - hr = DXUTSnapDeviceSettingsToEnumDevice( &deviceSettings, false ); - if( SUCCEEDED( hr ) ) - { - // Create a Direct3D device using the new device settings. - // If there is an existing device, then it will either reset or recreate the scene. - hr = DXUTChangeDevice( &deviceSettings, NULL, NULL, false, false ); - - // If hr == E_ABORT, this means the app rejected the device settings in the ModifySettingsCallback - if( hr == E_ABORT ) - { - // so nothing changed and keep from attempting to switch adapters next time - GetDXUTState().SetAutoChangeAdapter( false ); - } - else if( FAILED( hr ) ) - { - DXUTShutdown(); - DXUTPause( false, false ); - return; - } - } - } - } -} - - -//-------------------------------------------------------------------------------------- -// Renders the scene using either D3D9 or D3D11 -//-------------------------------------------------------------------------------------- -void WINAPI DXUTRender3DEnvironment() -{ - if( DXUTIsCurrentDeviceD3D9() ) - DXUTRender3DEnvironment9(); - else - DXUTRender3DEnvironment11(); -} - - -//-------------------------------------------------------------------------------------- -// Cleans up both the D3D9 and D3D11 3D environment (but only one should be active at a time) -//-------------------------------------------------------------------------------------- -void DXUTCleanup3DEnvironment( bool bReleaseSettings ) -{ - if( DXUTGetD3D9Device() ) - DXUTCleanup3DEnvironment9( bReleaseSettings ); - if( DXUTGetD3D11Device() ) - DXUTCleanup3DEnvironment11( bReleaseSettings ); -} - - -//-------------------------------------------------------------------------------------- -// Returns the HMONITOR attached to an adapter/output -//-------------------------------------------------------------------------------------- -HMONITOR DXUTGetMonitorFromAdapter( DXUTDeviceSettings* pDeviceSettings ) -{ - if( pDeviceSettings->ver == DXUT_D3D9_DEVICE ) - { - IDirect3D9* pD3D = DXUTGetD3D9Object(); - return pD3D->GetAdapterMonitor( pDeviceSettings->d3d9.AdapterOrdinal ); - } - else if( pDeviceSettings->ver == DXUT_D3D11_DEVICE ) - { - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - CD3D11EnumOutputInfo* pOutputInfo = pD3DEnum->GetOutputInfo( pDeviceSettings->d3d11.AdapterOrdinal, - pDeviceSettings->d3d11.Output ); - if( !pOutputInfo ) - return 0; - return DXUTMonitorFromRect( &pOutputInfo->Desc.DesktopCoordinates, MONITOR_DEFAULTTONEAREST ); - } - - return 0; -} - - -//-------------------------------------------------------------------------------------- -// Look for an adapter ordinal that is tied to a HMONITOR -//-------------------------------------------------------------------------------------- -HRESULT DXUTGetAdapterOrdinalFromMonitor( HMONITOR hMonitor, UINT* pAdapterOrdinal ) -{ - *pAdapterOrdinal = 0; - - if( DXUTIsCurrentDeviceD3D9() ) - { - CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration(); - IDirect3D9* pD3D = DXUTGetD3D9Object(); - - CGrowableArray * pAdapterList = pd3dEnum->GetAdapterInfoList(); - for( int iAdapter = 0; iAdapter < pAdapterList->GetSize(); iAdapter++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo = pAdapterList->GetAt( iAdapter ); - HMONITOR hAdapterMonitor = pD3D->GetAdapterMonitor( pAdapterInfo->AdapterOrdinal ); - if( hAdapterMonitor == hMonitor ) - { - *pAdapterOrdinal = pAdapterInfo->AdapterOrdinal; - return S_OK; - } - } - } - else - { - // Get the monitor handle information - MONITORINFOEX mi; - mi.cbSize = sizeof( MONITORINFOEX ); - DXUTGetMonitorInfo( hMonitor, &mi ); - - // Search for this monitor in our enumeration hierarchy. - CD3D11Enumeration* pd3dEnum = DXUTGetD3D11Enumeration(); - CGrowableArray * pAdapterList = pd3dEnum->GetAdapterInfoList(); - for( int iAdapter = 0; iAdapter < pAdapterList->GetSize(); ++iAdapter ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterList->GetAt( iAdapter ); - for( int o = 0; o < pAdapterInfo->outputInfoList.GetSize(); ++o ) - { - CD3D11EnumOutputInfo* pOutputInfo = pAdapterInfo->outputInfoList.GetAt( o ); - // Convert output device name from MBCS to Unicode - if( wcsncmp( pOutputInfo->Desc.DeviceName, mi.szDevice, sizeof( mi.szDevice ) / sizeof - ( mi.szDevice[0] ) ) == 0 ) - { - *pAdapterOrdinal = pAdapterInfo->AdapterOrdinal; - return S_OK; - } - } - } - } - - return E_FAIL; -} - -//-------------------------------------------------------------------------------------- -// Look for a monitor ordinal that is tied to a HMONITOR (D3D11-only) -//-------------------------------------------------------------------------------------- -HRESULT DXUTGetOutputOrdinalFromMonitor( HMONITOR hMonitor, UINT* pOutputOrdinal ) -{ - // Get the monitor handle information - MONITORINFOEX mi; - mi.cbSize = sizeof( MONITORINFOEX ); - DXUTGetMonitorInfo( hMonitor, &mi ); - - // Search for this monitor in our enumeration hierarchy. - CD3D11Enumeration* pd3dEnum = DXUTGetD3D11Enumeration(); - CGrowableArray * pAdapterList = pd3dEnum->GetAdapterInfoList(); - for( int iAdapter = 0; iAdapter < pAdapterList->GetSize(); ++iAdapter ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterList->GetAt( iAdapter ); - for( int o = 0; o < pAdapterInfo->outputInfoList.GetSize(); ++o ) - { - CD3D11EnumOutputInfo* pOutputInfo = pAdapterInfo->outputInfoList.GetAt( o ); - DXGI_OUTPUT_DESC Desc; - pOutputInfo->m_pOutput->GetDesc( &Desc ); - - if( hMonitor == Desc.Monitor ) - { - *pOutputOrdinal = pOutputInfo->Output; - return S_OK; - } - } - } - - return E_FAIL; -} - -//-------------------------------------------------------------------------------------- -// This method is called when D3DERR_DEVICEREMOVED is returned from an API. DXUT -// calls the application's DeviceRemoved callback to inform it of the event. The -// application returns true if it wants DXUT to look for a closest device to run on. -// If no device is found, or the app returns false, DXUT shuts down. -//-------------------------------------------------------------------------------------- -HRESULT DXUTHandleDeviceRemoved() -{ - HRESULT hr = S_OK; - - // Device has been removed. Call the application's callback if set. If no callback - // has been set, then just look for a new device - bool bLookForNewDevice = true; - LPDXUTCALLBACKDEVICEREMOVED pDeviceRemovedFunc = GetDXUTState().GetDeviceRemovedFunc(); - if( pDeviceRemovedFunc ) - bLookForNewDevice = pDeviceRemovedFunc( GetDXUTState().GetDeviceRemovedFuncUserContext() ); - - if( bLookForNewDevice ) - { - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - - - hr = DXUTSnapDeviceSettingsToEnumDevice( pDeviceSettings, false); - if( SUCCEEDED( hr ) ) - { - // Change to a Direct3D device created from the new device settings - // that is compatible with the removed device. - hr = DXUTChangeDevice( pDeviceSettings, NULL, NULL, true, false ); - if( SUCCEEDED( hr ) ) - return S_OK; - } - } - - // The app does not wish to continue or continuing is not possible. - return DXUTERR_DEVICEREMOVED; -} - - -//-------------------------------------------------------------------------------------- -// Stores back buffer surface desc in GetDXUTState().GetBackBufferSurfaceDesc10() -//-------------------------------------------------------------------------------------- -void DXUTUpdateBackBufferDesc() -{ - if( DXUTIsCurrentDeviceD3D9() ) - { - HRESULT hr; - IDirect3DSurface9* pBackBuffer; - hr = GetDXUTState().GetD3D9Device()->GetBackBuffer( 0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer ); - D3DSURFACE_DESC* pBBufferSurfaceDesc = GetDXUTState().GetBackBufferSurfaceDesc9(); - ZeroMemory( pBBufferSurfaceDesc, sizeof( D3DSURFACE_DESC ) ); - if( SUCCEEDED( hr ) ) - { - pBackBuffer->GetDesc( pBBufferSurfaceDesc ); - SAFE_RELEASE( pBackBuffer ); - } - } - else - { - HRESULT hr; - ID3D11Texture2D* pBackBuffer; - hr = GetDXUTState().GetDXGISwapChain()->GetBuffer( 0, __uuidof( *pBackBuffer ), ( LPVOID* )&pBackBuffer ); - DXGI_SURFACE_DESC* pBBufferSurfaceDesc = GetDXUTState().GetBackBufferSurfaceDescDXGI(); - ZeroMemory( pBBufferSurfaceDesc, sizeof( DXGI_SURFACE_DESC ) ); - if( SUCCEEDED( hr ) ) - { - D3D11_TEXTURE2D_DESC TexDesc; - pBackBuffer->GetDesc( &TexDesc ); - pBBufferSurfaceDesc->Width = ( UINT )TexDesc.Width; - pBBufferSurfaceDesc->Height = ( UINT )TexDesc.Height; - pBBufferSurfaceDesc->Format = TexDesc.Format; - pBBufferSurfaceDesc->SampleDesc = TexDesc.SampleDesc; - SAFE_RELEASE( pBackBuffer ); - } - } -} - - -//-------------------------------------------------------------------------------------- -// Setup cursor based on current settings (window/fullscreen mode, show cursor state, clip cursor state) -//-------------------------------------------------------------------------------------- -void DXUTSetupCursor() -{ - if( DXUTIsCurrentDeviceD3D9() ) - { - // Show the cursor again if returning to fullscreen - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - if( !DXUTIsWindowed() && pd3dDevice ) - { - if( GetDXUTState().GetShowCursorWhenFullScreen() ) - { - SetCursor( NULL ); // Turn off Windows cursor in full screen mode - HCURSOR hCursor = ( HCURSOR )( ULONG_PTR )GetClassLongPtr( DXUTGetHWNDDeviceFullScreen(), - GCLP_HCURSOR ); - DXUTSetD3D9DeviceCursor( pd3dDevice, hCursor, false ); - DXUTGetD3D9Device()->ShowCursor( true ); - } - else - { - SetCursor( NULL ); // Turn off Windows cursor in full screen mode - DXUTGetD3D9Device()->ShowCursor( false ); - } - } - - // Clip cursor if requested - if( !DXUTIsWindowed() && GetDXUTState().GetClipCursorWhenFullScreen() ) - { - // Confine cursor to full screen window - RECT rcWindow; - GetWindowRect( DXUTGetHWNDDeviceFullScreen(), &rcWindow ); - ClipCursor( &rcWindow ); - } - else - { - ClipCursor( NULL ); - } - } - else - { - // Clip cursor if requested - if( !DXUTIsWindowed() && GetDXUTState().GetClipCursorWhenFullScreen() ) - { - // Confine cursor to full screen window - RECT rcWindow; - GetWindowRect( DXUTGetHWNDDeviceFullScreen(), &rcWindow ); - ClipCursor( &rcWindow ); - } - else - { - ClipCursor( NULL ); - } - } -} - - -//-------------------------------------------------------------------------------------- -// Updates the static part of the frame stats so it doesn't have be generated every frame -//-------------------------------------------------------------------------------------- -void DXUTUpdateStaticFrameStats() -{ - if( GetDXUTState().GetNoStats() ) - return; - - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - if( NULL == pDeviceSettings ) - return; - - if( DXUTIsD3D9( pDeviceSettings ) ) - { - CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration(); - if( NULL == pd3dEnum ) - return; - - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = pd3dEnum->GetDeviceSettingsCombo( - pDeviceSettings->d3d9.AdapterOrdinal, pDeviceSettings->d3d9.DeviceType, - pDeviceSettings->d3d9.AdapterFormat, pDeviceSettings->d3d9.pp.BackBufferFormat, - pDeviceSettings->d3d9.pp.Windowed ); - if( NULL == pDeviceSettingsCombo ) - return; - - WCHAR strFmt[100]; - D3DPRESENT_PARAMETERS* pPP = &pDeviceSettings->d3d9.pp; - - if( pDeviceSettingsCombo->AdapterFormat == pDeviceSettingsCombo->BackBufferFormat ) - { - wcscpy_s( strFmt, 100, DXUTD3DFormatToString( pDeviceSettingsCombo->AdapterFormat, false ) ); - } - else - { - swprintf_s( strFmt, 100, L"backbuf %s, adapter %s", - DXUTD3DFormatToString( pDeviceSettingsCombo->BackBufferFormat, false ), - DXUTD3DFormatToString( pDeviceSettingsCombo->AdapterFormat, false ) ); - } - - WCHAR strDepthFmt[100]; - if( pPP->EnableAutoDepthStencil ) - { - swprintf_s( strDepthFmt, 100, L" (%s)", DXUTD3DFormatToString( pPP->AutoDepthStencilFormat, false ) ); - } - else - { - // No depth buffer - strDepthFmt[0] = 0; - } - - WCHAR strMultiSample[100]; - switch( pPP->MultiSampleType ) - { - case D3DMULTISAMPLE_NONMASKABLE: - wcscpy_s( strMultiSample, 100, L" (Nonmaskable Multisample)" ); break; - case D3DMULTISAMPLE_NONE: - wcscpy_s( strMultiSample, 100, L"" ); break; - default: - swprintf_s( strMultiSample, 100, L" (%dx Multisample)", pPP->MultiSampleType ); break; - } - - WCHAR* pstrStaticFrameStats = GetDXUTState().GetStaticFrameStats(); - swprintf_s( pstrStaticFrameStats, 256, L"D3D9 %%sVsync %s (%dx%d), %s%s%s", - ( pPP->PresentationInterval == D3DPRESENT_INTERVAL_IMMEDIATE ) ? L"off" : L"on", - pPP->BackBufferWidth, pPP->BackBufferHeight, - strFmt, strDepthFmt, strMultiSample ); - } - else - { - // D3D11 - CD3D11Enumeration* pd3dEnum = DXUTGetD3D11Enumeration(); - if( NULL == pd3dEnum ) - return; - - CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo = pd3dEnum->GetDeviceSettingsCombo( - pDeviceSettings->d3d11.AdapterOrdinal, pDeviceSettings->d3d11.DriverType, pDeviceSettings->d3d11.Output, - pDeviceSettings->d3d11.sd.BufferDesc.Format, pDeviceSettings->d3d11.sd.Windowed ); - if( NULL == pDeviceSettingsCombo ) - return; - - WCHAR strFmt[100]; - - wcscpy_s( strFmt, 100, DXUTDXGIFormatToString( pDeviceSettingsCombo->BackBufferFormat, false ) ); - - WCHAR strMultiSample[100]; - swprintf_s( strMultiSample, 100, L" (MS%u, Q%u)", pDeviceSettings->d3d11.sd.SampleDesc.Count, - pDeviceSettings->d3d11.sd.SampleDesc.Quality ); - - WCHAR* pstrStaticFrameStats = GetDXUTState().GetStaticFrameStats(); - swprintf_s( pstrStaticFrameStats, 256, L"D3D11 %%sVsync %s (%dx%d), %s%s", - ( pDeviceSettings->d3d11.SyncInterval == 0 ) ? L"off" : L"on", - pDeviceSettings->d3d11.sd.BufferDesc.Width, pDeviceSettings->d3d11.sd.BufferDesc.Height, - strFmt, strMultiSample ); - } -} - - -//-------------------------------------------------------------------------------------- -// Updates the frames/sec stat once per second -//-------------------------------------------------------------------------------------- -void DXUTUpdateFrameStats() -{ - if( GetDXUTState().GetNoStats() ) - return; - - // Keep track of the frame count - double fLastTime = GetDXUTState().GetLastStatsUpdateTime(); - DWORD dwFrames = GetDXUTState().GetLastStatsUpdateFrames(); - double fAbsTime = GetDXUTState().GetAbsoluteTime(); - dwFrames++; - GetDXUTState().SetLastStatsUpdateFrames( dwFrames ); - - // Update the scene stats once per second - if( fAbsTime - fLastTime > 1.0f ) - { - float fFPS = ( float )( dwFrames / ( fAbsTime - fLastTime ) ); - GetDXUTState().SetFPS( fFPS ); - GetDXUTState().SetLastStatsUpdateTime( fAbsTime ); - GetDXUTState().SetLastStatsUpdateFrames( 0 ); - - WCHAR* pstrFPS = GetDXUTState().GetFPSStats(); - swprintf_s( pstrFPS, 64, L"%0.2f fps ", fFPS ); - } -} - -//-------------------------------------------------------------------------------------- -// Returns a string describing the current device. If bShowFPS is true, then -// the string contains the frames/sec. If "-nostats" was used in -// the command line, the string will be blank -//-------------------------------------------------------------------------------------- -LPCWSTR WINAPI DXUTGetFrameStats( bool bShowFPS ) -{ - WCHAR* pstrFrameStats = GetDXUTState().GetFrameStats(); - WCHAR* pstrFPS = ( bShowFPS ) ? GetDXUTState().GetFPSStats() : L""; - swprintf_s( pstrFrameStats, 256, GetDXUTState().GetStaticFrameStats(), pstrFPS ); - return pstrFrameStats; -} - - -//-------------------------------------------------------------------------------------- -// Updates the string which describes the device -//-------------------------------------------------------------------------------------- -void DXUTUpdateD3D9DeviceStats( D3DDEVTYPE DeviceType, DWORD BehaviorFlags, - D3DADAPTER_IDENTIFIER9* pAdapterIdentifier ) -{ - if( GetDXUTState().GetNoStats() ) - return; - - // Store device description - WCHAR* pstrDeviceStats = GetDXUTState().GetDeviceStats(); - if( DeviceType == D3DDEVTYPE_REF ) - wcscpy_s( pstrDeviceStats, 256, L"REF" ); - else if( DeviceType == D3DDEVTYPE_HAL ) - wcscpy_s( pstrDeviceStats, 256, L"HAL" ); - else if( DeviceType == D3DDEVTYPE_SW ) - wcscpy_s( pstrDeviceStats, 256, L"SW" ); - - if( DeviceType == D3DDEVTYPE_HAL ) - { - // Be sure not to overflow m_strDeviceStats when appending the adapter - // description, since it can be long. - wcscat_s( pstrDeviceStats, 256, L": " ); - - // Try to get a unique description from the CD3D9EnumDeviceSettingsCombo - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - if( !pDeviceSettings ) - return; - - CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration(); - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = pd3dEnum->GetDeviceSettingsCombo( - pDeviceSettings->d3d9.AdapterOrdinal, pDeviceSettings->d3d9.DeviceType, - pDeviceSettings->d3d9.AdapterFormat, pDeviceSettings->d3d9.pp.BackBufferFormat, - pDeviceSettings->d3d9.pp.Windowed ); - if( pDeviceSettingsCombo ) - { - wcscat_s( pstrDeviceStats, 256, pDeviceSettingsCombo->pAdapterInfo->szUniqueDescription ); - } - else - { - const int cchDesc = sizeof( pAdapterIdentifier->Description ); - WCHAR szDescription[cchDesc]; - MultiByteToWideChar( CP_ACP, 0, pAdapterIdentifier->Description, -1, szDescription, cchDesc ); - szDescription[cchDesc - 1] = 0; - wcscat_s( pstrDeviceStats, 256, szDescription ); - } - } -} - - -//-------------------------------------------------------------------------------------- -// Updates the string which describes the device -//-------------------------------------------------------------------------------------- -void DXUTUpdateD3D11DeviceStats( D3D_DRIVER_TYPE DeviceType, DXGI_ADAPTER_DESC* pAdapterDesc ) -{ - if( GetDXUTState().GetNoStats() ) - return; - - // Store device description - WCHAR* pstrDeviceStats = GetDXUTState().GetDeviceStats(); - if( DeviceType == D3D_DRIVER_TYPE_REFERENCE ) - wcscpy_s( pstrDeviceStats, 256, L"REFERENCE" ); - else if( DeviceType == D3D_DRIVER_TYPE_HARDWARE ) - wcscpy_s( pstrDeviceStats, 256, L"HARDWARE" ); - else if( DeviceType == D3D_DRIVER_TYPE_SOFTWARE ) - wcscpy_s( pstrDeviceStats, 256, L"SOFTWARE" ); - else if( DeviceType == D3D_DRIVER_TYPE_WARP ) - wcscpy_s( pstrDeviceStats, 256, L"WARP" ); - - if( DeviceType == D3D_DRIVER_TYPE_HARDWARE ) - { - // Be sure not to overflow m_strDeviceStats when appending the adapter - // description, since it can be long. - wcscat_s( pstrDeviceStats, 256, L": " ); - - // Try to get a unique description from the CD3D11EnumDeviceSettingsCombo - DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); - if( !pDeviceSettings ) - return; - - CD3D11Enumeration* pd3dEnum = DXUTGetD3D11Enumeration(); - CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo = pd3dEnum->GetDeviceSettingsCombo( - pDeviceSettings->d3d11.AdapterOrdinal, pDeviceSettings->d3d11.DriverType, pDeviceSettings->d3d11.Output, - pDeviceSettings->d3d11.sd.BufferDesc.Format, pDeviceSettings->d3d11.sd.Windowed ); - if( pDeviceSettingsCombo ) - wcscat_s( pstrDeviceStats, 256, pDeviceSettingsCombo->pAdapterInfo->szUniqueDescription ); - else - wcscat_s( pstrDeviceStats, 256, pAdapterDesc->Description ); - } -} - - -//-------------------------------------------------------------------------------------- -// Misc functions -//-------------------------------------------------------------------------------------- -DXUTDeviceSettings WINAPI DXUTGetDeviceSettings() -{ - // Return a copy of device settings of the current device. If no device exists yet, then - // return a blank device settings struct - DXUTDeviceSettings* pDS = GetDXUTState().GetCurrentDeviceSettings(); - if( pDS ) - { - return *pDS; - } - else - { - DXUTDeviceSettings ds; - ZeroMemory( &ds, sizeof( DXUTDeviceSettings ) ); - return ds; - } -} - -D3DPRESENT_PARAMETERS WINAPI DXUTGetD3D9PresentParameters() -{ - // Return a copy of the present params of the current device. If no device exists yet, then - // return blank present params - DXUTDeviceSettings* pDS = GetDXUTState().GetCurrentDeviceSettings(); - if( pDS ) - { - return pDS->d3d9.pp; - } - else - { - D3DPRESENT_PARAMETERS pp; - ZeroMemory( &pp, sizeof( D3DPRESENT_PARAMETERS ) ); - return pp; - } -} - -bool WINAPI DXUTIsVsyncEnabled() -{ - DXUTDeviceSettings* pDS = GetDXUTState().GetCurrentDeviceSettings(); - if( pDS ) - { - if( DXUTIsD3D9( pDS ) ) - return ( pDS->d3d9.pp.PresentationInterval == D3DPRESENT_INTERVAL_IMMEDIATE ); - else - return ( pDS->d3d11.SyncInterval == 0 ); - } - else - { - return true; - } -}; - -HRESULT WINAPI DXUTGetD3D9DeviceCaps( DXUTDeviceSettings* pDeviceSettings, D3DCAPS9* pCaps ) -{ - IDirect3D9* pD3D = DXUTGetD3D9Object(); - return pD3D->GetDeviceCaps( pDeviceSettings->d3d9.AdapterOrdinal, pDeviceSettings->d3d9.DeviceType, pCaps ); -} - - -bool WINAPI DXUTIsKeyDown( BYTE vKey ) -{ - bool* bKeys = GetDXUTState().GetKeys(); - if( vKey >= 0xA0 && vKey <= 0xA5 ) // VK_LSHIFT, VK_RSHIFT, VK_LCONTROL, VK_RCONTROL, VK_LMENU, VK_RMENU - return GetAsyncKeyState( vKey ) != 0; // these keys only are tracked via GetAsyncKeyState() - else if( vKey >= 0x01 && vKey <= 0x06 && vKey != 0x03 ) // mouse buttons (VK_*BUTTON) - return DXUTIsMouseButtonDown( vKey ); - else - return bKeys[vKey]; -} - -bool WINAPI DXUTWasKeyPressed( BYTE vKey ) -{ - bool* bLastKeys = GetDXUTState().GetLastKeys(); - bool* bKeys = GetDXUTState().GetKeys(); - GetDXUTState().SetAppCalledWasKeyPressed( true ); - return ( !bLastKeys[vKey] && bKeys[vKey] ); -} - -bool WINAPI DXUTIsMouseButtonDown( BYTE vButton ) -{ - bool* bMouseButtons = GetDXUTState().GetMouseButtons(); - int nIndex = DXUTMapButtonToArrayIndex( vButton ); - return bMouseButtons[nIndex]; -} - -void WINAPI DXUTSetMultimonSettings( bool bAutoChangeAdapter ) -{ - GetDXUTState().SetAutoChangeAdapter( bAutoChangeAdapter ); -} - -void WINAPI DXUTSetHotkeyHandling( bool bAltEnterToToggleFullscreen, bool bEscapeToQuit, bool bPauseToToggleTimePause ) -{ - GetDXUTState().SetHandleEscape( bEscapeToQuit ); - GetDXUTState().SetHandleAltEnter( bAltEnterToToggleFullscreen ); - GetDXUTState().SetHandlePause( bPauseToToggleTimePause ); -} - -void WINAPI DXUTSetCursorSettings( bool bShowCursorWhenFullScreen, bool bClipCursorWhenFullScreen ) -{ - GetDXUTState().SetClipCursorWhenFullScreen( bClipCursorWhenFullScreen ); - GetDXUTState().SetShowCursorWhenFullScreen( bShowCursorWhenFullScreen ); - DXUTSetupCursor(); -} - -void WINAPI DXUTSetWindowSettings( bool bCallDefWindowProc ) -{ - GetDXUTState().SetCallDefWindowProc( bCallDefWindowProc ); -} - -void WINAPI DXUTSetConstantFrameTime( bool bEnabled, float fTimePerFrame ) -{ - if( GetDXUTState().GetOverrideConstantFrameTime() ) - { - bEnabled = GetDXUTState().GetOverrideConstantFrameTime(); - fTimePerFrame = GetDXUTState().GetOverrideConstantTimePerFrame(); - } - GetDXUTState().SetConstantFrameTime( bEnabled ); - GetDXUTState().SetTimePerFrame( fTimePerFrame ); -} - - -//-------------------------------------------------------------------------------------- -// Resets the state associated with DXUT -//-------------------------------------------------------------------------------------- -void WINAPI DXUTResetFrameworkState() -{ - GetDXUTState().Destroy(); - GetDXUTState().Create(); -} - - -//-------------------------------------------------------------------------------------- -// Closes down the window. When the window closes, it will cleanup everything -//-------------------------------------------------------------------------------------- -void WINAPI DXUTShutdown( int nExitCode ) -{ - HWND hWnd = DXUTGetHWND(); - if( hWnd != NULL ) - SendMessage( hWnd, WM_CLOSE, 0, 0 ); - - GetDXUTState().SetExitCode( nExitCode ); - - DXUTCleanup3DEnvironment( true ); - - // Restore shortcut keys (Windows key, accessibility shortcuts) to original state - // This is important to call here if the shortcuts are disabled, - // because accessibility setting changes are permanent. - // This means that if this is not done then the accessibility settings - // might not be the same as when the app was started. - // If the app crashes without restoring the settings, this is also true so it - // would be wise to backup/restore the settings from a file so they can be - // restored when the crashed app is run again. - DXUTAllowShortcutKeys( true ); - - // Shutdown D3D9 - IDirect3D9* pD3D = GetDXUTState().GetD3D9(); - SAFE_RELEASE( pD3D ); - GetDXUTState().SetD3D9( NULL ); - - // Shutdown D3D11 - IDXGIFactory1* pDXGIFactory = GetDXUTState().GetDXGIFactory(); - SAFE_RELEASE( pDXGIFactory ); - GetDXUTState().SetDXGIFactory( NULL ); - - if( GetDXUTState().GetOverrideRelaunchMCE() ) - DXUTReLaunchMediaCenter(); -} - -//-------------------------------------------------------------------------------------- -// Tells DXUT whether to operate in gamma correct mode -//-------------------------------------------------------------------------------------- -void WINAPI DXUTSetIsInGammaCorrectMode( bool bGammaCorrect ) -{ - GetDXUTState().SetIsInGammaCorrectMode( bGammaCorrect ); -} - - -void DXUTApplyDefaultDeviceSettings(DXUTDeviceSettings *modifySettings) { - ZeroMemory( modifySettings, sizeof( DXUTDeviceSettings ) ); - - - modifySettings->ver = DXUT_D3D11_DEVICE; - modifySettings->d3d11.AdapterOrdinal = 0; - modifySettings->d3d11.AutoCreateDepthStencil = true; - modifySettings->d3d11.AutoDepthStencilFormat = DXGI_FORMAT_D24_UNORM_S8_UINT; -#if defined(DEBUG) || defined(_DEBUG) - modifySettings->d3d11.CreateFlags |= D3D10_CREATE_DEVICE_DEBUG; -#else - modifySettings->d3d11.CreateFlags = 0; -#endif - modifySettings->d3d11.DriverType = D3D_DRIVER_TYPE_HARDWARE; - modifySettings->d3d11.Output = 0; - modifySettings->d3d11.PresentFlags = 0; - modifySettings->d3d11.sd.BufferCount = 2; - modifySettings->d3d11.sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; - modifySettings->d3d11.sd.BufferDesc.Height = 480; - modifySettings->d3d11.sd.BufferDesc.RefreshRate.Numerator = 60; - modifySettings->d3d11.sd.BufferDesc.RefreshRate.Denominator = 1; - modifySettings->d3d11.sd.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; - modifySettings->d3d11.sd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; - modifySettings->d3d11.sd.BufferDesc.Width = 640; - modifySettings->d3d11.sd.BufferUsage = 32; - modifySettings->d3d11.sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH ; - modifySettings->d3d11.sd.OutputWindow = DXUTGetHWND(); - modifySettings->d3d11.sd.SampleDesc.Count = 1; - modifySettings->d3d11.sd.SampleDesc.Quality = 0; - modifySettings->d3d11.sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; - modifySettings->d3d11.sd.Windowed = 1; - modifySettings->d3d11.SyncInterval = 0; - - modifySettings->d3d9.AdapterFormat = D3DFMT_X8R8G8B8; - modifySettings->d3d9.AdapterOrdinal = 0; - modifySettings->d3d9.BehaviorFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING; - modifySettings->d3d9.DeviceType = D3DDEVTYPE_HAL; - modifySettings->d3d9.pp.AutoDepthStencilFormat = D3DFMT_D24X8; - modifySettings->d3d9.pp.BackBufferCount = 1; - modifySettings->d3d9.pp.BackBufferFormat = D3DFMT_X8R8G8B8; - modifySettings->d3d9.pp.BackBufferHeight = 480; - modifySettings->d3d9.pp.BackBufferWidth = 640; - modifySettings->d3d9.pp.EnableAutoDepthStencil = 1; - modifySettings->d3d9.pp.Flags = 2; - modifySettings->d3d9.pp.FullScreen_RefreshRateInHz = 0; - modifySettings->d3d9.pp.hDeviceWindow = DXUTGetHWND(); - modifySettings->d3d9.pp.MultiSampleQuality = 0; - modifySettings->d3d9.pp.MultiSampleType = D3DMULTISAMPLE_NONE; - modifySettings->d3d9.pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; - modifySettings->d3d9.pp.SwapEffect = D3DSWAPEFFECT_DISCARD; - modifySettings->d3d9.pp.Windowed = 1; -} - - - -//-------------------------------------------------------------------------------------- -// Update settings based on what is enumeratabled -//-------------------------------------------------------------------------------------- -HRESULT DXUTSnapDeviceSettingsToEnumDevice( DXUTDeviceSettings* pDeviceSettings, bool forceEnum, D3D_FEATURE_LEVEL forceFL ) { - bool bAppSupportsD3D9 = DXUTDoesAppSupportD3D9(); - bool bAppSupportsD3D11 = DXUTDoesAppSupportD3D11(); - - if( GetSystemMetrics(0x1000) != 0 ) {// SM_REMOTESESSION - pDeviceSettings->d3d11.sd.Windowed = 1; - pDeviceSettings->d3d9.pp.Windowed = 1; - } - int bestModeIndex=0; - int bestMSAAIndex=0; - - - //DXUTSetDefaultDeviceSettings - if (bAppSupportsD3D11 && pDeviceSettings->ver == DXUT_D3D11_DEVICE ) { - CD3D11Enumeration *pEnum = NULL; - - - pEnum = DXUTGetD3D11Enumeration( forceEnum, false, forceFL); - - CD3D11EnumAdapterInfo* pAdapterInfo = NULL; - CGrowableArray * pAdapterList = pEnum->GetAdapterInfoList(); - CD3D11EnumAdapterInfo* tempAdapterInfo = pAdapterList->GetAt( 0 ); - for( int iAdapter = 0; iAdapter < pAdapterList->GetSize(); iAdapter++ ) - { - tempAdapterInfo = pAdapterList->GetAt( iAdapter ); - if (tempAdapterInfo->AdapterOrdinal == pDeviceSettings->d3d11.AdapterOrdinal) pAdapterInfo = tempAdapterInfo; - } - if (pAdapterInfo == NULL) return E_FAIL; // no adapters found. - CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo = NULL; - float biggestScore = 0; - - int combo = 0; - for( int iDeviceCombo = 0; iDeviceCombo < pAdapterInfo->deviceSettingsComboList.GetSize(); iDeviceCombo++ ) - { - CD3D11EnumDeviceSettingsCombo* tempDeviceSettingsCombo = pAdapterInfo->deviceSettingsComboList.GetAt( iDeviceCombo ); - - DXGI_MODE_DESC adapterDisplayMode; - DXUTGetD3D11AdapterDisplayMode( pAdapterInfo->AdapterOrdinal, 0, &adapterDisplayMode ); - - int bestMode; - int bestMSAA; - float score = DXUTRankD3D11DeviceCombo(tempDeviceSettingsCombo, &(pDeviceSettings->d3d11), &adapterDisplayMode, bestMode, bestMSAA ); - if (score > biggestScore) { - combo = iDeviceCombo; - biggestScore = score; - pDeviceSettingsCombo = tempDeviceSettingsCombo; - bestModeIndex = bestMode; - bestMSAAIndex = bestMSAA; - } - - } - if (NULL == pDeviceSettingsCombo ) { - return E_FAIL; // no settigns found. - } - - pDeviceSettings->d3d11.AdapterOrdinal = pDeviceSettingsCombo->AdapterOrdinal; - pDeviceSettings->d3d11.DriverType = pDeviceSettingsCombo->DeviceType; - pDeviceSettings->d3d11.Output = pDeviceSettingsCombo->Output; - - pDeviceSettings->d3d11.sd.Windowed = pDeviceSettingsCombo->Windowed; - if( GetSystemMetrics(0x1000) != 0 ) {// SM_REMOTESESSION - pDeviceSettings->d3d11.sd.Windowed = 1; - } - if (pDeviceSettingsCombo->pOutputInfo != NULL) { - DXGI_MODE_DESC bestDisplayMode; - bestDisplayMode = pDeviceSettingsCombo->pOutputInfo->displayModeList.GetAt(bestModeIndex); - if (!pDeviceSettingsCombo->Windowed) { - - pDeviceSettings->d3d11.sd.BufferDesc.Height = bestDisplayMode.Height; - pDeviceSettings->d3d11.sd.BufferDesc.Width = bestDisplayMode.Width; - pDeviceSettings->d3d11.sd.BufferDesc.RefreshRate.Numerator = bestDisplayMode.RefreshRate.Numerator; - pDeviceSettings->d3d11.sd.BufferDesc.RefreshRate.Denominator = bestDisplayMode.RefreshRate.Denominator; - pDeviceSettings->d3d11.sd.BufferDesc.Scaling = bestDisplayMode.Scaling; - pDeviceSettings->d3d11.sd.BufferDesc.ScanlineOrdering = bestDisplayMode.ScanlineOrdering; - } - } - if (pDeviceSettings->d3d11.DeviceFeatureLevel == 0) - pDeviceSettings->d3d11.DeviceFeatureLevel = pDeviceSettingsCombo->pDeviceInfo->SelectedLevel; - - - - - pDeviceSettings->d3d11.sd.SampleDesc.Count = pDeviceSettingsCombo->multiSampleCountList.GetAt(bestMSAAIndex); - if (pDeviceSettings->d3d11.sd.SampleDesc.Quality > pDeviceSettingsCombo->multiSampleQualityList.GetAt(bestMSAAIndex) - 1) - pDeviceSettings->d3d11.sd.SampleDesc.Quality = pDeviceSettingsCombo->multiSampleQualityList.GetAt(bestMSAAIndex) - 1; - - pDeviceSettings->d3d11.sd.BufferDesc.Format = pDeviceSettingsCombo->BackBufferFormat; - - return S_OK; - } - // didn't find a D3D11 adapter. - if (bAppSupportsD3D9) { - // Find the best combination of: - // Adapter Ordinal - // Device Type - // Adapter Format - // Back Buffer Format - // Windowed - // given what's available on the system and the match options combined with the device settings input. - // This combination of settings is encapsulated by the CD3D9EnumDeviceSettingsCombo class. - float fBestRanking = -1.0f; - CD3D9EnumDeviceSettingsCombo* pBestDeviceSettingsCombo = NULL; - D3DDISPLAYMODE adapterDesktopDisplayMode; - - IDirect3D9* pD3D = DXUTGetD3D9Object(); - CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration( forceEnum ); - CGrowableArray * pAdapterList = pd3dEnum->GetAdapterInfoList(); - for( int iAdapter = 0; iAdapter < pAdapterList->GetSize(); iAdapter++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo = pAdapterList->GetAt( iAdapter ); - - // Get the desktop display mode of adapter - pD3D->GetAdapterDisplayMode( pAdapterInfo->AdapterOrdinal, &adapterDesktopDisplayMode ); - - // Enum all the device types supported by this adapter to find the best device settings - for( int iDeviceInfo = 0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ ) - { - CD3D9EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( iDeviceInfo ); - - // Enum all the device settings combinations. A device settings combination is - // a unique set of an adapter format, back buffer format, and IsWindowed. - for( int iDeviceCombo = 0; iDeviceCombo < pDeviceInfo->deviceSettingsComboList.GetSize(); iDeviceCombo++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( - iDeviceCombo ); - - // If windowed mode the adapter format has to be the same as the desktop - // display mode format so skip any that don't match - if( pDeviceSettingsCombo->Windowed && - ( pDeviceSettingsCombo->AdapterFormat != adapterDesktopDisplayMode.Format ) ) - continue; - - // Skip any combo that doesn't meet the preserve match options - int bestMode; - int bestMSAA; - - // Get a ranking number that describes how closely this device combo matches the optimal combo - float fCurRanking = DXUTRankD3D9DeviceCombo( pDeviceSettingsCombo, - &(pDeviceSettings->d3d9), &adapterDesktopDisplayMode, bestMode, bestMSAA ); - - // If this combo better matches the input device settings then save it - if( fCurRanking > fBestRanking ) - { - pBestDeviceSettingsCombo = pDeviceSettingsCombo; - fBestRanking = fCurRanking; - bestModeIndex = bestMode; - bestMSAAIndex = bestMSAA; - } - } - } - } - - // If no best device combination was found then fail - if( pBestDeviceSettingsCombo == NULL ) - return DXUTERR_NOCOMPATIBLEDEVICES; - - // Using the best device settings combo found, build valid device settings taking heed of - // the match options and the input device settings - pDeviceSettings->d3d9.AdapterFormat = pBestDeviceSettingsCombo->AdapterFormat;//D3DFMT_X8R8G8B8; - pDeviceSettings->d3d9.AdapterOrdinal = pBestDeviceSettingsCombo->AdapterOrdinal ;//0; - pDeviceSettings->d3d9.DeviceType = pBestDeviceSettingsCombo->DeviceType; - pDeviceSettings->d3d9.pp.BackBufferFormat = pBestDeviceSettingsCombo->BackBufferFormat;//D3DFMT_X8R8G8B8; - if( GetSystemMetrics(0x1000) != 0 ) {// SM_REMOTESESSION - pDeviceSettings->d3d9.pp.Windowed = 1; - } - if (!pBestDeviceSettingsCombo->Windowed) { - D3DDISPLAYMODE displayMode = pBestDeviceSettingsCombo->pAdapterInfo->displayModeList.GetAt( bestModeIndex ); - pDeviceSettings->d3d9.pp.BackBufferHeight = displayMode.Height; - pDeviceSettings->d3d9.pp.BackBufferWidth = displayMode.Width; - pDeviceSettings->d3d9.pp.FullScreen_RefreshRateInHz = displayMode.RefreshRate; - } - pDeviceSettings->d3d9.pp.hDeviceWindow = pBestDeviceSettingsCombo->Windowed ? DXUTGetHWNDDeviceWindowed() : DXUTGetHWNDDeviceFullScreen(); - if (pDeviceSettings->d3d9.pp.MultiSampleQuality > pBestDeviceSettingsCombo->multiSampleQualityList.GetAt(bestMSAAIndex) - 1) - pDeviceSettings->d3d9.pp.MultiSampleQuality = pBestDeviceSettingsCombo->multiSampleQualityList.GetAt( bestMSAAIndex )-1; - - pDeviceSettings->d3d9.pp.MultiSampleType = pBestDeviceSettingsCombo->multiSampleTypeList.GetAt( bestMSAAIndex );; - pDeviceSettings->d3d9.pp.Windowed = pBestDeviceSettingsCombo->Windowed; - return S_OK; - } - return E_FAIL; -} diff --git a/sample/d3d11/common/DXUT.h b/sample/d3d11/common/DXUT.h deleted file mode 100644 index f287b6c..0000000 --- a/sample/d3d11/common/DXUT.h +++ /dev/null @@ -1,373 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUT.h -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_H -#define DXUT_H - -#ifndef UNICODE -#error "DXUT requires a Unicode build. See the nearby comments for details" -// -// If you are using Microsoft Visual C++ .NET, under the General tab of the project -// properties change the Character Set to 'Use Unicode Character Set'. -// -// Windows XP and later are native Unicode so Unicode applications will perform better. -// For Windows 98 and Windows Me support, consider using the Microsoft Layer for Unicode (MSLU). -// -// To use MSLU, link against a set of libraries similar to this -// /nod:kernel32.lib /nod:advapi32.lib /nod:user32.lib /nod:gdi32.lib /nod:shell32.lib /nod:comdlg32.lib /nod:version.lib /nod:mpr.lib /nod:rasapi32.lib /nod:winmm.lib /nod:winspool.lib /nod:vfw32.lib /nod:secur32.lib /nod:oleacc.lib /nod:oledlg.lib /nod:sensapi.lib UnicoWS.lib kernel32.lib advapi32.lib user32.lib gdi32.lib shell32.lib comdlg32.lib version.lib mpr.lib rasapi32.lib winmm.lib winspool.lib vfw32.lib secur32.lib oleacc.lib oledlg.lib sensapi.lib dxerr.lib dxguid.lib d3dx9d.lib d3d9.lib comctl32.lib -// and put the unicows.dll (available for download from msdn.microsoft.com) in the exe's folder. -// -// For more details see the MSDN article titled: -// "MSLU: Develop Unicode Applications for Windows 9x Platforms with the Microsoft Layer for Unicode" -// at http://msdn.microsoft.com/msdnmag/issues/01/10/MSLU/default.aspx -// -#endif - -#ifndef STRICT -#define STRICT -#endif - -// If app hasn't choosen, set to work with Windows 98, Windows Me, Windows 2000, Windows XP and beyond -#ifndef WINVER -#define WINVER 0x0500 -#endif -#ifndef _WIN32_WINDOWS -#define _WIN32_WINDOWS 0x0500 -#endif -#ifndef _WIN32_WINNT -#define _WIN32_WINNT 0x0600 -#endif - -// #define DXUT_AUTOLIB to automatically include the libs needed for DXUT -#ifdef DXUT_AUTOLIB -#pragma comment( lib, "dxerr.lib" ) -#pragma comment( lib, "dxguid.lib" ) -#pragma comment( lib, "d3d9.lib" ) -#if defined(DEBUG) || defined(_DEBUG) -#pragma comment( lib, "d3dx9d.lib" ) -#else -#pragma comment( lib, "d3dx9.lib" ) -#endif -#pragma comment( lib, "winmm.lib" ) -#pragma comment( lib, "comctl32.lib" ) -#endif - -#pragma warning( disable : 4100 ) // disable unreference formal parameter warnings for /W4 builds - -// Enable extra D3D debugging in debug builds if using the debug DirectX runtime. -// This makes D3D objects work well in the debugger watch window, but slows down -// performance slightly. -#if defined(DEBUG) || defined(_DEBUG) -#ifndef D3D_DEBUG_INFO -#define D3D_DEBUG_INFO -#endif -#endif - -// Standard Windows includes -#include -#include -#include -#include -#include -#include // for InitCommonControls() -#include // for ExtractIcon() -#include // for placement new -#include -#include -#include -#include - -// CRT's memory leak detection -#if defined(DEBUG) || defined(_DEBUG) -#include -#endif - -// Direct3D9 includes -#include -#include - - -// Direct3D11 includes -#include -#include -#include -#include - -// XInput includes -#include - -// HRESULT translation for Direct3D10 and other APIs -#include - - -#if defined(DEBUG) || defined(_DEBUG) -#ifndef V -#define V(x) { hr = (x); if( FAILED(hr) ) { DXUTTrace( __FILEW__, (DWORD)__LINE__, hr, L#x, true ); } } -#endif -#ifndef V_RETURN -#define V_RETURN(x) { hr = (x); if( FAILED(hr) ) { return DXUTTrace( __FILEW__, (DWORD)__LINE__, hr, L#x, true ); } } -#endif -#else -#ifndef V -#define V(x) { hr = (x); } -#endif -#ifndef V_RETURN -#define V_RETURN(x) { hr = (x); if( FAILED(hr) ) { return hr; } } -#endif -#endif - -#ifndef SAFE_DELETE -#define SAFE_DELETE(p) { if (p) { delete (p); (p)=NULL; } } -#endif -#ifndef SAFE_DELETE_ARRAY -#define SAFE_DELETE_ARRAY(p) { if (p) { delete[] (p); (p)=NULL; } } -#endif -#ifndef SAFE_RELEASE -#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p)=NULL; } } -#endif - - - -//-------------------------------------------------------------------------------------- -// Structs -//-------------------------------------------------------------------------------------- -struct DXUTD3D9DeviceSettings -{ - UINT AdapterOrdinal; - D3DDEVTYPE DeviceType; - D3DFORMAT AdapterFormat; - DWORD BehaviorFlags; - D3DPRESENT_PARAMETERS pp; -}; - -struct DXUTD3D11DeviceSettings -{ - UINT AdapterOrdinal; - D3D_DRIVER_TYPE DriverType; - UINT Output; - DXGI_SWAP_CHAIN_DESC sd; - UINT32 CreateFlags; - UINT32 SyncInterval; - DWORD PresentFlags; - bool AutoCreateDepthStencil; // DXUT will create the depth stencil resource and view if true - DXGI_FORMAT AutoDepthStencilFormat; - D3D_FEATURE_LEVEL DeviceFeatureLevel; -}; - -enum DXUTDeviceVersion -{ - DXUT_D3D9_DEVICE, - DXUT_D3D11_DEVICE -}; - -struct DXUTDeviceSettings -{ - DXUTDeviceVersion ver; - D3D_FEATURE_LEVEL MinimumFeatureLevel; - DXUTD3D9DeviceSettings d3d9; // only valid if ver == DXUT_D3D9_DEVICE - DXUTD3D11DeviceSettings d3d11; // only valid if ver == DXUT_D3D11_DEVICE -}; - - -//-------------------------------------------------------------------------------------- -// Error codes -//-------------------------------------------------------------------------------------- -#define DXUTERR_NODIRECT3D MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0901) -#define DXUTERR_NOCOMPATIBLEDEVICES MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0902) -#define DXUTERR_MEDIANOTFOUND MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0903) -#define DXUTERR_NONZEROREFCOUNT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0904) -#define DXUTERR_CREATINGDEVICE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0905) -#define DXUTERR_RESETTINGDEVICE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0906) -#define DXUTERR_CREATINGDEVICEOBJECTS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0907) -#define DXUTERR_RESETTINGDEVICEOBJECTS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0908) -#define DXUTERR_DEVICEREMOVED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x090A) -#define DXUTERR_NODIRECT3D11 MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x090) - -//-------------------------------------------------------------------------------------- -// Callback registration -//-------------------------------------------------------------------------------------- - -// General callbacks -typedef void (CALLBACK *LPDXUTCALLBACKFRAMEMOVE)( double fTime, float fElapsedTime, void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKKEYBOARD)( UINT nChar, bool bKeyDown, bool bAltDown, void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKMOUSE)( bool bLeftButtonDown, bool bRightButtonDown, bool bMiddleButtonDown, bool bSideButton1Down, bool bSideButton2Down, int nMouseWheelDelta, int xPos, int yPos, void* pUserContext ); -typedef LRESULT (CALLBACK *LPDXUTCALLBACKMSGPROC)( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing, void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKTIMER)( UINT idEvent, void* pUserContext ); -typedef bool (CALLBACK *LPDXUTCALLBACKMODIFYDEVICESETTINGS)( DXUTDeviceSettings* pDeviceSettings, void* pUserContext ); -typedef bool (CALLBACK *LPDXUTCALLBACKDEVICEREMOVED)( void* pUserContext ); - -// Direct3D 9 callbacks -typedef bool (CALLBACK *LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE)( D3DCAPS9* pCaps, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, bool bWindowed, void* pUserContext ); -typedef HRESULT (CALLBACK *LPDXUTCALLBACKD3D9DEVICECREATED)( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ); -typedef HRESULT (CALLBACK *LPDXUTCALLBACKD3D9DEVICERESET)( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKD3D9FRAMERENDER)( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKD3D9DEVICELOST)( void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKD3D9DEVICEDESTROYED)( void* pUserContext ); - -class CD3D11EnumAdapterInfo; -class CD3D11EnumDeviceInfo; -// Direct3D 11 callbacks -typedef bool (CALLBACK *LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE)( const CD3D11EnumAdapterInfo *AdapterInfo, UINT Output, const CD3D11EnumDeviceInfo *DeviceInfo, DXGI_FORMAT BackBufferFormat, bool bWindowed, void* pUserContext ); -typedef HRESULT (CALLBACK *LPDXUTCALLBACKD3D11DEVICECREATED)( ID3D11Device* pd3dDevice, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ); -typedef HRESULT (CALLBACK *LPDXUTCALLBACKD3D11SWAPCHAINRESIZED)( ID3D11Device* pd3dDevice, IDXGISwapChain *pSwapChain, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKD3D11FRAMERENDER)( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext, double fTime, float fElapsedTime, void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKD3D11SWAPCHAINRELEASING)( void* pUserContext ); -typedef void (CALLBACK *LPDXUTCALLBACKD3D11DEVICEDESTROYED)( void* pUserContext ); - -// General callbacks -void WINAPI DXUTSetCallbackFrameMove( LPDXUTCALLBACKFRAMEMOVE pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackKeyboard( LPDXUTCALLBACKKEYBOARD pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackMouse( LPDXUTCALLBACKMOUSE pCallback, bool bIncludeMouseMove = false, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackMsgProc( LPDXUTCALLBACKMSGPROC pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackDeviceChanging( LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackDeviceRemoved( LPDXUTCALLBACKDEVICEREMOVED pCallback, void* pUserContext = NULL ); - -// Direct3D 9 callbacks -void WINAPI DXUTSetCallbackD3D9DeviceAcceptable( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D9DeviceCreated( LPDXUTCALLBACKD3D9DEVICECREATED pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D9DeviceReset( LPDXUTCALLBACKD3D9DEVICERESET pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D9FrameRender( LPDXUTCALLBACKD3D9FRAMERENDER pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D9DeviceLost( LPDXUTCALLBACKD3D9DEVICELOST pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D9DeviceDestroyed( LPDXUTCALLBACKD3D9DEVICEDESTROYED pCallback, void* pUserContext = NULL ); - -// Direct3D 11 callbacks -void WINAPI DXUTSetCallbackD3D11DeviceAcceptable( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D11DeviceCreated( LPDXUTCALLBACKD3D11DEVICECREATED pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D11SwapChainResized( LPDXUTCALLBACKD3D11SWAPCHAINRESIZED pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D11FrameRender( LPDXUTCALLBACKD3D11FRAMERENDER pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D11SwapChainReleasing( LPDXUTCALLBACKD3D11SWAPCHAINRELEASING pCallback, void* pUserContext = NULL ); -void WINAPI DXUTSetCallbackD3D11DeviceDestroyed( LPDXUTCALLBACKD3D11DEVICEDESTROYED pCallback, void* pUserContext = NULL ); - - -//-------------------------------------------------------------------------------------- -// Initialization -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTInit( bool bParseCommandLine = true, - bool bShowMsgBoxOnError = true, - __in_opt WCHAR* strExtraCommandLineParams = NULL, - bool bThreadSafeDXUT = false ); - -// Choose either DXUTCreateWindow or DXUTSetWindow. If using DXUTSetWindow, consider using DXUTStaticWndProc -HRESULT WINAPI DXUTCreateWindow( const WCHAR* strWindowTitle = L"Direct3D Window", - HINSTANCE hInstance = NULL, HICON hIcon = NULL, HMENU hMenu = NULL, - int x = CW_USEDEFAULT, int y = CW_USEDEFAULT ); -HRESULT WINAPI DXUTSetWindow( HWND hWndFocus, HWND hWndDeviceFullScreen, HWND hWndDeviceWindowed, bool bHandleMessages = true ); -LRESULT CALLBACK DXUTStaticWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - -// Choose either DXUTCreateDevice or DXUTSetD3D*Device or DXUTCreateD3DDeviceFromSettings - -HRESULT WINAPI DXUTCreateDevice(D3D_FEATURE_LEVEL reqFL, bool bWindowed= true, int nSuggestedWidth =0, int nSuggestedHeight =0 ); -HRESULT WINAPI DXUTCreateDeviceFromSettings( DXUTDeviceSettings* pDeviceSettings, bool bPreserveInput = false, bool bClipWindowToSingleAdapter = true ); -HRESULT WINAPI DXUTSetD3D9Device( IDirect3DDevice9* pd3dDevice ); -HRESULT WINAPI DXUTSetD3D11Device( ID3D11Device* pd3dDevice, IDXGISwapChain* pSwapChain ); - -// Choose either DXUTMainLoop or implement your own main loop -HRESULT WINAPI DXUTMainLoop( HACCEL hAccel = NULL ); - -// If not using DXUTMainLoop consider using DXUTRender3DEnvironment -void WINAPI DXUTRender3DEnvironment(); - - -//-------------------------------------------------------------------------------------- -// Common Tasks -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTToggleFullScreen(); -HRESULT WINAPI DXUTToggleREF(); -HRESULT WINAPI DXUTToggleWARP(); -void WINAPI DXUTPause( bool bPauseTime, bool bPauseRendering ); -void WINAPI DXUTSetConstantFrameTime( bool bConstantFrameTime, float fTimePerFrame = 0.0333f ); -void WINAPI DXUTSetCursorSettings( bool bShowCursorWhenFullScreen = false, bool bClipCursorWhenFullScreen = false ); -void WINAPI DXUTSetD3DVersionSupport( bool bAppCanUseD3D9 = true, bool bAppCanUseD3D11 = true ); -void WINAPI DXUTSetHotkeyHandling( bool bAltEnterToToggleFullscreen = true, bool bEscapeToQuit = true, bool bPauseToToggleTimePause = true ); -void WINAPI DXUTSetMultimonSettings( bool bAutoChangeAdapter = true ); -void WINAPI DXUTSetShortcutKeySettings( bool bAllowWhenFullscreen = false, bool bAllowWhenWindowed = true ); // Controls the Windows key, and accessibility shortcut keys -void WINAPI DXUTSetWindowSettings( bool bCallDefWindowProc = true ); -HRESULT WINAPI DXUTSetTimer( LPDXUTCALLBACKTIMER pCallbackTimer, float fTimeoutInSecs = 1.0f, UINT* pnIDEvent = NULL, void* pCallbackUserContext = NULL ); -HRESULT WINAPI DXUTKillTimer( UINT nIDEvent ); -void WINAPI DXUTResetFrameworkState(); -void WINAPI DXUTShutdown( int nExitCode = 0 ); -void WINAPI DXUTSetIsInGammaCorrectMode( bool bGammaCorrect ); -BOOL WINAPI DXUTGetMSAASwapChainCreated(); - -//-------------------------------------------------------------------------------------- -// State Retrieval -//-------------------------------------------------------------------------------------- - -// Direct3D 9 -IDirect3D9* WINAPI DXUTGetD3D9Object(); // Does not addref unlike typical Get* APIs -IDirect3DDevice9* WINAPI DXUTGetD3D9Device(); // Does not addref unlike typical Get* APIs -D3DPRESENT_PARAMETERS WINAPI DXUTGetD3D9PresentParameters(); -const D3DSURFACE_DESC* WINAPI DXUTGetD3D9BackBufferSurfaceDesc(); -const D3DCAPS9* WINAPI DXUTGetD3D9DeviceCaps(); -HRESULT WINAPI DXUTGetD3D9DeviceCaps( DXUTDeviceSettings* pDeviceSettings, D3DCAPS9* pCaps ); -bool WINAPI DXUTDoesAppSupportD3D9(); -bool WINAPI DXUTIsAppRenderingWithD3D9(); - - -// Direct3D 11 -IDXGIFactory1* WINAPI DXUTGetDXGIFactory(); // Does not addref unlike typical Get* APIs -IDXGISwapChain* WINAPI DXUTGetDXGISwapChain(); // Does not addref unlike typical Get* APIs -const DXGI_SURFACE_DESC* WINAPI DXUTGetDXGIBackBufferSurfaceDesc(); -bool WINAPI DXUTIsD3D11Available(); // If D3D11 APIs are availible -ID3D11Device* WINAPI DXUTGetD3D11Device(); // Does not addref unlike typical Get* APIs -ID3D11DeviceContext* WINAPI DXUTGetD3D11DeviceContext(); // Does not addref unlike typical Get* APIs -HRESULT WINAPI DXUTSetupD3D11Views( ID3D11DeviceContext* pd3dDeviceContext ); // Supports immediate or deferred context -D3D_FEATURE_LEVEL WINAPI DXUTGetD3D11DeviceFeatureLevel(); // Returns the D3D11 devices current feature level -ID3D11RenderTargetView* WINAPI DXUTGetD3D11RenderTargetView(); // Does not addref unlike typical Get* APIs -ID3D11DepthStencilView* WINAPI DXUTGetD3D11DepthStencilView(); // Does not addref unlike typical Get* APIs -bool WINAPI DXUTDoesAppSupportD3D11(); -bool WINAPI DXUTIsAppRenderingWithD3D11(); - - -// General -DXUTDeviceSettings WINAPI DXUTGetDeviceSettings(); -HINSTANCE WINAPI DXUTGetHINSTANCE(); -HWND WINAPI DXUTGetHWND(); -HWND WINAPI DXUTGetHWNDFocus(); -HWND WINAPI DXUTGetHWNDDeviceFullScreen(); -HWND WINAPI DXUTGetHWNDDeviceWindowed(); -RECT WINAPI DXUTGetWindowClientRect(); -LONG WINAPI DXUTGetWindowWidth(); -LONG WINAPI DXUTGetWindowHeight(); -RECT WINAPI DXUTGetWindowClientRectAtModeChange(); // Useful for returning to windowed mode with the same resolution as before toggle to full screen mode -RECT WINAPI DXUTGetFullsceenClientRectAtModeChange(); // Useful for returning to full screen mode with the same resolution as before toggle to windowed mode -double WINAPI DXUTGetTime(); -float WINAPI DXUTGetElapsedTime(); -bool WINAPI DXUTIsWindowed(); -bool WINAPI DXUTIsInGammaCorrectMode(); -float WINAPI DXUTGetFPS(); -LPCWSTR WINAPI DXUTGetWindowTitle(); -LPCWSTR WINAPI DXUTGetFrameStats( bool bIncludeFPS = false ); -LPCWSTR WINAPI DXUTGetDeviceStats(); - -bool WINAPI DXUTIsVsyncEnabled(); -bool WINAPI DXUTIsRenderingPaused(); -bool WINAPI DXUTIsTimePaused(); -bool WINAPI DXUTIsActive(); -int WINAPI DXUTGetExitCode(); -bool WINAPI DXUTGetShowMsgBoxOnError(); -bool WINAPI DXUTGetAutomation(); // Returns true if -automation parameter is used to launch the app -bool WINAPI DXUTIsKeyDown( BYTE vKey ); // Pass a virtual-key code, ex. VK_F1, 'A', VK_RETURN, VK_LSHIFT, etc -bool WINAPI DXUTWasKeyPressed( BYTE vKey ); // Like DXUTIsKeyDown() but return true only if the key was just pressed -bool WINAPI DXUTIsMouseButtonDown( BYTE vButton ); // Pass a virtual-key code: VK_LBUTTON, VK_RBUTTON, VK_MBUTTON, VK_XBUTTON1, VK_XBUTTON2 -HRESULT WINAPI DXUTCreateState(); // Optional method to create DXUT's memory. If its not called by the application it will be automatically called when needed -void WINAPI DXUTDestroyState(); // Optional method to destroy DXUT's memory. If its not called by the application it will be automatically called after the application exits WinMain - -//-------------------------------------------------------------------------------------- -// DXUT core layer includes -//-------------------------------------------------------------------------------------- -#include "DXUTmisc.h" -#include "DXUTDevice9.h" -#include "DXUTDevice11.h" - - - - -#endif - - - - diff --git a/sample/d3d11/common/DXUTDevice11.cpp b/sample/d3d11/common/DXUTDevice11.cpp deleted file mode 100644 index d9dd494..0000000 --- a/sample/d3d11/common/DXUTDevice11.cpp +++ /dev/null @@ -1,1154 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTDevice11.cpp -// -// Enumerates D3D adapters, devices, modes, etc. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#undef min // use __min instead -#undef max // use __max instead - -//-------------------------------------------------------------------------------------- -// Forward declarations -//-------------------------------------------------------------------------------------- -extern void DXUTGetCallbackD3D11DeviceAcceptable( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE* ppCallbackIsDeviceAcceptable, void** ppUserContext ); - -static int __cdecl SortModesCallback( const void* arg1, const void* arg2 ); - -CD3D11Enumeration* g_pDXUTD3D11Enumeration = NULL; - - - - -HRESULT WINAPI DXUTCreateD3D11Enumeration() -{ - if( g_pDXUTD3D11Enumeration == NULL ) - { - g_pDXUTD3D11Enumeration = new CD3D11Enumeration(); - if( NULL == g_pDXUTD3D11Enumeration ) - return E_OUTOFMEMORY; - } - return S_OK; -} - -void WINAPI DXUTDestroyD3D11Enumeration() -{ - SAFE_DELETE( g_pDXUTD3D11Enumeration ); -} - -class DXUTMemoryHelperD3D11Enum -{ -public: -DXUTMemoryHelperD3D11Enum() -{ - DXUTCreateD3D11Enumeration(); -} -~DXUTMemoryHelperD3D11Enum() -{ - DXUTDestroyD3D11Enumeration(); -} -}; - - -//-------------------------------------------------------------------------------------- -CD3D11Enumeration* WINAPI DXUTGetD3D11Enumeration( bool bForceEnumerate, bool bEnumerateAllAdapterFormats, D3D_FEATURE_LEVEL forceFL ) -{ - // Using an static class with accessor function to allow control of the construction order - static DXUTMemoryHelperD3D11Enum d3d11enumMemory; - if( g_pDXUTD3D11Enumeration && ( !g_pDXUTD3D11Enumeration->HasEnumerated() || bForceEnumerate ) ) - { - g_pDXUTD3D11Enumeration->SetEnumerateAllAdapterFormats( bEnumerateAllAdapterFormats ); - LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE pCallbackIsDeviceAcceptable; - void* pUserContext; - DXUTGetCallbackD3D11DeviceAcceptable( &pCallbackIsDeviceAcceptable, &pUserContext ); - g_pDXUTD3D11Enumeration->SetForceFeatureLevel(forceFL); - - g_pDXUTD3D11Enumeration->Enumerate( pCallbackIsDeviceAcceptable, pUserContext ); - } - - return g_pDXUTD3D11Enumeration; -} - - -//-------------------------------------------------------------------------------------- -CD3D11Enumeration::CD3D11Enumeration() -{ - m_bHasEnumerated = false; - m_IsD3D11DeviceAcceptableFunc = NULL; - m_pIsD3D11DeviceAcceptableFuncUserContext = NULL; - - m_nMinWidth = 640; - m_nMinHeight = 480; - m_nMaxWidth = UINT_MAX; - m_nMaxHeight = UINT_MAX; - m_bEnumerateAllAdapterFormats = false; - - m_nRefreshMin = 0; - m_nRefreshMax = UINT_MAX; - - ResetPossibleDepthStencilFormats(); -} - - -//-------------------------------------------------------------------------------------- -CD3D11Enumeration::~CD3D11Enumeration() -{ - ClearAdapterInfoList(); -} - - -//-------------------------------------------------------------------------------------- -// Enumerate for each adapter all of the supported display modes, -// device types, adapter formats, back buffer formats, window/full screen support, -// depth stencil formats, multisampling types/qualities, and presentations intervals. -// -// For each combination of device type (HAL/REF), adapter format, back buffer format, and -// IsWindowed it will call the app's ConfirmDevice callback. This allows the app -// to reject or allow that combination based on its caps/etc. It also allows the -// app to change the BehaviorFlags. The BehaviorFlags defaults non-pure HWVP -// if supported otherwise it will default to SWVP, however the app can change this -// through the ConfirmDevice callback. -//-------------------------------------------------------------------------------------- -HRESULT CD3D11Enumeration::Enumerate( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE IsD3D11DeviceAcceptableFunc, - void* pIsD3D11DeviceAcceptableFuncUserContext ) -{ - CDXUTPerfEventGenerator eventGenerator( DXUT_PERFEVENTCOLOR, L"DXUT D3D11 Enumeration" ); - HRESULT hr; - IDXGIFactory1* pFactory = DXUTGetDXGIFactory(); - if( pFactory == NULL ) - return E_FAIL; - - m_bHasEnumerated = true; - m_IsD3D11DeviceAcceptableFunc = IsD3D11DeviceAcceptableFunc; - m_pIsD3D11DeviceAcceptableFuncUserContext = pIsD3D11DeviceAcceptableFuncUserContext; - - ClearAdapterInfoList(); - - for( int index = 0; ; ++index ) - { - IDXGIAdapter* pAdapter = NULL; - hr = pFactory->EnumAdapters( index, &pAdapter ); - if( FAILED( hr ) ) // DXGIERR_NOT_FOUND is expected when the end of the list is hit - break; - - CD3D11EnumAdapterInfo* pAdapterInfo = new CD3D11EnumAdapterInfo; - if( !pAdapterInfo ) - { - SAFE_RELEASE( pAdapter ); - return E_OUTOFMEMORY; - } - ZeroMemory( pAdapterInfo, sizeof( CD3D11EnumAdapterInfo ) ); - pAdapterInfo->AdapterOrdinal = index; - pAdapter->GetDesc( &pAdapterInfo->AdapterDesc ); - pAdapterInfo->m_pAdapter = pAdapter; - - // Enumerate the device driver types on the adapter. - hr = EnumerateDevices( pAdapterInfo ); - if( FAILED( hr ) ) - { - delete pAdapterInfo; - continue; - } - - hr = EnumerateOutputs( pAdapterInfo ); - if( FAILED( hr ) || pAdapterInfo->outputInfoList.GetSize() <= 0 ) - { - delete pAdapterInfo; - continue; - } - - // Get info for each devicecombo on this device - if( FAILED( hr = EnumerateDeviceCombos( pFactory, pAdapterInfo ) ) ) - { - delete pAdapterInfo; - continue; - } - - hr = m_AdapterInfoList.Add( pAdapterInfo ); - if( FAILED( hr ) ) - { - delete pAdapterInfo; - return hr; - } - } - - - // If we did not get an adapter then we should still enumerate WARP and Ref. - if (m_AdapterInfoList.GetSize() == 0) { - - - CD3D11EnumAdapterInfo* pAdapterInfo = new CD3D11EnumAdapterInfo; - if( !pAdapterInfo ) - { - return E_OUTOFMEMORY; - } - ZeroMemory( pAdapterInfo, sizeof( CD3D11EnumAdapterInfo ) ); - pAdapterInfo->bAdapterUnavailable = true; - - hr = EnumerateDevices( pAdapterInfo ); - - // Get info for each devicecombo on this device - if( FAILED( hr = EnumerateDeviceCombosNoAdapter( pAdapterInfo ) ) ) - { - delete pAdapterInfo; - } - - if (!FAILED(hr)) hr = m_AdapterInfoList.Add( pAdapterInfo ); - } - - // - // Check for 2 or more adapters with the same name. Append the name - // with some instance number if that's the case to help distinguish - // them. - // - bool bUniqueDesc = true; - CD3D11EnumAdapterInfo* pAdapterInfo; - for( int i = 0; i < m_AdapterInfoList.GetSize(); i++ ) - { - CD3D11EnumAdapterInfo* pAdapterInfo1 = m_AdapterInfoList.GetAt( i ); - - for( int j = i + 1; j < m_AdapterInfoList.GetSize(); j++ ) - { - CD3D11EnumAdapterInfo* pAdapterInfo2 = m_AdapterInfoList.GetAt( j ); - if( wcsncmp( pAdapterInfo1->AdapterDesc.Description, - pAdapterInfo2->AdapterDesc.Description, DXGI_MAX_DEVICE_IDENTIFIER_STRING ) == 0 ) - { - bUniqueDesc = false; - break; - } - } - - if( !bUniqueDesc ) - break; - } - - for( int i = 0; i < m_AdapterInfoList.GetSize(); i++ ) - { - pAdapterInfo = m_AdapterInfoList.GetAt( i ); - - wcscpy_s( pAdapterInfo->szUniqueDescription, 100, pAdapterInfo->AdapterDesc.Description ); - if( !bUniqueDesc ) - { - WCHAR sz[100]; - swprintf_s( sz, 100, L" (#%d)", pAdapterInfo->AdapterOrdinal ); - wcscat_s( pAdapterInfo->szUniqueDescription, DXGI_MAX_DEVICE_IDENTIFIER_STRING, sz ); - } - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3D11Enumeration::EnumerateOutputs( CD3D11EnumAdapterInfo* pAdapterInfo ) -{ - HRESULT hr; - IDXGIOutput* pOutput; - - for( int iOutput = 0; ; ++iOutput ) - { - pOutput = NULL; - hr = pAdapterInfo->m_pAdapter->EnumOutputs( iOutput, &pOutput ); - if( DXGI_ERROR_NOT_FOUND == hr ) - { - return S_OK; - } - else if( FAILED( hr ) ) - { - return hr; //Something bad happened. - } - else //Success! - { - CD3D11EnumOutputInfo* pOutputInfo = new CD3D11EnumOutputInfo; - if( !pOutputInfo ) - { - SAFE_RELEASE( pOutput ); - return E_OUTOFMEMORY; - } - ZeroMemory( pOutputInfo, sizeof( CD3D11EnumOutputInfo ) ); - pOutput->GetDesc( &pOutputInfo->Desc ); - pOutputInfo->Output = iOutput; - pOutputInfo->m_pOutput = pOutput; - - EnumerateDisplayModes( pOutputInfo ); - if( pOutputInfo->displayModeList.GetSize() <= 0 ) - { - // If this output has no valid display mode, do not save it. - delete pOutputInfo; - continue; - } - - hr = pAdapterInfo->outputInfoList.Add( pOutputInfo ); - if( FAILED( hr ) ) - { - delete pOutputInfo; - return hr; - } - } - } -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3D11Enumeration::EnumerateDisplayModes( CD3D11EnumOutputInfo* pOutputInfo ) -{ - HRESULT hr = S_OK; - DXGI_FORMAT allowedAdapterFormatArray[] = - { - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, //This is DXUT's preferred mode - - DXGI_FORMAT_R8G8B8A8_UNORM, - DXGI_FORMAT_R16G16B16A16_FLOAT, - DXGI_FORMAT_R10G10B10A2_UNORM - }; - int allowedAdapterFormatArrayCount = sizeof( allowedAdapterFormatArray ) / sizeof( allowedAdapterFormatArray[0] ); - - // Swap perferred modes for apps running in linear space - DXGI_FORMAT RemoteMode = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; - if( !DXUTIsInGammaCorrectMode() ) - { - allowedAdapterFormatArray[0] = DXGI_FORMAT_R8G8B8A8_UNORM; - allowedAdapterFormatArray[1] = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; - RemoteMode = DXGI_FORMAT_R8G8B8A8_UNORM; - } - - // The fast path only enumerates R8G8B8A8_UNORM_SRGB modes - if( !m_bEnumerateAllAdapterFormats ) - allowedAdapterFormatArrayCount = 1; - - for( int f = 0; f < allowedAdapterFormatArrayCount; ++f ) - { - // Fast-path: Try to grab at least 512 modes. - // This is to avoid calling GetDisplayModeList more times than necessary. - // GetDisplayModeList is an expensive call. - UINT NumModes = 512; - DXGI_MODE_DESC* pDesc = new DXGI_MODE_DESC[ NumModes ]; - assert( pDesc ); - if( !pDesc ) - return E_OUTOFMEMORY; - - hr = pOutputInfo->m_pOutput->GetDisplayModeList( allowedAdapterFormatArray[f], - DXGI_ENUM_MODES_SCALING, - &NumModes, - pDesc ); - if( DXGI_ERROR_NOT_FOUND == hr ) - { - SAFE_DELETE_ARRAY( pDesc ); - NumModes = 0; - break; - } - else if( MAKE_DXGI_HRESULT( 34 ) == hr && RemoteMode == allowedAdapterFormatArray[f] ) - { - // DXGI cannot enumerate display modes over a remote session. Therefore, create a fake display - // mode for the current screen resolution for the remote session. - if( 0 != GetSystemMetrics( 0x1000 ) ) // SM_REMOTESESSION - { - DEVMODE DevMode; - DevMode.dmSize = sizeof( DEVMODE ); - if( EnumDisplaySettings( NULL, ENUM_CURRENT_SETTINGS, &DevMode ) ) - { - NumModes = 1; - pDesc[0].Width = DevMode.dmPelsWidth; - pDesc[0].Height = DevMode.dmPelsHeight; - pDesc[0].Format = DXGI_FORMAT_R8G8B8A8_UNORM; - pDesc[0].RefreshRate.Numerator = 60; - pDesc[0].RefreshRate.Denominator = 1; - pDesc[0].ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE; - pDesc[0].Scaling = DXGI_MODE_SCALING_CENTERED; - hr = S_OK; - } - } - } - else if( DXGI_ERROR_MORE_DATA == hr ) - { - // Slow path. There were more than 512 modes. - SAFE_DELETE_ARRAY( pDesc ); - hr = pOutputInfo->m_pOutput->GetDisplayModeList( allowedAdapterFormatArray[f], - DXGI_ENUM_MODES_SCALING, - &NumModes, - NULL ); - if( FAILED( hr ) ) - { - NumModes = 0; - break; - } - - pDesc = new DXGI_MODE_DESC[ NumModes ]; - assert( pDesc ); - if( !pDesc ) - return E_OUTOFMEMORY; - - hr = pOutputInfo->m_pOutput->GetDisplayModeList( allowedAdapterFormatArray[f], - DXGI_ENUM_MODES_SCALING, - &NumModes, - pDesc ); - if( FAILED( hr ) ) - { - SAFE_DELETE_ARRAY( pDesc ); - NumModes = 0; - break; - } - - } - - if( 0 == NumModes && 0 == f ) - { - // No R8G8B8A8_UNORM_SRGB modes! - // Abort the fast-path if we're on it - allowedAdapterFormatArrayCount = sizeof( allowedAdapterFormatArray ) / sizeof - ( allowedAdapterFormatArray[0] ); - SAFE_DELETE_ARRAY( pDesc ); - continue; - } - - if( SUCCEEDED( hr ) ) - { - for( UINT m = 0; m < NumModes; m++ ) - { - pOutputInfo->displayModeList.Add( pDesc[m] ); - } - } - - SAFE_DELETE_ARRAY( pDesc ); - } - - return hr; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3D11Enumeration::EnumerateDevices( CD3D11EnumAdapterInfo* pAdapterInfo ) -{ - HRESULT hr; - DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings(); - const D3D_DRIVER_TYPE devTypeArray[] = - { - D3D_DRIVER_TYPE_HARDWARE, - D3D_DRIVER_TYPE_WARP, - D3D_DRIVER_TYPE_REFERENCE - }; - const UINT devTypeArrayCount = sizeof( devTypeArray ) / sizeof( devTypeArray[0] ); - - // Enumerate each Direct3D device type - for( UINT iDeviceType = 0; iDeviceType < devTypeArrayCount; iDeviceType++ ) - { - CD3D11EnumDeviceInfo* pDeviceInfo = new CD3D11EnumDeviceInfo; - if( pDeviceInfo == NULL ) - return E_OUTOFMEMORY; - - // Fill struct w/ AdapterOrdinal and D3DX10_DRIVER_TYPE - pDeviceInfo->AdapterOrdinal = pAdapterInfo->AdapterOrdinal; - pDeviceInfo->DeviceType = devTypeArray[iDeviceType]; - - D3D_FEATURE_LEVEL FeatureLevels[] = - { - D3D_FEATURE_LEVEL_11_0, - D3D_FEATURE_LEVEL_10_1, - D3D_FEATURE_LEVEL_10_0, - D3D_FEATURE_LEVEL_9_3, - D3D_FEATURE_LEVEL_9_2, - D3D_FEATURE_LEVEL_9_1 - }; - UINT NumFeatureLevels = ARRAYSIZE( FeatureLevels ); - - // Call D3D11CreateDevice to ensure that this is a D3D11 device. - ID3D11Device* pd3dDevice = NULL; - ID3D11DeviceContext* pd3dDeviceContext = NULL; - IDXGIAdapter* pAdapter = NULL; - //if( devTypeArray[iDeviceType] == D3D_DRIVER_TYPE_HARDWARE ) - // pAdapter = pAdapterInfo->m_pAdapter; - hr = DXUT_Dynamic_D3D11CreateDevice( pAdapter, - devTypeArray[iDeviceType], - ( HMODULE )0, - 0, - FeatureLevels, - NumFeatureLevels, - D3D11_SDK_VERSION, - &pd3dDevice, - &pDeviceInfo->MaxLevel, - &pd3dDeviceContext ); - if( FAILED( hr ) || pDeviceInfo->MaxLevel < deviceSettings.MinimumFeatureLevel) - { - delete pDeviceInfo; - continue; - } - - if (g_forceFL == 0 || g_forceFL == pDeviceInfo->MaxLevel) { - pDeviceInfo->SelectedLevel = pDeviceInfo->MaxLevel; - } - else if (g_forceFL > pDeviceInfo->MaxLevel) { - delete pDeviceInfo; - SAFE_RELEASE( pd3dDevice ); - SAFE_RELEASE( pd3dDeviceContext ); - continue; - } else { - // A device was created with a higher feature level that the user-specified feature level. - SAFE_RELEASE( pd3dDevice ); - SAFE_RELEASE( pd3dDeviceContext ); - D3D_FEATURE_LEVEL rtFL; - hr = DXUT_Dynamic_D3D11CreateDevice( pAdapter, - devTypeArray[iDeviceType], - ( HMODULE )0, - 0, - &g_forceFL, - 1, - D3D11_SDK_VERSION, - &pd3dDevice, - &rtFL, - &pd3dDeviceContext ); - - if( !FAILED( hr ) && rtFL == g_forceFL ) { - - pDeviceInfo->SelectedLevel = g_forceFL; - }else { - delete pDeviceInfo; - SAFE_RELEASE( pd3dDevice ); - SAFE_RELEASE( pd3dDeviceContext ); - continue; - } - } - - IDXGIDevice1* pDXGIDev = NULL; - hr = pd3dDevice->QueryInterface( __uuidof( IDXGIDevice1 ), ( LPVOID* )&pDXGIDev ); - if( SUCCEEDED( hr ) && pDXGIDev ) - { - SAFE_RELEASE( pAdapterInfo->m_pAdapter ); - pDXGIDev->GetAdapter( &pAdapterInfo->m_pAdapter ); - } - SAFE_RELEASE( pDXGIDev ); - - - D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS ho; - pd3dDevice->CheckFeatureSupport(D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS, &ho, sizeof(ho)); - pDeviceInfo->ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x = ho.ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x; - SAFE_RELEASE( pd3dDeviceContext ); - SAFE_RELEASE( pd3dDevice ); - pAdapterInfo->deviceInfoList.Add( pDeviceInfo ); - } - - return S_OK; -} - - -HRESULT CD3D11Enumeration::EnumerateDeviceCombosNoAdapter( CD3D11EnumAdapterInfo* pAdapterInfo ) -{ - // Iterate through each combination of device driver type, output, - // adapter format, and backbuffer format to build the adapter's device combo list. - // - - for( int device = 0; device < pAdapterInfo->deviceInfoList.GetSize(); ++device ) - { - CD3D11EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( device ); - - DXGI_FORMAT BufferFormatArray[] = - { - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, //This is DXUT's preferred mode - - DXGI_FORMAT_R8G8B8A8_UNORM, - DXGI_FORMAT_R16G16B16A16_FLOAT, - DXGI_FORMAT_R10G10B10A2_UNORM - }; - const UINT BufferFormatArrayCount = sizeof( BufferFormatArray ) / sizeof - ( BufferFormatArray[0] ); - - // Swap perferred modes for apps running in linear space - if( !DXUTIsInGammaCorrectMode() ) - { - BufferFormatArray[0] = DXGI_FORMAT_R8G8B8A8_UNORM; - BufferFormatArray[1] = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; - } - - for( UINT iBufferFormat = 0; iBufferFormat < BufferFormatArrayCount; iBufferFormat++ ) - { - DXGI_FORMAT BufferFormat = BufferFormatArray[iBufferFormat]; - - - - // determine if there are any modes for this particular format - - - // If an application callback function has been provided, make sure this device - // is acceptable to the app. - if( m_IsD3D11DeviceAcceptableFunc != NULL ) - { - if( !m_IsD3D11DeviceAcceptableFunc( pAdapterInfo, - 0, - pDeviceInfo, - BufferFormat, - TRUE, - m_pIsD3D11DeviceAcceptableFuncUserContext ) ) - continue; - } - - // At this point, we have an adapter/device/backbufferformat/iswindowed - // DeviceCombo that is supported by the system. We still - // need to find one or more suitable depth/stencil buffer format, - // multisample type, and present interval. - CD3D11EnumDeviceSettingsCombo* pDeviceCombo = new CD3D11EnumDeviceSettingsCombo; - if( pDeviceCombo == NULL ) - return E_OUTOFMEMORY; - - pDeviceCombo->AdapterOrdinal = pDeviceInfo->AdapterOrdinal; - pDeviceCombo->DeviceType = pDeviceInfo->DeviceType; - pDeviceCombo->BackBufferFormat = BufferFormat; - pDeviceCombo->Windowed = TRUE; - pDeviceCombo->Output = 0; - pDeviceCombo->pAdapterInfo = pAdapterInfo; - pDeviceCombo->pDeviceInfo = pDeviceInfo; - pDeviceCombo->pOutputInfo = NULL; - - BuildMultiSampleQualityList( BufferFormat, pDeviceCombo ); - - if( FAILED( pAdapterInfo->deviceSettingsComboList.Add( pDeviceCombo ) ) ) - delete pDeviceCombo; - } - - } - - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3D11Enumeration::EnumerateDeviceCombos( IDXGIFactory1* pFactory, CD3D11EnumAdapterInfo* pAdapterInfo ) -{ - // Iterate through each combination of device driver type, output, - // adapter format, and backbuffer format to build the adapter's device combo list. - // - - for( int output = 0; output < pAdapterInfo->outputInfoList.GetSize(); ++output ) - { - CD3D11EnumOutputInfo* pOutputInfo = pAdapterInfo->outputInfoList.GetAt( output ); - - for( int device = 0; device < pAdapterInfo->deviceInfoList.GetSize(); ++device ) - { - CD3D11EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( device ); - - DXGI_FORMAT backBufferFormatArray[] = - { - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, //This is DXUT's preferred mode - - DXGI_FORMAT_R8G8B8A8_UNORM, - DXGI_FORMAT_R16G16B16A16_FLOAT, - DXGI_FORMAT_R10G10B10A2_UNORM - }; - const UINT backBufferFormatArrayCount = sizeof( backBufferFormatArray ) / sizeof - ( backBufferFormatArray[0] ); - - // Swap perferred modes for apps running in linear space - if( !DXUTIsInGammaCorrectMode() ) - { - backBufferFormatArray[0] = DXGI_FORMAT_R8G8B8A8_UNORM; - backBufferFormatArray[1] = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; - } - - for( UINT iBackBufferFormat = 0; iBackBufferFormat < backBufferFormatArrayCount; iBackBufferFormat++ ) - { - DXGI_FORMAT backBufferFormat = backBufferFormatArray[iBackBufferFormat]; - - for( int nWindowed = 0; nWindowed < 2; nWindowed++ ) - { - if( !nWindowed && pOutputInfo->displayModeList.GetSize() == 0 ) - continue; - - // determine if there are any modes for this particular format - UINT iModes = 0; - for( int i = 0; i < pOutputInfo->displayModeList.GetSize(); i++ ) - { - if( backBufferFormat == pOutputInfo->displayModeList.GetAt( i ).Format ) - iModes ++; - } - if( 0 == iModes ) - continue; - - // If an application callback function has been provided, make sure this device - // is acceptable to the app. - if( m_IsD3D11DeviceAcceptableFunc != NULL ) - { - if( !m_IsD3D11DeviceAcceptableFunc( pAdapterInfo, output, - pDeviceInfo, backBufferFormat, - FALSE != nWindowed, - m_pIsD3D11DeviceAcceptableFuncUserContext ) ) - continue; - } - - // At this point, we have an adapter/device/backbufferformat/iswindowed - // DeviceCombo that is supported by the system. We still - // need to find one or more suitable depth/stencil buffer format, - // multisample type, and present interval. - CD3D11EnumDeviceSettingsCombo* pDeviceCombo = new CD3D11EnumDeviceSettingsCombo; - if( pDeviceCombo == NULL ) - return E_OUTOFMEMORY; - - pDeviceCombo->AdapterOrdinal = pDeviceInfo->AdapterOrdinal; - pDeviceCombo->DeviceType = pDeviceInfo->DeviceType; - pDeviceCombo->BackBufferFormat = backBufferFormat; - pDeviceCombo->Windowed = ( nWindowed != 0 ); - pDeviceCombo->Output = pOutputInfo->Output; - pDeviceCombo->pAdapterInfo = pAdapterInfo; - pDeviceCombo->pDeviceInfo = pDeviceInfo; - pDeviceCombo->pOutputInfo = pOutputInfo; - - BuildMultiSampleQualityList( backBufferFormat, pDeviceCombo ); - - if( FAILED( pAdapterInfo->deviceSettingsComboList.Add( pDeviceCombo ) ) ) - delete pDeviceCombo; - } - } - } - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Release all the allocated CD3D11EnumAdapterInfo objects and empty the list -//-------------------------------------------------------------------------------------- -void CD3D11Enumeration::ClearAdapterInfoList() -{ - CD3D11EnumAdapterInfo* pAdapterInfo; - for( int i = 0; i < m_AdapterInfoList.GetSize(); i++ ) - { - pAdapterInfo = m_AdapterInfoList.GetAt( i ); - delete pAdapterInfo; - } - - m_AdapterInfoList.RemoveAll(); -} - - -//-------------------------------------------------------------------------------------- -void CD3D11Enumeration::ResetPossibleDepthStencilFormats() -{ - m_DepthStencilPossibleList.RemoveAll(); - m_DepthStencilPossibleList.Add( DXGI_FORMAT_D32_FLOAT_S8X24_UINT ); - m_DepthStencilPossibleList.Add( DXGI_FORMAT_D32_FLOAT ); - m_DepthStencilPossibleList.Add( DXGI_FORMAT_D24_UNORM_S8_UINT ); - m_DepthStencilPossibleList.Add( DXGI_FORMAT_D16_UNORM ); -} - -//-------------------------------------------------------------------------------------- -void CD3D11Enumeration::SetEnumerateAllAdapterFormats( bool bEnumerateAllAdapterFormats ) -{ - m_bEnumerateAllAdapterFormats = bEnumerateAllAdapterFormats; -} - - -//-------------------------------------------------------------------------------------- -void CD3D11Enumeration::BuildMultiSampleQualityList( DXGI_FORMAT fmt, CD3D11EnumDeviceSettingsCombo* pDeviceCombo ) -{ - ID3D11Device* pd3dDevice = NULL; - ID3D11DeviceContext* pd3dDeviceContext = NULL; - IDXGIAdapter* pAdapter = NULL; - - //if( pDeviceCombo->DeviceType == D3D_DRIVER_TYPE_HARDWARE ) - // DXUTGetDXGIFactory()->EnumAdapters( pDeviceCombo->pAdapterInfo->AdapterOrdinal, &pAdapter ); - - //DXGI_ADAPTER_DESC dad; - //pAdapter->GetDesc(&dad); - - D3D_FEATURE_LEVEL *FeatureLevels = &(pDeviceCombo->pDeviceInfo->SelectedLevel); - D3D_FEATURE_LEVEL returnedFeatureLevel; - - UINT NumFeatureLevels = 1; - - HRESULT hr = DXUT_Dynamic_D3D11CreateDevice( pAdapter, - pDeviceCombo->DeviceType, - ( HMODULE )0, - 0, - FeatureLevels, - NumFeatureLevels, - D3D11_SDK_VERSION, - &pd3dDevice, - &returnedFeatureLevel, - &pd3dDeviceContext ) ; - - if( FAILED( hr)) return; - - if (returnedFeatureLevel != pDeviceCombo->pDeviceInfo->SelectedLevel) return; - - for( int i = 1; i <= D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT; ++i ) - { - UINT Quality; - if( SUCCEEDED( pd3dDevice->CheckMultisampleQualityLevels( fmt, i, &Quality ) ) && Quality > 0 ) - { - //From D3D10 docs: 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 is defined by - //D3D10_MAX_MULTISAMPLE_SAMPLE_COUNT in d3d10.h. If the returned value of pNumQualityLevels is 0, - //the format and sample count combination is not supported for the installed adapter. - - if (Quality != 0) { - pDeviceCombo->multiSampleCountList.Add( i ); - pDeviceCombo->multiSampleQualityList.Add( Quality ); - } - } - } - - SAFE_RELEASE( pAdapter ); - SAFE_RELEASE( pd3dDevice ); - SAFE_RELEASE (pd3dDeviceContext); -} - - -//-------------------------------------------------------------------------------------- -// Call GetAdapterInfoList() after Enumerate() to get a STL vector of -// CD3D11EnumAdapterInfo* -//-------------------------------------------------------------------------------------- -CGrowableArray * CD3D11Enumeration::GetAdapterInfoList() -{ - return &m_AdapterInfoList; -} - - -//-------------------------------------------------------------------------------------- -CD3D11EnumAdapterInfo* CD3D11Enumeration::GetAdapterInfo( UINT AdapterOrdinal ) -{ - for( int iAdapter = 0; iAdapter < m_AdapterInfoList.GetSize(); iAdapter++ ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = m_AdapterInfoList.GetAt( iAdapter ); - if( pAdapterInfo->AdapterOrdinal == AdapterOrdinal ) - return pAdapterInfo; - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -CD3D11EnumDeviceInfo* CD3D11Enumeration::GetDeviceInfo( UINT AdapterOrdinal, D3D_DRIVER_TYPE DeviceType ) -{ - CD3D11EnumAdapterInfo* pAdapterInfo = GetAdapterInfo( AdapterOrdinal ); - if( pAdapterInfo ) - { - for( int iDeviceInfo = 0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ ) - { - CD3D11EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( iDeviceInfo ); - if( pDeviceInfo->DeviceType == DeviceType ) - return pDeviceInfo; - } - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -CD3D11EnumOutputInfo* CD3D11Enumeration::GetOutputInfo( UINT AdapterOrdinal, UINT Output ) -{ - CD3D11EnumAdapterInfo* pAdapterInfo = GetAdapterInfo( AdapterOrdinal ); - if( pAdapterInfo && pAdapterInfo->outputInfoList.GetSize() > int( Output ) ) - { - return pAdapterInfo->outputInfoList.GetAt( Output ); - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -CD3D11EnumDeviceSettingsCombo* CD3D11Enumeration::GetDeviceSettingsCombo( UINT AdapterOrdinal, - D3D_DRIVER_TYPE DeviceType, UINT Output, - DXGI_FORMAT BackBufferFormat, BOOL Windowed ) -{ - CD3D11EnumAdapterInfo* pAdapterInfo = GetAdapterInfo( AdapterOrdinal ); - if( pAdapterInfo ) - { - for( int iDeviceCombo = 0; iDeviceCombo < pAdapterInfo->deviceSettingsComboList.GetSize(); iDeviceCombo++ ) - { - CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo = pAdapterInfo->deviceSettingsComboList.GetAt( - iDeviceCombo ); - if( pDeviceSettingsCombo->BackBufferFormat == BackBufferFormat && - pDeviceSettingsCombo->Windowed == Windowed ) - return pDeviceSettingsCombo; - } - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -CD3D11EnumOutputInfo::~CD3D11EnumOutputInfo( void ) -{ - SAFE_RELEASE( m_pOutput ); - displayModeList.RemoveAll(); -} - - -//-------------------------------------------------------------------------------------- -CD3D11EnumDeviceInfo::~CD3D11EnumDeviceInfo() -{ -} - - -//-------------------------------------------------------------------------------------- -CD3D11EnumAdapterInfo::~CD3D11EnumAdapterInfo( void ) -{ - for( int i = 0; i < outputInfoList.GetSize(); i++ ) - { - CD3D11EnumOutputInfo* pOutputInfo = outputInfoList.GetAt( i ); - delete pOutputInfo; - } - outputInfoList.RemoveAll(); - - for( int i = 0; i < deviceInfoList.GetSize(); ++i ) - { - CD3D11EnumDeviceInfo* pDeviceInfo = deviceInfoList.GetAt( i ); - delete pDeviceInfo; - } - deviceInfoList.RemoveAll(); - - for( int i = 0; i < deviceSettingsComboList.GetSize(); ++i ) - { - CD3D11EnumDeviceSettingsCombo* pDeviceCombo = deviceSettingsComboList.GetAt( i ); - delete pDeviceCombo; - } - deviceSettingsComboList.RemoveAll(); - - SAFE_RELEASE( m_pAdapter ); -} - -//-------------------------------------------------------------------------------------- -// Returns the number of color channel bits in the specified DXGI_FORMAT -//-------------------------------------------------------------------------------------- -UINT WINAPI DXUTGetDXGIColorChannelBits( DXGI_FORMAT fmt ) -{ - switch( fmt ) - { - case DXGI_FORMAT_R32G32B32A32_TYPELESS: - case DXGI_FORMAT_R32G32B32A32_FLOAT: - case DXGI_FORMAT_R32G32B32A32_UINT: - case DXGI_FORMAT_R32G32B32A32_SINT: - case DXGI_FORMAT_R32G32B32_TYPELESS: - case DXGI_FORMAT_R32G32B32_FLOAT: - case DXGI_FORMAT_R32G32B32_UINT: - case DXGI_FORMAT_R32G32B32_SINT: - return 32; - - case DXGI_FORMAT_R16G16B16A16_TYPELESS: - case DXGI_FORMAT_R16G16B16A16_FLOAT: - case DXGI_FORMAT_R16G16B16A16_UNORM: - case DXGI_FORMAT_R16G16B16A16_UINT: - case DXGI_FORMAT_R16G16B16A16_SNORM: - case DXGI_FORMAT_R16G16B16A16_SINT: - return 16; - - case DXGI_FORMAT_R10G10B10A2_TYPELESS: - case DXGI_FORMAT_R10G10B10A2_UNORM: - case DXGI_FORMAT_R10G10B10A2_UINT: - return 10; - - case DXGI_FORMAT_R8G8B8A8_TYPELESS: - case DXGI_FORMAT_R8G8B8A8_UNORM: - case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: - case DXGI_FORMAT_R8G8B8A8_UINT: - case DXGI_FORMAT_R8G8B8A8_SNORM: - case DXGI_FORMAT_R8G8B8A8_SINT: - return 8; - - case DXGI_FORMAT_B5G6R5_UNORM: - case DXGI_FORMAT_B5G5R5A1_UNORM: - return 5; - - default: - return 0; - } -} - -//-------------------------------------------------------------------------------------- -// Returns a ranking number that describes how closely this device -// combo matches the optimal combo based on the match options and the optimal device settings -//-------------------------------------------------------------------------------------- -float DXUTRankD3D11DeviceCombo( CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo, - DXUTD3D11DeviceSettings* pOptimalDeviceSettings, - DXGI_MODE_DESC* pAdapterDisplayMode, - int &bestModeIndex, - int &bestMSAAIndex - ) -{ - float fCurRanking = 0.0f; - - // Arbitrary weights. Gives preference to the ordinal, device type, and windowed - const float fAdapterOrdinalWeight = 1000.0f; - const float fAdapterOutputWeight = 500.0f; - const float fDeviceTypeWeight = 100.0f; - const float fWARPOverRefWeight = 80.0f; - - const float fWindowWeight = 10.0f; - const float fResolutionWeight = 1.0f; - const float fBackBufferFormatWeight = 1.0f; - const float fMultiSampleWeight = 1.0f; - const float fRefreshRateWeight = 1.0f; - - //--------------------- - // Adapter ordinal - //--------------------- - if( pDeviceSettingsCombo->AdapterOrdinal == pOptimalDeviceSettings->AdapterOrdinal ) - fCurRanking += fAdapterOrdinalWeight; - - //--------------------- - // Adapter ordinal - //--------------------- - if( pDeviceSettingsCombo->Output == pOptimalDeviceSettings->Output ) - fCurRanking += fAdapterOutputWeight; - - //--------------------- - // Device type - //--------------------- - if( pDeviceSettingsCombo->DeviceType == pOptimalDeviceSettings->DriverType ) - fCurRanking += fDeviceTypeWeight; - else if (pDeviceSettingsCombo->DeviceType == D3D_DRIVER_TYPE_WARP && pOptimalDeviceSettings->DriverType == D3D_DRIVER_TYPE_HARDWARE) { - fCurRanking += fWARPOverRefWeight; - } - - // Slightly prefer HAL - if( pDeviceSettingsCombo->DeviceType == D3DDEVTYPE_HAL ) - fCurRanking += 0.1f; - - //--------------------- - // Windowed - //--------------------- - if( pDeviceSettingsCombo->Windowed == pOptimalDeviceSettings->sd.Windowed ) - fCurRanking += fWindowWeight; - - //--------------------- - // Resolution - //--------------------- - bool bResolutionFound = false; - unsigned int best = 0xffffffff; - bestModeIndex=0; - for( int idm = 0; pDeviceSettingsCombo->pOutputInfo != NULL && idm < pDeviceSettingsCombo->pOutputInfo->displayModeList.GetSize() && !bResolutionFound; idm++ ) - { - DXGI_MODE_DESC displayMode = pDeviceSettingsCombo->pOutputInfo->displayModeList.GetAt( idm ); - if( displayMode.Width == pOptimalDeviceSettings->sd.BufferDesc.Width && - displayMode.Height == pOptimalDeviceSettings->sd.BufferDesc.Height ) - bResolutionFound = true; - - unsigned int current = - (UINT) abs ((int)displayMode.Width - (int)pOptimalDeviceSettings->sd.BufferDesc.Width) + - (UINT) abs ((int)displayMode.Height - (int)pOptimalDeviceSettings->sd.BufferDesc.Height ); - - if (current < best) { - best = current; - bestModeIndex= idm; - - } - - } - if( bResolutionFound ) - fCurRanking += fResolutionWeight; - - //--------------------- - // Back buffer format - //--------------------- - if( pDeviceSettingsCombo->BackBufferFormat == pOptimalDeviceSettings->sd.BufferDesc.Format ) - { - fCurRanking += fBackBufferFormatWeight; - } - else - { - int nBitDepthDelta = abs( ( long )DXUTGetDXGIColorChannelBits( pDeviceSettingsCombo->BackBufferFormat ) - - ( long )DXUTGetDXGIColorChannelBits( - pOptimalDeviceSettings->sd.BufferDesc.Format ) ); - float fScale = __max( 0.9f - ( float )nBitDepthDelta * 0.2f, 0.0f ); - fCurRanking += fScale * fBackBufferFormatWeight; - } - - //--------------------- - // Back buffer count - //--------------------- - // No caps for the back buffer count - - //--------------------- - // Multisample - //--------------------- - bool bMultiSampleFound = false; - bestMSAAIndex = 0; - for( int i = 0; i < pDeviceSettingsCombo->multiSampleCountList.GetSize(); i++ ) - { - UINT Count = pDeviceSettingsCombo->multiSampleCountList.GetAt( i ); - - if( Count == pOptimalDeviceSettings->sd.SampleDesc.Count ) - { - bestMSAAIndex = i; - bMultiSampleFound = true; - break; - } - } - if( bMultiSampleFound ) - fCurRanking += fMultiSampleWeight; - - //--------------------- - // Swap effect - //--------------------- - // No caps for swap effects - - //--------------------- - // Depth stencil - //--------------------- - // No caps for swap effects - - //--------------------- - // Present flags - //--------------------- - // No caps for the present flags - - //--------------------- - // Refresh rate - //--------------------- - bool bRefreshFound = false; - for( int idm = 0; pDeviceSettingsCombo->pOutputInfo != NULL && idm < pDeviceSettingsCombo->pOutputInfo->displayModeList.GetSize(); idm++ ) - { - DXGI_MODE_DESC displayMode = pDeviceSettingsCombo->pOutputInfo->displayModeList.GetAt( idm ); - if( fabs( float( displayMode.RefreshRate.Numerator ) / displayMode.RefreshRate.Denominator - - float( pOptimalDeviceSettings->sd.BufferDesc.RefreshRate.Numerator ) / - pOptimalDeviceSettings->sd.BufferDesc.RefreshRate.Denominator ) < 0.1f ) - bRefreshFound = true; - } - if( bRefreshFound ) - fCurRanking += fRefreshRateWeight; - - //--------------------- - // Present interval - //--------------------- - // No caps for the present flags - - return fCurRanking; -} - - -//-------------------------------------------------------------------------------------- -// Returns the DXGI_MODE_DESC struct for a given adapter and output -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTGetD3D11AdapterDisplayMode( UINT AdapterOrdinal, UINT nOutput, DXGI_MODE_DESC* pModeDesc ) -{ - if( !pModeDesc ) - return E_INVALIDARG; - - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - CD3D11EnumOutputInfo* pOutputInfo = pD3DEnum->GetOutputInfo( AdapterOrdinal, nOutput ); - if( pOutputInfo ) - { - pModeDesc->Width = 640; - pModeDesc->Height = 480; - pModeDesc->RefreshRate.Numerator = 60; - pModeDesc->RefreshRate.Denominator = 1; - pModeDesc->Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; - pModeDesc->Scaling = DXGI_MODE_SCALING_UNSPECIFIED; - pModeDesc->ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; - - DXGI_OUTPUT_DESC Desc; - pOutputInfo->m_pOutput->GetDesc( &Desc ); - pModeDesc->Width = Desc.DesktopCoordinates.right - Desc.DesktopCoordinates.left; - pModeDesc->Height = Desc.DesktopCoordinates.bottom - Desc.DesktopCoordinates.top; - } - - // TODO: verify this is needed - if( pModeDesc->Format == DXGI_FORMAT_B8G8R8A8_UNORM ) - pModeDesc->Format = DXGI_FORMAT_R8G8B8A8_UNORM; - - return S_OK; -} diff --git a/sample/d3d11/common/DXUTDevice11.h b/sample/d3d11/common/DXUTDevice11.h deleted file mode 100644 index a76cc69..0000000 --- a/sample/d3d11/common/DXUTDevice11.h +++ /dev/null @@ -1,210 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTDevice11.h -// -// Enumerates D3D adapters, devices, modes, etc. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_DEVICE11_H -#define DXUT_DEVICE11_H - -void DXUTApplyDefaultDeviceSettings(DXUTDeviceSettings *modifySettings); - -//-------------------------------------------------------------------------------------- -// Functions to get bit depth from formats -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTGetD3D11AdapterDisplayMode( UINT AdapterOrdinal, UINT Output, DXGI_MODE_DESC* pModeDesc ); - - - - -//-------------------------------------------------------------------------------------- -// Optional memory create/destory functions. If not call, these will be called automatically -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateD3D11Enumeration(); -void WINAPI DXUTDestroyD3D11Enumeration(); - - - - -//-------------------------------------------------------------------------------------- -// Forward declarations -//-------------------------------------------------------------------------------------- -class CD3D11EnumAdapterInfo; -class CD3D11EnumDeviceInfo; -class CD3D11EnumOutputInfo; -struct CD3D11EnumDeviceSettingsCombo; - - - -//-------------------------------------------------------------------------------------- -// Enumerates available Direct3D10 adapters, devices, modes, etc. -// Use DXUTGetD3D9Enumeration() to access global instance -//-------------------------------------------------------------------------------------- -class CD3D11Enumeration -{ -public: - // These should be called before Enumerate(). - // - // Use these calls and the IsDeviceAcceptable to control the contents of - // the enumeration object, which affects the device selection and the device settings dialog. - void SetResolutionMinMax( UINT nMinWidth, UINT nMinHeight, UINT nMaxWidth, UINT nMaxHeight ); - void SetRefreshMinMax( UINT nMin, UINT nMax ); - void SetForceFeatureLevel( D3D_FEATURE_LEVEL forceFL) { - g_forceFL = forceFL; - }; - void SetMultisampleQualityMax( UINT nMax ); - CGrowableArray* GetPossibleDepthStencilFormatList(); - void ResetPossibleDepthStencilFormats(); - void SetEnumerateAllAdapterFormats( bool bEnumerateAllAdapterFormats ); - - // Call Enumerate() to enumerate available D3D11 adapters, devices, modes, etc. - bool HasEnumerated() { return m_bHasEnumerated; } - HRESULT Enumerate( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE IsD3D11DeviceAcceptableFunc, - void* pIsD3D11DeviceAcceptableFuncUserContext ); - - // These should be called after Enumerate() is called - CGrowableArray* GetAdapterInfoList(); - CD3D11EnumAdapterInfo* GetAdapterInfo( UINT AdapterOrdinal ); - CD3D11EnumDeviceInfo* GetDeviceInfo( UINT AdapterOrdinal, D3D_DRIVER_TYPE DeviceType ); - CD3D11EnumOutputInfo* GetOutputInfo( UINT AdapterOrdinal, UINT Output ); - CD3D11EnumDeviceSettingsCombo* GetDeviceSettingsCombo( DXUTD3D11DeviceSettings* pDeviceSettings ) { return GetDeviceSettingsCombo( pDeviceSettings->AdapterOrdinal, pDeviceSettings->DriverType, pDeviceSettings->Output, pDeviceSettings->sd.BufferDesc.Format, pDeviceSettings->sd.Windowed ); } - CD3D11EnumDeviceSettingsCombo* GetDeviceSettingsCombo( UINT AdapterOrdinal, D3D_DRIVER_TYPE DeviceType, UINT Output, DXGI_FORMAT BackBufferFormat, BOOL Windowed ); - - ~CD3D11Enumeration(); - -private: - friend HRESULT WINAPI DXUTCreateD3D11Enumeration(); - - // Use DXUTGetD3D11Enumeration() to access global instance - CD3D11Enumeration(); - - bool m_bHasEnumerated; - LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE m_IsD3D11DeviceAcceptableFunc; - void* m_pIsD3D11DeviceAcceptableFuncUserContext; - - CGrowableArray m_DepthStencilPossibleList; - - UINT m_nMinWidth; - UINT m_nMaxWidth; - UINT m_nMinHeight; - UINT m_nMaxHeight; - UINT m_nRefreshMin; - UINT m_nRefreshMax; - UINT m_nMultisampleQualityMax; - bool m_bEnumerateAllAdapterFormats; - D3D_FEATURE_LEVEL g_forceFL; - - // Array of CD3D9EnumAdapterInfo* with unique AdapterOrdinals - CGrowableArray m_AdapterInfoList; - - HRESULT EnumerateOutputs( CD3D11EnumAdapterInfo *pAdapterInfo ); - HRESULT EnumerateDevices( CD3D11EnumAdapterInfo *pAdapterInfo ); - HRESULT EnumerateDeviceCombos( IDXGIFactory1 *pFactory, CD3D11EnumAdapterInfo* pAdapterInfo ); - HRESULT EnumerateDeviceCombosNoAdapter( CD3D11EnumAdapterInfo* pAdapterInfo ); - - HRESULT EnumerateDisplayModes( CD3D11EnumOutputInfo *pOutputInfo ); - void BuildMultiSampleQualityList( DXGI_FORMAT fmt, CD3D11EnumDeviceSettingsCombo* pDeviceCombo ); - void ClearAdapterInfoList(); -}; - -CD3D11Enumeration* WINAPI DXUTGetD3D11Enumeration(bool bForceEnumerate = false, bool EnumerateAllAdapterFormats = false, D3D_FEATURE_LEVEL forceFL = ((D3D_FEATURE_LEVEL )0) ); - - -#define DXGI_MAX_DEVICE_IDENTIFIER_STRING 128 - -//-------------------------------------------------------------------------------------- -// A class describing an adapter which contains a unique adapter ordinal -// that is installed on the system -//-------------------------------------------------------------------------------------- -class CD3D11EnumAdapterInfo -{ - const CD3D11EnumAdapterInfo &operator = ( const CD3D11EnumAdapterInfo &rhs ); - -public: - ~CD3D11EnumAdapterInfo(); - - UINT AdapterOrdinal; - DXGI_ADAPTER_DESC AdapterDesc; - WCHAR szUniqueDescription[DXGI_MAX_DEVICE_IDENTIFIER_STRING]; - IDXGIAdapter *m_pAdapter; - bool bAdapterUnavailable; - - CGrowableArray outputInfoList; // Array of CD3D11EnumOutputInfo* - CGrowableArray deviceInfoList; // Array of CD3D11EnumDeviceInfo* - // List of CD3D11EnumDeviceSettingsCombo* with a unique set - // of BackBufferFormat, and Windowed - CGrowableArray deviceSettingsComboList; -}; - - -class CD3D11EnumOutputInfo -{ - const CD3D11EnumOutputInfo &operator = ( const CD3D11EnumOutputInfo &rhs ); - -public: - ~CD3D11EnumOutputInfo(); - - UINT AdapterOrdinal; - UINT Output; - IDXGIOutput* m_pOutput; - DXGI_OUTPUT_DESC Desc; - - CGrowableArray displayModeList; // Array of supported D3DDISPLAYMODEs -}; - - -//-------------------------------------------------------------------------------------- -// A class describing a Direct3D10 device that contains a -// unique supported driver type -//-------------------------------------------------------------------------------------- -class CD3D11EnumDeviceInfo -{ - const CD3D11EnumDeviceInfo& operator =( const CD3D11EnumDeviceInfo& rhs ); - -public: - ~CD3D11EnumDeviceInfo(); - - UINT AdapterOrdinal; - D3D_DRIVER_TYPE DeviceType; - D3D_FEATURE_LEVEL SelectedLevel; - D3D_FEATURE_LEVEL MaxLevel; - BOOL ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x; -}; - - -//-------------------------------------------------------------------------------------- -// A struct describing device settings that contains a unique combination of -// adapter format, back buffer format, and windowed that is compatible with a -// particular Direct3D device and the app. -//-------------------------------------------------------------------------------------- -struct CD3D11EnumDeviceSettingsCombo -{ - UINT AdapterOrdinal; - D3D_DRIVER_TYPE DeviceType; - DXGI_FORMAT BackBufferFormat; - BOOL Windowed; - UINT Output; - - CGrowableArray multiSampleCountList; // List of valid sampling counts (multisampling) - CGrowableArray multiSampleQualityList; // List of number of quality levels for each multisample count - - CD3D11EnumAdapterInfo* pAdapterInfo; - CD3D11EnumDeviceInfo* pDeviceInfo; - CD3D11EnumOutputInfo* pOutputInfo; -}; - -float DXUTRankD3D11DeviceCombo( CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo, - DXUTD3D11DeviceSettings* pOptimalDeviceSettings, - DXGI_MODE_DESC* pAdapterDisplayMode, - int &bestModeIndex, - int &bestMSAAIndex - ); - - - - -#endif - - diff --git a/sample/d3d11/common/DXUTDevice9.cpp b/sample/d3d11/common/DXUTDevice9.cpp deleted file mode 100644 index 35ae3ec..0000000 --- a/sample/d3d11/common/DXUTDevice9.cpp +++ /dev/null @@ -1,1177 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTDevice9.cpp -// -// Enumerates D3D adapters, devices, modes, etc. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#undef min // use __min instead -#undef max // use __max instead - -//-------------------------------------------------------------------------------------- -// Forward declarations -//-------------------------------------------------------------------------------------- -extern void DXUTGetCallbackD3D9DeviceAcceptable( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE* ppCallbackIsDeviceAcceptable, void** ppUserContext ); - - - - -static int __cdecl SortModesCallback( const void* arg1, const void* arg2 ); - - -CD3D9Enumeration* g_pDXUTD3D9Enumeration = NULL; - -HRESULT WINAPI DXUTCreateD3D9Enumeration() -{ - if( g_pDXUTD3D9Enumeration == NULL ) - { - g_pDXUTD3D9Enumeration = new CD3D9Enumeration(); - if( NULL == g_pDXUTD3D9Enumeration ) - return E_OUTOFMEMORY; - } - return S_OK; -} - -void WINAPI DXUTDestroyD3D9Enumeration() -{ - SAFE_DELETE( g_pDXUTD3D9Enumeration ); -} - -class DXUTMemoryHelperD3D9Enum -{ -public: -DXUTMemoryHelperD3D9Enum() -{ - DXUTCreateD3D9Enumeration(); -} -~DXUTMemoryHelperD3D9Enum() -{ - DXUTDestroyD3D9Enumeration(); -} -}; - -//-------------------------------------------------------------------------------------- -CD3D9Enumeration* WINAPI DXUTGetD3D9Enumeration( bool bForceEnumerate ) -{ - // Using an static class with accessor function to allow control of the construction order - static DXUTMemoryHelperD3D9Enum d3d9enumMemory; - - if( g_pDXUTD3D9Enumeration && ( !g_pDXUTD3D9Enumeration->HasEnumerated() || bForceEnumerate ) ) - { - LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE pCallbackIsDeviceAcceptable; - void* pUserContext; - DXUTGetCallbackD3D9DeviceAcceptable( &pCallbackIsDeviceAcceptable, &pUserContext ); - g_pDXUTD3D9Enumeration->Enumerate( pCallbackIsDeviceAcceptable, pUserContext ); - } - - return g_pDXUTD3D9Enumeration; -} - - -//-------------------------------------------------------------------------------------- -CD3D9Enumeration::CD3D9Enumeration() -{ - m_bHasEnumerated = false; - m_pD3D = NULL; - m_IsD3D9DeviceAcceptableFunc = NULL; - m_pIsD3D9DeviceAcceptableFuncUserContext = NULL; - m_bRequirePostPixelShaderBlending = true; - - m_nMinWidth = 640; - m_nMinHeight = 480; - m_nMaxWidth = UINT_MAX; - m_nMaxHeight = UINT_MAX; - - m_nRefreshMin = 0; - m_nRefreshMax = UINT_MAX; - - m_nMultisampleQualityMax = 0xFFFF; - - ResetPossibleDepthStencilFormats(); - ResetPossibleMultisampleTypeList(); - ResetPossiblePresentIntervalList(); - SetPossibleVertexProcessingList( true, true, true, false ); -} - - -//-------------------------------------------------------------------------------------- -CD3D9Enumeration::~CD3D9Enumeration() -{ - ClearAdapterInfoList(); -} - - - -//-------------------------------------------------------------------------------------- -// Enumerate for each adapter all of the supported display modes, -// device types, adapter formats, back buffer formats, window/full screen support, -// depth stencil formats, multisampling types/qualities, and presentations intervals. -// -// For each combination of device type (HAL/REF), adapter format, back buffer format, and -// IsWindowed it will call the app's ConfirmDevice callback. This allows the app -// to reject or allow that combination based on its caps/etc. It also allows the -// app to change the BehaviorFlags. The BehaviorFlags defaults non-pure HWVP -// if supported otherwise it will default to SWVP, however the app can change this -// through the ConfirmDevice callback. -//-------------------------------------------------------------------------------------- -HRESULT CD3D9Enumeration::Enumerate( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE IsD3D9DeviceAcceptableFunc, - void* pIsD3D9DeviceAcceptableFuncUserContext ) -{ - CDXUTPerfEventGenerator eventGenerator( DXUT_PERFEVENTCOLOR, L"DXUT D3D9 Enumeration" ); - IDirect3D9* pD3D = DXUTGetD3D9Object(); - if( pD3D == NULL ) - { - pD3D = DXUTGetD3D9Object(); - if( pD3D == NULL ) - return DXUTERR_NODIRECT3D; - } - - m_bHasEnumerated = true; - m_pD3D = pD3D; - m_IsD3D9DeviceAcceptableFunc = IsD3D9DeviceAcceptableFunc; - m_pIsD3D9DeviceAcceptableFuncUserContext = pIsD3D9DeviceAcceptableFuncUserContext; - - HRESULT hr; - ClearAdapterInfoList(); - CGrowableArray adapterFormatList; - - const D3DFORMAT allowedAdapterFormatArray[] = - { - D3DFMT_X8R8G8B8, - D3DFMT_X1R5G5B5, - D3DFMT_R5G6B5, - D3DFMT_A2R10G10B10 - }; - const UINT allowedAdapterFormatArrayCount = sizeof( allowedAdapterFormatArray ) / sizeof - ( allowedAdapterFormatArray[0] ); - - UINT numAdapters = pD3D->GetAdapterCount(); - for( UINT adapterOrdinal = 0; adapterOrdinal < numAdapters; adapterOrdinal++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo = new CD3D9EnumAdapterInfo; - if( pAdapterInfo == NULL ) - return E_OUTOFMEMORY; - - pAdapterInfo->AdapterOrdinal = adapterOrdinal; - pD3D->GetAdapterIdentifier( adapterOrdinal, 0, &pAdapterInfo->AdapterIdentifier ); - - // Get list of all display modes on this adapter. - // Also build a temporary list of all display adapter formats. - adapterFormatList.RemoveAll(); - - for( UINT iFormatList = 0; iFormatList < allowedAdapterFormatArrayCount; iFormatList++ ) - { - D3DFORMAT allowedAdapterFormat = allowedAdapterFormatArray[iFormatList]; - UINT numAdapterModes = pD3D->GetAdapterModeCount( adapterOrdinal, allowedAdapterFormat ); - for( UINT mode = 0; mode < numAdapterModes; mode++ ) - { - D3DDISPLAYMODE displayMode; - pD3D->EnumAdapterModes( adapterOrdinal, allowedAdapterFormat, mode, &displayMode ); - - if( displayMode.Width < m_nMinWidth || - displayMode.Height < m_nMinHeight || - displayMode.Width > m_nMaxWidth || - displayMode.Height > m_nMaxHeight || - displayMode.RefreshRate < m_nRefreshMin || - displayMode.RefreshRate > m_nRefreshMax ) - { - continue; - } - - pAdapterInfo->displayModeList.Add( displayMode ); - - if( !adapterFormatList.Contains( displayMode.Format ) ) - adapterFormatList.Add( displayMode.Format ); - } - - } - - D3DDISPLAYMODE displayMode; - pD3D->GetAdapterDisplayMode( adapterOrdinal, &displayMode ); - if( !adapterFormatList.Contains( displayMode.Format ) ) - adapterFormatList.Add( displayMode.Format ); - - // Sort displaymode list - qsort( pAdapterInfo->displayModeList.GetData(), - pAdapterInfo->displayModeList.GetSize(), sizeof( D3DDISPLAYMODE ), - SortModesCallback ); - - // Get info for each device on this adapter - if( FAILED( EnumerateDevices( pAdapterInfo, &adapterFormatList ) ) ) - { - delete pAdapterInfo; - continue; - } - - // If at least one device on this adapter is available and compatible - // with the app, add the adapterInfo to the list - if( pAdapterInfo->deviceInfoList.GetSize() > 0 ) - { - hr = m_AdapterInfoList.Add( pAdapterInfo ); - if( FAILED( hr ) ) - return hr; - } - else - delete pAdapterInfo; - } - - // - // Check for 2 or more adapters with the same name. Append the name - // with some instance number if that's the case to help distinguish - // them. - // - bool bUniqueDesc = true; - CD3D9EnumAdapterInfo* pAdapterInfo; - for( int i = 0; i < m_AdapterInfoList.GetSize(); i++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo1 = m_AdapterInfoList.GetAt( i ); - - for( int j = i + 1; j < m_AdapterInfoList.GetSize(); j++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo2 = m_AdapterInfoList.GetAt( j ); - if( _stricmp( pAdapterInfo1->AdapterIdentifier.Description, - pAdapterInfo2->AdapterIdentifier.Description ) == 0 ) - { - bUniqueDesc = false; - break; - } - } - - if( !bUniqueDesc ) - break; - } - - for( int i = 0; i < m_AdapterInfoList.GetSize(); i++ ) - { - pAdapterInfo = m_AdapterInfoList.GetAt( i ); - - MultiByteToWideChar( CP_ACP, 0, - pAdapterInfo->AdapterIdentifier.Description, -1, - pAdapterInfo->szUniqueDescription, 100 ); - pAdapterInfo->szUniqueDescription[100] = 0; - - if( !bUniqueDesc ) - { - WCHAR sz[100]; - swprintf_s( sz, 100, L" (#%d)", pAdapterInfo->AdapterOrdinal ); - wcscat_s( pAdapterInfo->szUniqueDescription, 256, sz ); - - } - } - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -// Enumerates D3D devices for a particular adapter. -//-------------------------------------------------------------------------------------- -HRESULT CD3D9Enumeration::EnumerateDevices( CD3D9EnumAdapterInfo* pAdapterInfo, - CGrowableArray * pAdapterFormatList ) -{ - HRESULT hr; - - const D3DDEVTYPE devTypeArray[] = - { - D3DDEVTYPE_HAL, - D3DDEVTYPE_SW, - D3DDEVTYPE_REF - }; - const UINT devTypeArrayCount = sizeof( devTypeArray ) / sizeof( devTypeArray[0] ); - - // Enumerate each Direct3D device type - for( UINT iDeviceType = 0; iDeviceType < devTypeArrayCount; iDeviceType++ ) - { - CD3D9EnumDeviceInfo* pDeviceInfo = new CD3D9EnumDeviceInfo; - if( pDeviceInfo == NULL ) - return E_OUTOFMEMORY; - - // Fill struct w/ AdapterOrdinal and D3DDEVTYPE - pDeviceInfo->AdapterOrdinal = pAdapterInfo->AdapterOrdinal; - pDeviceInfo->DeviceType = devTypeArray[iDeviceType]; - - // Store device caps - if( FAILED( hr = m_pD3D->GetDeviceCaps( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType, - &pDeviceInfo->Caps ) ) ) - { - delete pDeviceInfo; - continue; - } - - if( pDeviceInfo->DeviceType != D3DDEVTYPE_HAL ) - { - // Create a temp device to verify that it is really possible to create a REF device - // [the developer DirectX redist has to be installed] - D3DDISPLAYMODE Mode; - m_pD3D->GetAdapterDisplayMode( 0, &Mode ); - D3DPRESENT_PARAMETERS pp; - ZeroMemory( &pp, sizeof( D3DPRESENT_PARAMETERS ) ); - pp.BackBufferWidth = 1; - pp.BackBufferHeight = 1; - pp.BackBufferFormat = Mode.Format; - pp.BackBufferCount = 1; - pp.SwapEffect = D3DSWAPEFFECT_COPY; - pp.Windowed = TRUE; - pp.hDeviceWindow = DXUTGetHWNDFocus(); - IDirect3DDevice9* pDevice = NULL; - if( FAILED( hr = m_pD3D->CreateDevice( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType, - DXUTGetHWNDFocus(), - D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE, &pp, - &pDevice ) ) ) - { - delete pDeviceInfo; - continue; - } - SAFE_RELEASE( pDevice ); - } - - // Get info for each devicecombo on this device - if( FAILED( hr = EnumerateDeviceCombos( pAdapterInfo, pDeviceInfo, pAdapterFormatList ) ) ) - { - delete pDeviceInfo; - continue; - } - - // If at least one devicecombo for this device is found, - // add the deviceInfo to the list - if( pDeviceInfo->deviceSettingsComboList.GetSize() > 0 ) - pAdapterInfo->deviceInfoList.Add( pDeviceInfo ); - else - delete pDeviceInfo; - } - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -// Enumerates DeviceCombos for a particular device. -//-------------------------------------------------------------------------------------- -HRESULT CD3D9Enumeration::EnumerateDeviceCombos( CD3D9EnumAdapterInfo* pAdapterInfo, CD3D9EnumDeviceInfo* pDeviceInfo, - CGrowableArray * pAdapterFormatList ) -{ - const D3DFORMAT backBufferFormatArray[] = - { - D3DFMT_A8R8G8B8, - D3DFMT_X8R8G8B8, - D3DFMT_A2R10G10B10, - D3DFMT_R5G6B5, - D3DFMT_A1R5G5B5, - D3DFMT_X1R5G5B5 - }; - const UINT backBufferFormatArrayCount = sizeof( backBufferFormatArray ) / sizeof( backBufferFormatArray[0] ); - - // See which adapter formats are supported by this device - for( int iFormat = 0; iFormat < pAdapterFormatList->GetSize(); iFormat++ ) - { - D3DFORMAT adapterFormat = pAdapterFormatList->GetAt( iFormat ); - - for( UINT iBackBufferFormat = 0; iBackBufferFormat < backBufferFormatArrayCount; iBackBufferFormat++ ) - { - D3DFORMAT backBufferFormat = backBufferFormatArray[iBackBufferFormat]; - - for( int nWindowed = 0; nWindowed < 2; nWindowed++ ) - { - if( !nWindowed && pAdapterInfo->displayModeList.GetSize() == 0 ) - continue; - - if( FAILED( m_pD3D->CheckDeviceType( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType, - adapterFormat, backBufferFormat, nWindowed ) ) ) - { - continue; - } - - if( m_bRequirePostPixelShaderBlending ) - { - // If the backbuffer format doesn't support D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING - // then alpha test, pixel fog, render-target blending, color write enable, and dithering. - // are not supported. - if( FAILED( m_pD3D->CheckDeviceFormat( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType, - adapterFormat, D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING, - D3DRTYPE_TEXTURE, backBufferFormat ) ) ) - { - continue; - } - } - - // If an application callback function has been provided, make sure this device - // is acceptable to the app. - if( m_IsD3D9DeviceAcceptableFunc != NULL ) - { - if( !m_IsD3D9DeviceAcceptableFunc( &pDeviceInfo->Caps, adapterFormat, backBufferFormat, - FALSE != nWindowed, m_pIsD3D9DeviceAcceptableFuncUserContext ) ) - continue; - } - - // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed - // DeviceCombo that is supported by the system and acceptable to the app. We still - // need to find one or more suitable depth/stencil buffer format, - // multisample type, and present interval. - CD3D9EnumDeviceSettingsCombo* pDeviceCombo = new CD3D9EnumDeviceSettingsCombo; - if( pDeviceCombo == NULL ) - return E_OUTOFMEMORY; - - pDeviceCombo->AdapterOrdinal = pAdapterInfo->AdapterOrdinal; - pDeviceCombo->DeviceType = pDeviceInfo->DeviceType; - pDeviceCombo->AdapterFormat = adapterFormat; - pDeviceCombo->BackBufferFormat = backBufferFormat; - pDeviceCombo->Windowed = ( nWindowed != 0 ); - - BuildDepthStencilFormatList( pDeviceCombo ); - BuildMultiSampleTypeList( pDeviceCombo ); - if( pDeviceCombo->multiSampleTypeList.GetSize() == 0 ) - { - delete pDeviceCombo; - continue; - } - BuildDSMSConflictList( pDeviceCombo ); - BuildPresentIntervalList( pDeviceInfo, pDeviceCombo ); - pDeviceCombo->pAdapterInfo = pAdapterInfo; - pDeviceCombo->pDeviceInfo = pDeviceInfo; - - if( FAILED( pDeviceInfo->deviceSettingsComboList.Add( pDeviceCombo ) ) ) - delete pDeviceCombo; - } - } - } - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -// Adds all depth/stencil formats that are compatible with the device -// and app to the given D3DDeviceCombo. -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::BuildDepthStencilFormatList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo ) -{ - D3DFORMAT depthStencilFmt; - for( int idsf = 0; idsf < m_DepthStencilPossibleList.GetSize(); idsf++ ) - { - depthStencilFmt = m_DepthStencilPossibleList.GetAt( idsf ); - if( SUCCEEDED( m_pD3D->CheckDeviceFormat( pDeviceCombo->AdapterOrdinal, - pDeviceCombo->DeviceType, pDeviceCombo->AdapterFormat, - D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, depthStencilFmt ) ) ) - { - if( SUCCEEDED( m_pD3D->CheckDepthStencilMatch( pDeviceCombo->AdapterOrdinal, - pDeviceCombo->DeviceType, pDeviceCombo->AdapterFormat, - pDeviceCombo->BackBufferFormat, depthStencilFmt ) ) ) - { - pDeviceCombo->depthStencilFormatList.Add( depthStencilFmt ); - } - } - } -} - - - - -//-------------------------------------------------------------------------------------- -// Adds all multisample types that are compatible with the device and app to -// the given D3DDeviceCombo. -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::BuildMultiSampleTypeList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo ) -{ - D3DMULTISAMPLE_TYPE msType; - DWORD msQuality; - for( int imst = 0; imst < m_MultiSampleTypeList.GetSize(); imst++ ) - { - msType = m_MultiSampleTypeList.GetAt( imst ); - if( SUCCEEDED( m_pD3D->CheckDeviceMultiSampleType( pDeviceCombo->AdapterOrdinal, - pDeviceCombo->DeviceType, pDeviceCombo->BackBufferFormat, - pDeviceCombo->Windowed, msType, &msQuality ) ) ) - { - pDeviceCombo->multiSampleTypeList.Add( msType ); - if( msQuality > m_nMultisampleQualityMax + 1 ) - msQuality = m_nMultisampleQualityMax + 1; - pDeviceCombo->multiSampleQualityList.Add( msQuality ); - } - } -} - - - - -//-------------------------------------------------------------------------------------- -// Find any conflicts between the available depth/stencil formats and -// multisample types. -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::BuildDSMSConflictList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo ) -{ - CD3D9EnumDSMSConflict DSMSConflict; - - for( int iDS = 0; iDS < pDeviceCombo->depthStencilFormatList.GetSize(); iDS++ ) - { - D3DFORMAT dsFmt = pDeviceCombo->depthStencilFormatList.GetAt( iDS ); - - for( int iMS = 0; iMS < pDeviceCombo->multiSampleTypeList.GetSize(); iMS++ ) - { - D3DMULTISAMPLE_TYPE msType = pDeviceCombo->multiSampleTypeList.GetAt( iMS ); - - if( FAILED( m_pD3D->CheckDeviceMultiSampleType( pDeviceCombo->AdapterOrdinal, pDeviceCombo->DeviceType, - dsFmt, pDeviceCombo->Windowed, msType, NULL ) ) ) - { - DSMSConflict.DSFormat = dsFmt; - DSMSConflict.MSType = msType; - pDeviceCombo->DSMSConflictList.Add( DSMSConflict ); - } - } - } -} - - -//-------------------------------------------------------------------------------------- -// Adds all present intervals that are compatible with the device and app -// to the given D3DDeviceCombo. -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::BuildPresentIntervalList( CD3D9EnumDeviceInfo* pDeviceInfo, - CD3D9EnumDeviceSettingsCombo* pDeviceCombo ) -{ - UINT pi; - for( int ipi = 0; ipi < m_PresentIntervalList.GetSize(); ipi++ ) - { - pi = m_PresentIntervalList.GetAt( ipi ); - if( pDeviceCombo->Windowed ) - { - if( pi == D3DPRESENT_INTERVAL_TWO || - pi == D3DPRESENT_INTERVAL_THREE || - pi == D3DPRESENT_INTERVAL_FOUR ) - { - // These intervals are not supported in windowed mode. - continue; - } - } - // Note that D3DPRESENT_INTERVAL_DEFAULT is zero, so you - // can't do a caps check for it -- it is always available. - if( pi == D3DPRESENT_INTERVAL_DEFAULT || - ( pDeviceInfo->Caps.PresentationIntervals & pi ) ) - { - pDeviceCombo->presentIntervalList.Add( pi ); - } - } -} - - - -//-------------------------------------------------------------------------------------- -// Release all the allocated CD3D9EnumAdapterInfo objects and empty the list -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::ClearAdapterInfoList() -{ - CD3D9EnumAdapterInfo* pAdapterInfo; - for( int i = 0; i < m_AdapterInfoList.GetSize(); i++ ) - { - pAdapterInfo = m_AdapterInfoList.GetAt( i ); - delete pAdapterInfo; - } - - m_AdapterInfoList.RemoveAll(); -} - - - -//-------------------------------------------------------------------------------------- -// Call GetAdapterInfoList() after Enumerate() to get a STL vector of -// CD3D9EnumAdapterInfo* -//-------------------------------------------------------------------------------------- -CGrowableArray * CD3D9Enumeration::GetAdapterInfoList() -{ - return &m_AdapterInfoList; -} - - - -//-------------------------------------------------------------------------------------- -CD3D9EnumAdapterInfo* CD3D9Enumeration::GetAdapterInfo( UINT AdapterOrdinal ) -{ - for( int iAdapter = 0; iAdapter < m_AdapterInfoList.GetSize(); iAdapter++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo = m_AdapterInfoList.GetAt( iAdapter ); - if( pAdapterInfo->AdapterOrdinal == AdapterOrdinal ) - return pAdapterInfo; - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -CD3D9EnumDeviceInfo* CD3D9Enumeration::GetDeviceInfo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType ) -{ - CD3D9EnumAdapterInfo* pAdapterInfo = GetAdapterInfo( AdapterOrdinal ); - if( pAdapterInfo ) - { - for( int iDeviceInfo = 0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ ) - { - CD3D9EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( iDeviceInfo ); - if( pDeviceInfo->DeviceType == DeviceType ) - return pDeviceInfo; - } - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -// -//-------------------------------------------------------------------------------------- -CD3D9EnumDeviceSettingsCombo* CD3D9Enumeration::GetDeviceSettingsCombo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, - D3DFORMAT AdapterFormat, - D3DFORMAT BackBufferFormat, BOOL bWindowed ) -{ - CD3D9EnumDeviceInfo* pDeviceInfo = GetDeviceInfo( AdapterOrdinal, DeviceType ); - if( pDeviceInfo ) - { - for( int iDeviceCombo = 0; iDeviceCombo < pDeviceInfo->deviceSettingsComboList.GetSize(); iDeviceCombo++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( - iDeviceCombo ); - if( pDeviceSettingsCombo->AdapterFormat == AdapterFormat && - pDeviceSettingsCombo->BackBufferFormat == BackBufferFormat && - pDeviceSettingsCombo->Windowed == bWindowed ) - return pDeviceSettingsCombo; - } - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -// Returns the number of color channel bits in the specified D3DFORMAT -//-------------------------------------------------------------------------------------- -UINT WINAPI DXUTGetD3D9ColorChannelBits( D3DFORMAT fmt ) -{ - switch( fmt ) - { - case D3DFMT_R8G8B8: - return 8; - case D3DFMT_A8R8G8B8: - return 8; - case D3DFMT_X8R8G8B8: - return 8; - case D3DFMT_R5G6B5: - return 5; - case D3DFMT_X1R5G5B5: - return 5; - case D3DFMT_A1R5G5B5: - return 5; - case D3DFMT_A4R4G4B4: - return 4; - case D3DFMT_R3G3B2: - return 2; - case D3DFMT_A8R3G3B2: - return 2; - case D3DFMT_X4R4G4B4: - return 4; - case D3DFMT_A2B10G10R10: - return 10; - case D3DFMT_A8B8G8R8: - return 8; - case D3DFMT_A2R10G10B10: - return 10; - case D3DFMT_A16B16G16R16: - return 16; - default: - return 0; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the number of alpha channel bits in the specified D3DFORMAT -//-------------------------------------------------------------------------------------- -UINT WINAPI DXUTGetAlphaChannelBits( D3DFORMAT fmt ) -{ - switch( fmt ) - { - case D3DFMT_R8G8B8: - return 0; - case D3DFMT_A8R8G8B8: - return 8; - case D3DFMT_X8R8G8B8: - return 0; - case D3DFMT_R5G6B5: - return 0; - case D3DFMT_X1R5G5B5: - return 0; - case D3DFMT_A1R5G5B5: - return 1; - case D3DFMT_A4R4G4B4: - return 4; - case D3DFMT_R3G3B2: - return 0; - case D3DFMT_A8R3G3B2: - return 8; - case D3DFMT_X4R4G4B4: - return 0; - case D3DFMT_A2B10G10R10: - return 2; - case D3DFMT_A8B8G8R8: - return 8; - case D3DFMT_A2R10G10B10: - return 2; - case D3DFMT_A16B16G16R16: - return 16; - default: - return 0; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the number of depth bits in the specified D3DFORMAT -//-------------------------------------------------------------------------------------- -UINT WINAPI DXUTGetDepthBits( D3DFORMAT fmt ) -{ - switch( fmt ) - { - case D3DFMT_D32F_LOCKABLE: - case D3DFMT_D32: - return 32; - - case D3DFMT_D24X8: - case D3DFMT_D24S8: - case D3DFMT_D24X4S4: - case D3DFMT_D24FS8: - return 24; - - case D3DFMT_D16_LOCKABLE: - case D3DFMT_D16: - return 16; - - case D3DFMT_D15S1: - return 15; - - default: - return 0; - } -} - - - - -//-------------------------------------------------------------------------------------- -// Returns the number of stencil bits in the specified D3DFORMAT -//-------------------------------------------------------------------------------------- -UINT WINAPI DXUTGetStencilBits( D3DFORMAT fmt ) -{ - switch( fmt ) - { - case D3DFMT_D16_LOCKABLE: - case D3DFMT_D16: - case D3DFMT_D32F_LOCKABLE: - case D3DFMT_D32: - case D3DFMT_D24X8: - return 0; - - case D3DFMT_D15S1: - return 1; - - case D3DFMT_D24X4S4: - return 4; - - case D3DFMT_D24S8: - case D3DFMT_D24FS8: - return 8; - - default: - return 0; - } -} - - - -//-------------------------------------------------------------------------------------- -// Used to sort D3DDISPLAYMODEs -//-------------------------------------------------------------------------------------- -static int __cdecl SortModesCallback( const void* arg1, const void* arg2 ) -{ - D3DDISPLAYMODE* pdm1 = ( D3DDISPLAYMODE* )arg1; - D3DDISPLAYMODE* pdm2 = ( D3DDISPLAYMODE* )arg2; - - if( pdm1->Width > pdm2->Width ) - return 1; - if( pdm1->Width < pdm2->Width ) - return -1; - if( pdm1->Height > pdm2->Height ) - return 1; - if( pdm1->Height < pdm2->Height ) - return -1; - if( pdm1->Format > pdm2->Format ) - return 1; - if( pdm1->Format < pdm2->Format ) - return -1; - if( pdm1->RefreshRate > pdm2->RefreshRate ) - return 1; - if( pdm1->RefreshRate < pdm2->RefreshRate ) - return -1; - return 0; -} - - - -//-------------------------------------------------------------------------------------- -CD3D9EnumAdapterInfo::~CD3D9EnumAdapterInfo( void ) -{ - CD3D9EnumDeviceInfo* pDeviceInfo; - for( int i = 0; i < deviceInfoList.GetSize(); i++ ) - { - pDeviceInfo = deviceInfoList.GetAt( i ); - delete pDeviceInfo; - } - deviceInfoList.RemoveAll(); -} - - - - -//-------------------------------------------------------------------------------------- -CD3D9EnumDeviceInfo::~CD3D9EnumDeviceInfo( void ) -{ - CD3D9EnumDeviceSettingsCombo* pDeviceCombo; - for( int i = 0; i < deviceSettingsComboList.GetSize(); i++ ) - { - pDeviceCombo = deviceSettingsComboList.GetAt( i ); - delete pDeviceCombo; - } - deviceSettingsComboList.RemoveAll(); -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::ResetPossibleDepthStencilFormats() -{ - m_DepthStencilPossibleList.RemoveAll(); - m_DepthStencilPossibleList.Add( D3DFMT_D16 ); - m_DepthStencilPossibleList.Add( D3DFMT_D15S1 ); - m_DepthStencilPossibleList.Add( D3DFMT_D24X8 ); - m_DepthStencilPossibleList.Add( D3DFMT_D24S8 ); - m_DepthStencilPossibleList.Add( D3DFMT_D24X4S4 ); - m_DepthStencilPossibleList.Add( D3DFMT_D32 ); -} - - -//-------------------------------------------------------------------------------------- -CGrowableArray * CD3D9Enumeration::GetPossibleDepthStencilFormatList() -{ - return &m_DepthStencilPossibleList; -} - - -//-------------------------------------------------------------------------------------- -CGrowableArray * CD3D9Enumeration::GetPossibleMultisampleTypeList() -{ - return &m_MultiSampleTypeList; -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::ResetPossibleMultisampleTypeList() -{ - m_MultiSampleTypeList.RemoveAll(); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_NONE ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_NONMASKABLE ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_2_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_3_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_4_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_5_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_6_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_7_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_8_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_9_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_10_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_11_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_12_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_13_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_14_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_15_SAMPLES ); - m_MultiSampleTypeList.Add( D3DMULTISAMPLE_16_SAMPLES ); -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::GetPossibleVertexProcessingList( bool* pbSoftwareVP, bool* pbHardwareVP, bool* pbPureHarewareVP, - bool* pbMixedVP ) -{ - *pbSoftwareVP = m_bSoftwareVP; - *pbHardwareVP = m_bHardwareVP; - *pbPureHarewareVP = m_bPureHarewareVP; - *pbMixedVP = m_bMixedVP; -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::SetPossibleVertexProcessingList( bool bSoftwareVP, bool bHardwareVP, bool bPureHarewareVP, - bool bMixedVP ) -{ - m_bSoftwareVP = bSoftwareVP; - m_bHardwareVP = bHardwareVP; - m_bPureHarewareVP = bPureHarewareVP; - m_bMixedVP = bMixedVP; -} - - -//-------------------------------------------------------------------------------------- -CGrowableArray * CD3D9Enumeration::GetPossiblePresentIntervalList() -{ - return &m_PresentIntervalList; -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::ResetPossiblePresentIntervalList() -{ - m_PresentIntervalList.RemoveAll(); - m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_IMMEDIATE ); - m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_DEFAULT ); - m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_ONE ); - m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_TWO ); - m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_THREE ); - m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_FOUR ); -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::SetResolutionMinMax( UINT nMinWidth, UINT nMinHeight, - UINT nMaxWidth, UINT nMaxHeight ) -{ - m_nMinWidth = nMinWidth; - m_nMinHeight = nMinHeight; - m_nMaxWidth = nMaxWidth; - m_nMaxHeight = nMaxHeight; -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::SetRefreshMinMax( UINT nMin, UINT nMax ) -{ - m_nRefreshMin = nMin; - m_nRefreshMax = nMax; -} - - -//-------------------------------------------------------------------------------------- -void CD3D9Enumeration::SetMultisampleQualityMax( UINT nMax ) -{ - if( nMax > 0xFFFF ) - nMax = 0xFFFF; - m_nMultisampleQualityMax = nMax; -} - - - -//-------------------------------------------------------------------------------------- -// Returns a ranking number that describes how closely this device -// combo matches the optimal combo based on the match options and the optimal device settings -//-------------------------------------------------------------------------------------- -float DXUTRankD3D9DeviceCombo( CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo, - DXUTD3D9DeviceSettings* pOptimalDeviceSettings, - D3DDISPLAYMODE* pAdapterDesktopDisplayMode, - int &bestModeIndex, - int &bestMSAAIndex - ) -{ - float fCurRanking = 0.0f; - - // Arbitrary weights. Gives preference to the ordinal, device type, and windowed - const float fAdapterOrdinalWeight = 1000.0f; - const float fDeviceTypeWeight = 100.0f; - const float fWindowWeight = 10.0f; - const float fAdapterFormatWeight = 1.0f; - const float fVertexProcessingWeight = 1.0f; - const float fResolutionWeight = 1.0f; - const float fBackBufferFormatWeight = 1.0f; - const float fMultiSampleWeight = 1.0f; - const float fDepthStencilWeight = 1.0f; - const float fRefreshRateWeight = 1.0f; - const float fPresentIntervalWeight = 1.0f; - - //--------------------- - // Adapter ordinal - //--------------------- - if( pDeviceSettingsCombo->AdapterOrdinal == pOptimalDeviceSettings->AdapterOrdinal ) - fCurRanking += fAdapterOrdinalWeight; - - //--------------------- - // Device type - //--------------------- - if( pDeviceSettingsCombo->DeviceType == pOptimalDeviceSettings->DeviceType ) - fCurRanking += fDeviceTypeWeight; - // Slightly prefer HAL - if( pDeviceSettingsCombo->DeviceType == D3DDEVTYPE_HAL ) - fCurRanking += 0.1f; - - //--------------------- - // Windowed - //--------------------- - if( pDeviceSettingsCombo->Windowed == pOptimalDeviceSettings->pp.Windowed ) - fCurRanking += fWindowWeight; - - //--------------------- - // Adapter format - //--------------------- - if( pDeviceSettingsCombo->AdapterFormat == pOptimalDeviceSettings->AdapterFormat ) - { - fCurRanking += fAdapterFormatWeight; - } - else - { - int nBitDepthDelta = abs( ( long )DXUTGetD3D9ColorChannelBits( pDeviceSettingsCombo->AdapterFormat ) - - ( long )DXUTGetD3D9ColorChannelBits( pOptimalDeviceSettings->AdapterFormat ) ); - float fScale = __max( 0.9f - ( float )nBitDepthDelta * 0.2f, 0.0f ); - fCurRanking += fScale * fAdapterFormatWeight; - } - - if( !pDeviceSettingsCombo->Windowed ) - { - // Slightly prefer when it matches the desktop format or is D3DFMT_X8R8G8B8 - bool bAdapterOptimalMatch; - if( DXUTGetD3D9ColorChannelBits( pAdapterDesktopDisplayMode->Format ) >= 8 ) - bAdapterOptimalMatch = ( pDeviceSettingsCombo->AdapterFormat == pAdapterDesktopDisplayMode->Format ); - else - bAdapterOptimalMatch = ( pDeviceSettingsCombo->AdapterFormat == D3DFMT_X8R8G8B8 ); - - if( bAdapterOptimalMatch ) - fCurRanking += 0.1f; - } - - //--------------------- - // Vertex processing - //--------------------- - if( ( pOptimalDeviceSettings->BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING ) != 0 || - ( pOptimalDeviceSettings->BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING ) != 0 ) - { - if( ( pDeviceSettingsCombo->pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) != 0 ) - fCurRanking += fVertexProcessingWeight; - } - // Slightly prefer HW T&L - if( ( pDeviceSettingsCombo->pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) != 0 ) - fCurRanking += 0.1f; - - //--------------------- - // Resolution - //--------------------- - bool bResolutionFound = false; - unsigned int best = 0xffffffff; - bestModeIndex=0; - - - - - - for( int idm = 0; idm < pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetSize(); idm++ ) - { - D3DDISPLAYMODE displayMode = pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetAt( idm ); - if( displayMode.Format != pDeviceSettingsCombo->AdapterFormat ) - continue; - if( displayMode.Width == pOptimalDeviceSettings->pp.BackBufferWidth && - displayMode.Height == pOptimalDeviceSettings->pp.BackBufferHeight ) - bResolutionFound = true; - - unsigned int current = - (UINT) abs ((int)displayMode.Width - (int)pOptimalDeviceSettings->pp.BackBufferWidth) + - (UINT) abs ((int)displayMode.Height - (int)pOptimalDeviceSettings->pp.BackBufferHeight ); - if (current < best) { - best = current; - bestModeIndex= idm; - - } - - - } - if( bResolutionFound ) - fCurRanking += fResolutionWeight; - - //--------------------- - // Back buffer format - //--------------------- - if( pDeviceSettingsCombo->BackBufferFormat == pOptimalDeviceSettings->pp.BackBufferFormat ) - { - fCurRanking += fBackBufferFormatWeight; - } - else - { - int nBitDepthDelta = abs( ( long )DXUTGetD3D9ColorChannelBits( pDeviceSettingsCombo->BackBufferFormat ) - - ( long )DXUTGetD3D9ColorChannelBits( pOptimalDeviceSettings->pp.BackBufferFormat ) ); - float fScale = __max( 0.9f - ( float )nBitDepthDelta * 0.2f, 0.0f ); - fCurRanking += fScale * fBackBufferFormatWeight; - } - - // Check if this back buffer format is the same as - // the adapter format since this is preferred. - bool bAdapterMatchesBB = ( pDeviceSettingsCombo->BackBufferFormat == pDeviceSettingsCombo->AdapterFormat ); - if( bAdapterMatchesBB ) - fCurRanking += 0.1f; - - //--------------------- - // Back buffer count - //--------------------- - // No caps for the back buffer count - - //--------------------- - // Multisample - //--------------------- - bool bMultiSampleFound = false; - for( int i = 0; i < pDeviceSettingsCombo->multiSampleTypeList.GetSize(); i++ ) - { - D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt( i ); - DWORD msQuality = pDeviceSettingsCombo->multiSampleQualityList.GetAt( i ); - - if( msType == pOptimalDeviceSettings->pp.MultiSampleType && - msQuality > pOptimalDeviceSettings->pp.MultiSampleQuality ) - { - bMultiSampleFound = true; - bestMSAAIndex = i; - break; - } - } - if( bMultiSampleFound ) - fCurRanking += fMultiSampleWeight; - - //--------------------- - // Swap effect - //--------------------- - // No caps for swap effects - - //--------------------- - // Depth stencil - //--------------------- - if( pDeviceSettingsCombo->depthStencilFormatList.Contains( pOptimalDeviceSettings->pp.AutoDepthStencilFormat ) ) - fCurRanking += fDepthStencilWeight; - - //--------------------- - // Present flags - //--------------------- - // No caps for the present flags - - //--------------------- - // Refresh rate - //--------------------- - bool bRefreshFound = false; - for( int idm = 0; idm < pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetSize(); idm++ ) - { - D3DDISPLAYMODE displayMode = pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetAt( idm ); - if( displayMode.Format != pDeviceSettingsCombo->AdapterFormat ) - continue; - if( displayMode.RefreshRate == pOptimalDeviceSettings->pp.FullScreen_RefreshRateInHz ) - bRefreshFound = true; - } - if( bRefreshFound ) - fCurRanking += fRefreshRateWeight; - - //--------------------- - // Present interval - //--------------------- - // If keep present interval then check that the present interval is supported by this combo - if( pDeviceSettingsCombo->presentIntervalList.Contains( pOptimalDeviceSettings->pp.PresentationInterval ) ) - fCurRanking += fPresentIntervalWeight; - - return fCurRanking; -} - diff --git a/sample/d3d11/common/DXUTDevice9.h b/sample/d3d11/common/DXUTDevice9.h deleted file mode 100644 index 26b6d5d..0000000 --- a/sample/d3d11/common/DXUTDevice9.h +++ /dev/null @@ -1,207 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTDevice9.h -// -// Enumerates D3D adapters, devices, modes, etc. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_DEVICE9_H -#define DXUT_DEVICE9_H - -//void DXUTApplyDefaultDeviceSettings(DXUTDeviceSettings *modifySettings); - -//-------------------------------------------------------------------------------------- -// Functions to get bit depth from formats -//-------------------------------------------------------------------------------------- -UINT WINAPI DXUTGetD3D9ColorChannelBits( D3DFORMAT fmt ); -UINT WINAPI DXUTGetAlphaChannelBits( D3DFORMAT fmt ); -UINT WINAPI DXUTGetStencilBits( D3DFORMAT fmt ); -UINT WINAPI DXUTGetDepthBits( D3DFORMAT fmt ); -UINT WINAPI DXUTGetDXGIColorChannelBits( DXGI_FORMAT fmt ); - - -//-------------------------------------------------------------------------------------- -// Forward declarations -//-------------------------------------------------------------------------------------- - -class CD3D9EnumAdapterInfo; -class CD3D9EnumDeviceInfo; -struct CD3D9EnumDeviceSettingsCombo; -struct CD3D9EnumDSMSConflict; - - - - - -//-------------------------------------------------------------------------------------- -// Optional memory create/destory functions. If not call, these will be called automatically -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateD3D9Enumeration(); -void WINAPI DXUTDestroyD3D9Enumeration(); - - - -//-------------------------------------------------------------------------------------- -// Enumerates available Direct3D9 adapters, devices, modes, etc. -// Use DXUTGetD3D9Enumeration() to access global instance -//-------------------------------------------------------------------------------------- -class CD3D9Enumeration -{ -public: - // These should be called before Enumerate(). - // - // Use these calls and the IsDeviceAcceptable to control the contents of - // the enumeration object, which affects the device selection and the device settings dialog. - void SetRequirePostPixelShaderBlending( bool bRequire ) { m_bRequirePostPixelShaderBlending = bRequire; } - void SetResolutionMinMax( UINT nMinWidth, UINT nMinHeight, UINT nMaxWidth, UINT nMaxHeight ); - void SetRefreshMinMax( UINT nMin, UINT nMax ); - void SetMultisampleQualityMax( UINT nMax ); - void GetPossibleVertexProcessingList( bool* pbSoftwareVP, bool* pbHardwareVP, bool* pbPureHarewareVP, bool* pbMixedVP ); - void SetPossibleVertexProcessingList( bool bSoftwareVP, bool bHardwareVP, bool bPureHarewareVP, bool bMixedVP ); - CGrowableArray* GetPossibleDepthStencilFormatList(); - CGrowableArray* GetPossibleMultisampleTypeList(); - CGrowableArray* GetPossiblePresentIntervalList(); - void ResetPossibleDepthStencilFormats(); - void ResetPossibleMultisampleTypeList(); - void ResetPossiblePresentIntervalList(); - - // Call Enumerate() to enumerate available D3D adapters, devices, modes, etc. - bool HasEnumerated() { return m_bHasEnumerated; } - HRESULT Enumerate( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE IsD3D9DeviceAcceptableFunc = NULL, - void* pIsD3D9DeviceAcceptableFuncUserContext = NULL ); - - // These should be called after Enumerate() is called - CGrowableArray* GetAdapterInfoList(); - CD3D9EnumAdapterInfo* GetAdapterInfo( UINT AdapterOrdinal ); - CD3D9EnumDeviceInfo* GetDeviceInfo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType ); - CD3D9EnumDeviceSettingsCombo* GetDeviceSettingsCombo( DXUTD3D9DeviceSettings* pD3D9DeviceSettings ) { return GetDeviceSettingsCombo( pD3D9DeviceSettings->AdapterOrdinal, pD3D9DeviceSettings->DeviceType, pD3D9DeviceSettings->AdapterFormat, pD3D9DeviceSettings->pp.BackBufferFormat, pD3D9DeviceSettings->pp.Windowed ); } - CD3D9EnumDeviceSettingsCombo* GetDeviceSettingsCombo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL Windowed ); - - ~CD3D9Enumeration(); - -private: - friend HRESULT WINAPI DXUTCreateD3D9Enumeration(); - - // Use DXUTGetD3D9Enumeration() to access global instance - CD3D9Enumeration(); - - bool m_bHasEnumerated; - IDirect3D9* m_pD3D; - LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE m_IsD3D9DeviceAcceptableFunc; - void* m_pIsD3D9DeviceAcceptableFuncUserContext; - bool m_bRequirePostPixelShaderBlending; - CGrowableArray m_DepthStencilPossibleList; - CGrowableArray m_MultiSampleTypeList; - CGrowableArray m_PresentIntervalList; - - bool m_bSoftwareVP; - bool m_bHardwareVP; - bool m_bPureHarewareVP; - bool m_bMixedVP; - - UINT m_nMinWidth; - UINT m_nMaxWidth; - UINT m_nMinHeight; - UINT m_nMaxHeight; - UINT m_nRefreshMin; - UINT m_nRefreshMax; - UINT m_nMultisampleQualityMax; - - // Array of CD3D9EnumAdapterInfo* with unique AdapterOrdinals - CGrowableArray m_AdapterInfoList; - - HRESULT EnumerateDevices( CD3D9EnumAdapterInfo* pAdapterInfo, CGrowableArray* pAdapterFormatList ); - HRESULT EnumerateDeviceCombos( CD3D9EnumAdapterInfo* pAdapterInfo, CD3D9EnumDeviceInfo* pDeviceInfo, CGrowableArray* pAdapterFormatList ); - void BuildDepthStencilFormatList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo ); - void BuildMultiSampleTypeList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo ); - void BuildDSMSConflictList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo ); - void BuildPresentIntervalList( CD3D9EnumDeviceInfo* pDeviceInfo, CD3D9EnumDeviceSettingsCombo* pDeviceCombo ); - void ClearAdapterInfoList(); -}; - -CD3D9Enumeration* WINAPI DXUTGetD3D9Enumeration( bool bForceEnumerate = false ); - - -//-------------------------------------------------------------------------------------- -// A class describing an adapter which contains a unique adapter ordinal -// that is installed on the system -//-------------------------------------------------------------------------------------- -class CD3D9EnumAdapterInfo -{ -public: - ~CD3D9EnumAdapterInfo(); - - UINT AdapterOrdinal; - D3DADAPTER_IDENTIFIER9 AdapterIdentifier; - WCHAR szUniqueDescription[256]; - - CGrowableArray displayModeList; // Array of supported D3DDISPLAYMODEs - CGrowableArray deviceInfoList; // Array of CD3D9EnumDeviceInfo* with unique supported DeviceTypes -}; - - -//-------------------------------------------------------------------------------------- -// A class describing a Direct3D device that contains a -// unique supported device type -//-------------------------------------------------------------------------------------- -class CD3D9EnumDeviceInfo -{ -public: - ~CD3D9EnumDeviceInfo(); - - UINT AdapterOrdinal; - D3DDEVTYPE DeviceType; - D3DCAPS9 Caps; - - // List of CD3D9EnumDeviceSettingsCombo* with a unique set - // of AdapterFormat, BackBufferFormat, and Windowed - CGrowableArray deviceSettingsComboList; -}; - - -//-------------------------------------------------------------------------------------- -// A struct describing device settings that contains a unique combination of -// adapter format, back buffer format, and windowed that is compatible with a -// particular Direct3D device and the app. -//-------------------------------------------------------------------------------------- -struct CD3D9EnumDeviceSettingsCombo -{ - UINT AdapterOrdinal; - D3DDEVTYPE DeviceType; - D3DFORMAT AdapterFormat; - D3DFORMAT BackBufferFormat; - BOOL Windowed; - - CGrowableArray depthStencilFormatList; // List of D3DFORMATs - CGrowableArray multiSampleTypeList; // List of D3DMULTISAMPLE_TYPEs - CGrowableArray multiSampleQualityList; // List of number of quality levels for each multisample type - CGrowableArray presentIntervalList; // List of D3DPRESENT flags - CGrowableArray DSMSConflictList; // List of CD3D9EnumDSMSConflict - - CD3D9EnumAdapterInfo* pAdapterInfo; - CD3D9EnumDeviceInfo* pDeviceInfo; -}; - - -//-------------------------------------------------------------------------------------- -// A depth/stencil buffer format that is incompatible with a -// multisample type. -//-------------------------------------------------------------------------------------- -struct CD3D9EnumDSMSConflict -{ - D3DFORMAT DSFormat; - D3DMULTISAMPLE_TYPE MSType; -}; - - - -float DXUTRankD3D9DeviceCombo( CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo, - DXUTD3D9DeviceSettings* pOptimalDeviceSettings, - D3DDISPLAYMODE* pAdapterDesktopDisplayMode, - int &bestModeIndex, - int &bestMSAAIndex - ); - - -#endif diff --git a/sample/d3d11/common/DXUTcamera.cpp b/sample/d3d11/common/DXUTcamera.cpp deleted file mode 100644 index 05cd589..0000000 --- a/sample/d3d11/common/DXUTcamera.cpp +++ /dev/null @@ -1,1525 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTcamera.cpp -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#include "DXUTcamera.h" -#include "DXUTres.h" -#undef min // use __min instead -#undef max // use __max instead - -//-------------------------------------------------------------------------------------- -CD3DArcBall::CD3DArcBall() -{ - Reset(); - m_vDownPt = D3DXVECTOR3( 0, 0, 0 ); - m_vCurrentPt = D3DXVECTOR3( 0, 0, 0 ); - m_Offset.x = m_Offset.y = 0; - - RECT rc; - GetClientRect( GetForegroundWindow(), &rc ); - SetWindow( rc.right, rc.bottom ); -} - - - - - -//-------------------------------------------------------------------------------------- -void CD3DArcBall::Reset() -{ - D3DXQuaternionIdentity( &m_qDown ); - D3DXQuaternionIdentity( &m_qNow ); - D3DXMatrixIdentity( &m_mRotation ); - D3DXMatrixIdentity( &m_mTranslation ); - D3DXMatrixIdentity( &m_mTranslationDelta ); - m_bDrag = FALSE; - m_fRadiusTranslation = 1.0f; - m_fRadius = 1.0f; -} - - - - -//-------------------------------------------------------------------------------------- -D3DXVECTOR3 CD3DArcBall::ScreenToVector( float fScreenPtX, float fScreenPtY ) -{ - // Scale to screen - FLOAT x = -( fScreenPtX - m_Offset.x - m_nWidth / 2 ) / ( m_fRadius * m_nWidth / 2 ); - FLOAT y = ( fScreenPtY - m_Offset.y - m_nHeight / 2 ) / ( m_fRadius * m_nHeight / 2 ); - - FLOAT z = 0.0f; - FLOAT mag = x * x + y * y; - - if( mag > 1.0f ) - { - FLOAT scale = 1.0f / sqrtf( mag ); - x *= scale; - y *= scale; - } - else - z = sqrtf( 1.0f - mag ); - - // Return vector - return D3DXVECTOR3( x, y, z ); -} - - - - -//-------------------------------------------------------------------------------------- -D3DXQUATERNION CD3DArcBall::QuatFromBallPoints( const D3DXVECTOR3& vFrom, const D3DXVECTOR3& vTo ) -{ - D3DXVECTOR3 vPart; - float fDot = D3DXVec3Dot( &vFrom, &vTo ); - D3DXVec3Cross( &vPart, &vFrom, &vTo ); - - return D3DXQUATERNION( vPart.x, vPart.y, vPart.z, fDot ); -} - - - - -//-------------------------------------------------------------------------------------- -void CD3DArcBall::OnBegin( int nX, int nY ) -{ - // Only enter the drag state if the click falls - // inside the click rectangle. - if( nX >= m_Offset.x && - nX < m_Offset.x + m_nWidth && - nY >= m_Offset.y && - nY < m_Offset.y + m_nHeight ) - { - m_bDrag = true; - m_qDown = m_qNow; - m_vDownPt = ScreenToVector( ( float )nX, ( float )nY ); - } -} - - - - -//-------------------------------------------------------------------------------------- -void CD3DArcBall::OnMove( int nX, int nY ) -{ - if( m_bDrag ) - { - m_vCurrentPt = ScreenToVector( ( float )nX, ( float )nY ); - m_qNow = m_qDown * QuatFromBallPoints( m_vDownPt, m_vCurrentPt ); - } -} - - - - -//-------------------------------------------------------------------------------------- -void CD3DArcBall::OnEnd() -{ - m_bDrag = false; -} - - - - -//-------------------------------------------------------------------------------------- -// Desc: -//-------------------------------------------------------------------------------------- -LRESULT CD3DArcBall::HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - // Current mouse position - int iMouseX = ( short )LOWORD( lParam ); - int iMouseY = ( short )HIWORD( lParam ); - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - SetCapture( hWnd ); - OnBegin( iMouseX, iMouseY ); - return TRUE; - - case WM_LBUTTONUP: - ReleaseCapture(); - OnEnd(); - return TRUE; - case WM_CAPTURECHANGED: - if( ( HWND )lParam != hWnd ) - { - ReleaseCapture(); - OnEnd(); - } - return TRUE; - - case WM_RBUTTONDOWN: - case WM_RBUTTONDBLCLK: - case WM_MBUTTONDOWN: - case WM_MBUTTONDBLCLK: - SetCapture( hWnd ); - // Store off the position of the cursor when the button is pressed - m_ptLastMouse.x = iMouseX; - m_ptLastMouse.y = iMouseY; - return TRUE; - - case WM_RBUTTONUP: - case WM_MBUTTONUP: - ReleaseCapture(); - return TRUE; - - case WM_MOUSEMOVE: - if( MK_LBUTTON & wParam ) - { - OnMove( iMouseX, iMouseY ); - } - else if( ( MK_RBUTTON & wParam ) || ( MK_MBUTTON & wParam ) ) - { - // Normalize based on size of window and bounding sphere radius - FLOAT fDeltaX = ( m_ptLastMouse.x - iMouseX ) * m_fRadiusTranslation / m_nWidth; - FLOAT fDeltaY = ( m_ptLastMouse.y - iMouseY ) * m_fRadiusTranslation / m_nHeight; - - if( wParam & MK_RBUTTON ) - { - D3DXMatrixTranslation( &m_mTranslationDelta, -2 * fDeltaX, 2 * fDeltaY, 0.0f ); - D3DXMatrixMultiply( &m_mTranslation, &m_mTranslation, &m_mTranslationDelta ); - } - else // wParam & MK_MBUTTON - { - D3DXMatrixTranslation( &m_mTranslationDelta, 0.0f, 0.0f, 5 * fDeltaY ); - D3DXMatrixMultiply( &m_mTranslation, &m_mTranslation, &m_mTranslationDelta ); - } - - // Store mouse coordinate - m_ptLastMouse.x = iMouseX; - m_ptLastMouse.y = iMouseY; - } - return TRUE; - } - - return FALSE; -} - - - - -//-------------------------------------------------------------------------------------- -// Constructor -//-------------------------------------------------------------------------------------- -CBaseCamera::CBaseCamera() -{ - m_cKeysDown = 0; - ZeroMemory( m_aKeys, sizeof( BYTE ) * CAM_MAX_KEYS ); - ZeroMemory( m_GamePad, sizeof( DXUT_GAMEPAD ) * DXUT_MAX_CONTROLLERS ); - - // Set attributes for the view matrix - D3DXVECTOR3 vEyePt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); - D3DXVECTOR3 vLookatPt = D3DXVECTOR3( 0.0f, 0.0f, 1.0f ); - - // Setup the view matrix - SetViewParams( &vEyePt, &vLookatPt ); - - // Setup the projection matrix - SetProjParams( D3DX_PI / 4, 1.0f, 1.0f, 1000.0f ); - - GetCursorPos( &m_ptLastMousePosition ); - m_bMouseLButtonDown = false; - m_bMouseMButtonDown = false; - m_bMouseRButtonDown = false; - m_nCurrentButtonMask = 0; - m_nMouseWheelDelta = 0; - - m_fCameraYawAngle = 0.0f; - m_fCameraPitchAngle = 0.0f; - - SetRect( &m_rcDrag, LONG_MIN, LONG_MIN, LONG_MAX, LONG_MAX ); - m_vVelocity = D3DXVECTOR3( 0, 0, 0 ); - m_bMovementDrag = false; - m_vVelocityDrag = D3DXVECTOR3( 0, 0, 0 ); - m_fDragTimer = 0.0f; - m_fTotalDragTimeToZero = 0.25; - m_vRotVelocity = D3DXVECTOR2( 0, 0 ); - - m_fRotationScaler = 0.01f; - m_fMoveScaler = 5.0f; - - m_bInvertPitch = false; - m_bEnableYAxisMovement = true; - m_bEnablePositionMovement = true; - - m_vMouseDelta = D3DXVECTOR2( 0, 0 ); - m_fFramesToSmoothMouseData = 2.0f; - - m_bClipToBoundary = false; - m_vMinBoundary = D3DXVECTOR3( -1, -1, -1 ); - m_vMaxBoundary = D3DXVECTOR3( 1, 1, 1 ); - - m_bResetCursorAfterMove = false; -} - - -//-------------------------------------------------------------------------------------- -// Client can call this to change the position and direction of camera -//-------------------------------------------------------------------------------------- -VOID CBaseCamera::SetViewParams( D3DXVECTOR3* pvEyePt, D3DXVECTOR3* pvLookatPt ) -{ - if( NULL == pvEyePt || NULL == pvLookatPt ) - return; - - m_vDefaultEye = m_vEye = *pvEyePt; - m_vDefaultLookAt = m_vLookAt = *pvLookatPt; - - // Calc the view matrix - D3DXVECTOR3 vUp( 0,1,0 ); - D3DXMatrixLookAtLH( &m_mView, pvEyePt, pvLookatPt, &vUp ); - - D3DXMATRIX mInvView; - D3DXMatrixInverse( &mInvView, NULL, &m_mView ); - - // The axis basis vectors and camera position are stored inside the - // position matrix in the 4 rows of the camera's world matrix. - // To figure out the yaw/pitch of the camera, we just need the Z basis vector - D3DXVECTOR3* pZBasis = ( D3DXVECTOR3* )&mInvView._31; - - m_fCameraYawAngle = atan2f( pZBasis->x, pZBasis->z ); - float fLen = sqrtf( pZBasis->z * pZBasis->z + pZBasis->x * pZBasis->x ); - m_fCameraPitchAngle = -atan2f( pZBasis->y, fLen ); -} - - - - -//-------------------------------------------------------------------------------------- -// Calculates the projection matrix based on input params -//-------------------------------------------------------------------------------------- -VOID CBaseCamera::SetProjParams( FLOAT fFOV, FLOAT fAspect, FLOAT fNearPlane, - FLOAT fFarPlane ) -{ - // Set attributes for the projection matrix - m_fFOV = fFOV; - m_fAspect = fAspect; - m_fNearPlane = fNearPlane; - m_fFarPlane = fFarPlane; - - D3DXMatrixPerspectiveFovLH( &m_mProj, fFOV, fAspect, fNearPlane, fFarPlane ); -} - - - - -//-------------------------------------------------------------------------------------- -// Call this from your message proc so this class can handle window messages -//-------------------------------------------------------------------------------------- -LRESULT CBaseCamera::HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - UNREFERENCED_PARAMETER( hWnd ); - UNREFERENCED_PARAMETER( lParam ); - - switch( uMsg ) - { - case WM_KEYDOWN: - { - // Map this key to a D3DUtil_CameraKeys enum and update the - // state of m_aKeys[] by adding the KEY_WAS_DOWN_MASK|KEY_IS_DOWN_MASK mask - // only if the key is not down - D3DUtil_CameraKeys mappedKey = MapKey( ( UINT )wParam ); - if( mappedKey != CAM_UNKNOWN ) - { - if( FALSE == IsKeyDown( m_aKeys[mappedKey] ) ) - { - m_aKeys[ mappedKey ] = KEY_WAS_DOWN_MASK | KEY_IS_DOWN_MASK; - ++m_cKeysDown; - } - } - break; - } - - case WM_KEYUP: - { - // Map this key to a D3DUtil_CameraKeys enum and update the - // state of m_aKeys[] by removing the KEY_IS_DOWN_MASK mask. - D3DUtil_CameraKeys mappedKey = MapKey( ( UINT )wParam ); - if( mappedKey != CAM_UNKNOWN && ( DWORD )mappedKey < 8 ) - { - m_aKeys[ mappedKey ] &= ~KEY_IS_DOWN_MASK; - --m_cKeysDown; - } - break; - } - - case WM_RBUTTONDOWN: - case WM_MBUTTONDOWN: - case WM_LBUTTONDOWN: - case WM_RBUTTONDBLCLK: - case WM_MBUTTONDBLCLK: - case WM_LBUTTONDBLCLK: - { - // Compute the drag rectangle in screen coord. - POINT ptCursor = - { - ( short )LOWORD( lParam ), ( short )HIWORD( lParam ) - }; - - // Update member var state - if( ( uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK ) && PtInRect( &m_rcDrag, ptCursor ) ) - { - m_bMouseLButtonDown = true; m_nCurrentButtonMask |= MOUSE_LEFT_BUTTON; - } - if( ( uMsg == WM_MBUTTONDOWN || uMsg == WM_MBUTTONDBLCLK ) && PtInRect( &m_rcDrag, ptCursor ) ) - { - m_bMouseMButtonDown = true; m_nCurrentButtonMask |= MOUSE_MIDDLE_BUTTON; - } - if( ( uMsg == WM_RBUTTONDOWN || uMsg == WM_RBUTTONDBLCLK ) && PtInRect( &m_rcDrag, ptCursor ) ) - { - m_bMouseRButtonDown = true; m_nCurrentButtonMask |= MOUSE_RIGHT_BUTTON; - } - - // Capture the mouse, so if the mouse button is - // released outside the window, we'll get the WM_LBUTTONUP message - SetCapture( hWnd ); - GetCursorPos( &m_ptLastMousePosition ); - return TRUE; - } - - case WM_RBUTTONUP: - case WM_MBUTTONUP: - case WM_LBUTTONUP: - { - // Update member var state - if( uMsg == WM_LBUTTONUP ) - { - m_bMouseLButtonDown = false; m_nCurrentButtonMask &= ~MOUSE_LEFT_BUTTON; - } - if( uMsg == WM_MBUTTONUP ) - { - m_bMouseMButtonDown = false; m_nCurrentButtonMask &= ~MOUSE_MIDDLE_BUTTON; - } - if( uMsg == WM_RBUTTONUP ) - { - m_bMouseRButtonDown = false; m_nCurrentButtonMask &= ~MOUSE_RIGHT_BUTTON; - } - - // Release the capture if no mouse buttons down - if( !m_bMouseLButtonDown && - !m_bMouseRButtonDown && - !m_bMouseMButtonDown ) - { - ReleaseCapture(); - } - break; - } - - case WM_CAPTURECHANGED: - { - if( ( HWND )lParam != hWnd ) - { - if( ( m_nCurrentButtonMask & MOUSE_LEFT_BUTTON ) || - ( m_nCurrentButtonMask & MOUSE_MIDDLE_BUTTON ) || - ( m_nCurrentButtonMask & MOUSE_RIGHT_BUTTON ) ) - { - m_bMouseLButtonDown = false; - m_bMouseMButtonDown = false; - m_bMouseRButtonDown = false; - m_nCurrentButtonMask &= ~MOUSE_LEFT_BUTTON; - m_nCurrentButtonMask &= ~MOUSE_MIDDLE_BUTTON; - m_nCurrentButtonMask &= ~MOUSE_RIGHT_BUTTON; - ReleaseCapture(); - } - } - break; - } - - case WM_MOUSEWHEEL: - // Update member var state - m_nMouseWheelDelta += ( short )HIWORD( wParam ); - break; - } - - return FALSE; -} - -//-------------------------------------------------------------------------------------- -// Figure out the velocity based on keyboard input & drag if any -//-------------------------------------------------------------------------------------- -void CBaseCamera::GetInput( bool bGetKeyboardInput, bool bGetMouseInput, bool bGetGamepadInput, - bool bResetCursorAfterMove ) -{ - m_vKeyboardDirection = D3DXVECTOR3( 0, 0, 0 ); - if( bGetKeyboardInput ) - { - // Update acceleration vector based on keyboard state - if( IsKeyDown( m_aKeys[CAM_MOVE_FORWARD] ) ) - m_vKeyboardDirection.z += 1.0f; - if( IsKeyDown( m_aKeys[CAM_MOVE_BACKWARD] ) ) - m_vKeyboardDirection.z -= 1.0f; - if( m_bEnableYAxisMovement ) - { - if( IsKeyDown( m_aKeys[CAM_MOVE_UP] ) ) - m_vKeyboardDirection.y += 1.0f; - if( IsKeyDown( m_aKeys[CAM_MOVE_DOWN] ) ) - m_vKeyboardDirection.y -= 1.0f; - } - if( IsKeyDown( m_aKeys[CAM_STRAFE_RIGHT] ) ) - m_vKeyboardDirection.x += 1.0f; - if( IsKeyDown( m_aKeys[CAM_STRAFE_LEFT] ) ) - m_vKeyboardDirection.x -= 1.0f; - } - - if( bGetMouseInput ) - { - UpdateMouseDelta(); - } - - if( bGetGamepadInput ) - { - m_vGamePadLeftThumb = D3DXVECTOR3( 0, 0, 0 ); - m_vGamePadRightThumb = D3DXVECTOR3( 0, 0, 0 ); - - // Get controller state - for( DWORD iUserIndex = 0; iUserIndex < DXUT_MAX_CONTROLLERS; iUserIndex++ ) - { - DXUTGetGamepadState( iUserIndex, &m_GamePad[iUserIndex], true, true ); - - // Mark time if the controller is in a non-zero state - if( m_GamePad[iUserIndex].wButtons || - m_GamePad[iUserIndex].sThumbLX || m_GamePad[iUserIndex].sThumbLX || - m_GamePad[iUserIndex].sThumbRX || m_GamePad[iUserIndex].sThumbRY || - m_GamePad[iUserIndex].bLeftTrigger || m_GamePad[iUserIndex].bRightTrigger ) - { - m_GamePadLastActive[iUserIndex] = DXUTGetTime(); - } - } - - // Find out which controller was non-zero last - int iMostRecentlyActive = -1; - double fMostRecentlyActiveTime = 0.0f; - for( DWORD iUserIndex = 0; iUserIndex < DXUT_MAX_CONTROLLERS; iUserIndex++ ) - { - if( m_GamePadLastActive[iUserIndex] > fMostRecentlyActiveTime ) - { - fMostRecentlyActiveTime = m_GamePadLastActive[iUserIndex]; - iMostRecentlyActive = iUserIndex; - } - } - - // Use the most recent non-zero controller if its connected - if( iMostRecentlyActive >= 0 && m_GamePad[iMostRecentlyActive].bConnected ) - { - m_vGamePadLeftThumb.x = m_GamePad[iMostRecentlyActive].fThumbLX; - m_vGamePadLeftThumb.y = 0.0f; - m_vGamePadLeftThumb.z = m_GamePad[iMostRecentlyActive].fThumbLY; - - m_vGamePadRightThumb.x = m_GamePad[iMostRecentlyActive].fThumbRX; - m_vGamePadRightThumb.y = 0.0f; - m_vGamePadRightThumb.z = m_GamePad[iMostRecentlyActive].fThumbRY; - } - } -} - - -//-------------------------------------------------------------------------------------- -// Figure out the mouse delta based on mouse movement -//-------------------------------------------------------------------------------------- -void CBaseCamera::UpdateMouseDelta() -{ - POINT ptCurMouseDelta; - POINT ptCurMousePos; - - // Get current position of mouse - GetCursorPos( &ptCurMousePos ); - - // Calc how far it's moved since last frame - ptCurMouseDelta.x = ptCurMousePos.x - m_ptLastMousePosition.x; - ptCurMouseDelta.y = ptCurMousePos.y - m_ptLastMousePosition.y; - - // Record current position for next time - m_ptLastMousePosition = ptCurMousePos; - - if( m_bResetCursorAfterMove && DXUTIsActive() ) - { - // Set position of camera to center of desktop, - // so it always has room to move. This is very useful - // if the cursor is hidden. If this isn't done and cursor is hidden, - // then invisible cursor will hit the edge of the screen - // and the user can't tell what happened - POINT ptCenter; - - // Get the center of the current monitor - MONITORINFO mi; - mi.cbSize = sizeof( MONITORINFO ); - DXUTGetMonitorInfo( DXUTMonitorFromWindow( DXUTGetHWND(), MONITOR_DEFAULTTONEAREST ), &mi ); - ptCenter.x = ( mi.rcMonitor.left + mi.rcMonitor.right ) / 2; - ptCenter.y = ( mi.rcMonitor.top + mi.rcMonitor.bottom ) / 2; - SetCursorPos( ptCenter.x, ptCenter.y ); - m_ptLastMousePosition = ptCenter; - } - - // Smooth the relative mouse data over a few frames so it isn't - // jerky when moving slowly at low frame rates. - float fPercentOfNew = 1.0f / m_fFramesToSmoothMouseData; - float fPercentOfOld = 1.0f - fPercentOfNew; - m_vMouseDelta.x = m_vMouseDelta.x * fPercentOfOld + ptCurMouseDelta.x * fPercentOfNew; - m_vMouseDelta.y = m_vMouseDelta.y * fPercentOfOld + ptCurMouseDelta.y * fPercentOfNew; - - m_vRotVelocity = m_vMouseDelta * m_fRotationScaler; -} - - - - -//-------------------------------------------------------------------------------------- -// Figure out the velocity based on keyboard input & drag if any -//-------------------------------------------------------------------------------------- -void CBaseCamera::UpdateVelocity( float fElapsedTime ) -{ - D3DXMATRIX mRotDelta; - D3DXVECTOR2 vGamePadRightThumb = D3DXVECTOR2( m_vGamePadRightThumb.x, -m_vGamePadRightThumb.z ); - m_vRotVelocity = m_vMouseDelta * m_fRotationScaler + vGamePadRightThumb * 0.02f; - - D3DXVECTOR3 vAccel = m_vKeyboardDirection + m_vGamePadLeftThumb; - - // Normalize vector so if moving 2 dirs (left & forward), - // the camera doesn't move faster than if moving in 1 dir - D3DXVec3Normalize( &vAccel, &vAccel ); - - // Scale the acceleration vector - vAccel *= m_fMoveScaler; - - if( m_bMovementDrag ) - { - // Is there any acceleration this frame? - if( D3DXVec3LengthSq( &vAccel ) > 0 ) - { - // If so, then this means the user has pressed a movement key\ - // so change the velocity immediately to acceleration - // upon keyboard input. This isn't normal physics - // but it will give a quick response to keyboard input - m_vVelocity = vAccel; - m_fDragTimer = m_fTotalDragTimeToZero; - m_vVelocityDrag = vAccel / m_fDragTimer; - } - else - { - // If no key being pressed, then slowly decrease velocity to 0 - if( m_fDragTimer > 0 ) - { - // Drag until timer is <= 0 - m_vVelocity -= m_vVelocityDrag * fElapsedTime; - m_fDragTimer -= fElapsedTime; - } - else - { - // Zero velocity - m_vVelocity = D3DXVECTOR3( 0, 0, 0 ); - } - } - } - else - { - // No drag, so immediately change the velocity - m_vVelocity = vAccel; - } -} - - - - -//-------------------------------------------------------------------------------------- -// Clamps pV to lie inside m_vMinBoundary & m_vMaxBoundary -//-------------------------------------------------------------------------------------- -void CBaseCamera::ConstrainToBoundary( D3DXVECTOR3* pV ) -{ - // Constrain vector to a bounding box - pV->x = __max( pV->x, m_vMinBoundary.x ); - pV->y = __max( pV->y, m_vMinBoundary.y ); - pV->z = __max( pV->z, m_vMinBoundary.z ); - - pV->x = __min( pV->x, m_vMaxBoundary.x ); - pV->y = __min( pV->y, m_vMaxBoundary.y ); - pV->z = __min( pV->z, m_vMaxBoundary.z ); -} - - - - -//-------------------------------------------------------------------------------------- -// Maps a windows virtual key to an enum -//-------------------------------------------------------------------------------------- -D3DUtil_CameraKeys CBaseCamera::MapKey( UINT nKey ) -{ - // This could be upgraded to a method that's user-definable but for - // simplicity, we'll use a hardcoded mapping. - switch( nKey ) - { - case VK_CONTROL: - return CAM_CONTROLDOWN; - case VK_LEFT: - return CAM_STRAFE_LEFT; - case VK_RIGHT: - return CAM_STRAFE_RIGHT; - case VK_UP: - return CAM_MOVE_FORWARD; - case VK_DOWN: - return CAM_MOVE_BACKWARD; - case VK_PRIOR: - return CAM_MOVE_UP; // pgup - case VK_NEXT: - return CAM_MOVE_DOWN; // pgdn - - case 'A': - return CAM_STRAFE_LEFT; - case 'D': - return CAM_STRAFE_RIGHT; - case 'W': - return CAM_MOVE_FORWARD; - case 'S': - return CAM_MOVE_BACKWARD; - case 'Q': - return CAM_MOVE_DOWN; - case 'E': - return CAM_MOVE_UP; - - case VK_NUMPAD4: - return CAM_STRAFE_LEFT; - case VK_NUMPAD6: - return CAM_STRAFE_RIGHT; - case VK_NUMPAD8: - return CAM_MOVE_FORWARD; - case VK_NUMPAD2: - return CAM_MOVE_BACKWARD; - case VK_NUMPAD9: - return CAM_MOVE_UP; - case VK_NUMPAD3: - return CAM_MOVE_DOWN; - - case VK_HOME: - return CAM_RESET; - } - - return CAM_UNKNOWN; -} - - - - -//-------------------------------------------------------------------------------------- -// Reset the camera's position back to the default -//-------------------------------------------------------------------------------------- -VOID CBaseCamera::Reset() -{ - SetViewParams( &m_vDefaultEye, &m_vDefaultLookAt ); -} - - - - -//-------------------------------------------------------------------------------------- -// Constructor -//-------------------------------------------------------------------------------------- -CFirstPersonCamera::CFirstPersonCamera() : m_nActiveButtonMask( 0x07 ) -{ - m_bRotateWithoutButtonDown = false; -} - - - - -//-------------------------------------------------------------------------------------- -// Update the view matrix based on user input & elapsed time -//-------------------------------------------------------------------------------------- -VOID CFirstPersonCamera::FrameMove( FLOAT fElapsedTime ) -{ - if( DXUTGetGlobalTimer()->IsStopped() ) { - if (DXUTGetFPS() == 0.0f) fElapsedTime = 0; - else fElapsedTime = 1.0f / DXUTGetFPS(); - } - - if( IsKeyDown( m_aKeys[CAM_RESET] ) ) - Reset(); - - // Get keyboard/mouse/gamepad input - GetInput( m_bEnablePositionMovement, ( m_nActiveButtonMask & m_nCurrentButtonMask ) || m_bRotateWithoutButtonDown, - true, m_bResetCursorAfterMove ); - - //// Get the mouse movement (if any) if the mouse button are down - //if( (m_nActiveButtonMask & m_nCurrentButtonMask) || m_bRotateWithoutButtonDown ) - // UpdateMouseDelta( fElapsedTime ); - - // Get amount of velocity based on the keyboard input and drag (if any) - UpdateVelocity( fElapsedTime ); - - // Simple euler method to calculate position delta - D3DXVECTOR3 vPosDelta = m_vVelocity * fElapsedTime; - - // If rotating the camera - if( ( m_nActiveButtonMask & m_nCurrentButtonMask ) || - m_bRotateWithoutButtonDown || - m_vGamePadRightThumb.x != 0 || - m_vGamePadRightThumb.z != 0 ) - { - // Update the pitch & yaw angle based on mouse movement - float fYawDelta = m_vRotVelocity.x; - float fPitchDelta = m_vRotVelocity.y; - - // Invert pitch if requested - if( m_bInvertPitch ) - fPitchDelta = -fPitchDelta; - - m_fCameraPitchAngle += fPitchDelta; - m_fCameraYawAngle += fYawDelta; - - // Limit pitch to straight up or straight down - m_fCameraPitchAngle = __max( -D3DX_PI / 2.0f, m_fCameraPitchAngle ); - m_fCameraPitchAngle = __min( +D3DX_PI / 2.0f, m_fCameraPitchAngle ); - } - - // Make a rotation matrix based on the camera's yaw & pitch - D3DXMATRIX mCameraRot; - D3DXMatrixRotationYawPitchRoll( &mCameraRot, m_fCameraYawAngle, m_fCameraPitchAngle, 0 ); - - // Transform vectors based on camera's rotation matrix - D3DXVECTOR3 vWorldUp, vWorldAhead; - D3DXVECTOR3 vLocalUp = D3DXVECTOR3( 0, 1, 0 ); - D3DXVECTOR3 vLocalAhead = D3DXVECTOR3( 0, 0, 1 ); - D3DXVec3TransformCoord( &vWorldUp, &vLocalUp, &mCameraRot ); - D3DXVec3TransformCoord( &vWorldAhead, &vLocalAhead, &mCameraRot ); - - // Transform the position delta by the camera's rotation - D3DXVECTOR3 vPosDeltaWorld; - if( !m_bEnableYAxisMovement ) - { - // If restricting Y movement, do not include pitch - // when transforming position delta vector. - D3DXMatrixRotationYawPitchRoll( &mCameraRot, m_fCameraYawAngle, 0.0f, 0.0f ); - } - D3DXVec3TransformCoord( &vPosDeltaWorld, &vPosDelta, &mCameraRot ); - - // Move the eye position - m_vEye += vPosDeltaWorld; - if( m_bClipToBoundary ) - ConstrainToBoundary( &m_vEye ); - - // Update the lookAt position based on the eye position - m_vLookAt = m_vEye + vWorldAhead; - - // Update the view matrix - D3DXMatrixLookAtLH( &m_mView, &m_vEye, &m_vLookAt, &vWorldUp ); - - D3DXMatrixInverse( &m_mCameraWorld, NULL, &m_mView ); -} - - -//-------------------------------------------------------------------------------------- -// Enable or disable each of the mouse buttons for rotation drag. -//-------------------------------------------------------------------------------------- -void CFirstPersonCamera::SetRotateButtons( bool bLeft, bool bMiddle, bool bRight, bool bRotateWithoutButtonDown ) -{ - m_nActiveButtonMask = ( bLeft ? MOUSE_LEFT_BUTTON : 0 ) | - ( bMiddle ? MOUSE_MIDDLE_BUTTON : 0 ) | - ( bRight ? MOUSE_RIGHT_BUTTON : 0 ); - m_bRotateWithoutButtonDown = bRotateWithoutButtonDown; -} - - -//-------------------------------------------------------------------------------------- -// Constructor -//-------------------------------------------------------------------------------------- -CModelViewerCamera::CModelViewerCamera() -{ - D3DXMatrixIdentity( &m_mWorld ); - D3DXMatrixIdentity( &m_mModelRot ); - D3DXMatrixIdentity( &m_mModelLastRot ); - D3DXMatrixIdentity( &m_mCameraRotLast ); - m_vModelCenter = D3DXVECTOR3( 0, 0, 0 ); - m_fRadius = 5.0f; - m_fDefaultRadius = 5.0f; - m_fMinRadius = 1.0f; - m_fMaxRadius = FLT_MAX; - m_bLimitPitch = false; - m_bEnablePositionMovement = false; - m_bAttachCameraToModel = false; - - m_nRotateModelButtonMask = MOUSE_LEFT_BUTTON; - m_nZoomButtonMask = MOUSE_WHEEL; - m_nRotateCameraButtonMask = MOUSE_RIGHT_BUTTON; - m_bDragSinceLastUpdate = true; -} - - - - -//-------------------------------------------------------------------------------------- -// Update the view matrix & the model's world matrix based -// on user input & elapsed time -//-------------------------------------------------------------------------------------- -VOID CModelViewerCamera::FrameMove( FLOAT fElapsedTime ) -{ - if( IsKeyDown( m_aKeys[CAM_RESET] ) ) - Reset(); - - // If no dragged has happend since last time FrameMove is called, - // and no camera key is held down, then no need to handle again. - if( !m_bDragSinceLastUpdate && 0 == m_cKeysDown ) - return; - m_bDragSinceLastUpdate = false; - - //// If no mouse button is held down, - //// Get the mouse movement (if any) if the mouse button are down - //if( m_nCurrentButtonMask != 0 ) - // UpdateMouseDelta( fElapsedTime ); - - GetInput( m_bEnablePositionMovement, m_nCurrentButtonMask != 0, true, false ); - - // Get amount of velocity based on the keyboard input and drag (if any) - UpdateVelocity( fElapsedTime ); - - // Simple euler method to calculate position delta - D3DXVECTOR3 vPosDelta = m_vVelocity * fElapsedTime; - - // Change the radius from the camera to the model based on wheel scrolling - if( m_nMouseWheelDelta && m_nZoomButtonMask == MOUSE_WHEEL ) - m_fRadius -= m_nMouseWheelDelta * m_fRadius * 0.1f / 120.0f; - m_fRadius = __min( m_fMaxRadius, m_fRadius ); - m_fRadius = __max( m_fMinRadius, m_fRadius ); - m_nMouseWheelDelta = 0; - - // Get the inverse of the arcball's rotation matrix - D3DXMATRIX mCameraRot; - D3DXMatrixInverse( &mCameraRot, NULL, m_ViewArcBall.GetRotationMatrix() ); - - // Transform vectors based on camera's rotation matrix - D3DXVECTOR3 vWorldUp, vWorldAhead; - D3DXVECTOR3 vLocalUp = D3DXVECTOR3( 0, 1, 0 ); - D3DXVECTOR3 vLocalAhead = D3DXVECTOR3( 0, 0, 1 ); - D3DXVec3TransformCoord( &vWorldUp, &vLocalUp, &mCameraRot ); - D3DXVec3TransformCoord( &vWorldAhead, &vLocalAhead, &mCameraRot ); - - // Transform the position delta by the camera's rotation - D3DXVECTOR3 vPosDeltaWorld; - D3DXVec3TransformCoord( &vPosDeltaWorld, &vPosDelta, &mCameraRot ); - - // Move the lookAt position - m_vLookAt += vPosDeltaWorld; - if( m_bClipToBoundary ) - ConstrainToBoundary( &m_vLookAt ); - - // Update the eye point based on a radius away from the lookAt position - m_vEye = m_vLookAt - vWorldAhead * m_fRadius; - - // Update the view matrix - D3DXMatrixLookAtLH( &m_mView, &m_vEye, &m_vLookAt, &vWorldUp ); - - D3DXMATRIX mInvView; - D3DXMatrixInverse( &mInvView, NULL, &m_mView ); - mInvView._41 = mInvView._42 = mInvView._43 = 0; - - D3DXMATRIX mModelLastRotInv; - D3DXMatrixInverse( &mModelLastRotInv, NULL, &m_mModelLastRot ); - - // Accumulate the delta of the arcball's rotation in view space. - // Note that per-frame delta rotations could be problematic over long periods of time. - D3DXMATRIX mModelRot; - mModelRot = *m_WorldArcBall.GetRotationMatrix(); - m_mModelRot *= m_mView * mModelLastRotInv * mModelRot * mInvView; - - if( m_ViewArcBall.IsBeingDragged() && m_bAttachCameraToModel && !IsKeyDown( m_aKeys[CAM_CONTROLDOWN] ) ) - { - // Attach camera to model by inverse of the model rotation - D3DXMATRIX mCameraLastRotInv; - D3DXMatrixInverse( &mCameraLastRotInv, NULL, &m_mCameraRotLast ); - D3DXMATRIX mCameraRotDelta = mCameraLastRotInv * mCameraRot; // local to world matrix - m_mModelRot *= mCameraRotDelta; - } - m_mCameraRotLast = mCameraRot; - - m_mModelLastRot = mModelRot; - - // Since we're accumulating delta rotations, we need to orthonormalize - // the matrix to prevent eventual matrix skew - D3DXVECTOR3* pXBasis = ( D3DXVECTOR3* )&m_mModelRot._11; - D3DXVECTOR3* pYBasis = ( D3DXVECTOR3* )&m_mModelRot._21; - D3DXVECTOR3* pZBasis = ( D3DXVECTOR3* )&m_mModelRot._31; - D3DXVec3Normalize( pXBasis, pXBasis ); - D3DXVec3Cross( pYBasis, pZBasis, pXBasis ); - D3DXVec3Normalize( pYBasis, pYBasis ); - D3DXVec3Cross( pZBasis, pXBasis, pYBasis ); - - // Translate the rotation matrix to the same position as the lookAt position - m_mModelRot._41 = m_vLookAt.x; - m_mModelRot._42 = m_vLookAt.y; - m_mModelRot._43 = m_vLookAt.z; - - // Translate world matrix so its at the center of the model - D3DXMATRIX mTrans; - D3DXMatrixTranslation( &mTrans, -m_vModelCenter.x, -m_vModelCenter.y, -m_vModelCenter.z ); - m_mWorld = mTrans * m_mModelRot; -} - - -void CModelViewerCamera::SetDragRect( RECT& rc ) -{ - CBaseCamera::SetDragRect( rc ); - - m_WorldArcBall.SetOffset( rc.left, rc.top ); - m_ViewArcBall.SetOffset( rc.left, rc.top ); - SetWindow( rc.right - rc.left, rc.bottom - rc.top ); -} - - -//-------------------------------------------------------------------------------------- -// Reset the camera's position back to the default -//-------------------------------------------------------------------------------------- -VOID CModelViewerCamera::Reset() -{ - CBaseCamera::Reset(); - - D3DXMatrixIdentity( &m_mWorld ); - D3DXMatrixIdentity( &m_mModelRot ); - D3DXMatrixIdentity( &m_mModelLastRot ); - D3DXMatrixIdentity( &m_mCameraRotLast ); - - m_fRadius = m_fDefaultRadius; - m_WorldArcBall.Reset(); - m_ViewArcBall.Reset(); -} - - -//-------------------------------------------------------------------------------------- -// Override for setting the view parameters -//-------------------------------------------------------------------------------------- -void CModelViewerCamera::SetViewParams( D3DXVECTOR3* pvEyePt, D3DXVECTOR3* pvLookatPt ) -{ - CBaseCamera::SetViewParams( pvEyePt, pvLookatPt ); - - // Propogate changes to the member arcball - D3DXQUATERNION quat; - D3DXMATRIXA16 mRotation; - D3DXVECTOR3 vUp( 0,1,0 ); - D3DXMatrixLookAtLH( &mRotation, pvEyePt, pvLookatPt, &vUp ); - D3DXQuaternionRotationMatrix( &quat, &mRotation ); - m_ViewArcBall.SetQuatNow( quat ); - - // Set the radius according to the distance - D3DXVECTOR3 vEyeToPoint; - D3DXVec3Subtract( &vEyeToPoint, pvLookatPt, pvEyePt ); - SetRadius( D3DXVec3Length( &vEyeToPoint ) ); - - // View information changed. FrameMove should be called. - m_bDragSinceLastUpdate = true; -} - - - -//-------------------------------------------------------------------------------------- -// Call this from your message proc so this class can handle window messages -//-------------------------------------------------------------------------------------- -LRESULT CModelViewerCamera::HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - CBaseCamera::HandleMessages( hWnd, uMsg, wParam, lParam ); - - if( ( ( uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK ) && m_nRotateModelButtonMask & MOUSE_LEFT_BUTTON ) || - ( ( uMsg == WM_MBUTTONDOWN || uMsg == WM_MBUTTONDBLCLK ) && m_nRotateModelButtonMask & MOUSE_MIDDLE_BUTTON ) || - ( ( uMsg == WM_RBUTTONDOWN || uMsg == WM_RBUTTONDBLCLK ) && m_nRotateModelButtonMask & MOUSE_RIGHT_BUTTON ) ) - { - int iMouseX = ( short )LOWORD( lParam ); - int iMouseY = ( short )HIWORD( lParam ); - m_WorldArcBall.OnBegin( iMouseX, iMouseY ); - } - - if( ( ( uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK ) && m_nRotateCameraButtonMask & MOUSE_LEFT_BUTTON ) || - ( ( uMsg == WM_MBUTTONDOWN || uMsg == WM_MBUTTONDBLCLK ) && - m_nRotateCameraButtonMask & MOUSE_MIDDLE_BUTTON ) || - ( ( uMsg == WM_RBUTTONDOWN || uMsg == WM_RBUTTONDBLCLK ) && m_nRotateCameraButtonMask & MOUSE_RIGHT_BUTTON ) ) - { - int iMouseX = ( short )LOWORD( lParam ); - int iMouseY = ( short )HIWORD( lParam ); - m_ViewArcBall.OnBegin( iMouseX, iMouseY ); - } - - if( uMsg == WM_MOUSEMOVE ) - { - int iMouseX = ( short )LOWORD( lParam ); - int iMouseY = ( short )HIWORD( lParam ); - m_WorldArcBall.OnMove( iMouseX, iMouseY ); - m_ViewArcBall.OnMove( iMouseX, iMouseY ); - } - - if( ( uMsg == WM_LBUTTONUP && m_nRotateModelButtonMask & MOUSE_LEFT_BUTTON ) || - ( uMsg == WM_MBUTTONUP && m_nRotateModelButtonMask & MOUSE_MIDDLE_BUTTON ) || - ( uMsg == WM_RBUTTONUP && m_nRotateModelButtonMask & MOUSE_RIGHT_BUTTON ) ) - { - m_WorldArcBall.OnEnd(); - } - - if( ( uMsg == WM_LBUTTONUP && m_nRotateCameraButtonMask & MOUSE_LEFT_BUTTON ) || - ( uMsg == WM_MBUTTONUP && m_nRotateCameraButtonMask & MOUSE_MIDDLE_BUTTON ) || - ( uMsg == WM_RBUTTONUP && m_nRotateCameraButtonMask & MOUSE_RIGHT_BUTTON ) ) - { - m_ViewArcBall.OnEnd(); - } - - if( uMsg == WM_CAPTURECHANGED ) - { - if( ( HWND )lParam != hWnd ) - { - if( ( m_nRotateModelButtonMask & MOUSE_LEFT_BUTTON ) || - ( m_nRotateModelButtonMask & MOUSE_MIDDLE_BUTTON ) || - ( m_nRotateModelButtonMask & MOUSE_RIGHT_BUTTON ) ) - { - m_WorldArcBall.OnEnd(); - } - - if( ( m_nRotateCameraButtonMask & MOUSE_LEFT_BUTTON ) || - ( m_nRotateCameraButtonMask & MOUSE_MIDDLE_BUTTON ) || - ( m_nRotateCameraButtonMask & MOUSE_RIGHT_BUTTON ) ) - { - m_ViewArcBall.OnEnd(); - } - } - } - - if( uMsg == WM_LBUTTONDOWN || - uMsg == WM_LBUTTONDBLCLK || - uMsg == WM_MBUTTONDOWN || - uMsg == WM_MBUTTONDBLCLK || - uMsg == WM_RBUTTONDOWN || - uMsg == WM_RBUTTONDBLCLK || - uMsg == WM_LBUTTONUP || - uMsg == WM_MBUTTONUP || - uMsg == WM_RBUTTONUP || - uMsg == WM_MOUSEWHEEL || - uMsg == WM_MOUSEMOVE ) - { - m_bDragSinceLastUpdate = true; - } - - return FALSE; -} - - - -//-------------------------------------------------------------------------------------- -// D3D9 -IDirect3DDevice9* CDXUTDirectionWidget::s_pd3d9Device = NULL; -ID3DXEffect* CDXUTDirectionWidget::s_pD3D9Effect = NULL; -ID3DXMesh* CDXUTDirectionWidget::s_pD3D9Mesh = NULL; -D3DXHANDLE CDXUTDirectionWidget::s_hRenderWith1LightNoTexture = NULL; -D3DXHANDLE CDXUTDirectionWidget::s_hMaterialDiffuseColor = NULL; -D3DXHANDLE CDXUTDirectionWidget::s_hLightDir = NULL; -D3DXHANDLE CDXUTDirectionWidget::s_hWorldViewProjection = NULL; -D3DXHANDLE CDXUTDirectionWidget::s_hWorld = NULL; - - -//-------------------------------------------------------------------------------------- -CDXUTDirectionWidget::CDXUTDirectionWidget() -{ - m_fRadius = 1.0f; - m_vDefaultDir = D3DXVECTOR3( 0, 1, 0 ); - m_vCurrentDir = m_vDefaultDir; - m_nRotateMask = MOUSE_RIGHT_BUTTON; - - D3DXMatrixIdentity( &m_mView ); - D3DXMatrixIdentity( &m_mRot ); - D3DXMatrixIdentity( &m_mRotSnapshot ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDirectionWidget::StaticOnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice ) -{ - HRESULT hr; - - s_pd3d9Device = pd3dDevice; - - const char* g_strBuffer = - "float4 g_MaterialDiffuseColor; // Material's diffuse color\r\n" - "float3 g_LightDir; // Light's direction in world space\r\n" - "float4x4 g_mWorld; // World matrix for object\r\n" - "float4x4 g_mWorldViewProjection; // World * View * Projection matrix\r\n" - "\r\n" - "struct VS_OUTPUT\r\n" - "{\r\n" - " float4 Position : POSITION; // vertex position\r\n" - " float4 Diffuse : COLOR0; // vertex diffuse color\r\n" - "};\r\n" - "\r\n" - "VS_OUTPUT RenderWith1LightNoTextureVS( float4 vPos : POSITION,\r\n" - " float3 vNormal : NORMAL )\r\n" - "{\r\n" - " VS_OUTPUT Output;\r\n" - "\r\n" - " // Transform the position from object space to homogeneous projection space\r\n" - " Output.Position = mul(vPos, g_mWorldViewProjection);\r\n" - "\r\n" - " // Transform the normal from object space to world space\r\n" - " float3 vNormalWorldSpace;\r\n" - " vNormalWorldSpace = normalize(mul(vNormal, (float3x3)g_mWorld)); // normal (world space)\r\n" - "\r\n" - " // Compute simple directional lighting equation\r\n" - " Output.Diffuse.rgb = g_MaterialDiffuseColor * max(0,dot(vNormalWorldSpace, g_LightDir));\r\n" - " Output.Diffuse.a = 1.0f;\r\n" - "\r\n" - " return Output;\r\n" - "}\r\n" - "\r\n" - "float4 RenderWith1LightNoTexturePS( float4 Diffuse : COLOR0 ) : COLOR0\r\n" - "{\r\n" - " return Diffuse;\r\n" - "}\r\n" - "\r\n" - "technique RenderWith1LightNoTexture\r\n" - "{\r\n" - " pass P0\r\n" - " {\r\n" - " VertexShader = compile vs_2_0 RenderWith1LightNoTextureVS();\r\n" - " PixelShader = compile ps_2_0 RenderWith1LightNoTexturePS();\r\n" - " }\r\n" - "}\r\n" - ""; - - UINT dwBufferSize = ( UINT )strlen( g_strBuffer ) + 1; - - V_RETURN( D3DXCreateEffect( s_pd3d9Device, g_strBuffer, dwBufferSize, NULL, NULL, D3DXFX_NOT_CLONEABLE, - NULL, &s_pD3D9Effect, NULL ) ); - - // Save technique handles for use when rendering - s_hRenderWith1LightNoTexture = s_pD3D9Effect->GetTechniqueByName( "RenderWith1LightNoTexture" ); - s_hMaterialDiffuseColor = s_pD3D9Effect->GetParameterByName( NULL, "g_MaterialDiffuseColor" ); - s_hLightDir = s_pD3D9Effect->GetParameterByName( NULL, "g_LightDir" ); - s_hWorld = s_pD3D9Effect->GetParameterByName( NULL, "g_mWorld" ); - s_hWorldViewProjection = s_pD3D9Effect->GetParameterByName( NULL, "g_mWorldViewProjection" ); - - // Load the mesh with D3DX and get back a ID3DXMesh*. For this - // sample we'll ignore the X file's embedded materials since we know - // exactly the model we're loading. See the mesh samples such as - // "OptimizedMesh" for a more generic mesh loading example. - V_RETURN( DXUTCreateArrowMeshFromInternalArray( s_pd3d9Device, &s_pD3D9Mesh ) ); - - // Optimize the mesh for this graphics card's vertex cache - // so when rendering the mesh's triangle list the vertices will - // cache hit more often so it won't have to re-execute the vertex shader - // on those vertices so it will improve perf. - DWORD* rgdwAdjacency = new DWORD[s_pD3D9Mesh->GetNumFaces() * 3]; - if( rgdwAdjacency == NULL ) - return E_OUTOFMEMORY; - V( s_pD3D9Mesh->GenerateAdjacency( 1e-6f, rgdwAdjacency ) ); - V( s_pD3D9Mesh->OptimizeInplace( D3DXMESHOPT_VERTEXCACHE, rgdwAdjacency, NULL, NULL, NULL ) ); - delete []rgdwAdjacency; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDirectionWidget::OnD3D9ResetDevice( const D3DSURFACE_DESC* pBackBufferSurfaceDesc ) -{ - m_ArcBall.SetWindow( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDirectionWidget::StaticOnD3D9LostDevice() -{ - if( s_pD3D9Effect ) - s_pD3D9Effect->OnLostDevice(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDirectionWidget::StaticOnD3D9DestroyDevice() -{ - SAFE_RELEASE( s_pD3D9Effect ); - SAFE_RELEASE( s_pD3D9Mesh ); -} - - -//-------------------------------------------------------------------------------------- -LRESULT CDXUTDirectionWidget::HandleMessages( HWND hWnd, UINT uMsg, - WPARAM wParam, LPARAM lParam ) -{ - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_MBUTTONDOWN: - case WM_RBUTTONDOWN: - { - if( ( ( m_nRotateMask & MOUSE_LEFT_BUTTON ) != 0 && uMsg == WM_LBUTTONDOWN ) || - ( ( m_nRotateMask & MOUSE_MIDDLE_BUTTON ) != 0 && uMsg == WM_MBUTTONDOWN ) || - ( ( m_nRotateMask & MOUSE_RIGHT_BUTTON ) != 0 && uMsg == WM_RBUTTONDOWN ) ) - { - int iMouseX = ( int )( short )LOWORD( lParam ); - int iMouseY = ( int )( short )HIWORD( lParam ); - m_ArcBall.OnBegin( iMouseX, iMouseY ); - SetCapture( hWnd ); - } - return TRUE; - } - - case WM_MOUSEMOVE: - { - if( m_ArcBall.IsBeingDragged() ) - { - int iMouseX = ( int )( short )LOWORD( lParam ); - int iMouseY = ( int )( short )HIWORD( lParam ); - m_ArcBall.OnMove( iMouseX, iMouseY ); - UpdateLightDir(); - } - return TRUE; - } - - case WM_LBUTTONUP: - case WM_MBUTTONUP: - case WM_RBUTTONUP: - { - if( ( ( m_nRotateMask & MOUSE_LEFT_BUTTON ) != 0 && uMsg == WM_LBUTTONUP ) || - ( ( m_nRotateMask & MOUSE_MIDDLE_BUTTON ) != 0 && uMsg == WM_MBUTTONUP ) || - ( ( m_nRotateMask & MOUSE_RIGHT_BUTTON ) != 0 && uMsg == WM_RBUTTONUP ) ) - { - m_ArcBall.OnEnd(); - ReleaseCapture(); - } - - UpdateLightDir(); - return TRUE; - } - - case WM_CAPTURECHANGED: - { - if( ( HWND )lParam != hWnd ) - { - if( ( m_nRotateMask & MOUSE_LEFT_BUTTON ) || - ( m_nRotateMask & MOUSE_MIDDLE_BUTTON ) || - ( m_nRotateMask & MOUSE_RIGHT_BUTTON ) ) - { - m_ArcBall.OnEnd(); - ReleaseCapture(); - } - } - return TRUE; - } - } - - return 0; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDirectionWidget::OnRender9( D3DXCOLOR color, const D3DXMATRIX* pmView, - const D3DXMATRIX* pmProj, const D3DXVECTOR3* pEyePt ) -{ - m_mView = *pmView; - - // Render the light spheres so the user can visually see the light dir - UINT iPass, cPasses; - D3DXMATRIX mRotate; - D3DXMATRIX mScale; - D3DXMATRIX mTrans; - D3DXMATRIXA16 mWorldViewProj; - HRESULT hr; - - V( s_pD3D9Effect->SetTechnique( s_hRenderWith1LightNoTexture ) ); - V( s_pD3D9Effect->SetVector( s_hMaterialDiffuseColor, ( D3DXVECTOR4* )&color ) ); - - D3DXVECTOR3 vEyePt; - D3DXVec3Normalize( &vEyePt, pEyePt ); - V( s_pD3D9Effect->SetValue( s_hLightDir, &vEyePt, sizeof( D3DXVECTOR3 ) ) ); - - // Rotate arrow model to point towards origin - D3DXMATRIX mRotateA, mRotateB; - D3DXVECTOR3 vAt = D3DXVECTOR3( 0, 0, 0 ); - D3DXVECTOR3 vUp = D3DXVECTOR3( 0, 1, 0 ); - D3DXMatrixRotationX( &mRotateB, D3DX_PI ); - D3DXMatrixLookAtLH( &mRotateA, &m_vCurrentDir, &vAt, &vUp ); - D3DXMatrixInverse( &mRotateA, NULL, &mRotateA ); - mRotate = mRotateB * mRotateA; - - D3DXVECTOR3 vL = m_vCurrentDir * m_fRadius * 1.0f; - D3DXMatrixTranslation( &mTrans, vL.x, vL.y, vL.z ); - D3DXMatrixScaling( &mScale, m_fRadius * 0.2f, m_fRadius * 0.2f, m_fRadius * 0.2f ); - - D3DXMATRIX mWorld = mRotate * mScale * mTrans; - mWorldViewProj = mWorld * ( m_mView )*( *pmProj ); - - V( s_pD3D9Effect->SetMatrix( s_hWorldViewProjection, &mWorldViewProj ) ); - V( s_pD3D9Effect->SetMatrix( s_hWorld, &mWorld ) ); - - for( int iSubset = 0; iSubset < 2; iSubset++ ) - { - V( s_pD3D9Effect->Begin( &cPasses, 0 ) ); - for( iPass = 0; iPass < cPasses; iPass++ ) - { - V( s_pD3D9Effect->BeginPass( iPass ) ); - V( s_pD3D9Mesh->DrawSubset( iSubset ) ); - V( s_pD3D9Effect->EndPass() ); - } - V( s_pD3D9Effect->End() ); - } - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDirectionWidget::UpdateLightDir() -{ - D3DXMATRIX mInvView; - D3DXMatrixInverse( &mInvView, NULL, &m_mView ); - mInvView._41 = mInvView._42 = mInvView._43 = 0; - - D3DXMATRIX mLastRotInv; - D3DXMatrixInverse( &mLastRotInv, NULL, &m_mRotSnapshot ); - - D3DXMATRIX mRot = *m_ArcBall.GetRotationMatrix(); - m_mRotSnapshot = mRot; - - // Accumulate the delta of the arcball's rotation in view space. - // Note that per-frame delta rotations could be problematic over long periods of time. - m_mRot *= m_mView * mLastRotInv * mRot * mInvView; - - // Since we're accumulating delta rotations, we need to orthonormalize - // the matrix to prevent eventual matrix skew - D3DXVECTOR3* pXBasis = ( D3DXVECTOR3* )&m_mRot._11; - D3DXVECTOR3* pYBasis = ( D3DXVECTOR3* )&m_mRot._21; - D3DXVECTOR3* pZBasis = ( D3DXVECTOR3* )&m_mRot._31; - D3DXVec3Normalize( pXBasis, pXBasis ); - D3DXVec3Cross( pYBasis, pZBasis, pXBasis ); - D3DXVec3Normalize( pYBasis, pYBasis ); - D3DXVec3Cross( pZBasis, pXBasis, pYBasis ); - - // Transform the default direction vector by the light's rotation matrix - D3DXVec3TransformNormal( &m_vCurrentDir, &m_vDefaultDir, &m_mRot ); - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDirectionWidget::StaticOnD3D11CreateDevice( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext ) -{ - - - //s_pd3d10Device = pd3dDevice; - - //const char* g_strBuffer = - // "float4 g_MaterialDiffuseColor; // Material's diffuse color\r\n" - // "float4 g_LightDir; // Light's direction in world space\r\n" - // "float4x4 g_mWorld; // World matrix for object\r\n" - // "float4x4 g_mWorldViewProjection; // World * View * Projection matrix\r\n" - // "\r\n" - // "struct VS_OUTPUT\r\n" - // "{\r\n" - // " float4 Position : SV_POSITION; // vertex position\r\n" - // " float4 Diffuse : COLOR0; // vertex diffuse color\r\n" - // "};\r\n" - // "\r\n" - // "VS_OUTPUT RenderWith1LightNoTextureVS( float3 vPos : POSITION,\r\n" - // " float3 vNormal : NORMAL )\r\n" - // "{\r\n" - // " VS_OUTPUT Output;\r\n" - // "\r\n" - // " // Transform the position from object space to homogeneous projection space\r\n" - // " Output.Position = mul( float4(vPos,1), g_mWorldViewProjection);\r\n" - // "\r\n" - // " // Transform the normal from object space to world space\r\n" - // " float3 vNormalWorldSpace;\r\n" - // " vNormalWorldSpace = normalize(mul(vNormal, (float3x3)g_mWorld)); // normal (world space)\r\n" - // "\r\n" - // " // Compute simple directional lighting equation\r\n" - // " Output.Diffuse.rgb = g_MaterialDiffuseColor * max(0,dot(vNormalWorldSpace, g_LightDir));\r\n" - // " Output.Diffuse.a = 1.0f;\r\n" - // "\r\n" - // " return Output;\r\n" - // "}\r\n" - // "\r\n" - // "float4 RenderWith1LightNoTexturePS( VS_OUTPUT Input ) : SV_TARGET\r\n" - // "{\r\n" - // " return Input.Diffuse;\r\n" - // "}\r\n" - // "\r\n" - // "technique10 RenderWith1LightNoTexture\r\n" - // "{\r\n" - // " pass p0\r\n" - // " {\r\n" - // " SetVertexShader( CompileShader( vs_4_0, RenderWith1LightNoTextureVS() ) );\r\n" - // " SetGeometryShader( NULL );\r\n" - // " SetPixelShader( CompileShader( ps_4_0, RenderWith1LightNoTexturePS() ) );\r\n" - // " }\r\n" - // "}\r\n" - // ""; - - //UINT dwBufferSize = ( UINT )strlen( g_strBuffer ) + 1; - - //HRESULT hr = D3DX10CreateEffectFromMemory( g_strBuffer, dwBufferSize, "None", NULL, NULL, "fx_4_0", - // D3D10_SHADER_ENABLE_STRICTNESS, 0, pd3dDevice, NULL, - // NULL, &s_pD3D10Effect, NULL, NULL ); - //if( FAILED( hr ) ) - // return hr; - - //s_pRenderTech = s_pD3D10Effect->GetTechniqueByName( "RenderWith1LightNoTexture" ); - //g_pMaterialDiffuseColor = s_pD3D10Effect->GetVariableByName( "g_MaterialDiffuseColor" )->AsVector(); - //g_pLightDir = s_pD3D10Effect->GetVariableByName( "g_LightDir" )->AsVector(); - //g_pmWorld = s_pD3D10Effect->GetVariableByName( "g_mWorld" )->AsMatrix(); - //g_pmWorldViewProjection = s_pD3D10Effect->GetVariableByName( "g_mWorldViewProjection" )->AsMatrix(); - - //const D3D10_INPUT_ELEMENT_DESC layout[] = - //{ - // { "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, - // { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0 }, - //}; - //D3D10_PASS_DESC PassDesc; - //V_RETURN( s_pRenderTech->GetPassByIndex( 0 )->GetDesc( &PassDesc ) ); - //V_RETURN( pd3dDevice->CreateInputLayout( layout, 2, PassDesc.pIAInputSignature, - // PassDesc.IAInputSignatureSize, &s_pVertexLayout ) ); - - //TODO: Add loading code here - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDirectionWidget::OnRender11( D3DXCOLOR color, const D3DXMATRIX* pmView, const D3DXMATRIX* pmProj, - const D3DXVECTOR3* pEyePt ) -{ - // NO D3DX11 YET - // m_mView = *pmView; - - // // Render the light spheres so the user can visually see the light dir - // D3DXMATRIX mRotate; - // D3DXMATRIX mScale; - // D3DXMATRIX mTrans; - // D3DXMATRIXA16 mWorldViewProj; - - // g_pMaterialDiffuseColor->SetFloatVector( ( float* )&color ); - // D3DXVECTOR3 vEyePt; - // D3DXVec3Normalize( &vEyePt, pEyePt ); - // g_pLightDir->SetFloatVector( ( float* )&vEyePt ); - - // // Rotate arrow model to point towards origin - // D3DXMATRIX mRotateA, mRotateB; - // D3DXVECTOR3 vAt = D3DXVECTOR3( 0, 0, 0 ); - // D3DXVECTOR3 vUp = D3DXVECTOR3( 0, 1, 0 ); - // D3DXMatrixRotationX( &mRotateB, D3DX_PI ); - // D3DXMatrixLookAtLH( &mRotateA, &m_vCurrentDir, &vAt, &vUp ); - // D3DXMatrixInverse( &mRotateA, NULL, &mRotateA ); - // mRotate = mRotateB * mRotateA; - - // D3DXVECTOR3 vL = m_vCurrentDir * m_fRadius * 1.0f; - // D3DXMatrixTranslation( &mTrans, vL.x, vL.y, vL.z ); - // D3DXMatrixScaling( &mScale, m_fRadius * 0.2f, m_fRadius * 0.2f, m_fRadius * 0.2f ); - - // D3DXMATRIX mWorld = mRotate * mScale * mTrans; - // mWorldViewProj = mWorld * ( m_mView )*( *pmProj ); - - // g_pmWorldViewProjection->SetMatrix( ( float* )&mWorldViewProj ); - // g_pmWorld->SetMatrix( ( float* )&mWorld ); - - // s_pd3d10Device->IASetInputLayout( s_pVertexLayout ); - - //TODO: Add rendering code here - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -void CDXUTDirectionWidget::StaticOnD3D11DestroyDevice() -{ -// SAFE_RELEASE( s_pVertexLayout ); -// SAFE_RELEASE( s_pD3D11Effect ); -} diff --git a/sample/d3d11/common/DXUTcamera.h b/sample/d3d11/common/DXUTcamera.h deleted file mode 100644 index c29b104..0000000 --- a/sample/d3d11/common/DXUTcamera.h +++ /dev/null @@ -1,517 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: Camera.h -// -// Helper functions for Direct3D programming. -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef CAMERA_H -#define CAMERA_H - -//-------------------------------------------------------------------------------------- -class CD3DArcBall -{ -public: - CD3DArcBall(); - - // Functions to change behavior - void Reset(); - void SetTranslationRadius( FLOAT fRadiusTranslation ) - { - m_fRadiusTranslation = fRadiusTranslation; - } - void SetWindow( INT nWidth, INT nHeight, FLOAT fRadius = 0.9f ) - { - m_nWidth = nWidth; m_nHeight = nHeight; m_fRadius = fRadius; - m_vCenter = D3DXVECTOR2( m_nWidth / 2.0f, m_nHeight / 2.0f ); - } - void SetOffset( INT nX, INT nY ) - { - m_Offset.x = nX; m_Offset.y = nY; - } - - // Call these from client and use GetRotationMatrix() to read new rotation matrix - void OnBegin( int nX, int nY ); // start the rotation (pass current mouse position) - void OnMove( int nX, int nY ); // continue the rotation (pass current mouse position) - void OnEnd(); // end the rotation - - // Or call this to automatically handle left, middle, right buttons - LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - - // Functions to get/set state - const D3DXMATRIX* GetRotationMatrix() - { - return D3DXMatrixRotationQuaternion( &m_mRotation, &m_qNow ); - }; - const D3DXMATRIX* GetTranslationMatrix() const - { - return &m_mTranslation; - } - const D3DXMATRIX* GetTranslationDeltaMatrix() const - { - return &m_mTranslationDelta; - } - bool IsBeingDragged() const - { - return m_bDrag; - } - D3DXQUATERNION GetQuatNow() const - { - return m_qNow; - } - void SetQuatNow( D3DXQUATERNION q ) - { - m_qNow = q; - } - - static D3DXQUATERNION WINAPI QuatFromBallPoints( const D3DXVECTOR3& vFrom, const D3DXVECTOR3& vTo ); - - -protected: - D3DXMATRIXA16 m_mRotation; // Matrix for arc ball's orientation - D3DXMATRIXA16 m_mTranslation; // Matrix for arc ball's position - D3DXMATRIXA16 m_mTranslationDelta; // Matrix for arc ball's position - - POINT m_Offset; // window offset, or upper-left corner of window - INT m_nWidth; // arc ball's window width - INT m_nHeight; // arc ball's window height - D3DXVECTOR2 m_vCenter; // center of arc ball - FLOAT m_fRadius; // arc ball's radius in screen coords - FLOAT m_fRadiusTranslation; // arc ball's radius for translating the target - - D3DXQUATERNION m_qDown; // Quaternion before button down - D3DXQUATERNION m_qNow; // Composite quaternion for current drag - bool m_bDrag; // Whether user is dragging arc ball - - POINT m_ptLastMouse; // position of last mouse point - D3DXVECTOR3 m_vDownPt; // starting point of rotation arc - D3DXVECTOR3 m_vCurrentPt; // current point of rotation arc - - D3DXVECTOR3 ScreenToVector( float fScreenPtX, float fScreenPtY ); -}; - - -//-------------------------------------------------------------------------------------- -// used by CCamera to map WM_KEYDOWN keys -//-------------------------------------------------------------------------------------- -enum D3DUtil_CameraKeys -{ - CAM_STRAFE_LEFT = 0, - CAM_STRAFE_RIGHT, - CAM_MOVE_FORWARD, - CAM_MOVE_BACKWARD, - CAM_MOVE_UP, - CAM_MOVE_DOWN, - CAM_RESET, - CAM_CONTROLDOWN, - CAM_MAX_KEYS, - CAM_UNKNOWN = 0xFF -}; - -#define KEY_WAS_DOWN_MASK 0x80 -#define KEY_IS_DOWN_MASK 0x01 - -#define MOUSE_LEFT_BUTTON 0x01 -#define MOUSE_MIDDLE_BUTTON 0x02 -#define MOUSE_RIGHT_BUTTON 0x04 -#define MOUSE_WHEEL 0x08 - - -//-------------------------------------------------------------------------------------- -// Simple base camera class that moves and rotates. The base class -// records mouse and keyboard input for use by a derived class, and -// keeps common state. -//-------------------------------------------------------------------------------------- -class CBaseCamera -{ -public: - CBaseCamera(); - - // Call these from client and use Get*Matrix() to read new matrices - virtual LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual void FrameMove( FLOAT fElapsedTime ) = 0; - - // Functions to change camera matrices - virtual void Reset(); - virtual void SetViewParams( D3DXVECTOR3* pvEyePt, D3DXVECTOR3* pvLookatPt ); - virtual void SetProjParams( FLOAT fFOV, FLOAT fAspect, FLOAT fNearPlane, FLOAT fFarPlane ); - - // Functions to change behavior - virtual void SetDragRect( RECT& rc ) - { - m_rcDrag = rc; - } - void SetInvertPitch( bool bInvertPitch ) - { - m_bInvertPitch = bInvertPitch; - } - void SetDrag( bool bMovementDrag, FLOAT fTotalDragTimeToZero = 0.25f ) - { - m_bMovementDrag = bMovementDrag; m_fTotalDragTimeToZero = fTotalDragTimeToZero; - } - void SetEnableYAxisMovement( bool bEnableYAxisMovement ) - { - m_bEnableYAxisMovement = bEnableYAxisMovement; - } - void SetEnablePositionMovement( bool bEnablePositionMovement ) - { - m_bEnablePositionMovement = bEnablePositionMovement; - } - void SetClipToBoundary( bool bClipToBoundary, D3DXVECTOR3* pvMinBoundary, - D3DXVECTOR3* pvMaxBoundary ) - { - m_bClipToBoundary = bClipToBoundary; if( pvMinBoundary ) m_vMinBoundary = *pvMinBoundary; - if( pvMaxBoundary ) m_vMaxBoundary = *pvMaxBoundary; - } - void SetScalers( FLOAT fRotationScaler = 0.01f, FLOAT fMoveScaler = 5.0f ) - { - m_fRotationScaler = fRotationScaler; m_fMoveScaler = fMoveScaler; - } - void SetNumberOfFramesToSmoothMouseData( int nFrames ) - { - if( nFrames > 0 ) m_fFramesToSmoothMouseData = ( float )nFrames; - } - void SetResetCursorAfterMove( bool bResetCursorAfterMove ) - { - m_bResetCursorAfterMove = bResetCursorAfterMove; - } - - // Functions to get state - const D3DXMATRIX* GetViewMatrix() const - { - return &m_mView; - } - const D3DXMATRIX* GetProjMatrix() const - { - return &m_mProj; - } - const D3DXVECTOR3* GetEyePt() const - { - return &m_vEye; - } - const D3DXVECTOR3* GetLookAtPt() const - { - return &m_vLookAt; - } - float GetNearClip() const - { - return m_fNearPlane; - } - float GetFarClip() const - { - return m_fFarPlane; - } - - bool IsBeingDragged() const - { - return ( m_bMouseLButtonDown || m_bMouseMButtonDown || m_bMouseRButtonDown ); - } - bool IsMouseLButtonDown() const - { - return m_bMouseLButtonDown; - } - bool IsMouseMButtonDown() const - { - return m_bMouseMButtonDown; - } - bool IsMouseRButtonDown() const - { - return m_bMouseRButtonDown; - } - -protected: - // Functions to map a WM_KEYDOWN key to a D3DUtil_CameraKeys enum - virtual D3DUtil_CameraKeys MapKey( UINT nKey ); - bool IsKeyDown( BYTE key ) const - { - return( ( key & KEY_IS_DOWN_MASK ) == KEY_IS_DOWN_MASK ); - } - bool WasKeyDown( BYTE key ) const - { - return( ( key & KEY_WAS_DOWN_MASK ) == KEY_WAS_DOWN_MASK ); - } - - void ConstrainToBoundary( D3DXVECTOR3* pV ); - void UpdateMouseDelta(); - void UpdateVelocity( float fElapsedTime ); - void GetInput( bool bGetKeyboardInput, bool bGetMouseInput, bool bGetGamepadInput, - bool bResetCursorAfterMove ); - - D3DXMATRIX m_mView; // View matrix - D3DXMATRIX m_mProj; // Projection matrix - - DXUT_GAMEPAD m_GamePad[DXUT_MAX_CONTROLLERS]; // XInput controller state - D3DXVECTOR3 m_vGamePadLeftThumb; - D3DXVECTOR3 m_vGamePadRightThumb; - double m_GamePadLastActive[DXUT_MAX_CONTROLLERS]; - - int m_cKeysDown; // Number of camera keys that are down. - BYTE m_aKeys[CAM_MAX_KEYS]; // State of input - KEY_WAS_DOWN_MASK|KEY_IS_DOWN_MASK - D3DXVECTOR3 m_vKeyboardDirection; // Direction vector of keyboard input - POINT m_ptLastMousePosition; // Last absolute position of mouse cursor - bool m_bMouseLButtonDown; // True if left button is down - bool m_bMouseMButtonDown; // True if middle button is down - bool m_bMouseRButtonDown; // True if right button is down - int m_nCurrentButtonMask; // mask of which buttons are down - int m_nMouseWheelDelta; // Amount of middle wheel scroll (+/-) - D3DXVECTOR2 m_vMouseDelta; // Mouse relative delta smoothed over a few frames - float m_fFramesToSmoothMouseData; // Number of frames to smooth mouse data over - - D3DXVECTOR3 m_vDefaultEye; // Default camera eye position - D3DXVECTOR3 m_vDefaultLookAt; // Default LookAt position - D3DXVECTOR3 m_vEye; // Camera eye position - D3DXVECTOR3 m_vLookAt; // LookAt position - float m_fCameraYawAngle; // Yaw angle of camera - float m_fCameraPitchAngle; // Pitch angle of camera - - RECT m_rcDrag; // Rectangle within which a drag can be initiated. - D3DXVECTOR3 m_vVelocity; // Velocity of camera - bool m_bMovementDrag; // If true, then camera movement will slow to a stop otherwise movement is instant - D3DXVECTOR3 m_vVelocityDrag; // Velocity drag force - FLOAT m_fDragTimer; // Countdown timer to apply drag - FLOAT m_fTotalDragTimeToZero; // Time it takes for velocity to go from full to 0 - D3DXVECTOR2 m_vRotVelocity; // Velocity of camera - - float m_fFOV; // Field of view - float m_fAspect; // Aspect ratio - float m_fNearPlane; // Near plane - float m_fFarPlane; // Far plane - - float m_fRotationScaler; // Scaler for rotation - float m_fMoveScaler; // Scaler for movement - - bool m_bInvertPitch; // Invert the pitch axis - bool m_bEnablePositionMovement; // If true, then the user can translate the camera/model - bool m_bEnableYAxisMovement; // If true, then camera can move in the y-axis - - bool m_bClipToBoundary; // If true, then the camera will be clipped to the boundary - D3DXVECTOR3 m_vMinBoundary; // Min point in clip boundary - D3DXVECTOR3 m_vMaxBoundary; // Max point in clip boundary - - bool m_bResetCursorAfterMove;// If true, the class will reset the cursor position so that the cursor always has space to move -}; - - -//-------------------------------------------------------------------------------------- -// Simple first person camera class that moves and rotates. -// It allows yaw and pitch but not roll. It uses WM_KEYDOWN and -// GetCursorPos() to respond to keyboard and mouse input and updates the -// view matrix based on input. -//-------------------------------------------------------------------------------------- -class CFirstPersonCamera : public CBaseCamera -{ -public: - CFirstPersonCamera(); - - // Call these from client and use Get*Matrix() to read new matrices - virtual void FrameMove( FLOAT fElapsedTime ); - - // Functions to change behavior - void SetRotateButtons( bool bLeft, bool bMiddle, bool bRight, bool bRotateWithoutButtonDown = false ); - - // Functions to get state - D3DXMATRIX* GetWorldMatrix() - { - return &m_mCameraWorld; - } - - const D3DXVECTOR3* GetWorldRight() const - { - return ( D3DXVECTOR3* )&m_mCameraWorld._11; - } - const D3DXVECTOR3* GetWorldUp() const - { - return ( D3DXVECTOR3* )&m_mCameraWorld._21; - } - const D3DXVECTOR3* GetWorldAhead() const - { - return ( D3DXVECTOR3* )&m_mCameraWorld._31; - } - const D3DXVECTOR3* GetEyePt() const - { - return ( D3DXVECTOR3* )&m_mCameraWorld._41; - } - -protected: - D3DXMATRIX m_mCameraWorld; // World matrix of the camera (inverse of the view matrix) - - int m_nActiveButtonMask; // Mask to determine which button to enable for rotation - bool m_bRotateWithoutButtonDown; -}; - - -//-------------------------------------------------------------------------------------- -// Simple model viewing camera class that rotates around the object. -//-------------------------------------------------------------------------------------- -class CModelViewerCamera : public CBaseCamera -{ -public: - CModelViewerCamera(); - - // Call these from client and use Get*Matrix() to read new matrices - virtual LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual void FrameMove( FLOAT fElapsedTime ); - - - // Functions to change behavior - virtual void SetDragRect( RECT& rc ); - void Reset(); - void SetViewParams( D3DXVECTOR3* pvEyePt, D3DXVECTOR3* pvLookatPt ); - void SetButtonMasks( int nRotateModelButtonMask = MOUSE_LEFT_BUTTON, int nZoomButtonMask = MOUSE_WHEEL, - int nRotateCameraButtonMask = MOUSE_RIGHT_BUTTON ) - { - m_nRotateModelButtonMask = nRotateModelButtonMask, m_nZoomButtonMask = nZoomButtonMask; - m_nRotateCameraButtonMask = nRotateCameraButtonMask; - } - void SetAttachCameraToModel( bool bEnable = false ) - { - m_bAttachCameraToModel = bEnable; - } - void SetWindow( int nWidth, int nHeight, float fArcballRadius=0.9f ) - { - m_WorldArcBall.SetWindow( nWidth, nHeight, fArcballRadius ); - m_ViewArcBall.SetWindow( nWidth, nHeight, fArcballRadius ); - } - void SetRadius( float fDefaultRadius=5.0f, float fMinRadius=1.0f, float fMaxRadius=FLT_MAX ) - { - m_fDefaultRadius = m_fRadius = fDefaultRadius; m_fMinRadius = fMinRadius; m_fMaxRadius = fMaxRadius; - m_bDragSinceLastUpdate = true; - } - void SetModelCenter( D3DXVECTOR3 vModelCenter ) - { - m_vModelCenter = vModelCenter; - } - void SetLimitPitch( bool bLimitPitch ) - { - m_bLimitPitch = bLimitPitch; - } - void SetViewQuat( D3DXQUATERNION q ) - { - m_ViewArcBall.SetQuatNow( q ); m_bDragSinceLastUpdate = true; - } - void SetWorldQuat( D3DXQUATERNION q ) - { - m_WorldArcBall.SetQuatNow( q ); m_bDragSinceLastUpdate = true; - } - - // Functions to get state - const D3DXMATRIX* GetWorldMatrix() const - { - return &m_mWorld; - } - void SetWorldMatrix( D3DXMATRIX& mWorld ) - { - m_mWorld = mWorld; m_bDragSinceLastUpdate = true; - } - -protected: - CD3DArcBall m_WorldArcBall; - CD3DArcBall m_ViewArcBall; - D3DXVECTOR3 m_vModelCenter; - D3DXMATRIX m_mModelLastRot; // Last arcball rotation matrix for model - D3DXMATRIX m_mModelRot; // Rotation matrix of model - D3DXMATRIX m_mWorld; // World matrix of model - - int m_nRotateModelButtonMask; - int m_nZoomButtonMask; - int m_nRotateCameraButtonMask; - - bool m_bAttachCameraToModel; - bool m_bLimitPitch; - float m_fRadius; // Distance from the camera to model - float m_fDefaultRadius; // Distance from the camera to model - float m_fMinRadius; // Min radius - float m_fMaxRadius; // Max radius - bool m_bDragSinceLastUpdate; // True if mouse drag has happened since last time FrameMove is called. - - D3DXMATRIX m_mCameraRotLast; - -}; - -//-------------------------------------------------------------------------------------- -// Manages the mesh, direction, mouse events of a directional arrow that -// rotates around a radius controlled by an arcball -//-------------------------------------------------------------------------------------- -class CDXUTDirectionWidget -{ -public: - CDXUTDirectionWidget(); - - static HRESULT WINAPI StaticOnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice ); - HRESULT OnD3D9ResetDevice( const D3DSURFACE_DESC* pBackBufferSurfaceDesc ); - HRESULT OnRender9( D3DXCOLOR color, const D3DXMATRIX* pmView, const D3DXMATRIX* pmProj, - const D3DXVECTOR3* pEyePt ); - LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - static void WINAPI StaticOnD3D9LostDevice(); - static void WINAPI StaticOnD3D9DestroyDevice(); - - static HRESULT WINAPI StaticOnD3D11CreateDevice( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext ); - HRESULT OnRender11( D3DXCOLOR color, const D3DXMATRIX* pmView, const D3DXMATRIX* pmProj, - const D3DXVECTOR3* pEyePt ); - static void WINAPI StaticOnD3D11DestroyDevice(); - - D3DXVECTOR3 GetLightDirection() - { - return m_vCurrentDir; - }; - void SetLightDirection( D3DXVECTOR3 vDir ) - { - m_vDefaultDir = m_vCurrentDir = vDir; - }; - void SetButtonMask( int nRotate = MOUSE_RIGHT_BUTTON ) - { - m_nRotateMask = nRotate; - } - - float GetRadius() - { - return m_fRadius; - }; - void SetRadius( float fRadius ) - { - m_fRadius = fRadius; - }; - - bool IsBeingDragged() - { - return m_ArcBall.IsBeingDragged(); - }; - -protected: - HRESULT UpdateLightDir(); - - // D3D9 objects - static IDirect3DDevice9* s_pd3d9Device; - static ID3DXEffect* s_pD3D9Effect; - static ID3DXMesh* s_pD3D9Mesh; - static D3DXHANDLE s_hRenderWith1LightNoTexture; - static D3DXHANDLE s_hMaterialDiffuseColor; - static D3DXHANDLE s_hLightDir; - static D3DXHANDLE s_hWorldViewProjection; - static D3DXHANDLE s_hWorld; - - // D3D10 objects - //static ID3D10Device* s_pd3d10Device; - //static ID3D10Effect* s_pD3D10Effect; - //TODO: add some sort of d3d10 mesh object here - //static ID3D10InputLayout* s_pVertexLayout; - //static ID3D10EffectTechnique* s_pRenderTech; - //static ID3D10EffectVectorVariable* g_pMaterialDiffuseColor; - //static ID3D10EffectVectorVariable* g_pLightDir; - //static ID3D10EffectMatrixVariable* g_pmWorld; - //static ID3D10EffectMatrixVariable* g_pmWorldViewProjection; - - D3DXMATRIXA16 m_mRot; - D3DXMATRIXA16 m_mRotSnapshot; - float m_fRadius; - int m_nRotateMask; - CD3DArcBall m_ArcBall; - D3DXVECTOR3 m_vDefaultDir; - D3DXVECTOR3 m_vCurrentDir; - D3DXMATRIX m_mView; -}; - - - -#endif diff --git a/sample/d3d11/common/DXUTgui.cpp b/sample/d3d11/common/DXUTgui.cpp deleted file mode 100644 index 65d7c08..0000000 --- a/sample/d3d11/common/DXUTgui.cpp +++ /dev/null @@ -1,7241 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTgui.cpp -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#include "DXUTgui.h" -#include "DXUTsettingsDlg.h" -#include "DXUTres.h" - -#include "SDKMisc.h" - -#undef min // use __min instead -#undef max // use __max instead - -#ifndef WM_XBUTTONDOWN -#define WM_XBUTTONDOWN 0x020B // (not always defined) -#endif -#ifndef WM_XBUTTONUP -#define WM_XBUTTONUP 0x020C // (not always defined) -#endif -#ifndef WM_MOUSEWHEEL -#define WM_MOUSEWHEEL 0x020A // (not always defined) -#endif -#ifndef WHEEL_DELTA -#define WHEEL_DELTA 120 // (not always defined) -#endif - -// Minimum scroll bar thumb size -#define SCROLLBAR_MINTHUMBSIZE 8 - -// Delay and repeat period when clicking on the scroll bar arrows -#define SCROLLBAR_ARROWCLICK_DELAY 0.33 -#define SCROLLBAR_ARROWCLICK_REPEAT 0.05 - -#define DXUT_NEAR_BUTTON_DEPTH 0.6f -#define DXUT_FAR_BUTTON_DEPTH 0.8f - -#define DXUT_MAX_GUI_SPRITES 500 - -D3DCOLORVALUE D3DCOLOR_TO_D3DCOLORVALUE( D3DCOLOR c ) -{ - D3DCOLORVALUE cv = - { - ( ( c >> 16 ) & 0xFF ) / 255.0f, - ( ( c >> 8 ) & 0xFF ) / 255.0f, - ( c & 0xFF ) / 255.0f, - ( ( c >> 24 ) & 0xFF ) / 255.0f - }; - return cv; -} - -#define UNISCRIBE_DLLNAME L"usp10.dll" - -#define GETPROCADDRESS( Module, APIName, Temp ) \ - Temp = GetProcAddress( Module, #APIName ); \ - if( Temp ) \ - *(FARPROC*)&_##APIName = Temp - -#define PLACEHOLDERPROC( APIName ) \ - _##APIName = Dummy_##APIName - -#define IMM32_DLLNAME L"imm32.dll" -#define VER_DLLNAME L"version.dll" - -CHAR g_strUIEffectFile[] = \ - "Texture2D g_Texture;"\ - ""\ - "SamplerState Sampler"\ - "{"\ - " Filter = MIN_MAG_MIP_LINEAR;"\ - " AddressU = Wrap;"\ - " AddressV = Wrap;"\ - "};"\ - ""\ - "BlendState UIBlend"\ - "{"\ - " AlphaToCoverageEnable = FALSE;"\ - " BlendEnable[0] = TRUE;"\ - " SrcBlend = SRC_ALPHA;"\ - " DestBlend = INV_SRC_ALPHA;"\ - " BlendOp = ADD;"\ - " SrcBlendAlpha = ONE;"\ - " DestBlendAlpha = ZERO;"\ - " BlendOpAlpha = ADD;"\ - " RenderTargetWriteMask[0] = 0x0F;"\ - "};"\ - ""\ - "BlendState NoBlending"\ - "{"\ - " BlendEnable[0] = FALSE;"\ - " RenderTargetWriteMask[0] = 0x0F;"\ - "};"\ - ""\ - "DepthStencilState DisableDepth"\ - "{"\ - " DepthEnable = false;"\ - "};"\ - "DepthStencilState EnableDepth"\ - "{"\ - " DepthEnable = true;"\ - "};"\ - "struct VS_OUTPUT"\ - "{"\ - " float4 Pos : POSITION;"\ - " float4 Dif : COLOR;"\ - " float2 Tex : TEXCOORD;"\ - "};"\ - ""\ - "VS_OUTPUT VS( float3 vPos : POSITION,"\ - " float4 Dif : COLOR,"\ - " float2 vTexCoord0 : TEXCOORD )"\ - "{"\ - " VS_OUTPUT Output;"\ - ""\ - " Output.Pos = float4( vPos, 1.0f );"\ - " Output.Dif = Dif;"\ - " Output.Tex = vTexCoord0;"\ - ""\ - " return Output;"\ - "}"\ - ""\ - "float4 PS( VS_OUTPUT In ) : SV_Target"\ - "{"\ - " return g_Texture.Sample( Sampler, In.Tex ) * In.Dif;"\ - "}"\ - ""\ - "float4 PSUntex( VS_OUTPUT In ) : SV_Target"\ - "{"\ - " return In.Dif;"\ - "}"\ - ""\ - "technique10 RenderUI"\ - "{"\ - " pass P0"\ - " {"\ - " SetVertexShader( CompileShader( vs_4_0, VS() ) );"\ - " SetGeometryShader( NULL );"\ - " SetPixelShader( CompileShader( ps_4_0, PS() ) );"\ - " SetDepthStencilState( DisableDepth, 0 );"\ - " SetBlendState( UIBlend, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );"\ - " }"\ - "}"\ - "technique10 RenderUIUntex"\ - "{"\ - " pass P0"\ - " {"\ - " SetVertexShader( CompileShader( vs_4_0, VS() ) );"\ - " SetGeometryShader( NULL );"\ - " SetPixelShader( CompileShader( ps_4_0, PSUntex() ) );"\ - " SetDepthStencilState( DisableDepth, 0 );"\ - " SetBlendState( UIBlend, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );"\ - " }"\ - "}"\ - "technique10 RestoreState"\ - "{"\ - " pass P0"\ - " {"\ - " SetDepthStencilState( EnableDepth, 0 );"\ - " SetBlendState( NoBlending, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );"\ - " }"\ - "}"; -const UINT g_uUIEffectFileSize = sizeof( g_strUIEffectFile ); - - -// DXUT_MAX_EDITBOXLENGTH is the maximum string length allowed in edit boxes, -// including the NULL terminator. -// -// Uniscribe does not support strings having bigger-than-16-bits length. -// This means that the string must be less than 65536 characters long, -// including the NULL terminator. -#define DXUT_MAX_EDITBOXLENGTH 0xFFFF - - -double CDXUTDialog::s_fTimeRefresh = 0.0f; -CDXUTControl* CDXUTDialog::s_pControlFocus = NULL; // The control which has focus -CDXUTControl* CDXUTDialog::s_pControlPressed = NULL; // The control currently pressed - - -struct DXUT_SCREEN_VERTEX -{ - float x, y, z, h; - D3DCOLOR color; - float tu, tv; - - static DWORD FVF; -}; -DWORD DXUT_SCREEN_VERTEX::FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1; - - -struct DXUT_SCREEN_VERTEX_UNTEX -{ - float x, y, z, h; - D3DCOLOR color; - - static DWORD FVF; -}; -DWORD DXUT_SCREEN_VERTEX_UNTEX::FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE; - - -struct DXUT_SCREEN_VERTEX_10 -{ - float x, y, z; - D3DCOLORVALUE color; - float tu, tv; -}; - - -inline int RectWidth( RECT& rc ) -{ - return ( ( rc ).right - ( rc ).left ); -} -inline int RectHeight( RECT& rc ) -{ - return ( ( rc ).bottom - ( rc ).top ); -} - - -HRESULT InitFont11( ID3D11Device* pd3d11Device, ID3D11InputLayout* pInputLayout ); -void EndFont11(); - -//-------------------------------------------------------------------------------------- -// CDXUTDialog class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTDialog::CDXUTDialog() -{ - m_x = 0; - m_y = 0; - m_width = 0; - m_height = 0; - - m_pManager = NULL; - m_bVisible = true; - m_bCaption = false; - m_bMinimized = false; - m_bDrag = false; - m_wszCaption[0] = L'\0'; - m_nCaptionHeight = 18; - - m_colorTopLeft = 0; - m_colorTopRight = 0; - m_colorBottomLeft = 0; - m_colorBottomRight = 0; - - m_pCallbackEvent = NULL; - m_pCallbackEventUserContext = NULL; - - m_fTimeLastRefresh = 0; - - m_pControlMouseOver = NULL; - - m_pNextDialog = this; - m_pPrevDialog = this; - - m_nDefaultControlID = 0xffff; - m_bNonUserEvents = false; - m_bKeyboardInput = false; - m_bMouseInput = true; -} - - -//-------------------------------------------------------------------------------------- -CDXUTDialog::~CDXUTDialog() -{ - int i = 0; - - RemoveAllControls(); - - m_Fonts.RemoveAll(); - m_Textures.RemoveAll(); - - for( i = 0; i < m_DefaultElements.GetSize(); i++ ) - { - DXUTElementHolder* pElementHolder = m_DefaultElements.GetAt( i ); - SAFE_DELETE( pElementHolder ); - } - - m_DefaultElements.RemoveAll(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog ) -{ - m_pManager = pManager; - if( bRegisterDialog ) - pManager->RegisterDialog( this ); - - SetTexture( 0, MAKEINTRESOURCE( 0xFFFF ), ( HMODULE )0xFFFF ); - InitDefaultElements(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, LPCWSTR pszControlTextureFilename ) -{ - m_pManager = pManager; - if( bRegisterDialog ) - pManager->RegisterDialog( this ); - SetTexture( 0, pszControlTextureFilename ); - InitDefaultElements(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, - LPCWSTR szControlTextureResourceName, HMODULE hControlTextureResourceModule ) -{ - m_pManager = pManager; - if( bRegisterDialog ) - pManager->RegisterDialog( this ); - - SetTexture( 0, szControlTextureResourceName, hControlTextureResourceModule ); - InitDefaultElements(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::SetCallback( PCALLBACKDXUTGUIEVENT pCallback, void* pUserContext ) -{ - // If this assert triggers, you need to call CDXUTDialog::Init() first. This change - // was made so that the DXUT's GUI could become seperate and optional from DXUT's core. The - // creation and interfacing with CDXUTDialogResourceManager is now the responsibility - // of the application if it wishes to use DXUT's GUI. - assert( m_pManager != NULL && L"To fix call CDXUTDialog::Init() first. See comments for details." ); - - m_pCallbackEvent = pCallback; - m_pCallbackEventUserContext = pUserContext; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::RemoveControl( int ID ) -{ - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - if( pControl->GetID() == ID ) - { - // Clean focus first - ClearFocus(); - - // Clear references to this control - if( s_pControlFocus == pControl ) - s_pControlFocus = NULL; - if( s_pControlPressed == pControl ) - s_pControlPressed = NULL; - if( m_pControlMouseOver == pControl ) - m_pControlMouseOver = NULL; - - SAFE_DELETE( pControl ); - m_Controls.Remove( i ); - - return; - } - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::RemoveAllControls() -{ - if( s_pControlFocus && s_pControlFocus->m_pDialog == this ) - s_pControlFocus = NULL; - if( s_pControlPressed && s_pControlPressed->m_pDialog == this ) - s_pControlPressed = NULL; - m_pControlMouseOver = NULL; - - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - SAFE_DELETE( pControl ); - } - - m_Controls.RemoveAll(); -} - - -//-------------------------------------------------------------------------------------- -CDXUTDialogResourceManager::CDXUTDialogResourceManager() -{ - // Begin D3D9-specific - m_pd3d9Device = NULL; - m_pStateBlock = NULL; - m_pSprite = NULL; - - // Begin D3D11-specific - // Shaders - m_pVSRenderUI11 = NULL; - m_pPSRenderUI11 = NULL; - m_pPSRenderUIUntex11 = NULL; - - // States - m_pDepthStencilStateUI11 = NULL; - m_pRasterizerStateUI11 = NULL; - m_pBlendStateUI11 = NULL; - m_pSamplerStateUI11 = NULL; - m_pDepthStencilStateStored11 = NULL; - m_pRasterizerStateStored11 = NULL; - m_pBlendStateStored11 = NULL; - m_pSamplerStateStored11 = NULL; - - m_pInputLayout11 = NULL; - m_pVBScreenQuad11 = NULL; - m_pSpriteBuffer11 = NULL; -} - - -//-------------------------------------------------------------------------------------- -CDXUTDialogResourceManager::~CDXUTDialogResourceManager() -{ - int i; - for( i = 0; i < m_FontCache.GetSize(); i++ ) - { - DXUTFontNode* pFontNode = m_FontCache.GetAt( i ); - SAFE_DELETE( pFontNode ); - } - m_FontCache.RemoveAll(); - - for( i = 0; i < m_TextureCache.GetSize(); i++ ) - { - DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( i ); - SAFE_DELETE( pTextureNode ); - } - m_TextureCache.RemoveAll(); - - CUniBuffer::Uninitialize(); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialogResourceManager::OnD3D9CreateDevice( LPDIRECT3DDEVICE9 pd3dDevice ) -{ - HRESULT hr = S_OK; - int i = 0; - - m_pd3d9Device = pd3dDevice; - - for( i = 0; i < m_FontCache.GetSize(); i++ ) - { - hr = CreateFont9( i ); - if( FAILED( hr ) ) - return hr; - } - - for( i = 0; i < m_TextureCache.GetSize(); i++ ) - { - hr = CreateTexture9( i ); - if( FAILED( hr ) ) - return hr; - } - - hr = D3DXCreateSprite( pd3dDevice, &m_pSprite ); - if( FAILED( hr ) ) - return DXUT_ERR( L"D3DXCreateSprite", hr ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialogResourceManager::OnD3D9ResetDevice() -{ - HRESULT hr = S_OK; - - for( int i = 0; i < m_FontCache.GetSize(); i++ ) - { - DXUTFontNode* pFontNode = m_FontCache.GetAt( i ); - - if( pFontNode->pFont9 ) - pFontNode->pFont9->OnResetDevice(); - } - - if( m_pSprite ) - m_pSprite->OnResetDevice(); - - V_RETURN( m_pd3d9Device->CreateStateBlock( D3DSBT_ALL, &m_pStateBlock ) ); - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -bool CDXUTDialogResourceManager::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::OnD3D9LostDevice() -{ - for( int i = 0; i < m_FontCache.GetSize(); i++ ) - { - DXUTFontNode* pFontNode = m_FontCache.GetAt( i ); - - if( pFontNode->pFont9 ) - pFontNode->pFont9->OnLostDevice(); - } - - if( m_pSprite ) - m_pSprite->OnLostDevice(); - - SAFE_RELEASE( m_pStateBlock ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::OnD3D9DestroyDevice() -{ - int i = 0; - - m_pd3d9Device = NULL; - - // Release the resources but don't clear the cache, as these will need to be - // recreated if the device is recreated - for( i = 0; i < m_FontCache.GetSize(); i++ ) - { - DXUTFontNode* pFontNode = m_FontCache.GetAt( i ); - SAFE_RELEASE( pFontNode->pFont9 ); - } - - for( i = 0; i < m_TextureCache.GetSize(); i++ ) - { - DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( i ); - SAFE_RELEASE( pTextureNode->pTexture9 ); - } - - SAFE_RELEASE( m_pSprite ); -} - - - -HRESULT CDXUTDialogResourceManager::OnD3D11CreateDevice( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext ) -{ - m_pd3d11Device = pd3dDevice; - m_pd3d11DeviceContext = pd3d11DeviceContext; - - HRESULT hr = S_OK; - - // Compile Shaders - ID3DBlob* pVSBlob = NULL; - ID3DBlob* pPSBlob = NULL; - ID3DBlob* pPSUntexBlob = NULL; - V_RETURN( D3DCompile( g_strUIEffectFile, g_uUIEffectFileSize, "none", NULL, NULL, "VS", "vs_4_0_level_9_1", - D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY, 0, &pVSBlob, NULL ) ); - V_RETURN( D3DCompile( g_strUIEffectFile, g_uUIEffectFileSize, "none", NULL, NULL, "PS", "ps_4_0_level_9_1", - D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY, 0, &pPSBlob, NULL ) ); - V_RETURN( D3DCompile( g_strUIEffectFile, g_uUIEffectFileSize, "none", NULL, NULL, "PSUntex", "ps_4_0_level_9_1", - D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY, 0, &pPSUntexBlob, NULL ) ); -//D3D10_SHADER_ENABLE_STRICTNESS - - // Create Shaders - V_RETURN( pd3dDevice->CreateVertexShader( pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), NULL, &m_pVSRenderUI11 ) ); - V_RETURN( pd3dDevice->CreatePixelShader( pPSBlob->GetBufferPointer(), pPSBlob->GetBufferSize(), NULL, &m_pPSRenderUI11 ) ); - V_RETURN( pd3dDevice->CreatePixelShader( pPSUntexBlob->GetBufferPointer(), pPSUntexBlob->GetBufferSize(), NULL, &m_pPSRenderUIUntex11 ) ); - - // States - D3D11_DEPTH_STENCIL_DESC DSDesc; - ZeroMemory( &DSDesc, sizeof( D3D11_DEPTH_STENCIL_DESC ) ); - DSDesc.DepthEnable = FALSE; - DSDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL; - DSDesc.DepthFunc = D3D11_COMPARISON_LESS; - DSDesc.StencilEnable = FALSE; - V_RETURN( pd3dDevice->CreateDepthStencilState( &DSDesc, &m_pDepthStencilStateUI11 ) ); - - D3D11_RASTERIZER_DESC RSDesc; - RSDesc.AntialiasedLineEnable = FALSE; - RSDesc.CullMode = D3D11_CULL_BACK; - RSDesc.DepthBias = 0; - RSDesc.DepthBiasClamp = 0.0f; - RSDesc.DepthClipEnable = TRUE; - RSDesc.FillMode = D3D11_FILL_SOLID; - RSDesc.FrontCounterClockwise = FALSE; - RSDesc.MultisampleEnable = TRUE; - RSDesc.ScissorEnable = FALSE; - RSDesc.SlopeScaledDepthBias = 0.0f; - V_RETURN( pd3dDevice->CreateRasterizerState( &RSDesc, &m_pRasterizerStateUI11 ) ); - - D3D11_BLEND_DESC BSDesc; - ZeroMemory( &BSDesc, sizeof( D3D11_BLEND_DESC ) ); - - BSDesc.RenderTarget[0].BlendEnable = TRUE; - BSDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; - BSDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; - BSDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; - BSDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; - BSDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO; - BSDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; - BSDesc.RenderTarget[0].RenderTargetWriteMask = 0x0F; - - V_RETURN( pd3dDevice->CreateBlendState( &BSDesc, &m_pBlendStateUI11 ) ); - - D3D11_SAMPLER_DESC SSDesc; - ZeroMemory( &SSDesc, sizeof( D3D11_SAMPLER_DESC ) ); - SSDesc.Filter = D3D11_FILTER_ANISOTROPIC ; - SSDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; - SSDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; - SSDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; - SSDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; - SSDesc.MaxAnisotropy = 16; - SSDesc.MinLOD = 0; - SSDesc.MaxLOD = D3D11_FLOAT32_MAX; - if ( pd3dDevice->GetFeatureLevel() < D3D_FEATURE_LEVEL_9_3 ) { - SSDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; - SSDesc.MaxAnisotropy = 0; - } - V_RETURN( pd3dDevice->CreateSamplerState( &SSDesc, &m_pSamplerStateUI11 ) ); - - // Create the font and texture objects in the cache arrays. - int i = 0; - for( i = 0; i < m_FontCache.GetSize(); i++ ) - { - hr = CreateFont11( i ); - if( FAILED( hr ) ) - return hr; - } - - for( i = 0; i < m_TextureCache.GetSize(); i++ ) - { - hr = CreateTexture11( i ); - if( FAILED( hr ) ) - return hr; - } - - // Create input layout - const D3D11_INPUT_ELEMENT_DESC layout[] = - { - { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 28, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - }; - - V_RETURN( pd3dDevice->CreateInputLayout( layout, ARRAYSIZE( layout ), pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), &m_pInputLayout11 ) ); - - // Release the blobs - SAFE_RELEASE( pVSBlob ); - SAFE_RELEASE( pPSBlob ); - SAFE_RELEASE( pPSUntexBlob ); - - // Create a vertex buffer quad for rendering later - D3D11_BUFFER_DESC BufDesc; - BufDesc.ByteWidth = sizeof( DXUT_SCREEN_VERTEX_10 ) * 4; - BufDesc.Usage = D3D11_USAGE_DYNAMIC; - BufDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; - BufDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; - BufDesc.MiscFlags = 0; - V_RETURN( pd3dDevice->CreateBuffer( &BufDesc, NULL, &m_pVBScreenQuad11 ) ); - - // Init the D3D11 font - InitFont11( pd3dDevice, m_pInputLayout11 ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialogResourceManager::OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice, - const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc ) -{ - HRESULT hr = S_OK; - - m_nBackBufferWidth = pBackBufferSurfaceDesc->Width; - m_nBackBufferHeight = pBackBufferSurfaceDesc->Height; - - return hr; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::OnD3D11ReleasingSwapChain() -{ -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::OnD3D11DestroyDevice() -{ - int i; - - // Release the resources but don't clear the cache, as these will need to be - // recreated if the device is recreated - - for( i = 0; i < m_TextureCache.GetSize(); i++ ) - { - DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( i ); - SAFE_RELEASE( pTextureNode->pTexResView11 ); - SAFE_RELEASE( pTextureNode->pTexture11 ); - } - - // D3D11 - SAFE_RELEASE( m_pVBScreenQuad11 ); - SAFE_RELEASE( m_pSpriteBuffer11 ); - m_SpriteBufferBytes11 = 0; - SAFE_RELEASE( m_pInputLayout11 ); - - // Shaders - SAFE_RELEASE( m_pVSRenderUI11 ); - SAFE_RELEASE( m_pPSRenderUI11 ); - SAFE_RELEASE( m_pPSRenderUIUntex11 ); - - // States - SAFE_RELEASE( m_pDepthStencilStateUI11 ); - SAFE_RELEASE( m_pRasterizerStateUI11 ); - SAFE_RELEASE( m_pBlendStateUI11 ); - SAFE_RELEASE( m_pSamplerStateUI11 ); - - SAFE_RELEASE( m_pDepthStencilStateStored11 ); - SAFE_RELEASE( m_pRasterizerStateStored11 ); - SAFE_RELEASE( m_pBlendStateStored11 ); - SAFE_RELEASE( m_pSamplerStateStored11 ); - - EndFont11(); -} - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::StoreD3D11State( ID3D11DeviceContext* pd3dImmediateContext ) -{ - pd3dImmediateContext->OMGetDepthStencilState( &m_pDepthStencilStateStored11, &m_StencilRefStored11 ); - pd3dImmediateContext->RSGetState( &m_pRasterizerStateStored11 ); - pd3dImmediateContext->OMGetBlendState( &m_pBlendStateStored11, m_BlendFactorStored11, &m_SampleMaskStored11 ); - pd3dImmediateContext->PSGetSamplers( 0, 1, &m_pSamplerStateStored11 ); -} - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::RestoreD3D11State( ID3D11DeviceContext* pd3dImmediateContext ) -{ - pd3dImmediateContext->OMSetDepthStencilState( m_pDepthStencilStateStored11, m_StencilRefStored11 ); - pd3dImmediateContext->RSSetState( m_pRasterizerStateStored11 ); - pd3dImmediateContext->OMSetBlendState( m_pBlendStateStored11, m_BlendFactorStored11, m_SampleMaskStored11 ); - pd3dImmediateContext->PSSetSamplers( 0, 1, &m_pSamplerStateStored11 ); - - SAFE_RELEASE( m_pDepthStencilStateStored11 ); - SAFE_RELEASE( m_pRasterizerStateStored11 ); - SAFE_RELEASE( m_pBlendStateStored11 ); - SAFE_RELEASE( m_pSamplerStateStored11 ); -} - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::ApplyRenderUI11( ID3D11DeviceContext* pd3dImmediateContext ) -{ - // Shaders - pd3dImmediateContext->VSSetShader( m_pVSRenderUI11, NULL, 0 ); - pd3dImmediateContext->HSSetShader( NULL, NULL, 0 ); - pd3dImmediateContext->DSSetShader( NULL, NULL, 0 ); - pd3dImmediateContext->GSSetShader( NULL, NULL, 0 ); - pd3dImmediateContext->PSSetShader( m_pPSRenderUI11, NULL, 0 ); - - // States - pd3dImmediateContext->OMSetDepthStencilState( m_pDepthStencilStateUI11, 0 ); - pd3dImmediateContext->RSSetState( m_pRasterizerStateUI11 ); - float BlendFactor[4] = { 0, 0, 0, 0 }; - pd3dImmediateContext->OMSetBlendState( m_pBlendStateUI11, BlendFactor, 0xFFFFFFFF ); - pd3dImmediateContext->PSSetSamplers( 0, 1, &m_pSamplerStateUI11 ); -} - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::ApplyRenderUIUntex11( ID3D11DeviceContext* pd3dImmediateContext ) -{ - // Shaders - pd3dImmediateContext->VSSetShader( m_pVSRenderUI11, NULL, 0 ); - pd3dImmediateContext->HSSetShader( NULL, NULL, 0 ); - pd3dImmediateContext->DSSetShader( NULL, NULL, 0 ); - pd3dImmediateContext->GSSetShader( NULL, NULL, 0 ); - pd3dImmediateContext->PSSetShader( m_pPSRenderUIUntex11, NULL, 0 ); - - // States - pd3dImmediateContext->OMSetDepthStencilState( m_pDepthStencilStateUI11, 0 ); - pd3dImmediateContext->RSSetState( m_pRasterizerStateUI11 ); - float BlendFactor[4] = { 0, 0, 0, 0 }; - pd3dImmediateContext->OMSetBlendState( m_pBlendStateUI11, BlendFactor, 0xFFFFFFFF ); - pd3dImmediateContext->PSSetSamplers( 0, 1, &m_pSamplerStateUI11 ); -} - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::BeginSprites11( ) -{ - m_SpriteVertices.Reset(); -} - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::EndSprites11( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext ) -{ - - // ensure our buffer size can hold our sprites - UINT SpriteDataBytes = m_SpriteVertices.GetSize() * sizeof( DXUTSpriteVertex ); - if( m_SpriteBufferBytes11 < SpriteDataBytes ) - { - SAFE_RELEASE( m_pSpriteBuffer11 ); - m_SpriteBufferBytes11 = SpriteDataBytes; - - D3D11_BUFFER_DESC BufferDesc; - BufferDesc.ByteWidth = m_SpriteBufferBytes11; - BufferDesc.Usage = D3D11_USAGE_DYNAMIC; - BufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; - BufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; - BufferDesc.MiscFlags = 0; - - pd3dDevice->CreateBuffer( &BufferDesc, NULL, &m_pSpriteBuffer11 ); - } - - // Copy the sprites over - D3D11_BOX destRegion; - destRegion.left = 0; - destRegion.right = SpriteDataBytes; - destRegion.top = 0; - destRegion.bottom = 1; - destRegion.front = 0; - destRegion.back = 1; - D3D11_MAPPED_SUBRESOURCE MappedResource; - if ( S_OK == pd3dImmediateContext->Map( m_pSpriteBuffer11, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ) ) { - CopyMemory( MappedResource.pData, (void*)m_SpriteVertices.GetData(), SpriteDataBytes ); - pd3dImmediateContext->Unmap(m_pSpriteBuffer11, 0); - } - - // Draw - UINT Stride = sizeof( DXUTSpriteVertex ); - UINT Offset = 0; - pd3dImmediateContext->IASetVertexBuffers( 0, 1, &m_pSpriteBuffer11, &Stride, &Offset ); - pd3dImmediateContext->IASetInputLayout( m_pInputLayout11 ); - pd3dImmediateContext->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST ); - pd3dImmediateContext->Draw( m_SpriteVertices.GetSize(), 0 ); - - m_SpriteVertices.Reset(); -} - -//-------------------------------------------------------------------------------------- -bool CDXUTDialogResourceManager::RegisterDialog( CDXUTDialog* pDialog ) -{ - // Check that the dialog isn't already registered. - for( int i = 0; i < m_Dialogs.GetSize(); ++i ) - if( m_Dialogs.GetAt( i ) == pDialog ) - return true; - - // Add to the list. - if( FAILED( m_Dialogs.Add( pDialog ) ) ) - return false; - - // Set up next and prev pointers. - if( m_Dialogs.GetSize() > 1 ) - m_Dialogs[m_Dialogs.GetSize() - 2]->SetNextDialog( pDialog ); - m_Dialogs[m_Dialogs.GetSize() - 1]->SetNextDialog( m_Dialogs[0] ); - - return true; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::UnregisterDialog( CDXUTDialog* pDialog ) -{ - // Search for the dialog in the list. - for( int i = 0; i < m_Dialogs.GetSize(); ++i ) - if( m_Dialogs.GetAt( i ) == pDialog ) - { - m_Dialogs.Remove( i ); - if( m_Dialogs.GetSize() > 0 ) - { - int l, r; - - if( 0 == i ) - l = m_Dialogs.GetSize() - 1; - else - l = i - 1; - - if( m_Dialogs.GetSize() == i ) - r = 0; - else - r = i; - - m_Dialogs[l]->SetNextDialog( m_Dialogs[r] ); - } - return; - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialogResourceManager::EnableKeyboardInputForAllDialogs() -{ - // Enable keyboard input for all registered dialogs - for( int i = 0; i < m_Dialogs.GetSize(); ++i ) - m_Dialogs[i]->EnableKeyboardInput( true ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::Refresh() -{ - if( s_pControlFocus ) - s_pControlFocus->OnFocusOut(); - - if( m_pControlMouseOver ) - m_pControlMouseOver->OnMouseLeave(); - - s_pControlFocus = NULL; - s_pControlPressed = NULL; - m_pControlMouseOver = NULL; - - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - pControl->Refresh(); - } - - if( m_bKeyboardInput ) - FocusDefaultControl(); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::OnRender( float fElapsedTime ) -{ - if( m_pManager->GetD3D9Device() ) - return OnRender9( fElapsedTime ); - else - return OnRender11( fElapsedTime ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::OnRender9( float fElapsedTime ) -{ - // If this assert triggers, you need to call CDXUTDialogResourceManager::On*Device() from inside - // the application's device callbacks. See the SDK samples for an example of how to do this. - assert( m_pManager->GetD3D9Device() && m_pManager->m_pStateBlock && - L"To fix hook up CDXUTDialogResourceManager to device callbacks. See comments for details" ); - - // See if the dialog needs to be refreshed - if( m_fTimeLastRefresh < s_fTimeRefresh ) - { - m_fTimeLastRefresh = DXUTGetTime(); - Refresh(); - } - - // For invisible dialog, out now. - if( !m_bVisible || - ( m_bMinimized && !m_bCaption ) ) - return S_OK; - - IDirect3DDevice9* pd3dDevice = m_pManager->GetD3D9Device(); - - // Set up a state block here and restore it when finished drawing all the controls - m_pManager->m_pStateBlock->Capture(); - - //pd3dDevice->SetSamplerState(0, D3DSAMP_SRGBTEXTURE, TRUE); - //pd3dDevice->SetRenderState( D3DRS_SRGBWRITEENABLE, TRUE ); - - pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE ); - pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA ); - pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA ); - pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, FALSE ); - pd3dDevice->SetRenderState( D3DRS_SEPARATEALPHABLENDENABLE, FALSE ); - pd3dDevice->SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD ); - pd3dDevice->SetRenderState( D3DRS_COLORWRITEENABLE, D3DCOLORWRITEENABLE_ALPHA | D3DCOLORWRITEENABLE_BLUE | - D3DCOLORWRITEENABLE_GREEN | D3DCOLORWRITEENABLE_RED ); - pd3dDevice->SetRenderState( D3DRS_SHADEMODE, D3DSHADE_GOURAUD ); - pd3dDevice->SetRenderState( D3DRS_FOGENABLE, FALSE ); - pd3dDevice->SetRenderState( D3DRS_ZWRITEENABLE, FALSE ); - pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID ); - pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW ); - - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG2 ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_RESULTARG, D3DTA_CURRENT ); - pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE ); - pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE ); - - BOOL bBackgroundIsVisible = ( m_colorTopLeft | m_colorTopRight | m_colorBottomRight | m_colorBottomLeft ) & - 0xff000000; - if( !m_bMinimized && bBackgroundIsVisible ) - { - DXUT_SCREEN_VERTEX_UNTEX vertices[4] = - { - ( float )m_x, ( float )m_y, 0.5f, 1.0f, m_colorTopLeft, - ( float )m_x + m_width, ( float )m_y, 0.5f, 1.0f, m_colorTopRight, - ( float )m_x + m_width, ( float )m_y + m_height, 0.5f, 1.0f, m_colorBottomRight, - ( float )m_x, ( float )m_y + m_height, 0.5f, 1.0f, m_colorBottomLeft, - }; - - pd3dDevice->SetVertexShader( NULL ); - pd3dDevice->SetPixelShader( NULL ); - - pd3dDevice->SetRenderState( D3DRS_ZENABLE, FALSE ); - - pd3dDevice->SetFVF( DXUT_SCREEN_VERTEX_UNTEX::FVF ); - pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLEFAN, 2, vertices, sizeof( DXUT_SCREEN_VERTEX_UNTEX ) ); - } - - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); - - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE ); - - pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); - - DXUTTextureNode* pTextureNode = GetTexture( 0 ); - pd3dDevice->SetTexture( 0, pTextureNode->pTexture9 ); - - m_pManager->m_pSprite->Begin( D3DXSPRITE_DONOTSAVESTATE ); - - // Render the caption if it's enabled. - if( m_bCaption ) - { - // DrawSprite will offset the rect down by - // m_nCaptionHeight, so adjust the rect higher - // here to negate the effect. - RECT rc = - { - 0, -m_nCaptionHeight, m_width, 0 - }; - DrawSprite9( &m_CapElement, &rc ); - rc.left += 5; // Make a left margin - WCHAR wszOutput[256]; - wcscpy_s( wszOutput, 256, m_wszCaption ); - if( m_bMinimized ) - wcscat_s( wszOutput, 256, L" (Minimized)" ); - DrawText9( wszOutput, &m_CapElement, &rc, true ); - } - - // If the dialog is minimized, skip rendering - // its controls. - if( !m_bMinimized ) - { - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - - // Focused control is drawn last - if( pControl == s_pControlFocus ) - continue; - - pControl->Render( fElapsedTime ); - } - - if( s_pControlFocus != NULL && s_pControlFocus->m_pDialog == this ) - s_pControlFocus->Render( fElapsedTime ); - } - - m_pManager->m_pSprite->End(); - - m_pManager->m_pStateBlock->Apply(); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::OnRender11( float fElapsedTime ) -{ - // If this assert triggers, you need to call CDXUTDialogResourceManager::On*Device() from inside - // the application's device callbacks. See the SDK samples for an example of how to do this. - assert( m_pManager->GetD3D11Device() && - L"To fix hook up CDXUTDialogResourceManager to device callbacks. See comments for details" ); - - // See if the dialog needs to be refreshed - if( m_fTimeLastRefresh < s_fTimeRefresh ) - { - m_fTimeLastRefresh = DXUTGetTime(); - Refresh(); - } - - // For invisible dialog, out now. - if( !m_bVisible || - ( m_bMinimized && !m_bCaption ) ) - return S_OK; - - ID3D11Device* pd3dDevice = m_pManager->GetD3D11Device(); - ID3D11DeviceContext* pd3dDeviceContext = m_pManager->GetD3D11DeviceContext(); - - // Set up a state block here and restore it when finished drawing all the controls - m_pManager->StoreD3D11State( pd3dDeviceContext ); - - BOOL bBackgroundIsVisible = ( m_colorTopLeft | m_colorTopRight | m_colorBottomRight | m_colorBottomLeft ) & - 0xff000000; - if( !m_bMinimized && bBackgroundIsVisible ) - { - // Convert the draw rectangle from screen coordinates to clip space coordinates. - float Left, Right, Top, Bottom; - Left = m_x * 2.0f / m_pManager->m_nBackBufferWidth - 1.0f; - Right = ( m_x + m_width ) * 2.0f / m_pManager->m_nBackBufferWidth - 1.0f; - Top = 1.0f - m_y * 2.0f / m_pManager->m_nBackBufferHeight; - Bottom = 1.0f - ( m_y + m_height ) * 2.0f / m_pManager->m_nBackBufferHeight; - - DXUT_SCREEN_VERTEX_10 vertices[4] = - { - Left, Top, 0.5f, D3DCOLOR_TO_D3DCOLORVALUE( m_colorTopLeft ), 0.0f, 0.0f, - Right, Top, 0.5f, D3DCOLOR_TO_D3DCOLORVALUE( m_colorTopRight ), 1.0f, 0.0f, - Left, Bottom, 0.5f, D3DCOLOR_TO_D3DCOLORVALUE( m_colorBottomLeft ), 0.0f, 1.0f, - Right, Bottom, 0.5f, D3DCOLOR_TO_D3DCOLORVALUE( m_colorBottomRight ), 1.0f, 1.0f, - }; - - //DXUT_SCREEN_VERTEX_10 *pVB; - D3D11_MAPPED_SUBRESOURCE MappedData; - if( SUCCEEDED( pd3dDeviceContext->Map( m_pManager->m_pVBScreenQuad11, 0, D3D11_MAP_WRITE_DISCARD, - 0, &MappedData ) ) ) - { - CopyMemory( MappedData.pData, vertices, sizeof( vertices ) ); - pd3dDeviceContext->Unmap( m_pManager->m_pVBScreenQuad11, 0 ); - } - - // Set the quad VB as current - UINT stride = sizeof( DXUT_SCREEN_VERTEX_10 ); - UINT offset = 0; - pd3dDeviceContext->IASetVertexBuffers( 0, 1, &m_pManager->m_pVBScreenQuad11, &stride, &offset ); - pd3dDeviceContext->IASetInputLayout( m_pManager->m_pInputLayout11 ); - pd3dDeviceContext->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP ); - - // Setup for rendering - m_pManager->ApplyRenderUIUntex11( pd3dDeviceContext ); - pd3dDeviceContext->Draw( 4, 0 ); - } - - DXUTTextureNode* pTextureNode = GetTexture( 0 ); - pd3dDeviceContext->PSSetShaderResources( 0, 1, &pTextureNode->pTexResView11 ); - - // Sort depth back to front - m_pManager->BeginSprites11(); - BeginText11(); - - m_pManager->ApplyRenderUI11( pd3dDeviceContext ); - - // Render the caption if it's enabled. - if( m_bCaption ) - { - // DrawSprite will offset the rect down by - // m_nCaptionHeight, so adjust the rect higher - // here to negate the effect. - RECT rc = { 0, -m_nCaptionHeight, m_width, 0 }; - DrawSprite11( &m_CapElement, &rc, 0.99f ); - rc.left += 5; // Make a left margin - WCHAR wszOutput[256]; - wcscpy_s( wszOutput, 256, m_wszCaption ); - if( m_bMinimized ) - wcscat_s( wszOutput, 256, L" (Minimized)" ); - DrawText11( pd3dDevice, pd3dDeviceContext, wszOutput, &m_CapElement, &rc, true ); - } - - // If the dialog is minimized, skip rendering - // its controls. - if( !m_bMinimized ) - { - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - - // Focused control is drawn last - if( pControl == s_pControlFocus ) - continue; - - pControl->Render( fElapsedTime ); - } - - if( s_pControlFocus != NULL && s_pControlFocus->m_pDialog == this ) - s_pControlFocus->Render( fElapsedTime ); - } - - // End sprites - if( m_bCaption ) - { - m_pManager->EndSprites11( pd3dDevice, pd3dDeviceContext ); - EndText11( pd3dDevice, pd3dDeviceContext ); - } - m_pManager->RestoreD3D11State( pd3dDeviceContext ); - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -VOID CDXUTDialog::SendEvent( UINT nEvent, bool bTriggeredByUser, CDXUTControl* pControl ) -{ - // If no callback has been registered there's nowhere to send the event to - if( m_pCallbackEvent == NULL ) - return; - - // Discard events triggered programatically if these types of events haven't been - // enabled - if( !bTriggeredByUser && !m_bNonUserEvents ) - return; - - m_pCallbackEvent( nEvent, pControl->GetID(), pControl, m_pCallbackEventUserContext ); -} - - -//-------------------------------------------------------------------------------------- -int CDXUTDialogResourceManager::AddFont( LPCWSTR strFaceName, LONG height, LONG weight ) -{ - // See if this font already exists - for( int i = 0; i < m_FontCache.GetSize(); i++ ) - { - DXUTFontNode* pFontNode = m_FontCache.GetAt( i ); - size_t nLen = 0; - nLen = wcsnlen( strFaceName, MAX_PATH); - if( 0 == _wcsnicmp( pFontNode->strFace, strFaceName, nLen ) && - pFontNode->nHeight == height && - pFontNode->nWeight == weight ) - { - return i; - } - } - - // Add a new font and try to create it - DXUTFontNode* pNewFontNode = new DXUTFontNode; - if( pNewFontNode == NULL ) - return -1; - - ZeroMemory( pNewFontNode, sizeof( DXUTFontNode ) ); - wcscpy_s( pNewFontNode->strFace, MAX_PATH, strFaceName ); - pNewFontNode->nHeight = height; - pNewFontNode->nWeight = weight; - m_FontCache.Add( pNewFontNode ); - - int iFont = m_FontCache.GetSize() - 1; - - // If a device is available, try to create immediately - if( m_pd3d9Device ) - CreateFont9( iFont ); - - return iFont; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::SetFont( UINT index, LPCWSTR strFaceName, LONG height, LONG weight ) -{ - // If this assert triggers, you need to call CDXUTDialog::Init() first. This change - // was made so that the DXUT's GUI could become seperate and optional from DXUT's core. The - // creation and interfacing with CDXUTDialogResourceManager is now the responsibility - // of the application if it wishes to use DXUT's GUI. - assert( m_pManager != NULL && L"To fix call CDXUTDialog::Init() first. See comments for details." ); - - // Make sure the list is at least as large as the index being set - UINT i; - for( i = m_Fonts.GetSize(); i <= index; i++ ) - { - m_Fonts.Add( -1 ); - } - - int iFont = m_pManager->AddFont( strFaceName, height, weight ); - m_Fonts.SetAt( index, iFont ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -DXUTFontNode* CDXUTDialog::GetFont( UINT index ) -{ - if( NULL == m_pManager ) - return NULL; - return m_pManager->GetFontNode( m_Fonts.GetAt( index ) ); -} - - -//-------------------------------------------------------------------------------------- -int CDXUTDialogResourceManager::AddTexture( LPCWSTR strFilename ) -{ - // See if this texture already exists - for( int i = 0; i < m_TextureCache.GetSize(); i++ ) - { - DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( i ); - size_t nLen = 0; - nLen = wcsnlen( strFilename, MAX_PATH); - if( pTextureNode->bFileSource && // Sources must match - 0 == _wcsnicmp( pTextureNode->strFilename, strFilename, nLen ) ) - { - return i; - } - } - - // Add a new texture and try to create it - DXUTTextureNode* pNewTextureNode = new DXUTTextureNode; - if( pNewTextureNode == NULL ) - return -1; - - ZeroMemory( pNewTextureNode, sizeof( DXUTTextureNode ) ); - pNewTextureNode->bFileSource = true; - wcscpy_s( pNewTextureNode->strFilename, MAX_PATH, strFilename ); - - m_TextureCache.Add( pNewTextureNode ); - - int iTexture = m_TextureCache.GetSize() - 1; - - // If a device is available, try to create immediately - if( m_pd3d9Device ) - CreateTexture9( iTexture ); - - return iTexture; -} - - -//-------------------------------------------------------------------------------------- -int CDXUTDialogResourceManager::AddTexture( LPCWSTR strResourceName, HMODULE hResourceModule ) -{ - // See if this texture already exists - for( int i = 0; i < m_TextureCache.GetSize(); i++ ) - { - DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( i ); - if( !pTextureNode->bFileSource && // Sources must match - pTextureNode->hResourceModule == hResourceModule ) // Module handles must match - { - if( IS_INTRESOURCE( strResourceName ) ) - { - // Integer-based ID - if( ( INT_PTR )strResourceName == pTextureNode->nResourceID ) - return i; - } - else - { - // String-based ID - size_t nLen = 0; - nLen = wcsnlen ( strResourceName, MAX_PATH ); - if( 0 == _wcsnicmp( pTextureNode->strFilename, strResourceName, nLen ) ) - return i; - } - } - } - - // Add a new texture and try to create it - DXUTTextureNode* pNewTextureNode = new DXUTTextureNode; - if( pNewTextureNode == NULL ) - return -1; - - ZeroMemory( pNewTextureNode, sizeof( DXUTTextureNode ) ); - pNewTextureNode->hResourceModule = hResourceModule; - if( IS_INTRESOURCE( strResourceName ) ) - { - pNewTextureNode->nResourceID = ( int )( size_t )strResourceName; - } - else - { - pNewTextureNode->nResourceID = 0; - wcscpy_s( pNewTextureNode->strFilename, MAX_PATH, strResourceName ); - } - - m_TextureCache.Add( pNewTextureNode ); - - int iTexture = m_TextureCache.GetSize() - 1; - - // If a device is available, try to create immediately - if( m_pd3d9Device ) - CreateTexture9( iTexture ); - - return iTexture; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::SetTexture( UINT index, LPCWSTR strFilename ) -{ - // If this assert triggers, you need to call CDXUTDialog::Init() first. This change - // was made so that the DXUT's GUI could become seperate and optional from DXUT's core. The - // creation and interfacing with CDXUTDialogResourceManager is now the responsibility - // of the application if it wishes to use DXUT's GUI. - assert( m_pManager != NULL && L"To fix this, call CDXUTDialog::Init() first. See comments for details." ); - - // Make sure the list is at least as large as the index being set - for( UINT i = m_Textures.GetSize(); i <= index; i++ ) - { - m_Textures.Add( -1 ); - } - - int iTexture = m_pManager->AddTexture( strFilename ); - - m_Textures.SetAt( index, iTexture ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::SetTexture( UINT index, LPCWSTR strResourceName, HMODULE hResourceModule ) -{ - // If this assert triggers, you need to call CDXUTDialog::Init() first. This change - // was made so that the DXUT's GUI could become seperate and optional from DXUT's core. The - // creation and interfacing with CDXUTDialogResourceManager is now the responsibility - // of the application if it wishes to use DXUT's GUI. - assert( m_pManager != NULL && L"To fix this, call CDXUTDialog::Init() first. See comments for details." ); - - // Make sure the list is at least as large as the index being set - for( UINT i = m_Textures.GetSize(); i <= index; i++ ) - { - m_Textures.Add( -1 ); - } - - int iTexture = m_pManager->AddTexture( strResourceName, hResourceModule ); - - m_Textures.SetAt( index, iTexture ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -DXUTTextureNode* CDXUTDialog::GetTexture( UINT index ) -{ - if( NULL == m_pManager ) - return NULL; - return m_pManager->GetTextureNode( m_Textures.GetAt( index ) ); -} - - - -//-------------------------------------------------------------------------------------- -bool CDXUTDialog::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - bool bHandled = false; - - // For invisible dialog, do not handle anything. - if( !m_bVisible ) - return false; - - // If automation command-line switch is on, enable this dialog's keyboard input - // upon any key press or mouse click. - if( DXUTGetAutomation() && - ( WM_LBUTTONDOWN == uMsg || WM_LBUTTONDBLCLK == uMsg || WM_KEYDOWN == uMsg ) ) - { - m_pManager->EnableKeyboardInputForAllDialogs(); - } - - // If caption is enable, check for clicks in the caption area. - if( m_bCaption ) - { - if( uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK ) - { - POINT mousePoint = - { - short( LOWORD( lParam ) ), short( HIWORD( lParam ) ) - }; - - if( mousePoint.x >= m_x && mousePoint.x < m_x + m_width && - mousePoint.y >= m_y && mousePoint.y < m_y + m_nCaptionHeight ) - { - m_bDrag = true; - SetCapture( DXUTGetHWND() ); - return true; - } - } - else if( uMsg == WM_LBUTTONUP && m_bDrag ) - { - POINT mousePoint = - { - short( LOWORD( lParam ) ), short( HIWORD( lParam ) ) - }; - - if( mousePoint.x >= m_x && mousePoint.x < m_x + m_width && - mousePoint.y >= m_y && mousePoint.y < m_y + m_nCaptionHeight ) - { - ReleaseCapture(); - m_bDrag = false; - m_bMinimized = !m_bMinimized; - return true; - } - } - } - - // If the dialog is minimized, don't send any messages to controls. - if( m_bMinimized ) - return false; - - // If a control is in focus, it belongs to this dialog, and it's enabled, then give - // it the first chance at handling the message. - if( s_pControlFocus && - s_pControlFocus->m_pDialog == this && - s_pControlFocus->GetEnabled() ) - { - // If the control MsgProc handles it, then we don't. - if( s_pControlFocus->MsgProc( uMsg, wParam, lParam ) ) - return true; - } - - switch( uMsg ) - { - case WM_SIZE: - case WM_MOVE: - { - // Handle sizing and moving messages so that in case the mouse cursor is moved out - // of an UI control because of the window adjustment, we can properly - // unhighlight the highlighted control. - POINT pt = - { - -1, -1 - }; - OnMouseMove( pt ); - break; - } - - case WM_ACTIVATEAPP: - // Call OnFocusIn()/OnFocusOut() of the control that currently has the focus - // as the application is activated/deactivated. This matches the Windows - // behavior. - if( s_pControlFocus && - s_pControlFocus->m_pDialog == this && - s_pControlFocus->GetEnabled() ) - { - if( wParam ) - s_pControlFocus->OnFocusIn(); - else - s_pControlFocus->OnFocusOut(); - } - break; - - // Keyboard messages - case WM_KEYDOWN: - case WM_SYSKEYDOWN: - case WM_KEYUP: - case WM_SYSKEYUP: - { - // If a control is in focus, it belongs to this dialog, and it's enabled, then give - // it the first chance at handling the message. - if( s_pControlFocus && - s_pControlFocus->m_pDialog == this && - s_pControlFocus->GetEnabled() ) - { - if( s_pControlFocus->HandleKeyboard( uMsg, wParam, lParam ) ) - return true; - } - - // Not yet handled, see if this matches a control's hotkey - // Activate the hotkey if the focus doesn't belong to an - // edit box. - if( uMsg == WM_KEYDOWN && ( !s_pControlFocus || - ( s_pControlFocus->GetType() != DXUT_CONTROL_EDITBOX - && s_pControlFocus->GetType() != DXUT_CONTROL_IMEEDITBOX ) ) ) - { - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - if( pControl->GetHotkey() == wParam ) - { - pControl->OnHotkey(); - return true; - } - } - } - - // Not yet handled, check for focus messages - if( uMsg == WM_KEYDOWN ) - { - // If keyboard input is not enabled, this message should be ignored - if( !m_bKeyboardInput ) - return false; - - switch( wParam ) - { - case VK_RIGHT: - case VK_DOWN: - if( s_pControlFocus != NULL ) - { - return OnCycleFocus( true ); - } - break; - - case VK_LEFT: - case VK_UP: - if( s_pControlFocus != NULL ) - { - return OnCycleFocus( false ); - } - break; - - case VK_TAB: - { - bool bShiftDown = ( ( GetKeyState( VK_SHIFT ) & 0x8000 ) != 0 ); - return OnCycleFocus( !bShiftDown ); - } - } - } - - break; - } - - - // Mouse messages - case WM_MOUSEMOVE: - case WM_LBUTTONDOWN: - case WM_LBUTTONUP: - case WM_MBUTTONDOWN: - case WM_MBUTTONUP: - case WM_RBUTTONDOWN: - case WM_RBUTTONUP: - case WM_XBUTTONDOWN: - case WM_XBUTTONUP: - case WM_LBUTTONDBLCLK: - case WM_MBUTTONDBLCLK: - case WM_RBUTTONDBLCLK: - case WM_XBUTTONDBLCLK: - case WM_MOUSEWHEEL: - { - // If not accepting mouse input, return false to indicate the message should still - // be handled by the application (usually to move the camera). - if( !m_bMouseInput ) - return false; - - POINT mousePoint = - { - short( LOWORD( lParam ) ), short( HIWORD( lParam ) ) - }; - mousePoint.x -= m_x; - mousePoint.y -= m_y; - - // If caption is enabled, offset the Y coordinate by the negative of its height. - if( m_bCaption ) - mousePoint.y -= m_nCaptionHeight; - - // If a control is in focus, it belongs to this dialog, and it's enabled, then give - // it the first chance at handling the message. - if( s_pControlFocus && - s_pControlFocus->m_pDialog == this && - s_pControlFocus->GetEnabled() ) - { - if( s_pControlFocus->HandleMouse( uMsg, mousePoint, wParam, lParam ) ) - return true; - } - - // Not yet handled, see if the mouse is over any controls - CDXUTControl* pControl = GetControlAtPoint( mousePoint ); - if( pControl != NULL && pControl->GetEnabled() ) - { - bHandled = pControl->HandleMouse( uMsg, mousePoint, wParam, lParam ); - if( bHandled ) - return true; - } - else - { - // Mouse not over any controls in this dialog, if there was a control - // which had focus it just lost it - if( uMsg == WM_LBUTTONDOWN && - s_pControlFocus && - s_pControlFocus->m_pDialog == this ) - { - s_pControlFocus->OnFocusOut(); - s_pControlFocus = NULL; - } - } - - // Still not handled, hand this off to the dialog. Return false to indicate the - // message should still be handled by the application (usually to move the camera). - switch( uMsg ) - { - case WM_MOUSEMOVE: - OnMouseMove( mousePoint ); - return false; - } - - break; - } - - case WM_CAPTURECHANGED: - { - // The application has lost mouse capture. - // The dialog object may not have received - // a WM_MOUSEUP when capture changed. Reset - // m_bDrag so that the dialog does not mistakenly - // think the mouse button is still held down. - if( ( HWND )lParam != hWnd ) - m_bDrag = false; - } - } - - return false; -} - -//-------------------------------------------------------------------------------------- -CDXUTControl* CDXUTDialog::GetControlAtPoint( POINT pt ) -{ - // Search through all child controls for the first one which - // contains the mouse point - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - - if( pControl == NULL ) - { - continue; - } - - // We only return the current control if it is visible - // and enabled. Because GetControlAtPoint() is used to do mouse - // hittest, it makes sense to perform this filtering. - if( pControl->ContainsPoint( pt ) && pControl->GetEnabled() && pControl->GetVisible() ) - { - return pControl; - } - } - - return NULL; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTDialog::GetControlEnabled( int ID ) -{ - CDXUTControl* pControl = GetControl( ID ); - if( pControl == NULL ) - return false; - - return pControl->GetEnabled(); -} - - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::SetControlEnabled( int ID, bool bEnabled ) -{ - CDXUTControl* pControl = GetControl( ID ); - if( pControl == NULL ) - return; - - pControl->SetEnabled( bEnabled ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::OnMouseUp( POINT pt ) -{ - s_pControlPressed = NULL; - m_pControlMouseOver = NULL; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::OnMouseMove( POINT pt ) -{ - // Figure out which control the mouse is over now - CDXUTControl* pControl = GetControlAtPoint( pt ); - - // If the mouse is still over the same control, nothing needs to be done - if( pControl == m_pControlMouseOver ) - return; - - // Handle mouse leaving the old control - if( m_pControlMouseOver ) - m_pControlMouseOver->OnMouseLeave(); - - // Handle mouse entering the new control - m_pControlMouseOver = pControl; - if( pControl != NULL ) - m_pControlMouseOver->OnMouseEnter(); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::SetDefaultElement( UINT nControlType, UINT iElement, CDXUTElement* pElement ) -{ - // If this Element type already exist in the list, simply update the stored Element - for( int i = 0; i < m_DefaultElements.GetSize(); i++ ) - { - DXUTElementHolder* pElementHolder = m_DefaultElements.GetAt( i ); - - if( pElementHolder->nControlType == nControlType && - pElementHolder->iElement == iElement ) - { - pElementHolder->Element = *pElement; - return S_OK; - } - } - - // Otherwise, add a new entry - DXUTElementHolder* pNewHolder; - pNewHolder = new DXUTElementHolder; - if( pNewHolder == NULL ) - return E_OUTOFMEMORY; - - pNewHolder->nControlType = nControlType; - pNewHolder->iElement = iElement; - pNewHolder->Element = *pElement; - - HRESULT hr = m_DefaultElements.Add( pNewHolder ); - if( FAILED( hr ) ) - { - delete pNewHolder; - } - return hr; -} - - -//-------------------------------------------------------------------------------------- -CDXUTElement* CDXUTDialog::GetDefaultElement( UINT nControlType, UINT iElement ) -{ - for( int i = 0; i < m_DefaultElements.GetSize(); i++ ) - { - DXUTElementHolder* pElementHolder = m_DefaultElements.GetAt( i ); - - if( pElementHolder->nControlType == nControlType && - pElementHolder->iElement == iElement ) - { - return &pElementHolder->Element; - } - } - - return NULL; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddStatic( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault, - CDXUTStatic** ppCreated ) -{ - HRESULT hr = S_OK; - - CDXUTStatic* pStatic = new CDXUTStatic( this ); - - if( ppCreated != NULL ) - *ppCreated = pStatic; - - if( pStatic == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pStatic ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and list index - pStatic->SetID( ID ); - pStatic->SetText( strText ); - pStatic->SetLocation( x, y ); - pStatic->SetSize( width, height ); - pStatic->m_bIsDefault = bIsDefault; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddButton( int ID, LPCWSTR strText, int x, int y, int width, int height, UINT nHotkey, - bool bIsDefault, CDXUTButton** ppCreated ) -{ - HRESULT hr = S_OK; - - CDXUTButton* pButton = new CDXUTButton( this ); - - if( ppCreated != NULL ) - *ppCreated = pButton; - - if( pButton == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pButton ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and list index - pButton->SetID( ID ); - pButton->SetText( strText ); - pButton->SetLocation( x, y ); - pButton->SetSize( width, height ); - pButton->SetHotkey( nHotkey ); - pButton->m_bIsDefault = bIsDefault; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddCheckBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bChecked, - UINT nHotkey, bool bIsDefault, CDXUTCheckBox** ppCreated ) -{ - HRESULT hr = S_OK; - - CDXUTCheckBox* pCheckBox = new CDXUTCheckBox( this ); - - if( ppCreated != NULL ) - *ppCreated = pCheckBox; - - if( pCheckBox == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pCheckBox ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and list index - pCheckBox->SetID( ID ); - pCheckBox->SetText( strText ); - pCheckBox->SetLocation( x, y ); - pCheckBox->SetSize( width, height ); - pCheckBox->SetHotkey( nHotkey ); - pCheckBox->m_bIsDefault = bIsDefault; - pCheckBox->SetChecked( bChecked ); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddRadioButton( int ID, UINT nButtonGroup, LPCWSTR strText, int x, int y, int width, int height, - bool bChecked, UINT nHotkey, bool bIsDefault, CDXUTRadioButton** ppCreated ) -{ - HRESULT hr = S_OK; - - CDXUTRadioButton* pRadioButton = new CDXUTRadioButton( this ); - - if( ppCreated != NULL ) - *ppCreated = pRadioButton; - - if( pRadioButton == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pRadioButton ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and list index - pRadioButton->SetID( ID ); - pRadioButton->SetText( strText ); - pRadioButton->SetButtonGroup( nButtonGroup ); - pRadioButton->SetLocation( x, y ); - pRadioButton->SetSize( width, height ); - pRadioButton->SetHotkey( nHotkey ); - pRadioButton->SetChecked( bChecked ); - pRadioButton->m_bIsDefault = bIsDefault; - pRadioButton->SetChecked( bChecked ); - - return S_OK; -} - - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddComboBox( int ID, int x, int y, int width, int height, UINT nHotkey, bool bIsDefault, - CDXUTComboBox** ppCreated ) -{ - HRESULT hr = S_OK; - - CDXUTComboBox* pComboBox = new CDXUTComboBox( this ); - - if( ppCreated != NULL ) - *ppCreated = pComboBox; - - if( pComboBox == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pComboBox ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and list index - pComboBox->SetID( ID ); - pComboBox->SetLocation( x, y ); - pComboBox->SetSize( width, height ); - pComboBox->SetHotkey( nHotkey ); - pComboBox->m_bIsDefault = bIsDefault; - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddSlider( int ID, int x, int y, int width, int height, int min, int max, int value, - bool bIsDefault, CDXUTSlider** ppCreated ) -{ - HRESULT hr = S_OK; - - CDXUTSlider* pSlider = new CDXUTSlider( this ); - - if( ppCreated != NULL ) - *ppCreated = pSlider; - - if( pSlider == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pSlider ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and list index - pSlider->SetID( ID ); - pSlider->SetLocation( x, y ); - pSlider->SetSize( width, height ); - pSlider->m_bIsDefault = bIsDefault; - pSlider->SetRange( min, max ); - pSlider->SetValue( value ); - pSlider->UpdateRects(); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddEditBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault, - CDXUTEditBox** ppCreated ) -{ - HRESULT hr = S_OK; - - CDXUTEditBox* pEditBox = new CDXUTEditBox( this ); - - if( ppCreated != NULL ) - *ppCreated = pEditBox; - - if( pEditBox == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pEditBox ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and position - pEditBox->SetID( ID ); - pEditBox->SetLocation( x, y ); - pEditBox->SetSize( width, height ); - pEditBox->m_bIsDefault = bIsDefault; - - if( strText ) - pEditBox->SetText( strText ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddListBox( int ID, int x, int y, int width, int height, DWORD dwStyle, CDXUTListBox** ppCreated ) -{ - HRESULT hr = S_OK; - CDXUTListBox* pListBox = new CDXUTListBox( this ); - - if( ppCreated != NULL ) - *ppCreated = pListBox; - - if( pListBox == NULL ) - return E_OUTOFMEMORY; - - hr = AddControl( pListBox ); - if( FAILED( hr ) ) - return hr; - - // Set the ID and position - pListBox->SetID( ID ); - pListBox->SetLocation( x, y ); - pListBox->SetSize( width, height ); - pListBox->SetStyle( dwStyle ); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::InitControl( CDXUTControl* pControl ) -{ - HRESULT hr; - - if( pControl == NULL ) - return E_INVALIDARG; - - pControl->m_Index = m_Controls.GetSize(); - - // Look for a default Element entries - for( int i = 0; i < m_DefaultElements.GetSize(); i++ ) - { - DXUTElementHolder* pElementHolder = m_DefaultElements.GetAt( i ); - if( pElementHolder->nControlType == pControl->GetType() ) - pControl->SetElement( pElementHolder->iElement, &pElementHolder->Element ); - } - - V_RETURN( pControl->OnInit() ); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::AddControl( CDXUTControl* pControl ) -{ - HRESULT hr = S_OK; - - hr = InitControl( pControl ); - if( FAILED( hr ) ) - return DXTRACE_ERR( L"CDXUTDialog::InitControl", hr ); - - // Add to the list - hr = m_Controls.Add( pControl ); - if( FAILED( hr ) ) - { - return DXTRACE_ERR( L"CGrowableArray::Add", hr ); - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -CDXUTControl* CDXUTDialog::GetControl( int ID ) -{ - // Try to find the control with the given ID - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - - if( pControl->GetID() == ID ) - { - return pControl; - } - } - - // Not found - return NULL; -} - - - -//-------------------------------------------------------------------------------------- -CDXUTControl* CDXUTDialog::GetControl( int ID, UINT nControlType ) -{ - // Try to find the control with the given ID - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - - if( pControl->GetID() == ID && pControl->GetType() == nControlType ) - { - return pControl; - } - } - - // Not found - return NULL; -} - - - -//-------------------------------------------------------------------------------------- -CDXUTControl* CDXUTDialog::GetNextControl( CDXUTControl* pControl ) -{ - int index = pControl->m_Index + 1; - - CDXUTDialog* pDialog = pControl->m_pDialog; - - // Cycle through dialogs in the loop to find the next control. Note - // that if only one control exists in all looped dialogs it will - // be the returned 'next' control. - while( index >= ( int )pDialog->m_Controls.GetSize() ) - { - pDialog = pDialog->m_pNextDialog; - index = 0; - } - - return pDialog->m_Controls.GetAt( index ); -} - -//-------------------------------------------------------------------------------------- -CDXUTControl* CDXUTDialog::GetPrevControl( CDXUTControl* pControl ) -{ - int index = pControl->m_Index - 1; - - CDXUTDialog* pDialog = pControl->m_pDialog; - - // Cycle through dialogs in the loop to find the next control. Note - // that if only one control exists in all looped dialogs it will - // be the returned 'previous' control. - while( index < 0 ) - { - pDialog = pDialog->m_pPrevDialog; - if( pDialog == NULL ) - pDialog = pControl->m_pDialog; - - index = pDialog->m_Controls.GetSize() - 1; - } - - return pDialog->m_Controls.GetAt( index ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::ClearRadioButtonGroup( UINT nButtonGroup ) -{ - // Find all radio buttons with the given group number - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - - if( pControl->GetType() == DXUT_CONTROL_RADIOBUTTON ) - { - CDXUTRadioButton* pRadioButton = ( CDXUTRadioButton* )pControl; - - if( pRadioButton->GetButtonGroup() == nButtonGroup ) - pRadioButton->SetChecked( false, false ); - } - } -} - - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::ClearComboBox( int ID ) -{ - CDXUTComboBox* pComboBox = GetComboBox( ID ); - if( pComboBox == NULL ) - return; - - pComboBox->RemoveAllItems(); -} - - - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::RequestFocus( CDXUTControl* pControl ) -{ - if( s_pControlFocus == pControl ) - return; - - if( !pControl->CanHaveFocus() ) - return; - - if( s_pControlFocus ) - s_pControlFocus->OnFocusOut(); - - pControl->OnFocusIn(); - s_pControlFocus = pControl; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawRect( RECT* pRect, D3DCOLOR color ) -{ - if( m_pManager->GetD3D9Device() ) - return DrawRect9( pRect, color ); - return E_FAIL; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawRect9( RECT* pRect, D3DCOLOR color ) -{ - RECT rcScreen = *pRect; - OffsetRect( &rcScreen, m_x, m_y ); - - // If caption is enabled, offset the Y position by its height. - if( m_bCaption ) - OffsetRect( &rcScreen, 0, m_nCaptionHeight ); - - DXUT_SCREEN_VERTEX vertices[4] = - { - ( float )rcScreen.left - 0.5f, ( float )rcScreen.top - 0.5f, 0.5f, 1.0f, color, 0, 0, - ( float )rcScreen.right - 0.5f, ( float )rcScreen.top - 0.5f, 0.5f, 1.0f, color, 0, 0, - ( float )rcScreen.right - 0.5f, ( float )rcScreen.bottom - 0.5f, 0.5f, 1.0f, color, 0, 0, - ( float )rcScreen.left - 0.5f, ( float )rcScreen.bottom - 0.5f, 0.5f, 1.0f, color, 0, 0, - }; - - IDirect3DDevice9* pd3dDevice = m_pManager->GetD3D9Device(); - - // Since we're doing our own drawing here we need to flush the sprites - m_pManager->m_pSprite->Flush(); - IDirect3DVertexDeclaration9* pDecl = NULL; - pd3dDevice->GetVertexDeclaration( &pDecl ); // Preserve the sprite's current vertex decl - pd3dDevice->SetFVF( DXUT_SCREEN_VERTEX::FVF ); - - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG2 ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2 ); - - pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLEFAN, 2, vertices, sizeof( DXUT_SCREEN_VERTEX ) ); - - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); - - // Restore the vertex decl - pd3dDevice->SetVertexDeclaration( pDecl ); - pDecl->Release(); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawPolyLine( POINT* apPoints, UINT nNumPoints, D3DCOLOR color ) -{ - DXUT_SCREEN_VERTEX* vertices = new DXUT_SCREEN_VERTEX[ nNumPoints ]; - if( vertices == NULL ) - return E_OUTOFMEMORY; - - DXUT_SCREEN_VERTEX* pVertex = vertices; - POINT* pt = apPoints; - for( UINT i = 0; i < nNumPoints; i++ ) - { - pVertex->x = m_x + ( float )pt->x; - pVertex->y = m_y + ( float )pt->y; - pVertex->z = 0.5f; - pVertex->h = 1.0f; - pVertex->color = color; - pVertex->tu = 0.0f; - pVertex->tv = 0.0f; - - pVertex++; - pt++; - } - - IDirect3DDevice9* pd3dDevice = m_pManager->GetD3D9Device(); - - // Since we're doing our own drawing here we need to flush the sprites - m_pManager->m_pSprite->Flush(); - IDirect3DVertexDeclaration9* pDecl = NULL; - pd3dDevice->GetVertexDeclaration( &pDecl ); // Preserve the sprite's current vertex decl - pd3dDevice->SetFVF( DXUT_SCREEN_VERTEX::FVF ); - - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG2 ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2 ); - - pd3dDevice->DrawPrimitiveUP( D3DPT_LINESTRIP, nNumPoints - 1, vertices, sizeof( DXUT_SCREEN_VERTEX ) ); - - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); - - // Restore the vertex decl - pd3dDevice->SetVertexDeclaration( pDecl ); - pDecl->Release(); - - SAFE_DELETE_ARRAY( vertices ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawSprite( CDXUTElement* pElement, RECT* prcDest, float fDepth ) -{ - if( m_pManager->GetD3D9Device() ) - return DrawSprite9( pElement, prcDest ); - else - return DrawSprite11( pElement, prcDest, fDepth ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawSprite9( CDXUTElement* pElement, RECT* prcDest ) -{ - // No need to draw fully transparent layers - if( pElement->TextureColor.Current.a == 0 ) - return S_OK; - - RECT rcTexture = pElement->rcTexture; - - RECT rcScreen = *prcDest; - OffsetRect( &rcScreen, m_x, m_y ); - - // If caption is enabled, offset the Y position by its height. - if( m_bCaption ) - OffsetRect( &rcScreen, 0, m_nCaptionHeight ); - - DXUTTextureNode* pTextureNode = GetTexture( pElement->iTexture ); - if( pTextureNode == NULL ) - return E_FAIL; - - float fScaleX = ( float )RectWidth( rcScreen ) / RectWidth( rcTexture ); - float fScaleY = ( float )RectHeight( rcScreen ) / RectHeight( rcTexture ); - - D3DXMATRIXA16 matTransform; - D3DXMatrixScaling( &matTransform, fScaleX, fScaleY, 1.0f ); - - m_pManager->m_pSprite->SetTransform( &matTransform ); - - D3DXVECTOR3 vPos( ( float )rcScreen.left, ( float )rcScreen.top, 0.0f ); - - vPos.x /= fScaleX; - vPos.y /= fScaleY; - - return m_pManager->m_pSprite->Draw( pTextureNode->pTexture9, &rcTexture, NULL, &vPos, - pElement->TextureColor.Current ); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawSprite11( CDXUTElement* pElement, RECT* prcDest, float fDepth ) -{ - // No need to draw fully transparent layers - if( pElement->TextureColor.Current.a == 0 ) - return S_OK; - - RECT rcTexture = pElement->rcTexture; - - RECT rcScreen = *prcDest; - OffsetRect( &rcScreen, m_x, m_y ); - - // If caption is enabled, offset the Y position by its height. - if( m_bCaption ) - OffsetRect( &rcScreen, 0, m_nCaptionHeight ); - - DXUTTextureNode* pTextureNode = GetTexture( pElement->iTexture ); - if( pTextureNode == NULL ) - return E_FAIL; - - float fBBWidth = ( float )m_pManager->m_nBackBufferWidth; - float fBBHeight = ( float )m_pManager->m_nBackBufferHeight; - float fTexWidth = ( float )pTextureNode->dwWidth; - float fTexHeight = ( float )pTextureNode->dwHeight; - - float fRectLeft = rcScreen.left / fBBWidth; - float fRectTop = 1.0f - rcScreen.top / fBBHeight; - float fRectRight = rcScreen.right / fBBWidth; - float fRectBottom = 1.0f - rcScreen.bottom / fBBHeight; - - fRectLeft = fRectLeft * 2.0f - 1.0f; - fRectTop = fRectTop * 2.0f - 1.0f; - fRectRight = fRectRight * 2.0f - 1.0f; - fRectBottom = fRectBottom * 2.0f - 1.0f; - - float fTexLeft = rcTexture.left / fTexWidth; - float fTexTop = rcTexture.top / fTexHeight; - float fTexRight = rcTexture.right / fTexWidth; - float fTexBottom = rcTexture.bottom / fTexHeight; - - // Add 6 sprite vertices - DXUTSpriteVertex SpriteVertex; - - // tri1 - SpriteVertex.vPos = D3DXVECTOR3( fRectLeft, fRectTop, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexLeft, fTexTop ); - SpriteVertex.vColor = pElement->TextureColor.Current; - m_pManager->m_SpriteVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectRight, fRectTop, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexRight, fTexTop ); - SpriteVertex.vColor = pElement->TextureColor.Current; - m_pManager->m_SpriteVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectLeft, fRectBottom, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexLeft, fTexBottom ); - SpriteVertex.vColor = pElement->TextureColor.Current; - m_pManager->m_SpriteVertices.Add( SpriteVertex ); - - // tri2 - SpriteVertex.vPos = D3DXVECTOR3( fRectRight, fRectTop, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexRight, fTexTop ); - SpriteVertex.vColor = pElement->TextureColor.Current; - m_pManager->m_SpriteVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectRight, fRectBottom, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexRight, fTexBottom ); - SpriteVertex.vColor = pElement->TextureColor.Current; - m_pManager->m_SpriteVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectLeft, fRectBottom, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexLeft, fTexBottom ); - SpriteVertex.vColor = pElement->TextureColor.Current; - m_pManager->m_SpriteVertices.Add( SpriteVertex ); - - // TODO: Why are we drawing the sprite every time? This is very inefficient, but the sprite workaround doesn't have support for sorting now, so we have to - // draw a sprite every time to keep the order correct between sprites and text. - m_pManager->EndSprites11( DXUTGetD3D11Device(), DXUTGetD3D11DeviceContext() ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::CalcTextRect( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, int nCount ) -{ - HRESULT hr = S_OK; - - DXUTFontNode* pFontNode = GetFont( pElement->iFont ); - if( pFontNode == NULL ) - return E_FAIL; - - DWORD dwTextFormat = pElement->dwTextFormat | DT_CALCRECT; - // Since we are only computing the rectangle, we don't need a sprite. - if( pFontNode->pFont9 ) - { - hr = pFontNode->pFont9->DrawText( NULL, strText, nCount, prcDest, dwTextFormat, pElement->FontColor.Current ); - if( FAILED( hr ) ) - return hr; - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawText( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow, int nCount, bool bCenter ) -{ - if( m_pManager->GetD3D9Device() ) - return DrawText9( strText, pElement, prcDest, bShadow, nCount ); - else - return DrawText11( m_pManager->GetD3D11Device(), m_pManager->GetD3D11DeviceContext(), strText, pElement, prcDest, bShadow, nCount, bCenter ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawText9( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow, int nCount ) -{ - HRESULT hr = S_OK; - - // No need to draw fully transparent layers - if( pElement->FontColor.Current.a == 0 ) - return S_OK; - - RECT rcScreen = *prcDest; - OffsetRect( &rcScreen, m_x, m_y ); - - // If caption is enabled, offset the Y position by its height. - if( m_bCaption ) - OffsetRect( &rcScreen, 0, m_nCaptionHeight ); - - D3DXMATRIX matTransform; - D3DXMatrixIdentity( &matTransform ); - m_pManager->m_pSprite->SetTransform( &matTransform ); - - DXUTFontNode* pFontNode = GetFont( pElement->iFont ); - - if( bShadow ) - { - RECT rcShadow = rcScreen; - OffsetRect( &rcShadow, 1, 1 ); - hr = pFontNode->pFont9->DrawText( m_pManager->m_pSprite, strText, nCount, &rcShadow, pElement->dwTextFormat, - D3DCOLOR_ARGB( DWORD( pElement->FontColor.Current.a * 255 ), 0, 0, 0 ) ); - if( FAILED( hr ) ) - return hr; - } - - hr = pFontNode->pFont9->DrawText( m_pManager->m_pSprite, strText, nCount, &rcScreen, pElement->dwTextFormat, - pElement->FontColor.Current ); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - -ID3D11Buffer* g_pFontBuffer11 = NULL; -UINT g_FontBufferBytes11 = 0; -CGrowableArray g_FontVertices; -ID3D11ShaderResourceView* g_pFont11 = NULL; -ID3D11InputLayout* g_pInputLayout11 = NULL; -HRESULT InitFont11( ID3D11Device* pd3d11Device, ID3D11InputLayout* pInputLayout ) -{ - HRESULT hr = S_OK; - WCHAR str[MAX_PATH]; - V_RETURN( DXUTFindDXSDKMediaFileCch( str, MAX_PATH, L"UI\\Font.dds" ) ); - - if (pd3d11Device->GetFeatureLevel() < D3D_FEATURE_LEVEL_10_0 ) { - - D3DX11_IMAGE_INFO dii; - D3DX11GetImageInfoFromFile( str, NULL, &dii, NULL ); - - D3DX11_IMAGE_LOAD_INFO dili; - dili.BindFlags = D3DX11_DEFAULT; - dili.CpuAccessFlags = D3DX11_DEFAULT; - dili.Depth = D3DX11_DEFAULT; - dili.Filter = D3DX11_DEFAULT; - dili.FirstMipLevel = 0; - dili.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - dili.Height = D3DX11_DEFAULT; - dili.MipFilter = D3DX11_DEFAULT; - dili.MipLevels = 1; - dili.MiscFlags = D3DX11_DEFAULT; - dili.pSrcInfo = &dii; - dili.Usage = D3D11_USAGE_DEFAULT ; - dili.Width = D3DX11_DEFAULT; - - V_RETURN( D3DX11CreateShaderResourceViewFromFile( pd3d11Device, str, &dili, NULL, &g_pFont11, &hr) ); - } else { - V_RETURN( D3DX11CreateShaderResourceViewFromFile( pd3d11Device, str, NULL, NULL, &g_pFont11, &hr) ); - - } - - - g_pInputLayout11 = pInputLayout; - return hr; -} - -void EndFont11() -{ - SAFE_RELEASE( g_pFontBuffer11 ); - g_FontBufferBytes11 = 0; - SAFE_RELEASE( g_pFont11 ); -} - -void BeginText11() -{ - g_FontVertices.Reset(); -} - -void DrawText11DXUT( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext, - LPCWSTR strText, RECT rcScreen, D3DXCOLOR vFontColor, - float fBBWidth, float fBBHeight, bool bCenter ) -{ - float fCharTexSizeX = 0.010526315f; - //float fGlyphSizeX = 14.0f / fBBWidth; - //float fGlyphSizeY = 32.0f / fBBHeight; - float fGlyphSizeX = 15.0f / fBBWidth; - float fGlyphSizeY = 42.0f / fBBHeight; - - - float fRectLeft = rcScreen.left / fBBWidth; - float fRectTop = 1.0f - rcScreen.top / fBBHeight; - - fRectLeft = fRectLeft * 2.0f - 1.0f; - fRectTop = fRectTop * 2.0f - 1.0f; - - int NumChars = (int)wcslen( strText ); - if (bCenter) { - float fRectRight = rcScreen.right / fBBWidth; - fRectRight = fRectRight * 2.0f - 1.0f; - float fRectBottom = 1.0f - rcScreen.bottom / fBBHeight; - fRectBottom = fRectBottom * 2.0f - 1.0f; - float fcenterx = ((fRectRight - fRectLeft) - (float)NumChars*fGlyphSizeX) *0.5f; - float fcentery = ((fRectTop - fRectBottom) - (float)1*fGlyphSizeY) *0.5f; - fRectLeft += fcenterx ; - fRectTop -= fcentery; - } - float fOriginalLeft = fRectLeft; - float fTexTop = 0.0f; - float fTexBottom = 1.0f; - - float fDepth = 0.5f; - for( int i=0; i 126 ) - { - continue; - } - - // Add 6 sprite vertices - DXUTSpriteVertex SpriteVertex; - float fRectRight = fRectLeft + fGlyphSizeX; - float fRectBottom = fRectTop - fGlyphSizeY; - float fTexLeft = ( strText[i] - 32 ) * fCharTexSizeX; - float fTexRight = fTexLeft + fCharTexSizeX; - - // tri1 - SpriteVertex.vPos = D3DXVECTOR3( fRectLeft, fRectTop, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexLeft, fTexTop ); - SpriteVertex.vColor = vFontColor; - g_FontVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectRight, fRectTop, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexRight, fTexTop ); - SpriteVertex.vColor = vFontColor; - g_FontVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectLeft, fRectBottom, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexLeft, fTexBottom ); - SpriteVertex.vColor = vFontColor; - g_FontVertices.Add( SpriteVertex ); - - // tri2 - SpriteVertex.vPos = D3DXVECTOR3( fRectRight, fRectTop, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexRight, fTexTop ); - SpriteVertex.vColor = vFontColor; - g_FontVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectRight, fRectBottom, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexRight, fTexBottom ); - SpriteVertex.vColor = vFontColor; - g_FontVertices.Add( SpriteVertex ); - - SpriteVertex.vPos = D3DXVECTOR3( fRectLeft, fRectBottom, fDepth ); - SpriteVertex.vTex = D3DXVECTOR2( fTexLeft, fTexBottom ); - SpriteVertex.vColor = vFontColor; - g_FontVertices.Add( SpriteVertex ); - - fRectLeft += fGlyphSizeX; - - } - - // TODO: We have to end text after every line so that rendering order between sprites and fonts is preserved - EndText11( pd3dDevice, pd3d11DeviceContext ); -} - -void EndText11( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext ) -{ - - // ensure our buffer size can hold our sprites - UINT FontDataBytes = g_FontVertices.GetSize() * sizeof( DXUTSpriteVertex ); - if( g_FontBufferBytes11 < FontDataBytes ) - { - SAFE_RELEASE( g_pFontBuffer11 ); - g_FontBufferBytes11 = FontDataBytes; - - D3D11_BUFFER_DESC BufferDesc; - BufferDesc.ByteWidth = g_FontBufferBytes11; - BufferDesc.Usage = D3D11_USAGE_DYNAMIC; - BufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; - BufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; - BufferDesc.MiscFlags = 0; - - pd3dDevice->CreateBuffer( &BufferDesc, NULL, &g_pFontBuffer11 ); - } - - // Copy the sprites over - D3D11_BOX destRegion; - destRegion.left = 0; - destRegion.right = FontDataBytes; - destRegion.top = 0; - destRegion.bottom = 1; - destRegion.front = 0; - destRegion.back = 1; - D3D11_MAPPED_SUBRESOURCE MappedResource; - if ( S_OK == pd3d11DeviceContext->Map( g_pFontBuffer11, 0, D3D11_MAP_WRITE_DISCARD, 0, &MappedResource ) ) { - CopyMemory( MappedResource.pData, (void*)g_FontVertices.GetData(), FontDataBytes ); - pd3d11DeviceContext->Unmap(g_pFontBuffer11, 0); - } - - ID3D11ShaderResourceView* pOldTexture = NULL; - pd3d11DeviceContext->PSGetShaderResources( 0, 1, &pOldTexture ); - pd3d11DeviceContext->PSSetShaderResources( 0, 1, &g_pFont11 ); - - // Draw - UINT Stride = sizeof( DXUTSpriteVertex ); - UINT Offset = 0; - pd3d11DeviceContext->IASetVertexBuffers( 0, 1, &g_pFontBuffer11, &Stride, &Offset ); - pd3d11DeviceContext->IASetInputLayout( g_pInputLayout11 ); - pd3d11DeviceContext->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST ); - pd3d11DeviceContext->Draw( g_FontVertices.GetSize(), 0 ); - - pd3d11DeviceContext->PSSetShaderResources( 0, 1, &pOldTexture ); - SAFE_RELEASE( pOldTexture ); - - g_FontVertices.Reset(); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialog::DrawText11( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext, - LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow, int nCount, bool bCenter ) -{ - //HRESULT hr = S_OK; - - // No need to draw fully transparent layers - if( pElement->FontColor.Current.a == 0 ) - return S_OK; - - RECT rcScreen = *prcDest; - OffsetRect( &rcScreen, m_x, m_y); - - // If caption is enabled, offset the Y position by its height. - if( m_bCaption ) - OffsetRect( &rcScreen, 0, m_nCaptionHeight ); - - float fBBWidth = ( float )m_pManager->m_nBackBufferWidth; - float fBBHeight = ( float )m_pManager->m_nBackBufferHeight; - - if( bShadow ) - { - RECT rcShadow = rcScreen; - OffsetRect( &rcShadow, 1, 1 ); - - D3DXCOLOR vShadowColor( 0,0,0, 1.0f ); - DrawText11DXUT( pd3dDevice, pd3d11DeviceContext, - strText, rcShadow, vShadowColor, - fBBWidth, fBBHeight, bCenter ); - - } - - D3DXCOLOR vFontColor( pElement->FontColor.Current.r, pElement->FontColor.Current.g, pElement->FontColor.Current.b, 1.0f ); - DrawText11DXUT( pd3dDevice, pd3d11DeviceContext, - strText, rcScreen, vFontColor, - fBBWidth, fBBHeight, bCenter ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::SetBackgroundColors( D3DCOLOR colorTopLeft, D3DCOLOR colorTopRight, D3DCOLOR colorBottomLeft, - D3DCOLOR colorBottomRight ) -{ - m_colorTopLeft = colorTopLeft; - m_colorTopRight = colorTopRight; - m_colorBottomLeft = colorBottomLeft; - m_colorBottomRight = colorBottomRight; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::SetNextDialog( CDXUTDialog* pNextDialog ) -{ - if( pNextDialog == NULL ) - pNextDialog = this; - - m_pNextDialog = pNextDialog; - if( pNextDialog ) - m_pNextDialog->m_pPrevDialog = this; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::ClearFocus() -{ - if( s_pControlFocus ) - { - s_pControlFocus->OnFocusOut(); - s_pControlFocus = NULL; - } - - ReleaseCapture(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::FocusDefaultControl() -{ - // Check for default control in this dialog - for( int i = 0; i < m_Controls.GetSize(); i++ ) - { - CDXUTControl* pControl = m_Controls.GetAt( i ); - if( pControl->m_bIsDefault ) - { - // Remove focus from the current control - ClearFocus(); - - // Give focus to the default control - s_pControlFocus = pControl; - s_pControlFocus->OnFocusIn(); - return; - } - } -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTDialog::OnCycleFocus( bool bForward ) -{ - CDXUTControl* pControl = NULL; - CDXUTDialog* pDialog = NULL; // pDialog and pLastDialog are used to track wrapping of - CDXUTDialog* pLastDialog; // focus from first control to last or vice versa. - - if( s_pControlFocus == NULL ) - { - // If s_pControlFocus is NULL, we focus the first control of first dialog in - // the case that bForward is true, and focus the last control of last dialog when - // bForward is false. - // - if( bForward ) - { - // Search for the first control from the start of the dialog - // array. - for( int d = 0; d < m_pManager->m_Dialogs.GetSize(); ++d ) - { - pDialog = pLastDialog = m_pManager->m_Dialogs.GetAt( d ); - if( pDialog && pDialog->m_Controls.GetSize() > 0 ) - { - pControl = pDialog->m_Controls.GetAt( 0 ); - break; - } - } - - if( !pDialog || !pControl ) - { - // No dialog has been registered yet or no controls have been - // added to the dialogs. Cannot proceed. - return true; - } - } - else - { - // Search for the first control from the end of the dialog - // array. - for( int d = m_pManager->m_Dialogs.GetSize() - 1; d >= 0; --d ) - { - pDialog = pLastDialog = m_pManager->m_Dialogs.GetAt( d ); - if( pDialog && pDialog->m_Controls.GetSize() > 0 ) - { - pControl = pDialog->m_Controls.GetAt( pDialog->m_Controls.GetSize() - 1 ); - break; - } - } - - if( !pDialog || !pControl ) - { - // No dialog has been registered yet or no controls have been - // added to the dialogs. Cannot proceed. - return true; - } - } - } - else if( s_pControlFocus->m_pDialog != this ) - { - // If a control belonging to another dialog has focus, let that other - // dialog handle this event by returning false. - // - return false; - } - else - { - // Focused control belongs to this dialog. Cycle to the - // next/previous control. - pLastDialog = s_pControlFocus->m_pDialog; - pControl = ( bForward ) ? GetNextControl( s_pControlFocus ) : GetPrevControl( s_pControlFocus ); - pDialog = pControl->m_pDialog; - } - - for( int i = 0; i < 0xffff; i++ ) - { - // If we just wrapped from last control to first or vice versa, - // set the focused control to NULL. This state, where no control - // has focus, allows the camera to work. - int nLastDialogIndex = m_pManager->m_Dialogs.IndexOf( pLastDialog ); - int nDialogIndex = m_pManager->m_Dialogs.IndexOf( pDialog ); - if( ( !bForward && nLastDialogIndex < nDialogIndex ) || - ( bForward && nDialogIndex < nLastDialogIndex ) ) - { - if( s_pControlFocus ) - s_pControlFocus->OnFocusOut(); - s_pControlFocus = NULL; - return true; - } - - // If we've gone in a full circle then focus doesn't change - if( pControl == s_pControlFocus ) - return true; - - // If the dialog accepts keybord input and the control can have focus then - // move focus - if( pControl->m_pDialog->m_bKeyboardInput && pControl->CanHaveFocus() ) - { - if( s_pControlFocus ) - s_pControlFocus->OnFocusOut(); - s_pControlFocus = pControl; - s_pControlFocus->OnFocusIn(); - return true; - } - - pLastDialog = pDialog; - pControl = ( bForward ) ? GetNextControl( pControl ) : GetPrevControl( pControl ); - pDialog = pControl->m_pDialog; - } - - // If we reached this point, the chain of dialogs didn't form a complete loop - DXTRACE_ERR( L"CDXUTDialog: Multiple dialogs are improperly chained together", E_FAIL ); - return false; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialogResourceManager::CreateFont9( UINT iFont ) -{ - HRESULT hr = S_OK; - - DXUTFontNode* pFontNode = m_FontCache.GetAt( iFont ); - - SAFE_RELEASE( pFontNode->pFont9 ); - - V_RETURN( D3DXCreateFont( m_pd3d9Device, pFontNode->nHeight, 0, pFontNode->nWeight, 1, FALSE, DEFAULT_CHARSET, - OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, - pFontNode->strFace, &pFontNode->pFont9 ) ); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialogResourceManager::CreateFont11( UINT iFont ) -{ - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialogResourceManager::CreateTexture9( UINT iTexture ) -{ - HRESULT hr = S_OK; - - DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( iTexture ); - - - D3DXIMAGE_INFO info; - - if( !pTextureNode->bFileSource ) - { - if( pTextureNode->nResourceID == 0xFFFF && pTextureNode->hResourceModule == ( HMODULE )0xFFFF ) - { - hr = DXUTCreateGUITextureFromInternalArray9( m_pd3d9Device, &pTextureNode->pTexture9, &info ); - if( FAILED( hr ) ) - return DXTRACE_ERR( L"D3DXCreateTextureFromFileInMemoryEx", hr ); - } - else - { - LPCWSTR pID = pTextureNode->nResourceID ? ( LPCWSTR )( size_t )pTextureNode->nResourceID : - pTextureNode->strFilename; - - // Create texture from resource - hr = D3DXCreateTextureFromResourceEx( m_pd3d9Device, pTextureNode->hResourceModule, pID, D3DX_DEFAULT, - D3DX_DEFAULT, - 1, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, - D3DX_DEFAULT, D3DX_DEFAULT, 0, - &info, NULL, &pTextureNode->pTexture9 ); - if( FAILED( hr ) ) - return DXTRACE_ERR( L"D3DXCreateTextureFromResourceEx", hr ); - } - } - else - { - // Make sure there's a texture to create - if( pTextureNode->strFilename[0] == 0 ) - return S_OK; - - // Create texture from file - hr = D3DXCreateTextureFromFileEx( m_pd3d9Device, pTextureNode->strFilename, D3DX_DEFAULT, D3DX_DEFAULT, - 1, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, - D3DX_DEFAULT, D3DX_DEFAULT, 0, - &info, NULL, &pTextureNode->pTexture9 ); - if( FAILED( hr ) ) - { - return DXTRACE_ERR( L"D3DXCreateTextureFromFileEx", hr ); - } - } - - // Store dimensions - pTextureNode->dwWidth = info.Width; - pTextureNode->dwHeight = info.Height; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTDialogResourceManager::CreateTexture11( UINT iTexture ) -{ - HRESULT hr = S_OK; - - DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( iTexture ); - - if( !pTextureNode->bFileSource ) - { - if( pTextureNode->nResourceID == 0xFFFF && pTextureNode->hResourceModule == ( HMODULE )0xFFFF ) - { - hr = DXUTCreateGUITextureFromInternalArray11( m_pd3d11Device, &pTextureNode->pTexture11, NULL ); - if( FAILED( hr ) ) - return DXTRACE_ERR( L"D3DX10CreateResourceFromFileInMemory", hr ); - } - //else - //{ - // LPCWSTR pID = pTextureNode->nResourceID ? ( LPCWSTR )( size_t )pTextureNode->nResourceID : - // pTextureNode->strFilename; - - // D3DX10_IMAGE_INFO SrcInfo; - // D3DX10GetImageInfoFromResource( NULL, pID, NULL, &SrcInfo, NULL ); - - // // Create texture from resource - // ID3D10Resource* pRes; - // D3DX10_IMAGE_LOAD_INFO loadInfo; - // loadInfo.Width = D3DX10_DEFAULT; - // loadInfo.Height = D3DX10_DEFAULT; - // loadInfo.Depth = D3DX10_DEFAULT; - // loadInfo.FirstMipLevel = 0; - // loadInfo.MipLevels = 1; - // loadInfo.Usage = D3D10_USAGE_DEFAULT; - // loadInfo.BindFlags = D3D10_BIND_SHADER_RESOURCE; - // loadInfo.CpuAccessFlags = 0; - // loadInfo.MiscFlags = 0; - // loadInfo.Format = MAKE_TYPELESS( SrcInfo.Format ); - // loadInfo.Filter = D3DX10_FILTER_NONE; - // loadInfo.MipFilter = D3DX10_FILTER_NONE; - // loadInfo.pSrcInfo = &SrcInfo; - - // hr = D3DX10CreateTextureFromResource( m_pd3d10Device, pTextureNode->hResourceModule, pID, &loadInfo, - // NULL, &pRes, NULL ); - // if( FAILED( hr ) ) - // return DXTRACE_ERR( L"D3DX10CreateResourceFromResource", hr ); - // hr = pRes->QueryInterface( __uuidof( ID3D10Texture2D ), ( LPVOID* )&pTextureNode->pTexture10 ); - // SAFE_RELEASE( pRes ); - // if( FAILED( hr ) ) - // return hr; - //} - } - else - { - // - //// Make sure there's a texture to create - //if( pTextureNode->strFilename[0] == 0 ) - // return S_OK; - - //D3DX10_IMAGE_INFO SrcInfo; - //D3DX10GetImageInfoFromFile( pTextureNode->strFilename, NULL, &SrcInfo, NULL ); - - //// Create texture from file - //ID3D10Resource* pRes; - //D3DX10_IMAGE_LOAD_INFO loadInfo; - //loadInfo.Width = D3DX10_DEFAULT; - //loadInfo.Height = D3DX10_DEFAULT; - //loadInfo.Depth = D3DX10_DEFAULT; - //loadInfo.FirstMipLevel = 0; - //loadInfo.MipLevels = 1; - //loadInfo.Usage = D3D10_USAGE_DEFAULT; - //loadInfo.BindFlags = D3D10_BIND_SHADER_RESOURCE; - //loadInfo.CpuAccessFlags = 0; - //loadInfo.MiscFlags = 0; - //loadInfo.Format = MAKE_TYPELESS( SrcInfo.Format ); - //loadInfo.Filter = D3DX10_FILTER_NONE; - //loadInfo.MipFilter = D3DX10_FILTER_NONE; - //loadInfo.pSrcInfo = &SrcInfo; - //hr = D3DX10CreateTextureFromFile( m_pd3d10Device, pTextureNode->strFilename, &loadInfo, NULL, &pRes, NULL ); - //if( FAILED( hr ) ) - //{ - // return DXTRACE_ERR( L"D3DX10CreateResourceFromFileEx", hr ); - //} - //hr = pRes->QueryInterface( __uuidof( ID3D10Texture2D ), ( LPVOID* )&pTextureNode->pTexture10 ); - //SAFE_RELEASE( pRes ); - //if( FAILED( hr ) ) - // return hr; - // - } - - // Store dimensions - D3D11_TEXTURE2D_DESC desc; - pTextureNode->pTexture11->GetDesc( &desc ); - pTextureNode->dwWidth = desc.Width; - pTextureNode->dwHeight = desc.Height; - - // Create resource view - D3D11_SHADER_RESOURCE_VIEW_DESC SRVDesc; - SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; - SRVDesc.Format = MAKE_SRGB( desc.Format ); - SRVDesc.Texture2D.MipLevels = 1; - SRVDesc.Texture2D.MostDetailedMip = 0; - hr = m_pd3d11Device->CreateShaderResourceView( pTextureNode->pTexture11, &SRVDesc, &pTextureNode->pTexResView11 ); - - return hr; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTDialog::InitDefaultElements() -{ - SetFont( 0, L"Arial", 14, FW_NORMAL ); - - CDXUTElement Element; - RECT rcTexture; - - //------------------------------------- - // Element for the caption - //------------------------------------- - m_CapElement.SetFont( 0 ); - SetRect( &rcTexture, 17, 269, 241, 287 ); - m_CapElement.SetTexture( 0, &rcTexture ); - m_CapElement.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 255, 255, 255, 255 ); - m_CapElement.FontColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 255, 255, 255, 255 ); - m_CapElement.SetFont( 0, D3DCOLOR_ARGB( 255, 255, 255, 255 ), DT_LEFT | DT_VCENTER ); - // Pre-blend as we don't need to transition the state - m_CapElement.TextureColor.Blend( DXUT_STATE_NORMAL, 10.0f ); - m_CapElement.FontColor.Blend( DXUT_STATE_NORMAL, 10.0f ); - - //------------------------------------- - // CDXUTStatic - //------------------------------------- - Element.SetFont( 0 ); - Element.FontColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 200, 200, 200, 200 ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_STATIC, 0, &Element ); - - - //------------------------------------- - // CDXUTButton - Button - //------------------------------------- - SetRect( &rcTexture, 0, 0, 136, 54 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0 ); - Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 150, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB( 200, 255, 255, 255 ); - Element.FontColor.States[ DXUT_STATE_MOUSEOVER ] = D3DCOLOR_ARGB( 255, 0, 0, 0 ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_BUTTON, 0, &Element ); - - - //------------------------------------- - // CDXUTButton - Fill layer - //------------------------------------- - SetRect( &rcTexture, 136, 0, 252, 54 ); - Element.SetTexture( 0, &rcTexture, D3DCOLOR_ARGB( 0, 255, 255, 255 ) ); - Element.TextureColor.States[ DXUT_STATE_MOUSEOVER ] = D3DCOLOR_ARGB( 160, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB( 60, 0, 0, 0 ); - Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB( 30, 255, 255, 255 ); - - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_BUTTON, 1, &Element ); - - - //------------------------------------- - // CDXUTCheckBox - Box - //------------------------------------- - SetRect( &rcTexture, 0, 54, 27, 81 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 255, 255, 255 ), DT_LEFT | DT_VCENTER ); - Element.FontColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 200, 200, 200, 200 ); - Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 150, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB( 200, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB( 255, 255, 255, 255 ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_CHECKBOX, 0, &Element ); - - - //------------------------------------- - // CDXUTCheckBox - Check - //------------------------------------- - SetRect( &rcTexture, 27, 54, 54, 81 ); - Element.SetTexture( 0, &rcTexture ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_CHECKBOX, 1, &Element ); - - - //------------------------------------- - // CDXUTRadioButton - Box - //------------------------------------- - SetRect( &rcTexture, 54, 54, 81, 81 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 255, 255, 255 ), DT_LEFT | DT_VCENTER ); - Element.FontColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 200, 200, 200, 200 ); - Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 150, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB( 200, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB( 255, 255, 255, 255 ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_RADIOBUTTON, 0, &Element ); - - - //------------------------------------- - // CDXUTRadioButton - Check - //------------------------------------- - SetRect( &rcTexture, 81, 54, 108, 81 ); - Element.SetTexture( 0, &rcTexture ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_RADIOBUTTON, 1, &Element ); - - - //------------------------------------- - // CDXUTComboBox - Main - //------------------------------------- - SetRect( &rcTexture, 7, 81, 247, 123 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0 ); - Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 150, 200, 200, 200 ); - Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB( 170, 230, 230, 230 ); - Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 70, 200, 200, 200 ); - Element.FontColor.States[ DXUT_STATE_MOUSEOVER ] = D3DCOLOR_ARGB( 255, 0, 0, 0 ); - Element.FontColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB( 255, 0, 0, 0 ); - Element.FontColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 200, 200, 200, 200 ); - - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_COMBOBOX, 0, &Element ); - - - //------------------------------------- - // CDXUTComboBox - Button - //------------------------------------- - SetRect( &rcTexture, 98, 189, 151, 238 ); - Element.SetTexture( 0, &rcTexture ); - Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 150, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB( 255, 150, 150, 150 ); - Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB( 200, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 70, 255, 255, 255 ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_COMBOBOX, 1, &Element ); - - - //------------------------------------- - // CDXUTComboBox - Dropdown - //------------------------------------- - SetRect( &rcTexture, 13, 123, 241, 160 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 0, 0, 0 ), DT_LEFT | DT_TOP ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_COMBOBOX, 2, &Element ); - - - //------------------------------------- - // CDXUTComboBox - Selection - //------------------------------------- - SetRect( &rcTexture, 12, 163, 239, 183 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 255, 255, 255 ), DT_LEFT | DT_TOP ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_COMBOBOX, 3, &Element ); - - - //------------------------------------- - // CDXUTSlider - Track - //------------------------------------- - SetRect( &rcTexture, 1, 187, 93, 228 ); - Element.SetTexture( 0, &rcTexture ); - Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( 150, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB( 200, 255, 255, 255 ); - Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 70, 255, 255, 255 ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_SLIDER, 0, &Element ); - - //------------------------------------- - // CDXUTSlider - Button - //------------------------------------- - SetRect( &rcTexture, 151, 193, 192, 234 ); - Element.SetTexture( 0, &rcTexture ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_SLIDER, 1, &Element ); - - //------------------------------------- - // CDXUTScrollBar - Track - //------------------------------------- - int nScrollBarStartX = 196; - int nScrollBarStartY = 191; - SetRect( &rcTexture, nScrollBarStartX + 0, nScrollBarStartY + 21, nScrollBarStartX + 22, nScrollBarStartY + 32 ); - Element.SetTexture( 0, &rcTexture ); - Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 255, 200, 200, 200 ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_SCROLLBAR, 0, &Element ); - - //------------------------------------- - // CDXUTScrollBar - Up Arrow - //------------------------------------- - SetRect( &rcTexture, nScrollBarStartX + 0, nScrollBarStartY + 1, nScrollBarStartX + 22, nScrollBarStartY + 21 ); - Element.SetTexture( 0, &rcTexture ); - Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 255, 200, 200, 200 ); - - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_SCROLLBAR, 1, &Element ); - - //------------------------------------- - // CDXUTScrollBar - Down Arrow - //------------------------------------- - SetRect( &rcTexture, nScrollBarStartX + 0, nScrollBarStartY + 32, nScrollBarStartX + 22, nScrollBarStartY + 53 ); - Element.SetTexture( 0, &rcTexture ); - Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 255, 200, 200, 200 ); - - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_SCROLLBAR, 2, &Element ); - - //------------------------------------- - // CDXUTScrollBar - Button - //------------------------------------- - SetRect( &rcTexture, 220, 192, 238, 234 ); - Element.SetTexture( 0, &rcTexture ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_SCROLLBAR, 3, &Element ); - - - //------------------------------------- - // CDXUTEditBox - //------------------------------------- - // Element assignment: - // 0 - text area - // 1 - top left border - // 2 - top border - // 3 - top right border - // 4 - left border - // 5 - right border - // 6 - lower left border - // 7 - lower border - // 8 - lower right border - - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 0, 0, 0 ), DT_LEFT | DT_TOP ); - - // Assign the style - SetRect( &rcTexture, 14, 90, 241, 113 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 0, &Element ); - SetRect( &rcTexture, 8, 82, 14, 90 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 1, &Element ); - SetRect( &rcTexture, 14, 82, 241, 90 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 2, &Element ); - SetRect( &rcTexture, 241, 82, 246, 90 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 3, &Element ); - SetRect( &rcTexture, 8, 90, 14, 113 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 4, &Element ); - SetRect( &rcTexture, 241, 90, 246, 113 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 5, &Element ); - SetRect( &rcTexture, 8, 113, 14, 121 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 6, &Element ); - SetRect( &rcTexture, 14, 113, 241, 121 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 7, &Element ); - SetRect( &rcTexture, 241, 113, 246, 121 ); - Element.SetTexture( 0, &rcTexture ); - SetDefaultElement( DXUT_CONTROL_EDITBOX, 8, &Element ); - - //------------------------------------- - // CDXUTListBox - Main - //------------------------------------- - SetRect( &rcTexture, 13, 123, 241, 160 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 0, 0, 0 ), DT_LEFT | DT_TOP ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_LISTBOX, 0, &Element ); - - //------------------------------------- - // CDXUTListBox - Selection - //------------------------------------- - - SetRect( &rcTexture, 16, 166, 240, 183 ); - Element.SetTexture( 0, &rcTexture ); - Element.SetFont( 0, D3DCOLOR_ARGB( 255, 255, 255, 255 ), DT_LEFT | DT_TOP ); - - // Assign the Element - SetDefaultElement( DXUT_CONTROL_LISTBOX, 1, &Element ); -} - - - -//-------------------------------------------------------------------------------------- -// CDXUTControl class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTControl::CDXUTControl( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_BUTTON; - m_pDialog = pDialog; - m_ID = 0; - m_Index = 0; - m_pUserData = NULL; - - m_bEnabled = true; - m_bVisible = true; - m_bMouseOver = false; - m_bHasFocus = false; - m_bIsDefault = false; - - m_pDialog = NULL; - - m_x = 0; - m_y = 0; - m_width = 0; - m_height = 0; - - ZeroMemory( &m_rcBoundingBox, sizeof( m_rcBoundingBox ) ); -} - - -CDXUTControl::~CDXUTControl() -{ - for( int i = 0; i < m_Elements.GetSize(); ++i ) - { - delete m_Elements[i]; - } - m_Elements.RemoveAll(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTControl::SetTextColor( D3DCOLOR Color ) -{ - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - - if( pElement ) - pElement->FontColor.States[DXUT_STATE_NORMAL] = Color; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTControl::SetElement( UINT iElement, CDXUTElement* pElement ) -{ - HRESULT hr = S_OK; - - if( pElement == NULL ) - return E_INVALIDARG; - - // Make certain the array is this large - for( UINT i = m_Elements.GetSize(); i <= iElement; i++ ) - { - CDXUTElement* pNewElement = new CDXUTElement(); - if( pNewElement == NULL ) - return E_OUTOFMEMORY; - - hr = m_Elements.Add( pNewElement ); - if( FAILED( hr ) ) - { - SAFE_DELETE( pNewElement ); - return hr; - } - } - - // Update the data - CDXUTElement* pCurElement = m_Elements.GetAt( iElement ); - *pCurElement = *pElement; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTControl::Refresh() -{ - m_bMouseOver = false; - m_bHasFocus = false; - - for( int i = 0; i < m_Elements.GetSize(); i++ ) - { - CDXUTElement* pElement = m_Elements.GetAt( i ); - pElement->Refresh(); - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTControl::UpdateRects() -{ - SetRect( &m_rcBoundingBox, m_x, m_y, m_x + m_width, m_y + m_height ); -} - - -//-------------------------------------------------------------------------------------- -// CDXUTStatic class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTStatic::CDXUTStatic( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_STATIC; - m_pDialog = pDialog; - - ZeroMemory( &m_strText, sizeof( m_strText ) ); - - for( int i = 0; i < m_Elements.GetSize(); i++ ) - { - CDXUTElement* pElement = m_Elements.GetAt( i ); - SAFE_DELETE( pElement ); - } - - m_Elements.RemoveAll(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTStatic::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - - DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL; - - if( m_bEnabled == false ) - iState = DXUT_STATE_DISABLED; - - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - - pElement->FontColor.Blend( iState, fElapsedTime ); - - m_pDialog->DrawText( m_strText, pElement, &m_rcBoundingBox, false, -1, false); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTStatic::GetTextCopy( __out_ecount(bufferCount) LPWSTR strDest, - UINT bufferCount ) -{ - // Validate incoming parameters - if( strDest == NULL || bufferCount == 0 ) - { - return E_INVALIDARG; - } - - // Copy the window text - wcscpy_s( strDest, bufferCount, m_strText ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTStatic::SetText( LPCWSTR strText ) -{ - if( strText == NULL ) - { - m_strText[0] = 0; - return S_OK; - } - - wcscpy_s( m_strText, MAX_PATH, strText ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// CDXUTButton class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTButton::CDXUTButton( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_BUTTON; - m_pDialog = pDialog; - - m_bPressed = false; - m_nHotkey = 0; -} - -//-------------------------------------------------------------------------------------- -bool CDXUTButton::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_KEYDOWN: - { - switch( wParam ) - { - case VK_SPACE: - m_bPressed = true; - return true; - } - } - - case WM_KEYUP: - { - switch( wParam ) - { - case VK_SPACE: - if( m_bPressed == true ) - { - m_bPressed = false; - m_pDialog->SendEvent( EVENT_BUTTON_CLICKED, true, this ); - } - return true; - } - } - } - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTButton::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - if( ContainsPoint( pt ) ) - { - // Pressed while inside the control - m_bPressed = true; - SetCapture( DXUTGetHWND() ); - - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - return true; - } - - break; - } - - case WM_LBUTTONUP: - { - if( m_bPressed ) - { - m_bPressed = false; - ReleaseCapture(); - - if( !m_pDialog->m_bKeyboardInput ) - m_pDialog->ClearFocus(); - - // Button click - if( ContainsPoint( pt ) ) - m_pDialog->SendEvent( EVENT_BUTTON_CLICKED, true, this ); - - return true; - } - - break; - } - }; - - return false; -} - -//-------------------------------------------------------------------------------------- -void CDXUTButton::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - - int nOffsetX = 0; - int nOffsetY = 0; - - DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL; - - if( m_bVisible == false ) - { - iState = DXUT_STATE_HIDDEN; - } - else if( m_bEnabled == false ) - { - iState = DXUT_STATE_DISABLED; - } - else if( m_bPressed ) - { - iState = DXUT_STATE_PRESSED; - - nOffsetX = 1; - nOffsetY = 2; - } - else if( m_bMouseOver ) - { - iState = DXUT_STATE_MOUSEOVER; - - nOffsetX = -1; - nOffsetY = -2; - } - else if( m_bHasFocus ) - { - iState = DXUT_STATE_FOCUS; - } - - // Background fill layer - //TODO: remove magic numbers - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - - float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f; - - RECT rcWindow = m_rcBoundingBox; - OffsetRect( &rcWindow, nOffsetX, nOffsetY ); - - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - pElement->FontColor.Blend( iState, fElapsedTime, fBlendRate ); - - m_pDialog->DrawSprite( pElement, &rcWindow, DXUT_FAR_BUTTON_DEPTH ); - m_pDialog->DrawText( m_strText, pElement, &rcWindow, false, -1, true ); - - // Main button - pElement = m_Elements.GetAt( 1 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - pElement->FontColor.Blend( iState, fElapsedTime, fBlendRate ); - - m_pDialog->DrawSprite( pElement, &rcWindow, DXUT_NEAR_BUTTON_DEPTH ); - m_pDialog->DrawText( m_strText, pElement, &rcWindow, false, -1, true ); -} - - - -//-------------------------------------------------------------------------------------- -// CDXUTCheckBox class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTCheckBox::CDXUTCheckBox( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_CHECKBOX; - m_pDialog = pDialog; - - m_bChecked = false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTCheckBox::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_KEYDOWN: - { - switch( wParam ) - { - case VK_SPACE: - m_bPressed = true; - return true; - } - } - - case WM_KEYUP: - { - switch( wParam ) - { - case VK_SPACE: - if( m_bPressed == true ) - { - m_bPressed = false; - SetCheckedInternal( !m_bChecked, true ); - } - return true; - } - } - } - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTCheckBox::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - if( ContainsPoint( pt ) ) - { - // Pressed while inside the control - m_bPressed = true; - SetCapture( DXUTGetHWND() ); - - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - return true; - } - - break; - } - - case WM_LBUTTONUP: - { - if( m_bPressed ) - { - m_bPressed = false; - ReleaseCapture(); - - // Button click - if( ContainsPoint( pt ) ) - SetCheckedInternal( !m_bChecked, true ); - - return true; - } - - break; - } - }; - - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTCheckBox::SetCheckedInternal( bool bChecked, bool bFromInput ) -{ - m_bChecked = bChecked; - - m_pDialog->SendEvent( EVENT_CHECKBOX_CHANGED, bFromInput, this ); -} - - -//-------------------------------------------------------------------------------------- -BOOL CDXUTCheckBox::ContainsPoint( POINT pt ) -{ - return ( PtInRect( &m_rcBoundingBox, pt ) || - PtInRect( &m_rcButton, pt ) ); -} - - - -//-------------------------------------------------------------------------------------- -void CDXUTCheckBox::UpdateRects() -{ - CDXUTButton::UpdateRects(); - - m_rcButton = m_rcBoundingBox; - m_rcButton.right = m_rcButton.left + RectHeight( m_rcButton ); - - m_rcText = m_rcBoundingBox; - m_rcText.left += ( int )( 1.25f * RectWidth( m_rcButton ) ); -} - - - -//-------------------------------------------------------------------------------------- -void CDXUTCheckBox::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL; - - if( m_bVisible == false ) - iState = DXUT_STATE_HIDDEN; - else if( m_bEnabled == false ) - iState = DXUT_STATE_DISABLED; - else if( m_bPressed ) - iState = DXUT_STATE_PRESSED; - else if( m_bMouseOver ) - iState = DXUT_STATE_MOUSEOVER; - else if( m_bHasFocus ) - iState = DXUT_STATE_FOCUS; - - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - - float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f; - - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - pElement->FontColor.Blend( iState, fElapsedTime, fBlendRate ); - - m_pDialog->DrawSprite( pElement, &m_rcButton, DXUT_NEAR_BUTTON_DEPTH ); - m_pDialog->DrawText( m_strText, pElement, &m_rcText, false, -1, false ); - - if( !m_bChecked ) - iState = DXUT_STATE_HIDDEN; - - pElement = m_Elements.GetAt( 1 ); - - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - m_pDialog->DrawSprite( pElement, &m_rcButton, DXUT_FAR_BUTTON_DEPTH ); -} - - - - -//-------------------------------------------------------------------------------------- -// CDXUTRadioButton class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTRadioButton::CDXUTRadioButton( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_RADIOBUTTON; - m_pDialog = pDialog; -} - - - -//-------------------------------------------------------------------------------------- -bool CDXUTRadioButton::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_KEYDOWN: - { - switch( wParam ) - { - case VK_SPACE: - m_bPressed = true; - return true; - } - } - - case WM_KEYUP: - { - switch( wParam ) - { - case VK_SPACE: - if( m_bPressed == true ) - { - m_bPressed = false; - - m_pDialog->ClearRadioButtonGroup( m_nButtonGroup ); - m_bChecked = !m_bChecked; - - m_pDialog->SendEvent( EVENT_RADIOBUTTON_CHANGED, true, this ); - } - return true; - } - } - } - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTRadioButton::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - if( ContainsPoint( pt ) ) - { - // Pressed while inside the control - m_bPressed = true; - SetCapture( DXUTGetHWND() ); - - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - return true; - } - - break; - } - - case WM_LBUTTONUP: - { - if( m_bPressed ) - { - m_bPressed = false; - ReleaseCapture(); - - // Button click - if( ContainsPoint( pt ) ) - { - m_pDialog->ClearRadioButtonGroup( m_nButtonGroup ); - m_bChecked = !m_bChecked; - - m_pDialog->SendEvent( EVENT_RADIOBUTTON_CHANGED, true, this ); - } - - return true; - } - - break; - } - }; - - return false; -} - -//-------------------------------------------------------------------------------------- -void CDXUTRadioButton::SetCheckedInternal( bool bChecked, bool bClearGroup, bool bFromInput ) -{ - if( bChecked && bClearGroup ) - m_pDialog->ClearRadioButtonGroup( m_nButtonGroup ); - - m_bChecked = bChecked; - m_pDialog->SendEvent( EVENT_RADIOBUTTON_CHANGED, bFromInput, this ); -} - - - - -//-------------------------------------------------------------------------------------- -// CDXUTComboBox class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTComboBox::CDXUTComboBox( CDXUTDialog* pDialog ) : m_ScrollBar( pDialog ) -{ - m_Type = DXUT_CONTROL_COMBOBOX; - m_pDialog = pDialog; - - m_nDropHeight = 100; - - m_nSBWidth = 16; - m_bOpened = false; - m_iSelected = -1; - m_iFocused = -1; -} - - -//-------------------------------------------------------------------------------------- -CDXUTComboBox::~CDXUTComboBox() -{ - RemoveAllItems(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTComboBox::SetTextColor( D3DCOLOR Color ) -{ - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - - if( pElement ) - pElement->FontColor.States[DXUT_STATE_NORMAL] = Color; - - pElement = m_Elements.GetAt( 2 ); - - if( pElement ) - pElement->FontColor.States[DXUT_STATE_NORMAL] = Color; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTComboBox::UpdateRects() -{ - - CDXUTButton::UpdateRects(); - - m_rcButton = m_rcBoundingBox; - m_rcButton.left = m_rcButton.right - RectHeight( m_rcButton ); - - m_rcText = m_rcBoundingBox; - m_rcText.right = m_rcButton.left; - - m_rcDropdown = m_rcText; - OffsetRect( &m_rcDropdown, 0, ( int )( 0.90f * RectHeight( m_rcText ) ) ); - m_rcDropdown.bottom += m_nDropHeight; - m_rcDropdown.right -= m_nSBWidth; - - m_rcDropdownText = m_rcDropdown; - m_rcDropdownText.left += ( int )( 0.1f * RectWidth( m_rcDropdown ) ); - m_rcDropdownText.right -= ( int )( 0.1f * RectWidth( m_rcDropdown ) ); - m_rcDropdownText.top += ( int )( 0.1f * RectHeight( m_rcDropdown ) ); - m_rcDropdownText.bottom -= ( int )( 0.1f * RectHeight( m_rcDropdown ) ); - - // Update the scrollbar's rects - m_ScrollBar.SetLocation( m_rcDropdown.right, m_rcDropdown.top + 2 ); - m_ScrollBar.SetSize( m_nSBWidth, RectHeight( m_rcDropdown ) - 2 ); - DXUTFontNode* pFontNode = m_pDialog->GetManager()->GetFontNode( m_Elements.GetAt( 2 )->iFont ); - if( pFontNode && pFontNode->nHeight ) - { - m_ScrollBar.SetPageSize( RectHeight( m_rcDropdownText ) / pFontNode->nHeight ); - - // The selected item may have been scrolled off the page. - // Ensure that it is in page again. - m_ScrollBar.ShowItem( m_iSelected ); - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTComboBox::OnFocusOut() -{ - CDXUTButton::OnFocusOut(); - - m_bOpened = false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTComboBox::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - const DWORD REPEAT_MASK = ( 0x40000000 ); - - if( !m_bEnabled || !m_bVisible ) - return false; - - // Let the scroll bar have a chance to handle it first - if( m_ScrollBar.HandleKeyboard( uMsg, wParam, lParam ) ) - return true; - - switch( uMsg ) - { - case WM_KEYDOWN: - { - switch( wParam ) - { - case VK_RETURN: - if( m_bOpened ) - { - if( m_iSelected != m_iFocused ) - { - m_iSelected = m_iFocused; - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - } - m_bOpened = false; - - if( !m_pDialog->m_bKeyboardInput ) - m_pDialog->ClearFocus(); - - return true; - } - break; - - case VK_F4: - // Filter out auto-repeats - if( lParam & REPEAT_MASK ) - return true; - - m_bOpened = !m_bOpened; - - if( !m_bOpened ) - { - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - - if( !m_pDialog->m_bKeyboardInput ) - m_pDialog->ClearFocus(); - } - - return true; - - case VK_LEFT: - case VK_UP: - if( m_iFocused > 0 ) - { - m_iFocused--; - m_iSelected = m_iFocused; - - if( !m_bOpened ) - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - } - - return true; - - case VK_RIGHT: - case VK_DOWN: - if( m_iFocused + 1 < ( int )GetNumItems() ) - { - m_iFocused++; - m_iSelected = m_iFocused; - - if( !m_bOpened ) - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - } - - return true; - } - break; - } - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTComboBox::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - // Let the scroll bar handle it first. - if( m_ScrollBar.HandleMouse( uMsg, pt, wParam, lParam ) ) - return true; - - switch( uMsg ) - { - case WM_MOUSEMOVE: - { - if( m_bOpened && PtInRect( &m_rcDropdown, pt ) ) - { - // Determine which item has been selected - for( int i = 0; i < m_Items.GetSize(); i++ ) - { - DXUTComboBoxItem* pItem = m_Items.GetAt( i ); - if( pItem->bVisible && - PtInRect( &pItem->rcActive, pt ) ) - { - m_iFocused = i; - } - } - return true; - } - break; - } - - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - if( ContainsPoint( pt ) ) - { - // Pressed while inside the control - m_bPressed = true; - SetCapture( DXUTGetHWND() ); - - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - // Toggle dropdown - if( m_bHasFocus ) - { - m_bOpened = !m_bOpened; - - if( !m_bOpened ) - { - if( !m_pDialog->m_bKeyboardInput ) - m_pDialog->ClearFocus(); - } - } - - return true; - } - - // Perhaps this click is within the dropdown - if( m_bOpened && PtInRect( &m_rcDropdown, pt ) ) - { - // Determine which item has been selected - for( int i = m_ScrollBar.GetTrackPos(); i < m_Items.GetSize(); i++ ) - { - DXUTComboBoxItem* pItem = m_Items.GetAt( i ); - if( pItem->bVisible && - PtInRect( &pItem->rcActive, pt ) ) - { - m_iFocused = m_iSelected = i; - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - m_bOpened = false; - - if( !m_pDialog->m_bKeyboardInput ) - m_pDialog->ClearFocus(); - - break; - } - } - - return true; - } - - // Mouse click not on main control or in dropdown, fire an event if needed - if( m_bOpened ) - { - m_iFocused = m_iSelected; - - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - m_bOpened = false; - } - - // Make sure the control is no longer in a pressed state - m_bPressed = false; - - // Release focus if appropriate - if( !m_pDialog->m_bKeyboardInput ) - { - m_pDialog->ClearFocus(); - } - - break; - } - - case WM_LBUTTONUP: - { - if( m_bPressed && ContainsPoint( pt ) ) - { - // Button click - m_bPressed = false; - ReleaseCapture(); - return true; - } - - break; - } - - case WM_MOUSEWHEEL: - { - int zDelta = ( short )HIWORD( wParam ) / WHEEL_DELTA; - if( m_bOpened ) - { - UINT uLines; - SystemParametersInfo( SPI_GETWHEELSCROLLLINES, 0, &uLines, 0 ); - m_ScrollBar.Scroll( -zDelta * uLines ); - } - else - { - if( zDelta > 0 ) - { - if( m_iFocused > 0 ) - { - m_iFocused--; - m_iSelected = m_iFocused; - - if( !m_bOpened ) - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - } - } - else - { - if( m_iFocused + 1 < ( int )GetNumItems() ) - { - m_iFocused++; - m_iSelected = m_iFocused; - - if( !m_bOpened ) - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); - } - } - } - return true; - } - }; - - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTComboBox::OnHotkey() -{ - if( m_bOpened ) - return; - - if( m_iSelected == -1 ) - return; - - if( m_pDialog->IsKeyboardInputEnabled() ) - m_pDialog->RequestFocus( this ); - - m_iSelected++; - - if( m_iSelected >= ( int )m_Items.GetSize() ) - m_iSelected = 0; - - m_iFocused = m_iSelected; - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTComboBox::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL; - - if( !m_bOpened ) - iState = DXUT_STATE_HIDDEN; - - // Dropdown box - CDXUTElement* pElement = m_Elements.GetAt( 2 ); - - // If we have not initialized the scroll bar page size, - // do that now. - static bool bSBInit; - if( !bSBInit ) - { - // Update the page size of the scroll bar - if( m_pDialog->GetManager()->GetFontNode( pElement->iFont )->nHeight ) - m_ScrollBar.SetPageSize( RectHeight( m_rcDropdownText ) / - m_pDialog->GetManager()->GetFontNode( pElement->iFont )->nHeight ); - else - m_ScrollBar.SetPageSize( RectHeight( m_rcDropdownText ) ); - bSBInit = true; - } - - // Scroll bar - if( m_bOpened ) - m_ScrollBar.Render( fElapsedTime ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime ); - pElement->FontColor.Blend( iState, fElapsedTime ); - - m_pDialog->DrawSprite( pElement, &m_rcDropdown, DXUT_NEAR_BUTTON_DEPTH ); - - // Selection outline - CDXUTElement* pSelectionElement = m_Elements.GetAt( 3 ); - pSelectionElement->TextureColor.Current = pElement->TextureColor.Current; - pSelectionElement->FontColor.Current = pSelectionElement->FontColor.States[ DXUT_STATE_NORMAL ]; - - DXUTFontNode* pFont = m_pDialog->GetFont( pElement->iFont ); - if( pFont ) - { - int curY = m_rcDropdownText.top; - int nRemainingHeight = RectHeight( m_rcDropdownText ); - //WCHAR strDropdown[4096] = {0}; - - for( int i = m_ScrollBar.GetTrackPos(); i < m_Items.GetSize(); i++ ) - { - DXUTComboBoxItem* pItem = m_Items.GetAt( i ); - - // Make sure there's room left in the dropdown - nRemainingHeight -= pFont->nHeight; - if( nRemainingHeight < 0 ) - { - pItem->bVisible = false; - continue; - } - - SetRect( &pItem->rcActive, m_rcDropdownText.left, curY, m_rcDropdownText.right, curY + pFont->nHeight ); - curY += pFont->nHeight; - - //debug - //int blue = 50 * i; - //m_pDialog->DrawRect( &pItem->rcActive, 0xFFFF0000 | blue ); - - pItem->bVisible = true; - - if( m_bOpened ) - { - if( ( int )i == m_iFocused ) - { - RECT rc; - SetRect( &rc, m_rcDropdown.left, pItem->rcActive.top - 2, m_rcDropdown.right, - pItem->rcActive.bottom + 2 ); - m_pDialog->DrawSprite( pSelectionElement, &rc, DXUT_NEAR_BUTTON_DEPTH ); - m_pDialog->DrawText( pItem->strText, pSelectionElement, &pItem->rcActive ); - } - else - { - m_pDialog->DrawText( pItem->strText, pElement, &pItem->rcActive ); - } - } - } - } - - int nOffsetX = 0; - int nOffsetY = 0; - - iState = DXUT_STATE_NORMAL; - - if( m_bVisible == false ) - iState = DXUT_STATE_HIDDEN; - else if( m_bEnabled == false ) - iState = DXUT_STATE_DISABLED; - else if( m_bPressed ) - { - iState = DXUT_STATE_PRESSED; - - nOffsetX = 1; - nOffsetY = 2; - } - else if( m_bMouseOver ) - { - iState = DXUT_STATE_MOUSEOVER; - - nOffsetX = -1; - nOffsetY = -2; - } - else if( m_bHasFocus ) - iState = DXUT_STATE_FOCUS; - - float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f; - - // Button - pElement = m_Elements.GetAt( 1 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - - RECT rcWindow = m_rcButton; - OffsetRect( &rcWindow, nOffsetX, nOffsetY ); - m_pDialog->DrawSprite( pElement, &rcWindow, DXUT_FAR_BUTTON_DEPTH ); - - if( m_bOpened ) - iState = DXUT_STATE_PRESSED; - - // Main text box - //TODO: remove magic numbers - pElement = m_Elements.GetAt( 0 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - pElement->FontColor.Blend( iState, fElapsedTime, fBlendRate ); - - m_pDialog->DrawSprite( pElement, &m_rcText, DXUT_NEAR_BUTTON_DEPTH ); - - if( m_iSelected >= 0 && m_iSelected < ( int )m_Items.GetSize() ) - { - DXUTComboBoxItem* pItem = m_Items.GetAt( m_iSelected ); - if( pItem != NULL ) - { - m_pDialog->DrawText( pItem->strText, pElement, &m_rcText, false, -1, true ); - - } - } -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTComboBox::AddItem( const WCHAR* strText, void* pData ) -{ - // Validate parameters - if( strText == NULL ) - { - return E_INVALIDARG; - } - - // Create a new item and set the data - DXUTComboBoxItem* pItem = new DXUTComboBoxItem; - if( pItem == NULL ) - { - return DXTRACE_ERR_MSGBOX( L"new", E_OUTOFMEMORY ); - } - - ZeroMemory( pItem, sizeof( DXUTComboBoxItem ) ); - wcscpy_s( pItem->strText, 256, strText ); - pItem->pData = pData; - - m_Items.Add( pItem ); - - // Update the scroll bar with new range - m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() ); - - // If this is the only item in the list, it's selected - if( GetNumItems() == 1 ) - { - m_iSelected = 0; - m_iFocused = 0; - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, false, this ); - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTComboBox::RemoveItem( UINT index ) -{ - DXUTComboBoxItem* pItem = m_Items.GetAt( index ); - SAFE_DELETE( pItem ); - m_Items.Remove( index ); - m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() ); - if( m_iSelected >= m_Items.GetSize() ) - m_iSelected = m_Items.GetSize() - 1; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTComboBox::RemoveAllItems() -{ - for( int i = 0; i < m_Items.GetSize(); i++ ) - { - DXUTComboBoxItem* pItem = m_Items.GetAt( i ); - SAFE_DELETE( pItem ); - } - - m_Items.RemoveAll(); - m_ScrollBar.SetTrackRange( 0, 1 ); - m_iFocused = m_iSelected = -1; -} - - - -//-------------------------------------------------------------------------------------- -bool CDXUTComboBox::ContainsItem( const WCHAR* strText, UINT iStart ) -{ - return ( -1 != FindItem( strText, iStart ) ); -} - - -//-------------------------------------------------------------------------------------- -int CDXUTComboBox::FindItem( const WCHAR* strText, UINT iStart ) -{ - if( strText == NULL ) - return -1; - - for( int i = iStart; i < m_Items.GetSize(); i++ ) - { - DXUTComboBoxItem* pItem = m_Items.GetAt( i ); - - if( 0 == wcscmp( pItem->strText, strText ) ) - { - return i; - } - } - - return -1; -} - - -//-------------------------------------------------------------------------------------- -void* CDXUTComboBox::GetSelectedData() -{ - if( m_iSelected < 0 ) - return NULL; - - DXUTComboBoxItem* pItem = m_Items.GetAt( m_iSelected ); - return pItem->pData; -} - - -//-------------------------------------------------------------------------------------- -DXUTComboBoxItem* CDXUTComboBox::GetSelectedItem() -{ - if( m_iSelected < 0 ) - return NULL; - - return m_Items.GetAt( m_iSelected ); -} - - -//-------------------------------------------------------------------------------------- -void* CDXUTComboBox::GetItemData( const WCHAR* strText ) -{ - int index = FindItem( strText ); - if( index == -1 ) - { - return NULL; - } - - DXUTComboBoxItem* pItem = m_Items.GetAt( index ); - if( pItem == NULL ) - { - DXTRACE_ERR( L"CGrowableArray::GetAt", E_FAIL ); - return NULL; - } - - return pItem->pData; -} - - -//-------------------------------------------------------------------------------------- -void* CDXUTComboBox::GetItemData( int nIndex ) -{ - if( nIndex < 0 || nIndex >= m_Items.GetSize() ) - return NULL; - - return m_Items.GetAt( nIndex )->pData; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTComboBox::SetSelectedByIndex( UINT index ) -{ - if( index >= GetNumItems() ) - return E_INVALIDARG; - - m_iFocused = m_iSelected = index; - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, false, this ); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTComboBox::SetSelectedByText( const WCHAR* strText ) -{ - if( strText == NULL ) - return E_INVALIDARG; - - int index = FindItem( strText ); - if( index == -1 ) - return E_FAIL; - - m_iFocused = m_iSelected = index; - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, false, this ); - - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTComboBox::SetSelectedByData( void* pData ) -{ - for( int i = 0; i < m_Items.GetSize(); i++ ) - { - DXUTComboBoxItem* pItem = m_Items.GetAt( i ); - - if( pItem->pData == pData ) - { - m_iFocused = m_iSelected = i; - m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, false, this ); - return S_OK; - } - } - - return E_FAIL; -} - - - -//-------------------------------------------------------------------------------------- -CDXUTSlider::CDXUTSlider( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_SLIDER; - m_pDialog = pDialog; - - m_nMin = 0; - m_nMax = 100; - m_nValue = 50; - - m_bPressed = false; -} - - -//-------------------------------------------------------------------------------------- -BOOL CDXUTSlider::ContainsPoint( POINT pt ) -{ - return ( PtInRect( &m_rcBoundingBox, pt ) || - PtInRect( &m_rcButton, pt ) ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTSlider::UpdateRects() -{ - CDXUTControl::UpdateRects(); - - m_rcButton = m_rcBoundingBox; - m_rcButton.right = m_rcButton.left + RectHeight( m_rcButton ); - OffsetRect( &m_rcButton, -RectWidth( m_rcButton ) / 2, 0 ); - - m_nButtonX = ( int )( ( m_nValue - m_nMin ) * ( float )RectWidth( m_rcBoundingBox ) / ( m_nMax - m_nMin ) ); - OffsetRect( &m_rcButton, m_nButtonX, 0 ); -} - -int CDXUTSlider::ValueFromPos( int x ) -{ - float fValuePerPixel = ( float )( m_nMax - m_nMin ) / RectWidth( m_rcBoundingBox ); - return ( int )( 0.5f + m_nMin + fValuePerPixel * ( x - m_rcBoundingBox.left ) ); -} - -//-------------------------------------------------------------------------------------- -bool CDXUTSlider::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_KEYDOWN: - { - switch( wParam ) - { - case VK_HOME: - SetValueInternal( m_nMin, true ); - return true; - - case VK_END: - SetValueInternal( m_nMax, true ); - return true; - - case VK_LEFT: - case VK_DOWN: - SetValueInternal( m_nValue - 1, true ); - return true; - - case VK_RIGHT: - case VK_UP: - SetValueInternal( m_nValue + 1, true ); - return true; - - case VK_NEXT: - SetValueInternal( m_nValue - ( 10 > ( m_nMax - m_nMin ) / 10 ? 10 : ( m_nMax - m_nMin ) / 10 ), - true ); - return true; - - case VK_PRIOR: - SetValueInternal( m_nValue + ( 10 > ( m_nMax - m_nMin ) / 10 ? 10 : ( m_nMax - m_nMin ) / 10 ), - true ); - return true; - } - break; - } - } - - - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTSlider::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - if( PtInRect( &m_rcButton, pt ) ) - { - // Pressed while inside the control - m_bPressed = true; - SetCapture( DXUTGetHWND() ); - - m_nDragX = pt.x; - //m_nDragY = pt.y; - m_nDragOffset = m_nButtonX - m_nDragX; - - //m_nDragValue = m_nValue; - - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - return true; - } - - if( PtInRect( &m_rcBoundingBox, pt ) ) - { - m_nDragX = pt.x; - m_nDragOffset = 0; - m_bPressed = true; - - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - if( pt.x > m_nButtonX + m_x ) - { - SetValueInternal( m_nValue + 1, true ); - return true; - } - - if( pt.x < m_nButtonX + m_x ) - { - SetValueInternal( m_nValue - 1, true ); - return true; - } - } - - break; - } - - case WM_LBUTTONUP: - { - if( m_bPressed ) - { - m_bPressed = false; - ReleaseCapture(); - m_pDialog->SendEvent( EVENT_SLIDER_VALUE_CHANGED_UP, true, this ); - - return true; - } - - break; - } - - case WM_MOUSEMOVE: - { - if( m_bPressed ) - { - SetValueInternal( ValueFromPos( m_x + pt.x + m_nDragOffset ), true ); - return true; - } - - break; - } - - case WM_MOUSEWHEEL: - { - int nScrollAmount = int( ( short )HIWORD( wParam ) ) / WHEEL_DELTA; - SetValueInternal( m_nValue - nScrollAmount, true ); - return true; - } - }; - - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTSlider::SetRange( int nMin, int nMax ) -{ - m_nMin = nMin; - m_nMax = nMax; - - SetValueInternal( m_nValue, false ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTSlider::SetValueInternal( int nValue, bool bFromInput ) -{ - // Clamp to range - nValue = __max( m_nMin, nValue ); - nValue = __min( m_nMax, nValue ); - - if( nValue == m_nValue ) - return; - - m_nValue = nValue; - UpdateRects(); - - m_pDialog->SendEvent( EVENT_SLIDER_VALUE_CHANGED, bFromInput, this ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTSlider::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - - int nOffsetX = 0; - int nOffsetY = 0; - - DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL; - - if( m_bVisible == false ) - { - iState = DXUT_STATE_HIDDEN; - } - else if( m_bEnabled == false ) - { - iState = DXUT_STATE_DISABLED; - } - else if( m_bPressed ) - { - iState = DXUT_STATE_PRESSED; - - nOffsetX = 1; - nOffsetY = 2; - } - else if( m_bMouseOver ) - { - iState = DXUT_STATE_MOUSEOVER; - - nOffsetX = -1; - nOffsetY = -2; - } - else if( m_bHasFocus ) - { - iState = DXUT_STATE_FOCUS; - } - - float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f; - - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - m_pDialog->DrawSprite( pElement, &m_rcBoundingBox, DXUT_FAR_BUTTON_DEPTH ); - - //TODO: remove magic numbers - pElement = m_Elements.GetAt( 1 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - m_pDialog->DrawSprite( pElement, &m_rcButton, DXUT_NEAR_BUTTON_DEPTH ); -} - - -//-------------------------------------------------------------------------------------- -// CDXUTScrollBar class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTScrollBar::CDXUTScrollBar( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_SCROLLBAR; - m_pDialog = pDialog; - - m_bShowThumb = true; - m_bDrag = false; - - SetRect( &m_rcUpButton, 0, 0, 0, 0 ); - SetRect( &m_rcDownButton, 0, 0, 0, 0 ); - SetRect( &m_rcTrack, 0, 0, 0, 0 ); - SetRect( &m_rcThumb, 0, 0, 0, 0 ); - m_nPosition = 0; - m_nPageSize = 1; - m_nStart = 0; - m_nEnd = 1; - m_Arrow = CLEAR; - m_dArrowTS = 0.0; -} - - -//-------------------------------------------------------------------------------------- -CDXUTScrollBar::~CDXUTScrollBar() -{ -} - - -//-------------------------------------------------------------------------------------- -void CDXUTScrollBar::UpdateRects() -{ - CDXUTControl::UpdateRects(); - - // Make the buttons square - - SetRect( &m_rcUpButton, m_rcBoundingBox.left, m_rcBoundingBox.top, - m_rcBoundingBox.right, m_rcBoundingBox.top + RectWidth( m_rcBoundingBox ) ); - SetRect( &m_rcDownButton, m_rcBoundingBox.left, m_rcBoundingBox.bottom - RectWidth( m_rcBoundingBox ), - m_rcBoundingBox.right, m_rcBoundingBox.bottom ); - SetRect( &m_rcTrack, m_rcUpButton.left, m_rcUpButton.bottom, - m_rcDownButton.right, m_rcDownButton.top ); - m_rcThumb.left = m_rcUpButton.left; - m_rcThumb.right = m_rcUpButton.right; - - UpdateThumbRect(); -} - - -//-------------------------------------------------------------------------------------- -// Compute the dimension of the scroll thumb -void CDXUTScrollBar::UpdateThumbRect() -{ - if( m_nEnd - m_nStart > m_nPageSize ) - { - int nThumbHeight = __max( RectHeight( m_rcTrack ) * m_nPageSize / ( m_nEnd - m_nStart ), - SCROLLBAR_MINTHUMBSIZE ); - int nMaxPosition = m_nEnd - m_nStart - m_nPageSize; - m_rcThumb.top = m_rcTrack.top + ( m_nPosition - m_nStart ) * ( RectHeight( m_rcTrack ) - nThumbHeight ) - / nMaxPosition; - m_rcThumb.bottom = m_rcThumb.top + nThumbHeight; - m_bShowThumb = true; - - } - else - { - // No content to scroll - m_rcThumb.bottom = m_rcThumb.top; - m_bShowThumb = false; - } -} - - -//-------------------------------------------------------------------------------------- -// Scroll() scrolls by nDelta items. A positive value scrolls down, while a negative -// value scrolls up. -void CDXUTScrollBar::Scroll( int nDelta ) -{ - // Perform scroll - m_nPosition += nDelta; - - // Cap position - Cap(); - - // Update thumb position - UpdateThumbRect(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTScrollBar::ShowItem( int nIndex ) -{ - // Cap the index - - if( nIndex < 0 ) - nIndex = 0; - - if( nIndex >= m_nEnd ) - nIndex = m_nEnd - 1; - - // Adjust position - - if( m_nPosition > nIndex ) - m_nPosition = nIndex; - else if( m_nPosition + m_nPageSize <= nIndex ) - m_nPosition = nIndex - m_nPageSize + 1; - - UpdateThumbRect(); -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTScrollBar::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTScrollBar::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - static int ThumbOffsetY; - - m_LastMouse = pt; - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - // Check for click on up button - - if( PtInRect( &m_rcUpButton, pt ) ) - { - SetCapture( DXUTGetHWND() ); - if( m_nPosition > m_nStart ) - --m_nPosition; - UpdateThumbRect(); - m_Arrow = CLICKED_UP; - m_dArrowTS = DXUTGetTime(); - return true; - } - - // Check for click on down button - - if( PtInRect( &m_rcDownButton, pt ) ) - { - SetCapture( DXUTGetHWND() ); - if( m_nPosition + m_nPageSize < m_nEnd ) - ++m_nPosition; - UpdateThumbRect(); - m_Arrow = CLICKED_DOWN; - m_dArrowTS = DXUTGetTime(); - return true; - } - - // Check for click on thumb - - if( PtInRect( &m_rcThumb, pt ) ) - { - SetCapture( DXUTGetHWND() ); - m_bDrag = true; - ThumbOffsetY = pt.y - m_rcThumb.top; - return true; - } - - // Check for click on track - - if( m_rcThumb.left <= pt.x && - m_rcThumb.right > pt.x ) - { - SetCapture( DXUTGetHWND() ); - if( m_rcThumb.top > pt.y && - m_rcTrack.top <= pt.y ) - { - Scroll( -( m_nPageSize - 1 ) ); - return true; - } - else if( m_rcThumb.bottom <= pt.y && - m_rcTrack.bottom > pt.y ) - { - Scroll( m_nPageSize - 1 ); - return true; - } - } - - break; - } - - case WM_LBUTTONUP: - { - m_bDrag = false; - ReleaseCapture(); - UpdateThumbRect(); - m_Arrow = CLEAR; - break; - } - - case WM_MOUSEMOVE: - { - if( m_bDrag ) - { - m_rcThumb.bottom += pt.y - ThumbOffsetY - m_rcThumb.top; - m_rcThumb.top = pt.y - ThumbOffsetY; - if( m_rcThumb.top < m_rcTrack.top ) - OffsetRect( &m_rcThumb, 0, m_rcTrack.top - m_rcThumb.top ); - else if( m_rcThumb.bottom > m_rcTrack.bottom ) - OffsetRect( &m_rcThumb, 0, m_rcTrack.bottom - m_rcThumb.bottom ); - - // Compute first item index based on thumb position - - int nMaxFirstItem = m_nEnd - m_nStart - m_nPageSize; // Largest possible index for first item - int nMaxThumb = RectHeight( m_rcTrack ) - RectHeight( m_rcThumb ); // Largest possible thumb position from the top - - m_nPosition = m_nStart + - ( m_rcThumb.top - m_rcTrack.top + - nMaxThumb / ( nMaxFirstItem * 2 ) ) * // Shift by half a row to avoid last row covered by only one pixel - nMaxFirstItem / nMaxThumb; - - return true; - } - - break; - } - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTScrollBar::MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( WM_CAPTURECHANGED == uMsg ) - { - // The application just lost mouse capture. We may not have gotten - // the WM_MOUSEUP message, so reset m_bDrag here. - if( ( HWND )lParam != DXUTGetHWND() ) - m_bDrag = false; - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTScrollBar::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - - // Check if the arrow button has been held for a while. - // If so, update the thumb position to simulate repeated - // scroll. - if( m_Arrow != CLEAR ) - { - double dCurrTime = DXUTGetTime(); - if( PtInRect( &m_rcUpButton, m_LastMouse ) ) - { - switch( m_Arrow ) - { - case CLICKED_UP: - if( SCROLLBAR_ARROWCLICK_DELAY < dCurrTime - m_dArrowTS ) - { - Scroll( -1 ); - m_Arrow = HELD_UP; - m_dArrowTS = dCurrTime; - } - break; - case HELD_UP: - if( SCROLLBAR_ARROWCLICK_REPEAT < dCurrTime - m_dArrowTS ) - { - Scroll( -1 ); - m_dArrowTS = dCurrTime; - } - break; - } - } - else if( PtInRect( &m_rcDownButton, m_LastMouse ) ) - { - switch( m_Arrow ) - { - case CLICKED_DOWN: - if( SCROLLBAR_ARROWCLICK_DELAY < dCurrTime - m_dArrowTS ) - { - Scroll( 1 ); - m_Arrow = HELD_DOWN; - m_dArrowTS = dCurrTime; - } - break; - case HELD_DOWN: - if( SCROLLBAR_ARROWCLICK_REPEAT < dCurrTime - m_dArrowTS ) - { - Scroll( 1 ); - m_dArrowTS = dCurrTime; - } - break; - } - } - } - - DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL; - - if( m_bVisible == false ) - iState = DXUT_STATE_HIDDEN; - else if( m_bEnabled == false || m_bShowThumb == false ) - iState = DXUT_STATE_DISABLED; - else if( m_bMouseOver ) - iState = DXUT_STATE_MOUSEOVER; - else if( m_bHasFocus ) - iState = DXUT_STATE_FOCUS; - - - float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f; - - // Background track layer - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - m_pDialog->DrawSprite( pElement, &m_rcTrack, DXUT_FAR_BUTTON_DEPTH ); - - // Up Arrow - pElement = m_Elements.GetAt( 1 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - m_pDialog->DrawSprite( pElement, &m_rcUpButton, DXUT_NEAR_BUTTON_DEPTH ); - - // Down Arrow - pElement = m_Elements.GetAt( 2 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - m_pDialog->DrawSprite( pElement, &m_rcDownButton, DXUT_NEAR_BUTTON_DEPTH ); - - // Thumb button - pElement = m_Elements.GetAt( 3 ); - - // Blend current color - pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); - m_pDialog->DrawSprite( pElement, &m_rcThumb, DXUT_NEAR_BUTTON_DEPTH ); - -} - - -//-------------------------------------------------------------------------------------- -void CDXUTScrollBar::SetTrackRange( int nStart, int nEnd ) -{ - m_nStart = nStart; m_nEnd = nEnd; - Cap(); - UpdateThumbRect(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTScrollBar::Cap() // Clips position at boundaries. Ensures it stays within legal range. -{ - if( m_nPosition < m_nStart || - m_nEnd - m_nStart <= m_nPageSize ) - { - m_nPosition = m_nStart; - } - else if( m_nPosition + m_nPageSize > m_nEnd ) - m_nPosition = m_nEnd - m_nPageSize; -} - -//-------------------------------------------------------------------------------------- -// CDXUTListBox class -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTListBox::CDXUTListBox( CDXUTDialog* pDialog ) : m_ScrollBar( pDialog ) -{ - m_Type = DXUT_CONTROL_LISTBOX; - m_pDialog = pDialog; - - m_dwStyle = 0; - m_nSBWidth = 16; - m_nSelected = -1; - m_nSelStart = 0; - m_bDrag = false; - m_nBorder = 6; - m_nMargin = 5; - m_nTextHeight = 0; -} - - -//-------------------------------------------------------------------------------------- -CDXUTListBox::~CDXUTListBox() -{ - RemoveAllItems(); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTListBox::UpdateRects() -{ - CDXUTControl::UpdateRects(); - - m_rcSelection = m_rcBoundingBox; - m_rcSelection.right -= m_nSBWidth; - InflateRect( &m_rcSelection, -m_nBorder, -m_nBorder ); - m_rcText = m_rcSelection; - InflateRect( &m_rcText, -m_nMargin, 0 ); - - // Update the scrollbar's rects - m_ScrollBar.SetLocation( m_rcBoundingBox.right - m_nSBWidth, m_rcBoundingBox.top ); - m_ScrollBar.SetSize( m_nSBWidth, m_height ); - DXUTFontNode* pFontNode = m_pDialog->GetManager()->GetFontNode( m_Elements.GetAt( 0 )->iFont ); - if( pFontNode && pFontNode->nHeight ) - { - m_ScrollBar.SetPageSize( RectHeight( m_rcText ) / pFontNode->nHeight ); - - // The selected item may have been scrolled off the page. - // Ensure that it is in page again. - m_ScrollBar.ShowItem( m_nSelected ); - } -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTListBox::AddItem( const WCHAR* wszText, void* pData ) -{ - DXUTListBoxItem* pNewItem = new DXUTListBoxItem; - if( !pNewItem ) - return E_OUTOFMEMORY; - - wcscpy_s( pNewItem->strText, 256, wszText ); - pNewItem->pData = pData; - SetRect( &pNewItem->rcActive, 0, 0, 0, 0 ); - pNewItem->bSelected = false; - - HRESULT hr = m_Items.Add( pNewItem ); - if( FAILED( hr ) ) - { - SAFE_DELETE( pNewItem ); - } - else - { - m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() ); - } - - return hr; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTListBox::InsertItem( int nIndex, const WCHAR* wszText, void* pData ) -{ - DXUTListBoxItem* pNewItem = new DXUTListBoxItem; - if( !pNewItem ) - return E_OUTOFMEMORY; - - wcscpy_s( pNewItem->strText, 256, wszText ); - pNewItem->pData = pData; - SetRect( &pNewItem->rcActive, 0, 0, 0, 0 ); - pNewItem->bSelected = false; - - HRESULT hr = m_Items.Insert( nIndex, pNewItem ); - if( SUCCEEDED( hr ) ) - m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() ); - else - SAFE_DELETE( pNewItem ); - - return hr; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTListBox::RemoveItem( int nIndex ) -{ - if( nIndex < 0 || nIndex >= ( int )m_Items.GetSize() ) - return; - - DXUTListBoxItem* pItem = m_Items.GetAt( nIndex ); - - delete pItem; - m_Items.Remove( nIndex ); - m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() ); - if( m_nSelected >= ( int )m_Items.GetSize() ) - m_nSelected = m_Items.GetSize() - 1; - - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); -} - - - - - -//-------------------------------------------------------------------------------------- -void CDXUTListBox::RemoveAllItems() -{ - for( int i = 0; i < m_Items.GetSize(); ++i ) - { - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - delete pItem; - } - - m_Items.RemoveAll(); - m_ScrollBar.SetTrackRange( 0, 1 ); -} - - -//-------------------------------------------------------------------------------------- -DXUTListBoxItem* CDXUTListBox::GetItem( int nIndex ) -{ - if( nIndex < 0 || nIndex >= ( int )m_Items.GetSize() ) - return NULL; - - return m_Items[nIndex]; -} - - -//-------------------------------------------------------------------------------------- -// For single-selection listbox, returns the index of the selected item. -// For multi-selection, returns the first selected item after the nPreviousSelected position. -// To search for the first selected item, the app passes -1 for nPreviousSelected. For -// subsequent searches, the app passes the returned index back to GetSelectedIndex as. -// nPreviousSelected. -// Returns -1 on error or if no item is selected. -int CDXUTListBox::GetSelectedIndex( int nPreviousSelected ) -{ - if( nPreviousSelected < -1 ) - return -1; - - if( m_dwStyle & MULTISELECTION ) - { - // Multiple selection enabled. Search for the next item with the selected flag. - for( int i = nPreviousSelected + 1; i < ( int )m_Items.GetSize(); ++i ) - { - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - - if( pItem->bSelected ) - return i; - } - - return -1; - } - else - { - // Single selection - return m_nSelected; - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTListBox::SelectItem( int nNewIndex ) -{ - // If no item exists, do nothing. - if( m_Items.GetSize() == 0 ) - return; - - int nOldSelected = m_nSelected; - - // Adjust m_nSelected - m_nSelected = nNewIndex; - - // Perform capping - if( m_nSelected < 0 ) - m_nSelected = 0; - if( m_nSelected >= ( int )m_Items.GetSize() ) - m_nSelected = m_Items.GetSize() - 1; - - if( nOldSelected != m_nSelected ) - { - if( m_dwStyle & MULTISELECTION ) - { - m_Items[m_nSelected]->bSelected = true; - } - - // Update selection start - m_nSelStart = m_nSelected; - - // Adjust scroll bar - m_ScrollBar.ShowItem( m_nSelected ); - } - - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTListBox::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - // Let the scroll bar have a chance to handle it first - if( m_ScrollBar.HandleKeyboard( uMsg, wParam, lParam ) ) - return true; - - switch( uMsg ) - { - case WM_KEYDOWN: - switch( wParam ) - { - case VK_UP: - case VK_DOWN: - case VK_NEXT: - case VK_PRIOR: - case VK_HOME: - case VK_END: - { - // If no item exists, do nothing. - if( m_Items.GetSize() == 0 ) - return true; - - int nOldSelected = m_nSelected; - - // Adjust m_nSelected - switch( wParam ) - { - case VK_UP: - --m_nSelected; break; - case VK_DOWN: - ++m_nSelected; break; - case VK_NEXT: - m_nSelected += m_ScrollBar.GetPageSize() - 1; break; - case VK_PRIOR: - m_nSelected -= m_ScrollBar.GetPageSize() - 1; break; - case VK_HOME: - m_nSelected = 0; break; - case VK_END: - m_nSelected = m_Items.GetSize() - 1; break; - } - - // Perform capping - if( m_nSelected < 0 ) - m_nSelected = 0; - if( m_nSelected >= ( int )m_Items.GetSize() ) - m_nSelected = m_Items.GetSize() - 1; - - if( nOldSelected != m_nSelected ) - { - if( m_dwStyle & MULTISELECTION ) - { - // Multiple selection - - // Clear all selection - for( int i = 0; i < ( int )m_Items.GetSize(); ++i ) - { - DXUTListBoxItem* pItem = m_Items[i]; - pItem->bSelected = false; - } - - if( GetKeyState( VK_SHIFT ) < 0 ) - { - // Select all items from m_nSelStart to - // m_nSelected - int nEnd = __max( m_nSelStart, m_nSelected ); - - for( int n = __min( m_nSelStart, m_nSelected ); n <= nEnd; ++n ) - m_Items[n]->bSelected = true; - } - else - { - m_Items[m_nSelected]->bSelected = true; - - // Update selection start - m_nSelStart = m_nSelected; - } - } - else - m_nSelStart = m_nSelected; - - // Adjust scroll bar - - m_ScrollBar.ShowItem( m_nSelected ); - - // Send notification - - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); - } - return true; - } - - // Space is the hotkey for double-clicking an item. - // - case VK_SPACE: - m_pDialog->SendEvent( EVENT_LISTBOX_ITEM_DBLCLK, true, this ); - return true; - } - break; - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTListBox::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - // First acquire focus - if( WM_LBUTTONDOWN == uMsg ) - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - // Let the scroll bar handle it first. - if( m_ScrollBar.HandleMouse( uMsg, pt, wParam, lParam ) ) - return true; - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - // Check for clicks in the text area - if( m_Items.GetSize() > 0 && PtInRect( &m_rcSelection, pt ) ) - { - // Compute the index of the clicked item - - int nClicked; - if( m_nTextHeight ) - nClicked = m_ScrollBar.GetTrackPos() + ( pt.y - m_rcText.top ) / m_nTextHeight; - else - nClicked = -1; - - // Only proceed if the click falls on top of an item. - - if( nClicked >= m_ScrollBar.GetTrackPos() && - nClicked < ( int )m_Items.GetSize() && - nClicked < m_ScrollBar.GetTrackPos() + m_ScrollBar.GetPageSize() ) - { - SetCapture( DXUTGetHWND() ); - m_bDrag = true; - - // If this is a double click, fire off an event and exit - // since the first click would have taken care of the selection - // updating. - if( uMsg == WM_LBUTTONDBLCLK ) - { - m_pDialog->SendEvent( EVENT_LISTBOX_ITEM_DBLCLK, true, this ); - return true; - } - - m_nSelected = nClicked; - if( !( wParam & MK_SHIFT ) ) - m_nSelStart = m_nSelected; - - // If this is a multi-selection listbox, update per-item - // selection data. - - if( m_dwStyle & MULTISELECTION ) - { - // Determine behavior based on the state of Shift and Ctrl - - DXUTListBoxItem* pSelItem = m_Items.GetAt( m_nSelected ); - if( ( wParam & ( MK_SHIFT | MK_CONTROL ) ) == MK_CONTROL ) - { - // Control click. Reverse the selection of this item. - - pSelItem->bSelected = !pSelItem->bSelected; - } - else if( ( wParam & ( MK_SHIFT | MK_CONTROL ) ) == MK_SHIFT ) - { - // Shift click. Set the selection for all items - // from last selected item to the current item. - // Clear everything else. - - int nBegin = __min( m_nSelStart, m_nSelected ); - int nEnd = __max( m_nSelStart, m_nSelected ); - - for( int i = 0; i < nBegin; ++i ) - { - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - pItem->bSelected = false; - } - - for( int i = nEnd + 1; i < ( int )m_Items.GetSize(); ++i ) - { - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - pItem->bSelected = false; - } - - for( int i = nBegin; i <= nEnd; ++i ) - { - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - pItem->bSelected = true; - } - } - else if( ( wParam & ( MK_SHIFT | MK_CONTROL ) ) == ( MK_SHIFT | MK_CONTROL ) ) - { - // Control-Shift-click. - - // The behavior is: - // Set all items from m_nSelStart to m_nSelected to - // the same state as m_nSelStart, not including m_nSelected. - // Set m_nSelected to selected. - - int nBegin = __min( m_nSelStart, m_nSelected ); - int nEnd = __max( m_nSelStart, m_nSelected ); - - // The two ends do not need to be set here. - - bool bLastSelected = m_Items.GetAt( m_nSelStart )->bSelected; - for( int i = nBegin + 1; i < nEnd; ++i ) - { - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - pItem->bSelected = bLastSelected; - } - - pSelItem->bSelected = true; - - // Restore m_nSelected to the previous value - // This matches the Windows behavior - - m_nSelected = m_nSelStart; - } - else - { - // Simple click. Clear all items and select the clicked - // item. - - - for( int i = 0; i < ( int )m_Items.GetSize(); ++i ) - { - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - pItem->bSelected = false; - } - - pSelItem->bSelected = true; - } - } // End of multi-selection case - - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); - } - - return true; - } - break; - - case WM_LBUTTONUP: - { - ReleaseCapture(); - m_bDrag = false; - - if( m_nSelected != -1 ) - { - // Set all items between m_nSelStart and m_nSelected to - // the same state as m_nSelStart - int nEnd = __max( m_nSelStart, m_nSelected ); - - for( int n = __min( m_nSelStart, m_nSelected ) + 1; n < nEnd; ++n ) - m_Items[n]->bSelected = m_Items[m_nSelStart]->bSelected; - m_Items[m_nSelected]->bSelected = m_Items[m_nSelStart]->bSelected; - - // If m_nSelStart and m_nSelected are not the same, - // the user has dragged the mouse to make a selection. - // Notify the application of this. - if( m_nSelStart != m_nSelected ) - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); - - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION_END, true, this ); - } - return false; - } - - case WM_MOUSEMOVE: - if( m_bDrag ) - { - // Compute the index of the item below cursor - - int nItem; - if( m_nTextHeight ) - nItem = m_ScrollBar.GetTrackPos() + ( pt.y - m_rcText.top ) / m_nTextHeight; - else - nItem = -1; - - // Only proceed if the cursor is on top of an item. - - if( nItem >= ( int )m_ScrollBar.GetTrackPos() && - nItem < ( int )m_Items.GetSize() && - nItem < m_ScrollBar.GetTrackPos() + m_ScrollBar.GetPageSize() ) - { - m_nSelected = nItem; - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); - } - else if( nItem < ( int )m_ScrollBar.GetTrackPos() ) - { - // User drags the mouse above window top - m_ScrollBar.Scroll( -1 ); - m_nSelected = m_ScrollBar.GetTrackPos(); - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); - } - else if( nItem >= m_ScrollBar.GetTrackPos() + m_ScrollBar.GetPageSize() ) - { - // User drags the mouse below window bottom - m_ScrollBar.Scroll( 1 ); - m_nSelected = __min( ( int )m_Items.GetSize(), m_ScrollBar.GetTrackPos() + - m_ScrollBar.GetPageSize() ) - 1; - m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this ); - } - } - break; - - case WM_MOUSEWHEEL: - { - UINT uLines; - SystemParametersInfo( SPI_GETWHEELSCROLLLINES, 0, &uLines, 0 ); - int nScrollAmount = int( ( short )HIWORD( wParam ) ) / WHEEL_DELTA * uLines; - m_ScrollBar.Scroll( -nScrollAmount ); - return true; - } - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTListBox::MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( WM_CAPTURECHANGED == uMsg ) - { - // The application just lost mouse capture. We may not have gotten - // the WM_MOUSEUP message, so reset m_bDrag here. - if( ( HWND )lParam != DXUTGetHWND() ) - m_bDrag = false; - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTListBox::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - - CDXUTElement* pElement = m_Elements.GetAt( 0 ); - pElement->TextureColor.Blend( DXUT_STATE_NORMAL, fElapsedTime ); - pElement->FontColor.Blend( DXUT_STATE_NORMAL, fElapsedTime ); - - CDXUTElement* pSelElement = m_Elements.GetAt( 1 ); - pSelElement->TextureColor.Blend( DXUT_STATE_NORMAL, fElapsedTime ); - pSelElement->FontColor.Blend( DXUT_STATE_NORMAL, fElapsedTime ); - - m_pDialog->DrawSprite( pElement, &m_rcBoundingBox, DXUT_FAR_BUTTON_DEPTH ); - - // Render the text - if( m_Items.GetSize() > 0 ) - { - // Find out the height of a single line of text - RECT rc = m_rcText; - RECT rcSel = m_rcSelection; - rc.bottom = rc.top + m_pDialog->GetManager()->GetFontNode( pElement->iFont )->nHeight; - - // Update the line height formation - m_nTextHeight = rc.bottom - rc.top; - - static bool bSBInit; - if( !bSBInit ) - { - // Update the page size of the scroll bar - if( m_nTextHeight ) - m_ScrollBar.SetPageSize( RectHeight( m_rcText ) / m_nTextHeight ); - else - m_ScrollBar.SetPageSize( RectHeight( m_rcText ) ); - bSBInit = true; - } - - rc.right = m_rcText.right; - for( int i = m_ScrollBar.GetTrackPos(); i < ( int )m_Items.GetSize(); ++i ) - { - if( rc.bottom > m_rcText.bottom ) - break; - - DXUTListBoxItem* pItem = m_Items.GetAt( i ); - - // Determine if we need to render this item with the - // selected element. - bool bSelectedStyle = false; - - if( !( m_dwStyle & MULTISELECTION ) && i == m_nSelected ) - bSelectedStyle = true; - else if( m_dwStyle & MULTISELECTION ) - { - if( m_bDrag && - ( ( i >= m_nSelected && i < m_nSelStart ) || - ( i <= m_nSelected && i > m_nSelStart ) ) ) - bSelectedStyle = m_Items[m_nSelStart]->bSelected; - else if( pItem->bSelected ) - bSelectedStyle = true; - } - - if( bSelectedStyle ) - { - rcSel.top = rc.top; rcSel.bottom = rc.bottom; - m_pDialog->DrawSprite( pSelElement, &rcSel, DXUT_NEAR_BUTTON_DEPTH ); - m_pDialog->DrawText( pItem->strText, pSelElement, &rc ); - } - else - m_pDialog->DrawText( pItem->strText, pElement, &rc ); - - OffsetRect( &rc, 0, m_nTextHeight ); - } - } - - // Render the scroll bar - - m_ScrollBar.Render( fElapsedTime ); -} - - -// Static member initialization -HINSTANCE CUniBuffer::s_hDll = NULL; -HRESULT ( WINAPI*CUniBuffer::_ScriptApplyDigitSubstitution )( const SCRIPT_DIGITSUBSTITUTE*, SCRIPT_CONTROL*, - SCRIPT_STATE* ) = Dummy_ScriptApplyDigitSubstitution; -HRESULT ( WINAPI*CUniBuffer::_ScriptStringAnalyse )( HDC, const void*, int, int, int, DWORD, int, SCRIPT_CONTROL*, - SCRIPT_STATE*, const int*, SCRIPT_TABDEF*, const BYTE*, - SCRIPT_STRING_ANALYSIS* ) = Dummy_ScriptStringAnalyse; -HRESULT ( WINAPI*CUniBuffer::_ScriptStringCPtoX )( SCRIPT_STRING_ANALYSIS, int, BOOL, int* ) = Dummy_ScriptStringCPtoX; -HRESULT ( WINAPI*CUniBuffer::_ScriptStringXtoCP )( SCRIPT_STRING_ANALYSIS, int, int*, int* ) = Dummy_ScriptStringXtoCP; -HRESULT ( WINAPI*CUniBuffer::_ScriptStringFree )( SCRIPT_STRING_ANALYSIS* ) = Dummy_ScriptStringFree; -const SCRIPT_LOGATTR* ( WINAPI*CUniBuffer::_ScriptString_pLogAttr )( SCRIPT_STRING_ANALYSIS ) = - Dummy_ScriptString_pLogAttr; -const int* ( WINAPI*CUniBuffer::_ScriptString_pcOutChars )( SCRIPT_STRING_ANALYSIS ) = - Dummy_ScriptString_pcOutChars; -bool CDXUTEditBox::s_bHideCaret; // If true, we don't render the caret. - - - -//-------------------------------------------------------------------------------------- -// CDXUTEditBox class -//-------------------------------------------------------------------------------------- - -// When scrolling, EDITBOX_SCROLLEXTENT is reciprocal of the amount to scroll. -// If EDITBOX_SCROLLEXTENT = 4, then we scroll 1/4 of the control each time. -#define EDITBOX_SCROLLEXTENT 4 - -//-------------------------------------------------------------------------------------- -CDXUTEditBox::CDXUTEditBox( CDXUTDialog* pDialog ) -{ - m_Type = DXUT_CONTROL_EDITBOX; - m_pDialog = pDialog; - - m_nBorder = 5; // Default border width - m_nSpacing = 4; // Default spacing - - m_bCaretOn = true; - m_dfBlink = GetCaretBlinkTime() * 0.001f; - m_dfLastBlink = DXUTGetGlobalTimer()->GetAbsoluteTime(); - s_bHideCaret = false; - m_nFirstVisible = 0; - m_TextColor = D3DCOLOR_ARGB( 255, 16, 16, 16 ); - m_SelTextColor = D3DCOLOR_ARGB( 255, 255, 255, 255 ); - m_SelBkColor = D3DCOLOR_ARGB( 255, 40, 50, 92 ); - m_CaretColor = D3DCOLOR_ARGB( 255, 0, 0, 0 ); - m_nCaret = m_nSelStart = 0; - m_bInsertMode = true; - - m_bMouseDrag = false; -} - - -//-------------------------------------------------------------------------------------- -CDXUTEditBox::~CDXUTEditBox() -{ -} - - -//-------------------------------------------------------------------------------------- -// PlaceCaret: Set the caret to a character position, and adjust the scrolling if -// necessary. -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::PlaceCaret( int nCP ) -{ - assert( nCP >= 0 && nCP <= m_Buffer.GetTextSize() ); - m_nCaret = nCP; - - // Obtain the X offset of the character. - int nX1st, nX, nX2; - m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nX1st ); // 1st visible char - m_Buffer.CPtoX( nCP, FALSE, &nX ); // LEAD - // If nCP is the NULL terminator, get the leading edge instead of trailing. - if( nCP == m_Buffer.GetTextSize() ) - nX2 = nX; - else - m_Buffer.CPtoX( nCP, TRUE, &nX2 ); // TRAIL - - // If the left edge of the char is smaller than the left edge of the 1st visible char, - // we need to scroll left until this char is visible. - if( nX < nX1st ) - { - // Simply make the first visible character the char at the new caret position. - m_nFirstVisible = nCP; - } - else // If the right of the character is bigger than the offset of the control's - // right edge, we need to scroll right to this character. - if( nX2 > nX1st + RectWidth( m_rcText ) ) - { - // Compute the X of the new left-most pixel - int nXNewLeft = nX2 - RectWidth( m_rcText ); - - // Compute the char position of this character - int nCPNew1st, nNewTrail; - m_Buffer.XtoCP( nXNewLeft, &nCPNew1st, &nNewTrail ); - - // If this coordinate is not on a character border, - // start from the next character so that the caret - // position does not fall outside the text rectangle. - int nXNew1st; - m_Buffer.CPtoX( nCPNew1st, FALSE, &nXNew1st ); - if( nXNew1st < nXNewLeft ) - ++nCPNew1st; - - m_nFirstVisible = nCPNew1st; - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::ClearText() -{ - m_Buffer.Clear(); - m_nFirstVisible = 0; - PlaceCaret( 0 ); - m_nSelStart = 0; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::SetText( LPCWSTR wszText, bool bSelected ) -{ - assert( wszText != NULL ); - - m_Buffer.SetText( wszText ); - m_nFirstVisible = 0; - // Move the caret to the end of the text - PlaceCaret( m_Buffer.GetTextSize() ); - m_nSelStart = bSelected ? 0 : m_nCaret; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTEditBox::GetTextCopy( __out_ecount(bufferCount) LPWSTR strDest, - UINT bufferCount ) -{ - assert( strDest ); - - wcscpy_s( strDest, bufferCount, m_Buffer.GetBuffer() ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::DeleteSelectionText() -{ - int nFirst = __min( m_nCaret, m_nSelStart ); - int nLast = __max( m_nCaret, m_nSelStart ); - // Update caret and selection - PlaceCaret( nFirst ); - m_nSelStart = m_nCaret; - // Remove the characters - for( int i = nFirst; i < nLast; ++i ) - m_Buffer.RemoveChar( nFirst ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::UpdateRects() -{ - CDXUTControl::UpdateRects(); - - // Update the text rectangle - m_rcText = m_rcBoundingBox; - // First inflate by m_nBorder to compute render rects - InflateRect( &m_rcText, -m_nBorder, -m_nBorder ); - - // Update the render rectangles - m_rcRender[0] = m_rcText; - SetRect( &m_rcRender[1], m_rcBoundingBox.left, m_rcBoundingBox.top, m_rcText.left, m_rcText.top ); - SetRect( &m_rcRender[2], m_rcText.left, m_rcBoundingBox.top, m_rcText.right, m_rcText.top ); - SetRect( &m_rcRender[3], m_rcText.right, m_rcBoundingBox.top, m_rcBoundingBox.right, m_rcText.top ); - SetRect( &m_rcRender[4], m_rcBoundingBox.left, m_rcText.top, m_rcText.left, m_rcText.bottom ); - SetRect( &m_rcRender[5], m_rcText.right, m_rcText.top, m_rcBoundingBox.right, m_rcText.bottom ); - SetRect( &m_rcRender[6], m_rcBoundingBox.left, m_rcText.bottom, m_rcText.left, m_rcBoundingBox.bottom ); - SetRect( &m_rcRender[7], m_rcText.left, m_rcText.bottom, m_rcText.right, m_rcBoundingBox.bottom ); - SetRect( &m_rcRender[8], m_rcText.right, m_rcText.bottom, m_rcBoundingBox.right, m_rcBoundingBox.bottom ); - - // Inflate further by m_nSpacing - InflateRect( &m_rcText, -m_nSpacing, -m_nSpacing ); -} - - -void CDXUTEditBox::CopyToClipboard() -{ - // Copy the selection text to the clipboard - if( m_nCaret != m_nSelStart && OpenClipboard( NULL ) ) - { - EmptyClipboard(); - - HGLOBAL hBlock = GlobalAlloc( GMEM_MOVEABLE, sizeof( WCHAR ) * ( m_Buffer.GetTextSize() + 1 ) ); - if( hBlock ) - { - WCHAR* pwszText = ( WCHAR* )GlobalLock( hBlock ); - if( pwszText ) - { - int nFirst = __min( m_nCaret, m_nSelStart ); - int nLast = __max( m_nCaret, m_nSelStart ); - if( nLast - nFirst > 0 ) - CopyMemory( pwszText, m_Buffer.GetBuffer() + nFirst, ( nLast - nFirst ) * sizeof( WCHAR ) ); - pwszText[nLast - nFirst] = L'\0'; // Terminate it - GlobalUnlock( hBlock ); - } - SetClipboardData( CF_UNICODETEXT, hBlock ); - } - CloseClipboard(); - // We must not free the object until CloseClipboard is called. - if( hBlock ) - GlobalFree( hBlock ); - } -} - - -void CDXUTEditBox::PasteFromClipboard() -{ - DeleteSelectionText(); - - if( OpenClipboard( NULL ) ) - { - HANDLE handle = GetClipboardData( CF_UNICODETEXT ); - if( handle ) - { - // Convert the ANSI string to Unicode, then - // insert to our buffer. - WCHAR* pwszText = ( WCHAR* )GlobalLock( handle ); - if( pwszText ) - { - // Copy all characters up to null. - if( m_Buffer.InsertString( m_nCaret, pwszText ) ) - PlaceCaret( m_nCaret + lstrlenW( pwszText ) ); - m_nSelStart = m_nCaret; - GlobalUnlock( handle ); - } - } - CloseClipboard(); - } -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTEditBox::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - bool bHandled = false; - - switch( uMsg ) - { - case WM_KEYDOWN: - { - switch( wParam ) - { - case VK_TAB: - // We don't process Tab in case keyboard input is enabled and the user - // wishes to Tab to other controls. - break; - - case VK_HOME: - PlaceCaret( 0 ); - if( GetKeyState( VK_SHIFT ) >= 0 ) - // Shift is not down. Update selection - // start along with the caret. - m_nSelStart = m_nCaret; - ResetCaretBlink(); - bHandled = true; - break; - - case VK_END: - PlaceCaret( m_Buffer.GetTextSize() ); - if( GetKeyState( VK_SHIFT ) >= 0 ) - // Shift is not down. Update selection - // start along with the caret. - m_nSelStart = m_nCaret; - ResetCaretBlink(); - bHandled = true; - break; - - case VK_INSERT: - if( GetKeyState( VK_CONTROL ) < 0 ) - { - // Control Insert. Copy to clipboard - CopyToClipboard(); - } - else if( GetKeyState( VK_SHIFT ) < 0 ) - { - // Shift Insert. Paste from clipboard - PasteFromClipboard(); - } - else - { - // Toggle caret insert mode - m_bInsertMode = !m_bInsertMode; - } - break; - - case VK_DELETE: - // Check if there is a text selection. - if( m_nCaret != m_nSelStart ) - { - DeleteSelectionText(); - m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this ); - } - else - { - // Deleting one character - if( m_Buffer.RemoveChar( m_nCaret ) ) - m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this ); - } - ResetCaretBlink(); - bHandled = true; - break; - - case VK_LEFT: - if( GetKeyState( VK_CONTROL ) < 0 ) - { - // Control is down. Move the caret to a new item - // instead of a character. - m_Buffer.GetPriorItemPos( m_nCaret, &m_nCaret ); - PlaceCaret( m_nCaret ); - } - else if( m_nCaret > 0 ) - PlaceCaret( m_nCaret - 1 ); - if( GetKeyState( VK_SHIFT ) >= 0 ) - // Shift is not down. Update selection - // start along with the caret. - m_nSelStart = m_nCaret; - ResetCaretBlink(); - bHandled = true; - break; - - case VK_RIGHT: - if( GetKeyState( VK_CONTROL ) < 0 ) - { - // Control is down. Move the caret to a new item - // instead of a character. - m_Buffer.GetNextItemPos( m_nCaret, &m_nCaret ); - PlaceCaret( m_nCaret ); - } - else if( m_nCaret < m_Buffer.GetTextSize() ) - PlaceCaret( m_nCaret + 1 ); - if( GetKeyState( VK_SHIFT ) >= 0 ) - // Shift is not down. Update selection - // start along with the caret. - m_nSelStart = m_nCaret; - ResetCaretBlink(); - bHandled = true; - break; - - case VK_UP: - case VK_DOWN: - // Trap up and down arrows so that the dialog - // does not switch focus to another control. - bHandled = true; - break; - - default: - bHandled = wParam != VK_ESCAPE; // Let the application handle Esc. - } - } - } - return bHandled; -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTEditBox::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - { - if( !m_bHasFocus ) - m_pDialog->RequestFocus( this ); - - if( !ContainsPoint( pt ) ) - return false; - - m_bMouseDrag = true; - SetCapture( DXUTGetHWND() ); - // Determine the character corresponding to the coordinates. - int nCP, nTrail, nX1st; - m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nX1st ); // X offset of the 1st visible char - if( SUCCEEDED( m_Buffer.XtoCP( pt.x - m_rcText.left + nX1st, &nCP, &nTrail ) ) ) - { - // Cap at the NULL character. - if( nTrail && nCP < m_Buffer.GetTextSize() ) - PlaceCaret( nCP + 1 ); - else - PlaceCaret( nCP ); - m_nSelStart = m_nCaret; - ResetCaretBlink(); - } - return true; - } - - case WM_LBUTTONUP: - ReleaseCapture(); - m_bMouseDrag = false; - break; - - case WM_MOUSEMOVE: - if( m_bMouseDrag ) - { - // Determine the character corresponding to the coordinates. - int nCP, nTrail, nX1st; - m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nX1st ); // X offset of the 1st visible char - if( SUCCEEDED( m_Buffer.XtoCP( pt.x - m_rcText.left + nX1st, &nCP, &nTrail ) ) ) - { - // Cap at the NULL character. - if( nTrail && nCP < m_Buffer.GetTextSize() ) - PlaceCaret( nCP + 1 ); - else - PlaceCaret( nCP ); - } - } - break; - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::OnFocusIn() -{ - CDXUTControl::OnFocusIn(); - - ResetCaretBlink(); -} - - -//-------------------------------------------------------------------------------------- -bool CDXUTEditBox::MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - if( !m_bEnabled || !m_bVisible ) - return false; - - switch( uMsg ) - { - // Make sure that while editing, the keyup and keydown messages associated with - // WM_CHAR messages don't go to any non-focused controls or cameras - case WM_KEYUP: - case WM_KEYDOWN: - return true; - - case WM_CHAR: - { - switch( ( WCHAR )wParam ) - { - // Backspace - case VK_BACK: - { - // If there's a selection, treat this - // like a delete key. - if( m_nCaret != m_nSelStart ) - { - DeleteSelectionText(); - m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this ); - } - else if( m_nCaret > 0 ) - { - // Move the caret, then delete the char. - PlaceCaret( m_nCaret - 1 ); - m_nSelStart = m_nCaret; - m_Buffer.RemoveChar( m_nCaret ); - m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this ); - } - ResetCaretBlink(); - break; - } - - case 24: // Ctrl-X Cut - case VK_CANCEL: // Ctrl-C Copy - { - CopyToClipboard(); - - // If the key is Ctrl-X, delete the selection too. - if( ( WCHAR )wParam == 24 ) - { - DeleteSelectionText(); - m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this ); - } - - break; - } - - // Ctrl-V Paste - case 22: - { - PasteFromClipboard(); - m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this ); - break; - } - - // Ctrl-A Select All - case 1: - if( m_nSelStart == m_nCaret ) - { - m_nSelStart = 0; - PlaceCaret( m_Buffer.GetTextSize() ); - } - break; - - case VK_RETURN: - // Invoke the callback when the user presses Enter. - m_pDialog->SendEvent( EVENT_EDITBOX_STRING, true, this ); - break; - - // Junk characters we don't want in the string - case 26: // Ctrl Z - case 2: // Ctrl B - case 14: // Ctrl N - case 19: // Ctrl S - case 4: // Ctrl D - case 6: // Ctrl F - case 7: // Ctrl G - case 10: // Ctrl J - case 11: // Ctrl K - case 12: // Ctrl L - case 17: // Ctrl Q - case 23: // Ctrl W - case 5: // Ctrl E - case 18: // Ctrl R - case 20: // Ctrl T - case 25: // Ctrl Y - case 21: // Ctrl U - case 9: // Ctrl I - case 15: // Ctrl O - case 16: // Ctrl P - case 27: // Ctrl [ - case 29: // Ctrl ] - case 28: // Ctrl \ - break; - - default: - { - // If there's a selection and the user - // starts to type, the selection should - // be deleted. - if( m_nCaret != m_nSelStart ) - DeleteSelectionText(); - - // If we are in overwrite mode and there is already - // a char at the caret's position, simply replace it. - // Otherwise, we insert the char as normal. - if( !m_bInsertMode && m_nCaret < m_Buffer.GetTextSize() ) - { - m_Buffer[m_nCaret] = ( WCHAR )wParam; - PlaceCaret( m_nCaret + 1 ); - m_nSelStart = m_nCaret; - } - else - { - // Insert the char - if( m_Buffer.InsertChar( m_nCaret, ( WCHAR )wParam ) ) - { - PlaceCaret( m_nCaret + 1 ); - m_nSelStart = m_nCaret; - } - } - ResetCaretBlink(); - m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this ); - } - } - return true; - } - } - return false; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::Render( float fElapsedTime ) -{ - if( m_bVisible == false ) - return; - - HRESULT hr; - int nSelStartX = 0, nCaretX = 0; // Left and right X cordinates of the selection region - - CDXUTElement* pElement = GetElement( 0 ); - if( pElement ) - { - m_Buffer.SetFontNode( m_pDialog->GetFont( pElement->iFont ) ); - PlaceCaret( m_nCaret ); // Call PlaceCaret now that we have the font info (node), - // so that scrolling can be handled. - } - - // Render the control graphics - for( int e = 0; e < 9; ++e ) - { - pElement = m_Elements.GetAt( e ); - pElement->TextureColor.Blend( DXUT_STATE_NORMAL, fElapsedTime ); - - m_pDialog->DrawSprite( pElement, &m_rcRender[e], DXUT_FAR_BUTTON_DEPTH ); - } - - // - // Compute the X coordinates of the first visible character. - // - int nXFirst; - m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nXFirst ); - - // - // Compute the X coordinates of the selection rectangle - // - hr = m_Buffer.CPtoX( m_nCaret, FALSE, &nCaretX ); - if( m_nCaret != m_nSelStart ) - hr = m_Buffer.CPtoX( m_nSelStart, FALSE, &nSelStartX ); - else - nSelStartX = nCaretX; - - // - // Render the selection rectangle - // - RECT rcSelection; // Make this available for rendering selected text - if( m_nCaret != m_nSelStart ) - { - int nSelLeftX = nCaretX, nSelRightX = nSelStartX; - // Swap if left is bigger than right - if( nSelLeftX > nSelRightX ) - { - int nTemp = nSelLeftX; nSelLeftX = nSelRightX; nSelRightX = nTemp; - } - - SetRect( &rcSelection, nSelLeftX, m_rcText.top, nSelRightX, m_rcText.bottom ); - OffsetRect( &rcSelection, m_rcText.left - nXFirst, 0 ); - IntersectRect( &rcSelection, &m_rcText, &rcSelection ); - - IDirect3DDevice9* pd3dDevice = m_pDialog->GetManager()->GetD3D9Device(); - if( pd3dDevice ) - pd3dDevice->SetRenderState( D3DRS_ZENABLE, FALSE ); - m_pDialog->DrawRect( &rcSelection, m_SelBkColor ); - if( pd3dDevice ) - pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE ); - } - - // - // Render the text - // - // Element 0 for text - m_Elements.GetAt( 0 )->FontColor.Current = m_TextColor; - m_pDialog->DrawText( m_Buffer.GetBuffer() + m_nFirstVisible, m_Elements.GetAt( 0 ), &m_rcText ); - - // Render the selected text - if( m_nCaret != m_nSelStart ) - { - int nFirstToRender = __max( m_nFirstVisible, __min( m_nSelStart, m_nCaret ) ); - int nNumChatToRender = __max( m_nSelStart, m_nCaret ) - nFirstToRender; - m_Elements.GetAt( 0 )->FontColor.Current = m_SelTextColor; - m_pDialog->DrawText( m_Buffer.GetBuffer() + nFirstToRender, - m_Elements.GetAt( 0 ), &rcSelection, false, nNumChatToRender ); - } - - // - // Blink the caret - // - if( DXUTGetGlobalTimer()->GetAbsoluteTime() - m_dfLastBlink >= m_dfBlink ) - { - m_bCaretOn = !m_bCaretOn; - m_dfLastBlink = DXUTGetGlobalTimer()->GetAbsoluteTime(); - } - - // - // Render the caret if this control has the focus - // - if( m_bHasFocus && m_bCaretOn && !s_bHideCaret ) - { - // Start the rectangle with insert mode caret - RECT rcCaret = - { - m_rcText.left - nXFirst + nCaretX - 1, m_rcText.top, - m_rcText.left - nXFirst + nCaretX + 1, m_rcText.bottom - }; - - // If we are in overwrite mode, adjust the caret rectangle - // to fill the entire character. - if( !m_bInsertMode ) - { - // Obtain the right edge X coord of the current character - int nRightEdgeX; - m_Buffer.CPtoX( m_nCaret, TRUE, &nRightEdgeX ); - rcCaret.right = m_rcText.left - nXFirst + nRightEdgeX; - } - - m_pDialog->DrawRect( &rcCaret, m_CaretColor ); - } -} - - -#define IN_FLOAT_CHARSET( c ) \ - ( (c) == L'-' || (c) == L'.' || ( (c) >= L'0' && (c) <= L'9' ) ) - -void CDXUTEditBox::ParseFloatArray( float* pNumbers, int nCount ) -{ - int nWritten = 0; // Number of floats written - const WCHAR* pToken, *pEnd; - WCHAR wszToken[60]; - - pToken = m_Buffer.GetBuffer(); - while( nWritten < nCount && *pToken != L'\0' ) - { - // Skip leading spaces - while( *pToken == L' ' ) - ++pToken; - - if( *pToken == L'\0' ) - break; - - // Locate the end of number - pEnd = pToken; - while( IN_FLOAT_CHARSET( *pEnd ) ) - ++pEnd; - - // Copy the token to our buffer - int nTokenLen = __min( sizeof( wszToken ) / sizeof( wszToken[0] ) - 1, int( pEnd - pToken ) ); - wcscpy_s( wszToken, nTokenLen, pToken ); - *pNumbers = ( float )wcstod( wszToken, NULL ); - ++nWritten; - ++pNumbers; - pToken = pEnd; - } -} - - -void CDXUTEditBox::SetTextFloatArray( const float* pNumbers, int nCount ) -{ - WCHAR wszBuffer[512] = - { - 0 - }; - WCHAR wszTmp[64]; - - if( pNumbers == NULL ) - return; - - for( int i = 0; i < nCount; ++i ) - { - swprintf_s( wszTmp, 64, L"%.4f ", pNumbers[i] ); - wcscat_s( wszBuffer, 512, wszTmp ); - } - - // Don't want the last space - if( nCount > 0 && wcslen( wszBuffer ) > 0 ) - wszBuffer[wcslen( wszBuffer ) - 1] = 0; - - SetText( wszBuffer ); -} - - - - -//-------------------------------------------------------------------------------------- -void CUniBuffer::Initialize() -{ - if( s_hDll ) // Only need to do once - return; - - s_hDll = LoadLibrary( UNISCRIBE_DLLNAME ); - if( s_hDll ) - { - FARPROC Temp; - GETPROCADDRESS( s_hDll, ScriptApplyDigitSubstitution, Temp ); - GETPROCADDRESS( s_hDll, ScriptStringAnalyse, Temp ); - GETPROCADDRESS( s_hDll, ScriptStringCPtoX, Temp ); - GETPROCADDRESS( s_hDll, ScriptStringXtoCP, Temp ); - GETPROCADDRESS( s_hDll, ScriptStringFree, Temp ); - GETPROCADDRESS( s_hDll, ScriptString_pLogAttr, Temp ); - GETPROCADDRESS( s_hDll, ScriptString_pcOutChars, Temp ); - } -} - - -//-------------------------------------------------------------------------------------- -void CUniBuffer::Uninitialize() -{ - if( s_hDll ) - { - PLACEHOLDERPROC( ScriptApplyDigitSubstitution ); - PLACEHOLDERPROC( ScriptStringAnalyse ); - PLACEHOLDERPROC( ScriptStringCPtoX ); - PLACEHOLDERPROC( ScriptStringXtoCP ); - PLACEHOLDERPROC( ScriptStringFree ); - PLACEHOLDERPROC( ScriptString_pLogAttr ); - PLACEHOLDERPROC( ScriptString_pcOutChars ); - - FreeLibrary( s_hDll ); - s_hDll = NULL; - } -} - - -//-------------------------------------------------------------------------------------- -bool CUniBuffer::SetBufferSize( int nNewSize ) -{ - // If the current size is already the maximum allowed, - // we can't possibly allocate more. - if( m_nBufferSize == DXUT_MAX_EDITBOXLENGTH ) - return false; - - int nAllocateSize = ( nNewSize == -1 || nNewSize < m_nBufferSize * 2 ) ? ( m_nBufferSize ? m_nBufferSize * - 2 : 256 ) : nNewSize * 2; - - // Cap the buffer size at the maximum allowed. - if( nAllocateSize > DXUT_MAX_EDITBOXLENGTH ) - nAllocateSize = DXUT_MAX_EDITBOXLENGTH; - - WCHAR* pTempBuffer = new WCHAR[nAllocateSize]; - if( !pTempBuffer ) - return false; - - ZeroMemory( pTempBuffer, sizeof( WCHAR ) * nAllocateSize ); - - if( m_pwszBuffer ) - { - CopyMemory( pTempBuffer, m_pwszBuffer, m_nBufferSize * sizeof( WCHAR ) ); - delete[] m_pwszBuffer; - } - - m_pwszBuffer = pTempBuffer; - m_nBufferSize = nAllocateSize; - return true; -} - - -//-------------------------------------------------------------------------------------- -// Uniscribe -- Analyse() analyses the string in the buffer -//-------------------------------------------------------------------------------------- -HRESULT CUniBuffer::Analyse() -{ - if( m_Analysis ) - _ScriptStringFree( &m_Analysis ); - - SCRIPT_CONTROL ScriptControl; // For uniscribe - SCRIPT_STATE ScriptState; // For uniscribe - ZeroMemory( &ScriptControl, sizeof( ScriptControl ) ); - ZeroMemory( &ScriptState, sizeof( ScriptState ) ); - _ScriptApplyDigitSubstitution( NULL, &ScriptControl, &ScriptState ); - - if( !m_pFontNode ) - return E_FAIL; - - HDC hDC = - ( m_pFontNode->pFont9 ? m_pFontNode->pFont9->GetDC() : NULL ); - HRESULT hr = _ScriptStringAnalyse( hDC, - m_pwszBuffer, - lstrlenW( m_pwszBuffer ) + 1, // NULL is also analyzed. - lstrlenW( m_pwszBuffer ) * 3 / 2 + 16, - -1, - SSA_BREAK | SSA_GLYPHS | SSA_FALLBACK | SSA_LINK, - 0, - &ScriptControl, - &ScriptState, - NULL, - NULL, - NULL, - &m_Analysis ); - if( SUCCEEDED( hr ) ) - m_bAnalyseRequired = false; // Analysis is up-to-date - return hr; -} - - -//-------------------------------------------------------------------------------------- -CUniBuffer::CUniBuffer( int nInitialSize ) -{ - CUniBuffer::Initialize(); // ensure static vars are properly init'ed first - - m_nBufferSize = 0; - m_pwszBuffer = NULL; - m_bAnalyseRequired = true; - m_Analysis = NULL; - m_pFontNode = NULL; - - if( nInitialSize > 0 ) - SetBufferSize( nInitialSize ); -} - - -//-------------------------------------------------------------------------------------- -CUniBuffer::~CUniBuffer() -{ - delete[] m_pwszBuffer; - if( m_Analysis ) - _ScriptStringFree( &m_Analysis ); -} - - -//-------------------------------------------------------------------------------------- -WCHAR& CUniBuffer::operator[]( int n ) // No param checking -{ - // This version of operator[] is called only - // if we are asking for write access, so - // re-analysis is required. - m_bAnalyseRequired = true; - return m_pwszBuffer[n]; -} - - -//-------------------------------------------------------------------------------------- -void CUniBuffer::Clear() -{ - *m_pwszBuffer = L'\0'; - m_bAnalyseRequired = true; -} - - -//-------------------------------------------------------------------------------------- -// Inserts the char at specified index. -// If nIndex == -1, insert to the end. -//-------------------------------------------------------------------------------------- -bool CUniBuffer::InsertChar( int nIndex, WCHAR wChar ) -{ - assert( nIndex >= 0 ); - - if( nIndex < 0 || nIndex > lstrlenW( m_pwszBuffer ) ) - return false; // invalid index - - // Check for maximum length allowed - if( GetTextSize() + 1 >= DXUT_MAX_EDITBOXLENGTH ) - return false; - - if( lstrlenW( m_pwszBuffer ) + 1 >= m_nBufferSize ) - { - if( !SetBufferSize( -1 ) ) - return false; // out of memory - } - - assert( m_nBufferSize >= 2 ); - - // Shift the characters after the index, start by copying the null terminator - WCHAR* dest = m_pwszBuffer + lstrlenW( m_pwszBuffer ) + 1; - WCHAR* stop = m_pwszBuffer + nIndex; - WCHAR* src = dest - 1; - - while( dest > stop ) - { - *dest-- = *src--; - } - - // Set new character - m_pwszBuffer[ nIndex ] = wChar; - m_bAnalyseRequired = true; - - return true; -} - - -//-------------------------------------------------------------------------------------- -// Removes the char at specified index. -// If nIndex == -1, remove the last char. -//-------------------------------------------------------------------------------------- -bool CUniBuffer::RemoveChar( int nIndex ) -{ - if( !lstrlenW( m_pwszBuffer ) || nIndex < 0 || nIndex >= lstrlenW( m_pwszBuffer ) ) - return false; // Invalid index - - MoveMemory( m_pwszBuffer + nIndex, m_pwszBuffer + nIndex + 1, sizeof( WCHAR ) * - ( lstrlenW( m_pwszBuffer ) - nIndex ) ); - m_bAnalyseRequired = true; - return true; -} - - -//-------------------------------------------------------------------------------------- -// Inserts the first nCount characters of the string pStr at specified index. -// If nCount == -1, the entire string is inserted. -// If nIndex == -1, insert to the end. -//-------------------------------------------------------------------------------------- -bool CUniBuffer::InsertString( int nIndex, const WCHAR* pStr, int nCount ) -{ - assert( nIndex >= 0 ); - if( nIndex < 0 ) - return false; - - if( nIndex > lstrlenW( m_pwszBuffer ) ) - return false; // invalid index - - if( -1 == nCount ) - nCount = lstrlenW( pStr ); - - // Check for maximum length allowed - if( GetTextSize() + nCount >= DXUT_MAX_EDITBOXLENGTH ) - return false; - - if( lstrlenW( m_pwszBuffer ) + nCount >= m_nBufferSize ) - { - if( !SetBufferSize( lstrlenW( m_pwszBuffer ) + nCount + 1 ) ) - return false; // out of memory - } - - MoveMemory( m_pwszBuffer + nIndex + nCount, m_pwszBuffer + nIndex, sizeof( WCHAR ) * - ( lstrlenW( m_pwszBuffer ) - nIndex + 1 ) ); - CopyMemory( m_pwszBuffer + nIndex, pStr, nCount * sizeof( WCHAR ) ); - m_bAnalyseRequired = true; - - return true; -} - - -//-------------------------------------------------------------------------------------- -bool CUniBuffer::SetText( LPCWSTR wszText ) -{ - assert( wszText != NULL ); - - int nRequired = int( wcslen( wszText ) + 1 ); - - // Check for maximum length allowed - if( nRequired >= DXUT_MAX_EDITBOXLENGTH ) - return false; - - while( GetBufferSize() < nRequired ) - if( !SetBufferSize( -1 ) ) - break; - // Check again in case out of memory occurred inside while loop. - if( GetBufferSize() >= nRequired ) - { - wcscpy_s( m_pwszBuffer, GetBufferSize(), wszText ); - m_bAnalyseRequired = true; - return true; - } - else - return false; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CUniBuffer::CPtoX( int nCP, BOOL bTrail, int* pX ) -{ - assert( pX ); - *pX = 0; // Default - - HRESULT hr = S_OK; - if( m_bAnalyseRequired ) - hr = Analyse(); - - if( SUCCEEDED( hr ) ) - hr = _ScriptStringCPtoX( m_Analysis, nCP, bTrail, pX ); - - return hr; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CUniBuffer::XtoCP( int nX, int* pCP, int* pnTrail ) -{ - assert( pCP && pnTrail ); - *pCP = 0; *pnTrail = FALSE; // Default - - HRESULT hr = S_OK; - if( m_bAnalyseRequired ) - hr = Analyse(); - - if( SUCCEEDED( hr ) ) - hr = _ScriptStringXtoCP( m_Analysis, nX, pCP, pnTrail ); - - // If the coordinate falls outside the text region, we - // can get character positions that don't exist. We must - // filter them here and convert them to those that do exist. - if( *pCP == -1 && *pnTrail == TRUE ) - { - *pCP = 0; *pnTrail = FALSE; - } - else if( *pCP > lstrlenW( m_pwszBuffer ) && *pnTrail == FALSE ) - { - *pCP = lstrlenW( m_pwszBuffer ); *pnTrail = TRUE; - } - - return hr; -} - - -//-------------------------------------------------------------------------------------- -void CUniBuffer::GetPriorItemPos( int nCP, int* pPrior ) -{ - *pPrior = nCP; // Default is the char itself - - if( m_bAnalyseRequired ) - if( FAILED( Analyse() ) ) - return; - - const SCRIPT_LOGATTR* pLogAttr = _ScriptString_pLogAttr( m_Analysis ); - if( !pLogAttr ) - return; - - if( !_ScriptString_pcOutChars( m_Analysis ) ) - return; - int nInitial = *_ScriptString_pcOutChars( m_Analysis ); - if( nCP - 1 < nInitial ) - nInitial = nCP - 1; - for( int i = nInitial; i > 0; --i ) - if( pLogAttr[i].fWordStop || // Either the fWordStop flag is set - ( !pLogAttr[i].fWhiteSpace && // Or the previous char is whitespace but this isn't. - pLogAttr[i - 1].fWhiteSpace ) ) - { - *pPrior = i; - return; - } - // We have reached index 0. 0 is always a break point, so simply return it. - *pPrior = 0; -} - - -//-------------------------------------------------------------------------------------- -void CUniBuffer::GetNextItemPos( int nCP, int* pPrior ) -{ - *pPrior = nCP; // Default is the char itself - - HRESULT hr = S_OK; - if( m_bAnalyseRequired ) - hr = Analyse(); - if( FAILED( hr ) ) - return; - - const SCRIPT_LOGATTR* pLogAttr = _ScriptString_pLogAttr( m_Analysis ); - if( !pLogAttr ) - return; - - if( !_ScriptString_pcOutChars( m_Analysis ) ) - return; - int nInitial = *_ScriptString_pcOutChars( m_Analysis ); - if( nCP + 1 < nInitial ) - nInitial = nCP + 1; - - int i = nInitial; - int limit = *_ScriptString_pcOutChars( m_Analysis ); - while( limit > 0 && i < limit - 1 ) - { - if( pLogAttr[i].fWordStop ) // Either the fWordStop flag is set - { - *pPrior = i; - return; - } - else if( pLogAttr[i].fWhiteSpace && // Or this whitespace but the next char isn't. - !pLogAttr[i + 1].fWhiteSpace ) - { - *pPrior = i + 1; // The next char is a word stop - return; - } - - ++i; - limit = *_ScriptString_pcOutChars( m_Analysis ); - } - // We have reached the end. It's always a word stop, so simply return it. - *pPrior = *_ScriptString_pcOutChars( m_Analysis ) - 1; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTEditBox::ResetCaretBlink() -{ - m_bCaretOn = true; - m_dfLastBlink = DXUTGetGlobalTimer()->GetAbsoluteTime(); -} - - -//-------------------------------------------------------------------------------------- -void DXUTBlendColor::Init( D3DCOLOR defaultColor, D3DCOLOR disabledColor, D3DCOLOR hiddenColor ) -{ - for( int i = 0; i < MAX_CONTROL_STATES; i++ ) - { - States[ i ] = defaultColor; - } - - States[ DXUT_STATE_DISABLED ] = disabledColor; - States[ DXUT_STATE_HIDDEN ] = hiddenColor; - Current = hiddenColor; -} - - -//-------------------------------------------------------------------------------------- -void DXUTBlendColor::Blend( UINT iState, float fElapsedTime, float fRate ) -{ - D3DXCOLOR destColor = States[ iState ]; - D3DXColorLerp( &Current, &Current, &destColor, 1.0f - powf( fRate, 30 * fElapsedTime ) ); -} - - - -//-------------------------------------------------------------------------------------- -void CDXUTElement::SetTexture( UINT iTexture, RECT* prcTexture, D3DCOLOR defaultTextureColor ) -{ - this->iTexture = iTexture; - - if( prcTexture ) - rcTexture = *prcTexture; - else - SetRectEmpty( &rcTexture ); - - TextureColor.Init( defaultTextureColor ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTElement::SetFont( UINT iFont, D3DCOLOR defaultFontColor, DWORD dwTextFormat ) -{ - this->iFont = iFont; - this->dwTextFormat = dwTextFormat; - - FontColor.Init( defaultFontColor ); -} - - -//-------------------------------------------------------------------------------------- -void CDXUTElement::Refresh() -{ - TextureColor.Current = TextureColor.States[ DXUT_STATE_HIDDEN ]; - FontColor.Current = FontColor.States[ DXUT_STATE_HIDDEN ]; -} - - diff --git a/sample/d3d11/common/DXUTgui.h b/sample/d3d11/common/DXUTgui.h deleted file mode 100644 index 1b867ed..0000000 --- a/sample/d3d11/common/DXUTgui.h +++ /dev/null @@ -1,1383 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTgui.h -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_GUI_H -#define DXUT_GUI_H - -#include -#include - - -//-------------------------------------------------------------------------------------- -// Defines and macros -//-------------------------------------------------------------------------------------- -#define EVENT_BUTTON_CLICKED 0x0101 -#define EVENT_COMBOBOX_SELECTION_CHANGED 0x0201 -#define EVENT_RADIOBUTTON_CHANGED 0x0301 -#define EVENT_CHECKBOX_CHANGED 0x0401 -#define EVENT_SLIDER_VALUE_CHANGED 0x0501 -#define EVENT_SLIDER_VALUE_CHANGED_UP 0x0502 - -#define EVENT_EDITBOX_STRING 0x0601 -// EVENT_EDITBOX_CHANGE is sent when the listbox content changes -// due to user input. -#define EVENT_EDITBOX_CHANGE 0x0602 -#define EVENT_LISTBOX_ITEM_DBLCLK 0x0701 -// EVENT_LISTBOX_SELECTION is fired off when the selection changes in -// a single selection list box. -#define EVENT_LISTBOX_SELECTION 0x0702 -#define EVENT_LISTBOX_SELECTION_END 0x0703 - - -//-------------------------------------------------------------------------------------- -// Forward declarations -//-------------------------------------------------------------------------------------- -class CDXUTDialogResourceManager; -class CDXUTControl; -class CDXUTButton; -class CDXUTStatic; -class CDXUTCheckBox; -class CDXUTRadioButton; -class CDXUTComboBox; -class CDXUTSlider; -class CDXUTEditBox; -class CDXUTListBox; -class CDXUTScrollBar; -class CDXUTElement; -struct DXUTElementHolder; -struct DXUTTextureNode; -struct DXUTFontNode; -typedef VOID ( CALLBACK*PCALLBACKDXUTGUIEVENT )( UINT nEvent, int nControlID, CDXUTControl* pControl, - void* pUserContext ); - - -//-------------------------------------------------------------------------------------- -// Enums for pre-defined control types -//-------------------------------------------------------------------------------------- -enum DXUT_CONTROL_TYPE -{ - DXUT_CONTROL_BUTTON, - DXUT_CONTROL_STATIC, - DXUT_CONTROL_CHECKBOX, - DXUT_CONTROL_RADIOBUTTON, - DXUT_CONTROL_COMBOBOX, - DXUT_CONTROL_SLIDER, - DXUT_CONTROL_EDITBOX, - DXUT_CONTROL_IMEEDITBOX, - DXUT_CONTROL_LISTBOX, - DXUT_CONTROL_SCROLLBAR, -}; - -enum DXUT_CONTROL_STATE -{ - DXUT_STATE_NORMAL = 0, - DXUT_STATE_DISABLED, - DXUT_STATE_HIDDEN, - DXUT_STATE_FOCUS, - DXUT_STATE_MOUSEOVER, - DXUT_STATE_PRESSED, -}; - -#define MAX_CONTROL_STATES 6 - -struct DXUTBlendColor -{ - void Init( D3DCOLOR defaultColor, D3DCOLOR disabledColor = D3DCOLOR_ARGB( 200, 128, 128, 128 ), - D3DCOLOR hiddenColor = 0 ); - void Blend( UINT iState, float fElapsedTime, float fRate = 0.7f ); - - D3DCOLOR States[ MAX_CONTROL_STATES ]; // Modulate colors for all possible control states - D3DXCOLOR Current; -}; - - -//----------------------------------------------------------------------------- -// Contains all the display tweakables for a sub-control -//----------------------------------------------------------------------------- -class CDXUTElement -{ -public: - void SetTexture( UINT iTexture, RECT* prcTexture, D3DCOLOR defaultTextureColor = D3DCOLOR_ARGB( 255, 255, 255, - 255 ) ); - void SetFont( UINT iFont, D3DCOLOR defaultFontColor = D3DCOLOR_ARGB( 255, 255, 255, - 255 ), DWORD dwTextFormat = DT_CENTER | - DT_VCENTER ); - - void Refresh(); - - UINT iTexture; // Index of the texture for this Element - UINT iFont; // Index of the font for this Element - DWORD dwTextFormat; // The format argument to DrawText - - RECT rcTexture; // Bounding rect of this element on the composite texture - - DXUTBlendColor TextureColor; - DXUTBlendColor FontColor; -}; - - -//----------------------------------------------------------------------------- -// All controls must be assigned to a dialog, which handles -// input and rendering for the controls. -//----------------------------------------------------------------------------- -class CDXUTDialog -{ - friend class CDXUTDialogResourceManager; - -public: - CDXUTDialog(); - ~CDXUTDialog(); - - // Need to call this now - void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog = true ); - void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, - LPCWSTR pszControlTextureFilename ); - void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, - LPCWSTR szControlTextureResourceName, HMODULE hControlTextureResourceModule ); - - // Windows message handler - bool MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - - // Control creation - HRESULT AddStatic( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault=false, - CDXUTStatic** ppCreated=NULL ); - HRESULT AddButton( int ID, LPCWSTR strText, int x, int y, int width, int height, UINT nHotkey=0, - bool bIsDefault=false, CDXUTButton** ppCreated=NULL ); - HRESULT AddCheckBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bChecked=false, - UINT nHotkey=0, bool bIsDefault=false, CDXUTCheckBox** ppCreated=NULL ); - HRESULT AddRadioButton( int ID, UINT nButtonGroup, LPCWSTR strText, int x, int y, int width, - int height, bool bChecked=false, UINT nHotkey=0, bool bIsDefault=false, - CDXUTRadioButton** ppCreated=NULL ); - HRESULT AddComboBox( int ID, int x, int y, int width, int height, UINT nHotKey=0, bool bIsDefault= - false, CDXUTComboBox** ppCreated=NULL ); - HRESULT AddSlider( int ID, int x, int y, int width, int height, int min=0, int max=100, int value=50, - bool bIsDefault=false, CDXUTSlider** ppCreated=NULL ); - // AddIMEEditBox has been renamed into DXUTguiIME.cpp as CDXUTIMEEditBox::CreateIMEEditBox - HRESULT AddEditBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault= - false, CDXUTEditBox** ppCreated=NULL ); - HRESULT AddListBox( int ID, int x, int y, int width, int height, DWORD dwStyle=0, - CDXUTListBox** ppCreated=NULL ); - HRESULT AddControl( CDXUTControl* pControl ); - HRESULT InitControl( CDXUTControl* pControl ); - - // Control retrieval - CDXUTStatic* GetStatic( int ID ) - { - return ( CDXUTStatic* )GetControl( ID, DXUT_CONTROL_STATIC ); - } - CDXUTButton* GetButton( int ID ) - { - return ( CDXUTButton* )GetControl( ID, DXUT_CONTROL_BUTTON ); - } - CDXUTCheckBox* GetCheckBox( int ID ) - { - return ( CDXUTCheckBox* )GetControl( ID, DXUT_CONTROL_CHECKBOX ); - } - CDXUTRadioButton* GetRadioButton( int ID ) - { - return ( CDXUTRadioButton* )GetControl( ID, DXUT_CONTROL_RADIOBUTTON ); - } - CDXUTComboBox* GetComboBox( int ID ) - { - return ( CDXUTComboBox* )GetControl( ID, DXUT_CONTROL_COMBOBOX ); - } - CDXUTSlider* GetSlider( int ID ) - { - return ( CDXUTSlider* )GetControl( ID, DXUT_CONTROL_SLIDER ); - } - CDXUTEditBox* GetEditBox( int ID ) - { - return ( CDXUTEditBox* )GetControl( ID, DXUT_CONTROL_EDITBOX ); - } - CDXUTListBox* GetListBox( int ID ) - { - return ( CDXUTListBox* )GetControl( ID, DXUT_CONTROL_LISTBOX ); - } - - CDXUTControl* GetControl( int ID ); - CDXUTControl* GetControl( int ID, UINT nControlType ); - CDXUTControl* GetControlAtPoint( POINT pt ); - - bool GetControlEnabled( int ID ); - void SetControlEnabled( int ID, bool bEnabled ); - - void ClearRadioButtonGroup( UINT nGroup ); - void ClearComboBox( int ID ); - - // Access the default display Elements used when adding new controls - HRESULT SetDefaultElement( UINT nControlType, UINT iElement, CDXUTElement* pElement ); - CDXUTElement* GetDefaultElement( UINT nControlType, UINT iElement ); - - // Methods called by controls - void SendEvent( UINT nEvent, bool bTriggeredByUser, CDXUTControl* pControl ); - void RequestFocus( CDXUTControl* pControl ); - - // Render helpers - HRESULT DrawRect( RECT* pRect, D3DCOLOR color ); - HRESULT DrawRect9( RECT* pRect, D3DCOLOR color ); - HRESULT DrawPolyLine( POINT* apPoints, UINT nNumPoints, D3DCOLOR color ); - HRESULT DrawSprite( CDXUTElement* pElement, RECT* prcDest, float fDepth ); - HRESULT DrawSprite9( CDXUTElement* pElement, RECT* prcDest ); - HRESULT DrawSprite11( CDXUTElement* pElement, RECT* prcDest, float fDepth ); - HRESULT CalcTextRect( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, int nCount = -1 ); - HRESULT DrawText( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow = false, - int nCount = -1, bool bCenter = false ); - HRESULT DrawText9( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow = false, - int nCount = -1 ); - HRESULT DrawText11( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext, - LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow = false, - int nCount = -1, bool bCenter = false ); - - // Attributes - bool GetVisible() - { - return m_bVisible; - } - void SetVisible( bool bVisible ) - { - m_bVisible = bVisible; - } - bool GetMinimized() - { - return m_bMinimized; - } - void SetMinimized( bool bMinimized ) - { - m_bMinimized = bMinimized; - } - void SetBackgroundColors( D3DCOLOR colorAllCorners ) - { - SetBackgroundColors( colorAllCorners, colorAllCorners, colorAllCorners, colorAllCorners ); - } - void SetBackgroundColors( D3DCOLOR colorTopLeft, D3DCOLOR colorTopRight, D3DCOLOR colorBottomLeft, - D3DCOLOR colorBottomRight ); - void EnableCaption( bool bEnable ) - { - m_bCaption = bEnable; - } - int GetCaptionHeight() const - { - return m_nCaptionHeight; - } - void SetCaptionHeight( int nHeight ) - { - m_nCaptionHeight = nHeight; - } - void SetCaptionText( const WCHAR* pwszText ) - { - wcscpy_s( m_wszCaption, sizeof( m_wszCaption ) / sizeof( m_wszCaption[0] ), pwszText ); - } - void GetLocation( POINT& Pt ) const - { - Pt.x = m_x; Pt.y = m_y; - } - void SetLocation( int x, int y ) - { - m_x = x; m_y = y; - } - void SetSize( int width, int height ) - { - m_width = width; m_height = height; - } - int GetWidth() - { - return m_width; - } - int GetHeight() - { - return m_height; - } - - static void WINAPI SetRefreshTime( float fTime ) - { - s_fTimeRefresh = fTime; - } - - static CDXUTControl* WINAPI GetNextControl( CDXUTControl* pControl ); - static CDXUTControl* WINAPI GetPrevControl( CDXUTControl* pControl ); - - void RemoveControl( int ID ); - void RemoveAllControls(); - - // Sets the callback used to notify the app of control events - void SetCallback( PCALLBACKDXUTGUIEVENT pCallback, void* pUserContext = NULL ); - void EnableNonUserEvents( bool bEnable ) - { - m_bNonUserEvents = bEnable; - } - void EnableKeyboardInput( bool bEnable ) - { - m_bKeyboardInput = bEnable; - } - void EnableMouseInput( bool bEnable ) - { - m_bMouseInput = bEnable; - } - bool IsKeyboardInputEnabled() const - { - return m_bKeyboardInput; - } - - // Device state notification - void Refresh(); - HRESULT OnRender( float fElapsedTime ); - - // Shared resource access. Indexed fonts and textures are shared among - // all the controls. - HRESULT SetFont( UINT index, LPCWSTR strFaceName, LONG height, LONG weight ); - DXUTFontNode* GetFont( UINT index ); - - HRESULT SetTexture( UINT index, LPCWSTR strFilename ); - HRESULT SetTexture( UINT index, LPCWSTR strResourceName, HMODULE hResourceModule ); - DXUTTextureNode* GetTexture( UINT index ); - - CDXUTDialogResourceManager* GetManager() - { - return m_pManager; - } - - static void WINAPI ClearFocus(); - void FocusDefaultControl(); - - bool m_bNonUserEvents; - bool m_bKeyboardInput; - bool m_bMouseInput; - -private: - int m_nDefaultControlID; - - HRESULT OnRender9( float fElapsedTime ); - HRESULT OnRender10( float fElapsedTime ); - HRESULT OnRender11( float fElapsedTime ); - - static double s_fTimeRefresh; - double m_fTimeLastRefresh; - - // Initialize default Elements - void InitDefaultElements(); - - // Windows message handlers - void OnMouseMove( POINT pt ); - void OnMouseUp( POINT pt ); - - void SetNextDialog( CDXUTDialog* pNextDialog ); - - // Control events - bool OnCycleFocus( bool bForward ); - - static CDXUTControl* s_pControlFocus; // The control which has focus - static CDXUTControl* s_pControlPressed; // The control currently pressed - - CDXUTControl* m_pControlMouseOver; // The control which is hovered over - - bool m_bVisible; - bool m_bCaption; - bool m_bMinimized; - bool m_bDrag; - WCHAR m_wszCaption[256]; - - int m_x; - int m_y; - int m_width; - int m_height; - int m_nCaptionHeight; - - D3DCOLOR m_colorTopLeft; - D3DCOLOR m_colorTopRight; - D3DCOLOR m_colorBottomLeft; - D3DCOLOR m_colorBottomRight; - - CDXUTDialogResourceManager* m_pManager; - PCALLBACKDXUTGUIEVENT m_pCallbackEvent; - void* m_pCallbackEventUserContext; - - CGrowableArray m_Textures; // Index into m_TextureCache; - CGrowableArray m_Fonts; // Index into m_FontCache; - - CGrowableArray m_Controls; - CGrowableArray m_DefaultElements; - - CDXUTElement m_CapElement; // Element for the caption - - CDXUTDialog* m_pNextDialog; - CDXUTDialog* m_pPrevDialog; -}; - - -//-------------------------------------------------------------------------------------- -// Structs for shared resources -//-------------------------------------------------------------------------------------- -struct DXUTTextureNode -{ - bool bFileSource; // True if this texture is loaded from a file. False if from resource. - HMODULE hResourceModule; - int nResourceID; // Resource ID. If 0, string-based ID is used and stored in strFilename. - WCHAR strFilename[MAX_PATH]; - DWORD dwWidth; - DWORD dwHeight; - IDirect3DTexture9* pTexture9; - ID3D11Texture2D* pTexture11; - ID3D11ShaderResourceView* pTexResView11; -}; - -struct DXUTFontNode -{ - WCHAR strFace[MAX_PATH]; - LONG nHeight; - LONG nWeight; - ID3DXFont* pFont9; -}; - -struct DXUTSpriteVertex -{ - D3DXVECTOR3 vPos; - D3DXCOLOR vColor; - D3DXVECTOR2 vTex; -}; - -//----------------------------------------------------------------------------- -// Manages shared resources of dialogs -//----------------------------------------------------------------------------- -class CDXUTDialogResourceManager -{ -public: - CDXUTDialogResourceManager(); - ~CDXUTDialogResourceManager(); - - bool MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - - // D3D9 specific - HRESULT OnD3D9CreateDevice( LPDIRECT3DDEVICE9 pd3dDevice ); - HRESULT OnD3D9ResetDevice(); - void OnD3D9LostDevice(); - void OnD3D9DestroyDevice(); - IDirect3DDevice9* GetD3D9Device() - { - return m_pd3d9Device; - } - - // D3D11 specific - HRESULT OnD3D11CreateDevice( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext ); - HRESULT OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc ); - void OnD3D11ReleasingSwapChain(); - void OnD3D11DestroyDevice(); - void StoreD3D11State( ID3D11DeviceContext* pd3dImmediateContext ); - void RestoreD3D11State( ID3D11DeviceContext* pd3dImmediateContext ); - void ApplyRenderUI11( ID3D11DeviceContext* pd3dImmediateContext ); - void ApplyRenderUIUntex11( ID3D11DeviceContext* pd3dImmediateContext ); - void BeginSprites11( ); - void EndSprites11( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext ); - ID3D11Device* GetD3D11Device() - { - return m_pd3d11Device; - } - ID3D11DeviceContext* GetD3D11DeviceContext() - { - return m_pd3d11DeviceContext; - } - - DXUTFontNode* GetFontNode( int iIndex ) - { - return m_FontCache.GetAt( iIndex ); - }; - DXUTTextureNode* GetTextureNode( int iIndex ) - { - return m_TextureCache.GetAt( iIndex ); - }; - - int AddFont( LPCWSTR strFaceName, LONG height, LONG weight ); - int AddTexture( LPCWSTR strFilename ); - int AddTexture( LPCWSTR strResourceName, HMODULE hResourceModule ); - - bool RegisterDialog( CDXUTDialog* pDialog ); - void UnregisterDialog( CDXUTDialog* pDialog ); - void EnableKeyboardInputForAllDialogs(); - - // Shared between all dialogs - - // D3D9 - IDirect3DStateBlock9* m_pStateBlock; - ID3DXSprite* m_pSprite; // Sprite used for drawing - - // D3D11 - // Shaders - ID3D11VertexShader* m_pVSRenderUI11; - ID3D11PixelShader* m_pPSRenderUI11; - ID3D11PixelShader* m_pPSRenderUIUntex11; - - // States - ID3D11DepthStencilState* m_pDepthStencilStateUI11; - ID3D11RasterizerState* m_pRasterizerStateUI11; - ID3D11BlendState* m_pBlendStateUI11; - ID3D11SamplerState* m_pSamplerStateUI11; - - // Stored states - ID3D11DepthStencilState* m_pDepthStencilStateStored11; - UINT m_StencilRefStored11; - ID3D11RasterizerState* m_pRasterizerStateStored11; - ID3D11BlendState* m_pBlendStateStored11; - float m_BlendFactorStored11[4]; - UINT m_SampleMaskStored11; - ID3D11SamplerState* m_pSamplerStateStored11; - - ID3D11InputLayout* m_pInputLayout11; - ID3D11Buffer* m_pVBScreenQuad11; - - // Sprite workaround - ID3D11Buffer* m_pSpriteBuffer11; - UINT m_SpriteBufferBytes11; - CGrowableArray m_SpriteVertices; - - UINT m_nBackBufferWidth; - UINT m_nBackBufferHeight; - - CGrowableArray m_Dialogs; // Dialogs registered - -protected: - // D3D9 specific - IDirect3DDevice9* m_pd3d9Device; - HRESULT CreateFont9( UINT index ); - HRESULT CreateTexture9( UINT index ); - - // D3D11 specific - ID3D11Device* m_pd3d11Device; - ID3D11DeviceContext* m_pd3d11DeviceContext; - HRESULT CreateFont11( UINT index ); - HRESULT CreateTexture11( UINT index ); - - CGrowableArray m_TextureCache; // Shared textures - CGrowableArray m_FontCache; // Shared fonts -}; - -void BeginText11(); -void DrawText11DXUT( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext, - LPCWSTR strText, RECT rcScreen, D3DXCOLOR vFontColor, - float fBBWidth, float fBBHeight, bool bCenter ); -void EndText11( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3d11DeviceContext ); - -//----------------------------------------------------------------------------- -// Base class for controls -//----------------------------------------------------------------------------- -class CDXUTControl -{ -public: - CDXUTControl( CDXUTDialog* pDialog = NULL ); - virtual ~CDXUTControl(); - - virtual HRESULT OnInit() - { - return S_OK; - } - virtual void Refresh(); - virtual void Render( float fElapsedTime ) - { - }; - - // Windows message handler - virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ) - { - return false; - } - - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) - { - return false; - } - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) - { - return false; - } - - virtual bool CanHaveFocus() - { - return false; - } - virtual void OnFocusIn() - { - m_bHasFocus = true; - } - virtual void OnFocusOut() - { - m_bHasFocus = false; - } - virtual void OnMouseEnter() - { - m_bMouseOver = true; - } - virtual void OnMouseLeave() - { - m_bMouseOver = false; - } - virtual void OnHotkey() - { - } - - virtual BOOL ContainsPoint( POINT pt ) - { - return PtInRect( &m_rcBoundingBox, pt ); - } - - virtual void SetEnabled( bool bEnabled ) - { - m_bEnabled = bEnabled; - } - virtual bool GetEnabled() - { - return m_bEnabled; - } - virtual void SetVisible( bool bVisible ) - { - m_bVisible = bVisible; - } - virtual bool GetVisible() - { - return m_bVisible; - } - - UINT GetType() const - { - return m_Type; - } - - int GetID() const - { - return m_ID; - } - void SetID( int ID ) - { - m_ID = ID; - } - - void SetLocation( int x, int y ) - { - m_x = x; m_y = y; UpdateRects(); - } - void SetSize( int width, int height ) - { - m_width = width; m_height = height; UpdateRects(); - } - - void SetHotkey( UINT nHotkey ) - { - m_nHotkey = nHotkey; - } - UINT GetHotkey() - { - return m_nHotkey; - } - - void SetUserData( void* pUserData ) - { - m_pUserData = pUserData; - } - void* GetUserData() const - { - return m_pUserData; - } - - virtual void SetTextColor( D3DCOLOR Color ); - CDXUTElement* GetElement( UINT iElement ) - { - return m_Elements.GetAt( iElement ); - } - HRESULT SetElement( UINT iElement, CDXUTElement* pElement ); - - bool m_bVisible; // Shown/hidden flag - bool m_bMouseOver; // Mouse pointer is above control - bool m_bHasFocus; // Control has input focus - bool m_bIsDefault; // Is the default control - - // Size, scale, and positioning members - int m_x, m_y; - int m_width, m_height; - - // These members are set by the container - CDXUTDialog* m_pDialog; // Parent container - UINT m_Index; // Index within the control list - - CGrowableArray m_Elements; // All display elements - -protected: - virtual void UpdateRects(); - - int m_ID; // ID number - DXUT_CONTROL_TYPE m_Type; // Control type, set once in constructor - UINT m_nHotkey; // Virtual key code for this control's hotkey - void* m_pUserData; // Data associated with this control that is set by user. - - bool m_bEnabled; // Enabled/disabled flag - - RECT m_rcBoundingBox; // Rectangle defining the active region of the control -}; - - -//----------------------------------------------------------------------------- -// Contains all the display information for a given control type -//----------------------------------------------------------------------------- -struct DXUTElementHolder -{ - UINT nControlType; - UINT iElement; - - CDXUTElement Element; -}; - - -//----------------------------------------------------------------------------- -// Static control -//----------------------------------------------------------------------------- -class CDXUTStatic : public CDXUTControl -{ -public: - CDXUTStatic( CDXUTDialog* pDialog = NULL ); - - virtual void Render( float fElapsedTime ); - virtual BOOL ContainsPoint( POINT pt ) - { - return false; - } - - HRESULT GetTextCopy( __out_ecount(bufferCount) LPWSTR strDest, - UINT bufferCount ); - LPCWSTR GetText() - { - return m_strText; - } - HRESULT SetText( LPCWSTR strText ); - - -protected: - WCHAR m_strText[MAX_PATH]; // Window text -}; - - -//----------------------------------------------------------------------------- -// Button control -//----------------------------------------------------------------------------- -class CDXUTButton : public CDXUTStatic -{ -public: - CDXUTButton( CDXUTDialog* pDialog = NULL ); - - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual void OnHotkey() - { - if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); - m_pDialog->SendEvent( EVENT_BUTTON_CLICKED, true, this ); - } - - virtual BOOL ContainsPoint( POINT pt ) - { - return PtInRect( &m_rcBoundingBox, pt ); - } - virtual bool CanHaveFocus() - { - return ( m_bVisible && m_bEnabled ); - } - - virtual void Render( float fElapsedTime ); - -protected: - bool m_bPressed; -}; - - -//----------------------------------------------------------------------------- -// CheckBox control -//----------------------------------------------------------------------------- -class CDXUTCheckBox : public CDXUTButton -{ -public: - CDXUTCheckBox( CDXUTDialog* pDialog = NULL ); - - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual void OnHotkey() - { - if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); - SetCheckedInternal( !m_bChecked, true ); - } - - virtual BOOL ContainsPoint( POINT pt ); - virtual void UpdateRects(); - - virtual void Render( float fElapsedTime ); - - bool GetChecked() - { - return m_bChecked; - } - void SetChecked( bool bChecked ) - { - SetCheckedInternal( bChecked, false ); - } - -protected: - virtual void SetCheckedInternal( bool bChecked, bool bFromInput ); - - bool m_bChecked; - RECT m_rcButton; - RECT m_rcText; -}; - - -//----------------------------------------------------------------------------- -// RadioButton control -//----------------------------------------------------------------------------- -class CDXUTRadioButton : public CDXUTCheckBox -{ -public: - CDXUTRadioButton( CDXUTDialog* pDialog = NULL ); - - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual void OnHotkey() - { - if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); - SetCheckedInternal( true, true, true ); - } - - void SetChecked( bool bChecked, bool bClearGroup=true ) - { - SetCheckedInternal( bChecked, bClearGroup, false ); - } - void SetButtonGroup( UINT nButtonGroup ) - { - m_nButtonGroup = nButtonGroup; - } - UINT GetButtonGroup() - { - return m_nButtonGroup; - } - -protected: - virtual void SetCheckedInternal( bool bChecked, bool bClearGroup, bool bFromInput ); - UINT m_nButtonGroup; -}; - - -//----------------------------------------------------------------------------- -// Scrollbar control -//----------------------------------------------------------------------------- -class CDXUTScrollBar : public CDXUTControl -{ -public: - CDXUTScrollBar( CDXUTDialog* pDialog = NULL ); - virtual ~CDXUTScrollBar(); - - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ); - - virtual void Render( float fElapsedTime ); - virtual void UpdateRects(); - - void SetTrackRange( int nStart, int nEnd ); - int GetTrackPos() - { - return m_nPosition; - } - void SetTrackPos( int nPosition ) - { - m_nPosition = nPosition; Cap(); UpdateThumbRect(); - } - int GetPageSize() - { - return m_nPageSize; - } - void SetPageSize( int nPageSize ) - { - m_nPageSize = nPageSize; Cap(); UpdateThumbRect(); - } - - void Scroll( int nDelta ); // Scroll by nDelta items (plus or minus) - void ShowItem( int nIndex ); // Ensure that item nIndex is displayed, scroll if necessary - -protected: - // ARROWSTATE indicates the state of the arrow buttons. - // CLEAR No arrow is down. - // CLICKED_UP Up arrow is clicked. - // CLICKED_DOWN Down arrow is clicked. - // HELD_UP Up arrow is held down for sustained period. - // HELD_DOWN Down arrow is held down for sustained period. - enum ARROWSTATE - { - CLEAR, - CLICKED_UP, - CLICKED_DOWN, - HELD_UP, - HELD_DOWN - }; - - void UpdateThumbRect(); - void Cap(); // Clips position at boundaries. Ensures it stays within legal range. - - bool m_bShowThumb; - bool m_bDrag; - RECT m_rcUpButton; - RECT m_rcDownButton; - RECT m_rcTrack; - RECT m_rcThumb; - int m_nPosition; // Position of the first displayed item - int m_nPageSize; // How many items are displayable in one page - int m_nStart; // First item - int m_nEnd; // The index after the last item - POINT m_LastMouse;// Last mouse position - ARROWSTATE m_Arrow; // State of the arrows - double m_dArrowTS; // Timestamp of last arrow event. -}; - - -//----------------------------------------------------------------------------- -// ListBox control -//----------------------------------------------------------------------------- -struct DXUTListBoxItem -{ - WCHAR strText[256]; - void* pData; - - RECT rcActive; - bool bSelected; -}; - -class CDXUTListBox : public CDXUTControl -{ -public: - CDXUTListBox( CDXUTDialog* pDialog = NULL ); - virtual ~CDXUTListBox(); - - virtual HRESULT OnInit() - { - return m_pDialog->InitControl( &m_ScrollBar ); - } - virtual bool CanHaveFocus() - { - return ( m_bVisible && m_bEnabled ); - } - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ); - - virtual void Render( float fElapsedTime ); - virtual void UpdateRects(); - - DWORD GetStyle() const - { - return m_dwStyle; - } - int GetSize() const - { - return m_Items.GetSize(); - } - void SetStyle( DWORD dwStyle ) - { - m_dwStyle = dwStyle; - } - int GetScrollBarWidth() const - { - return m_nSBWidth; - } - void SetScrollBarWidth( int nWidth ) - { - m_nSBWidth = nWidth; UpdateRects(); - } - void SetBorder( int nBorder, int nMargin ) - { - m_nBorder = nBorder; m_nMargin = nMargin; - } - HRESULT AddItem( const WCHAR* wszText, void* pData ); - HRESULT InsertItem( int nIndex, const WCHAR* wszText, void* pData ); - void RemoveItem( int nIndex ); - void RemoveAllItems(); - - DXUTListBoxItem* GetItem( int nIndex ); - int GetSelectedIndex( int nPreviousSelected = -1 ); - DXUTListBoxItem* GetSelectedItem( int nPreviousSelected = -1 ) - { - return GetItem( GetSelectedIndex( nPreviousSelected ) ); - } - void SelectItem( int nNewIndex ); - - enum STYLE - { - MULTISELECTION = 1 - }; - -protected: - RECT m_rcText; // Text rendering bound - RECT m_rcSelection; // Selection box bound - CDXUTScrollBar m_ScrollBar; - int m_nSBWidth; - int m_nBorder; - int m_nMargin; - int m_nTextHeight; // Height of a single line of text - DWORD m_dwStyle; // List box style - int m_nSelected; // Index of the selected item for single selection list box - int m_nSelStart; // Index of the item where selection starts (for handling multi-selection) - bool m_bDrag; // Whether the user is dragging the mouse to select - - CGrowableArray m_Items; -}; - - -//----------------------------------------------------------------------------- -// ComboBox control -//----------------------------------------------------------------------------- -struct DXUTComboBoxItem -{ - WCHAR strText[256]; - void* pData; - - RECT rcActive; - bool bVisible; -}; - - -class CDXUTComboBox : public CDXUTButton -{ -public: - CDXUTComboBox( CDXUTDialog* pDialog = NULL ); - virtual ~CDXUTComboBox(); - - virtual void SetTextColor( D3DCOLOR Color ); - virtual HRESULT OnInit() - { - return m_pDialog->InitControl( &m_ScrollBar ); - } - - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual void OnHotkey(); - - virtual bool CanHaveFocus() - { - return ( m_bVisible && m_bEnabled ); - } - virtual void OnFocusOut(); - virtual void Render( float fElapsedTime ); - - virtual void UpdateRects(); - - HRESULT AddItem( const WCHAR* strText, void* pData ); - void RemoveAllItems(); - void RemoveItem( UINT index ); - bool ContainsItem( const WCHAR* strText, UINT iStart=0 ); - int FindItem( const WCHAR* strText, UINT iStart=0 ); - void* GetItemData( const WCHAR* strText ); - void* GetItemData( int nIndex ); - void SetDropHeight( UINT nHeight ) - { - m_nDropHeight = nHeight; UpdateRects(); - } - int GetScrollBarWidth() const - { - return m_nSBWidth; - } - void SetScrollBarWidth( int nWidth ) - { - m_nSBWidth = nWidth; UpdateRects(); - } - - int GetSelectedIndex() const - { - return m_iSelected; - } - void* GetSelectedData(); - DXUTComboBoxItem* GetSelectedItem(); - - UINT GetNumItems() - { - return m_Items.GetSize(); - } - DXUTComboBoxItem* GetItem( UINT index ) - { - return m_Items.GetAt( index ); - } - - HRESULT SetSelectedByIndex( UINT index ); - HRESULT SetSelectedByText( const WCHAR* strText ); - HRESULT SetSelectedByData( void* pData ); - -protected: - int m_iSelected; - int m_iFocused; - int m_nDropHeight; - CDXUTScrollBar m_ScrollBar; - int m_nSBWidth; - - bool m_bOpened; - - RECT m_rcText; - RECT m_rcButton; - RECT m_rcDropdown; - RECT m_rcDropdownText; - - - CGrowableArray m_Items; -}; - - -//----------------------------------------------------------------------------- -// Slider control -//----------------------------------------------------------------------------- -class CDXUTSlider : public CDXUTControl -{ -public: - CDXUTSlider( CDXUTDialog* pDialog = NULL ); - - virtual BOOL ContainsPoint( POINT pt ); - virtual bool CanHaveFocus() - { - return ( m_bVisible && m_bEnabled ); - } - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - - virtual void UpdateRects(); - - virtual void Render( float fElapsedTime ); - - void SetValue( int nValue ) - { - SetValueInternal( nValue, false ); - } - int GetValue() const - { - return m_nValue; - }; - - void GetRange( int& nMin, int& nMax ) const - { - nMin = m_nMin; nMax = m_nMax; - } - void SetRange( int nMin, int nMax ); - -protected: - void SetValueInternal( int nValue, bool bFromInput ); - int ValueFromPos( int x ); - - int m_nValue; - - int m_nMin; - int m_nMax; - - int m_nDragX; // Mouse position at start of drag - int m_nDragOffset; // Drag offset from the center of the button - int m_nButtonX; - - bool m_bPressed; - RECT m_rcButton; -}; - - -//----------------------------------------------------------------------------- -// CUniBuffer class for the edit control -//----------------------------------------------------------------------------- -class CUniBuffer -{ -public: - CUniBuffer( int nInitialSize = 1 ); - ~CUniBuffer(); - - static void WINAPI Initialize(); - static void WINAPI Uninitialize(); - - int GetBufferSize() - { - return m_nBufferSize; - } - bool SetBufferSize( int nSize ); - int GetTextSize() - { - return lstrlenW( m_pwszBuffer ); - } - const WCHAR* GetBuffer() - { - return m_pwszBuffer; - } - const WCHAR& operator[]( int n ) const - { - return m_pwszBuffer[n]; - } - WCHAR& operator[]( int n ); - DXUTFontNode* GetFontNode() - { - return m_pFontNode; - } - void SetFontNode( DXUTFontNode* pFontNode ) - { - m_pFontNode = pFontNode; - } - void Clear(); - - bool InsertChar( int nIndex, WCHAR wChar ); // Inserts the char at specified index. If nIndex == -1, insert to the end. - bool RemoveChar( int nIndex ); // Removes the char at specified index. If nIndex == -1, remove the last char. - bool InsertString( int nIndex, const WCHAR* pStr, int nCount = -1 ); // Inserts the first nCount characters of the string pStr at specified index. If nCount == -1, the entire string is inserted. If nIndex == -1, insert to the end. - bool SetText( LPCWSTR wszText ); - - // Uniscribe - HRESULT CPtoX( int nCP, BOOL bTrail, int* pX ); - HRESULT XtoCP( int nX, int* pCP, int* pnTrail ); - void GetPriorItemPos( int nCP, int* pPrior ); - void GetNextItemPos( int nCP, int* pPrior ); - -private: - HRESULT Analyse(); // Uniscribe -- Analyse() analyses the string in the buffer - - WCHAR* m_pwszBuffer; // Buffer to hold text - int m_nBufferSize; // Size of the buffer allocated, in characters - - // Uniscribe-specific - DXUTFontNode* m_pFontNode; // Font node for the font that this buffer uses - bool m_bAnalyseRequired; // True if the string has changed since last analysis. - SCRIPT_STRING_ANALYSIS m_Analysis; // Analysis for the current string - -private: - // Empty implementation of the Uniscribe API - static HRESULT WINAPI Dummy_ScriptApplyDigitSubstitution( const SCRIPT_DIGITSUBSTITUTE*, SCRIPT_CONTROL*, - SCRIPT_STATE* ) - { - return E_NOTIMPL; - } - static HRESULT WINAPI Dummy_ScriptStringAnalyse( HDC, const void*, int, int, int, DWORD, int, SCRIPT_CONTROL*, - SCRIPT_STATE*, const int*, SCRIPT_TABDEF*, const BYTE*, - SCRIPT_STRING_ANALYSIS* ) - { - return E_NOTIMPL; - } - static HRESULT WINAPI Dummy_ScriptStringCPtoX( SCRIPT_STRING_ANALYSIS, int, BOOL, int* ) - { - return E_NOTIMPL; - } - static HRESULT WINAPI Dummy_ScriptStringXtoCP( SCRIPT_STRING_ANALYSIS, int, int*, int* ) - { - return E_NOTIMPL; - } - static HRESULT WINAPI Dummy_ScriptStringFree( SCRIPT_STRING_ANALYSIS* ) - { - return E_NOTIMPL; - } - static const SCRIPT_LOGATTR* WINAPI Dummy_ScriptString_pLogAttr( SCRIPT_STRING_ANALYSIS ) - { - return NULL; - } - static const int* WINAPI Dummy_ScriptString_pcOutChars( SCRIPT_STRING_ANALYSIS ) - { - return NULL; - } - - // Function pointers - static HRESULT( WINAPI* _ScriptApplyDigitSubstitution )( const SCRIPT_DIGITSUBSTITUTE*, - SCRIPT_CONTROL*, SCRIPT_STATE* ); - static HRESULT( WINAPI* _ScriptStringAnalyse )( HDC, const void*, int, int, int, DWORD, int, - SCRIPT_CONTROL*, SCRIPT_STATE*, const int*, - SCRIPT_TABDEF*, const BYTE*, - SCRIPT_STRING_ANALYSIS* ); - static HRESULT( WINAPI* _ScriptStringCPtoX )( SCRIPT_STRING_ANALYSIS, int, BOOL, int* ); - static HRESULT( WINAPI* _ScriptStringXtoCP )( SCRIPT_STRING_ANALYSIS, int, int*, int* ); - static HRESULT( WINAPI* _ScriptStringFree )( SCRIPT_STRING_ANALYSIS* ); - static const SCRIPT_LOGATTR* ( WINAPI*_ScriptString_pLogAttr )( SCRIPT_STRING_ANALYSIS ); - static const int* ( WINAPI*_ScriptString_pcOutChars )( SCRIPT_STRING_ANALYSIS ); - - static HINSTANCE s_hDll; // Uniscribe DLL handle - -}; - -//----------------------------------------------------------------------------- -// EditBox control -//----------------------------------------------------------------------------- -class CDXUTEditBox : public CDXUTControl -{ -public: - CDXUTEditBox( CDXUTDialog* pDialog = NULL ); - virtual ~CDXUTEditBox(); - - virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); - virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ); - virtual void UpdateRects(); - virtual bool CanHaveFocus() - { - return ( m_bVisible && m_bEnabled ); - } - virtual void Render( float fElapsedTime ); - virtual void OnFocusIn(); - - void SetText( LPCWSTR wszText, bool bSelected = false ); - LPCWSTR GetText() - { - return m_Buffer.GetBuffer(); - } - int GetTextLength() - { - return m_Buffer.GetTextSize(); - } // Returns text length in chars excluding NULL. - HRESULT GetTextCopy( __out_ecount(bufferCount) LPWSTR strDest, - UINT bufferCount ); - void ClearText(); - virtual void SetTextColor( D3DCOLOR Color ) - { - m_TextColor = Color; - } // Text color - void SetSelectedTextColor( D3DCOLOR Color ) - { - m_SelTextColor = Color; - } // Selected text color - void SetSelectedBackColor( D3DCOLOR Color ) - { - m_SelBkColor = Color; - } // Selected background color - void SetCaretColor( D3DCOLOR Color ) - { - m_CaretColor = Color; - } // Caret color - void SetBorderWidth( int nBorder ) - { - m_nBorder = nBorder; UpdateRects(); - } // Border of the window - void SetSpacing( int nSpacing ) - { - m_nSpacing = nSpacing; UpdateRects(); - } - void ParseFloatArray( float* pNumbers, int nCount ); - void SetTextFloatArray( const float* pNumbers, int nCount ); - -protected: - void PlaceCaret( int nCP ); - void DeleteSelectionText(); - void ResetCaretBlink(); - void CopyToClipboard(); - void PasteFromClipboard(); - - CUniBuffer m_Buffer; // Buffer to hold text - int m_nBorder; // Border of the window - int m_nSpacing; // Spacing between the text and the edge of border - RECT m_rcText; // Bounding rectangle for the text - RECT m_rcRender[9]; // Convenient rectangles for rendering elements - double m_dfBlink; // Caret blink time in milliseconds - double m_dfLastBlink; // Last timestamp of caret blink - bool m_bCaretOn; // Flag to indicate whether caret is currently visible - int m_nCaret; // Caret position, in characters - bool m_bInsertMode; // If true, control is in insert mode. Else, overwrite mode. - int m_nSelStart; // Starting position of the selection. The caret marks the end. - int m_nFirstVisible;// First visible character in the edit control - D3DCOLOR m_TextColor; // Text color - D3DCOLOR m_SelTextColor; // Selected text color - D3DCOLOR m_SelBkColor; // Selected background color - D3DCOLOR m_CaretColor; // Caret color - - // Mouse-specific - bool m_bMouseDrag; // True to indicate drag in progress - - // Static - static bool s_bHideCaret; // If true, we don't render the caret. -}; - - - - -#endif // DXUT_GUI_H diff --git a/sample/d3d11/common/DXUTmisc.cpp b/sample/d3d11/common/DXUTmisc.cpp deleted file mode 100644 index f76ee92..0000000 --- a/sample/d3d11/common/DXUTmisc.cpp +++ /dev/null @@ -1,1785 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTMisc.cpp -// -// Shortcut macros and functions for using DX objects -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#include "dxut.h" -#include -#define DXUT_GAMEPAD_TRIGGER_THRESHOLD 30 -#undef min // use __min instead -#undef max // use __max instead - -CDXUTTimer* WINAPI DXUTGetGlobalTimer() -{ - // Using an accessor function gives control of the construction order - static CDXUTTimer timer; - return &timer; -} - - -//-------------------------------------------------------------------------------------- -CDXUTTimer::CDXUTTimer() -{ - m_bTimerStopped = true; - m_llQPFTicksPerSec = 0; - - m_llStopTime = 0; - m_llLastElapsedTime = 0; - m_llBaseTime = 0; - - // Use QueryPerformanceFrequency to get the frequency of the counter - LARGE_INTEGER qwTicksPerSec = { 0 }; - QueryPerformanceFrequency( &qwTicksPerSec ); - m_llQPFTicksPerSec = qwTicksPerSec.QuadPart; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTTimer::Reset() -{ - LARGE_INTEGER qwTime = GetAdjustedCurrentTime(); - - m_llBaseTime = qwTime.QuadPart; - m_llLastElapsedTime = qwTime.QuadPart; - m_llStopTime = 0; - m_bTimerStopped = FALSE; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTTimer::Start() -{ - // Get the current time - LARGE_INTEGER qwTime = { 0 }; - QueryPerformanceCounter( &qwTime ); - - if( m_bTimerStopped ) - m_llBaseTime += qwTime.QuadPart - m_llStopTime; - m_llStopTime = 0; - m_llLastElapsedTime = qwTime.QuadPart; - m_bTimerStopped = FALSE; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTTimer::Stop() -{ - if( !m_bTimerStopped ) - { - LARGE_INTEGER qwTime = { 0 }; - QueryPerformanceCounter( &qwTime ); - m_llStopTime = qwTime.QuadPart; - m_llLastElapsedTime = qwTime.QuadPart; - m_bTimerStopped = TRUE; - } -} - - -//-------------------------------------------------------------------------------------- -void CDXUTTimer::Advance() -{ - m_llStopTime += m_llQPFTicksPerSec / 10; -} - - -//-------------------------------------------------------------------------------------- -double CDXUTTimer::GetAbsoluteTime() -{ - LARGE_INTEGER qwTime = { 0 }; - QueryPerformanceCounter( &qwTime ); - - double fTime = qwTime.QuadPart / ( double )m_llQPFTicksPerSec; - - return fTime; -} - - -//-------------------------------------------------------------------------------------- -double CDXUTTimer::GetTime() -{ - LARGE_INTEGER qwTime = GetAdjustedCurrentTime(); - - double fAppTime = ( double )( qwTime.QuadPart - m_llBaseTime ) / ( double )m_llQPFTicksPerSec; - - return fAppTime; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTTimer::GetTimeValues( double* pfTime, double* pfAbsoluteTime, float* pfElapsedTime ) -{ - assert( pfTime && pfAbsoluteTime && pfElapsedTime ); - - LARGE_INTEGER qwTime = GetAdjustedCurrentTime(); - - float fElapsedTime = (float) ((double) ( qwTime.QuadPart - m_llLastElapsedTime ) / (double) m_llQPFTicksPerSec); - m_llLastElapsedTime = qwTime.QuadPart; - - // Clamp the timer to non-negative values to ensure the timer is accurate. - // fElapsedTime can be outside this range if processor goes into a - // power save mode or we somehow get shuffled to another processor. - // However, the main thread should call SetThreadAffinityMask to ensure that - // we don't get shuffled to another processor. Other worker threads should NOT call - // SetThreadAffinityMask, but use a shared copy of the timer data gathered from - // the main thread. - if( fElapsedTime < 0.0f ) - fElapsedTime = 0.0f; - - *pfAbsoluteTime = qwTime.QuadPart / ( double )m_llQPFTicksPerSec; - *pfTime = ( qwTime.QuadPart - m_llBaseTime ) / ( double )m_llQPFTicksPerSec; - *pfElapsedTime = fElapsedTime; -} - - -//-------------------------------------------------------------------------------------- -float CDXUTTimer::GetElapsedTime() -{ - LARGE_INTEGER qwTime = GetAdjustedCurrentTime(); - - double fElapsedTime = (float) ((double) ( qwTime.QuadPart - m_llLastElapsedTime ) / (double) m_llQPFTicksPerSec); - m_llLastElapsedTime = qwTime.QuadPart; - - // See the explanation about clamping in CDXUTTimer::GetTimeValues() - if( fElapsedTime < 0.0f ) - fElapsedTime = 0.0f; - - return ( float )fElapsedTime; -} - - -//-------------------------------------------------------------------------------------- -// If stopped, returns time when stopped otherwise returns current time -//-------------------------------------------------------------------------------------- -LARGE_INTEGER CDXUTTimer::GetAdjustedCurrentTime() -{ - LARGE_INTEGER qwTime; - if( m_llStopTime != 0 ) - qwTime.QuadPart = m_llStopTime; - else - QueryPerformanceCounter( &qwTime ); - return qwTime; -} - -//-------------------------------------------------------------------------------------- -bool CDXUTTimer::IsStopped() -{ - return m_bTimerStopped; -} - -//-------------------------------------------------------------------------------------- -// Limit the current thread to one processor (the current one). This ensures that timing code -// runs on only one processor, and will not suffer any ill effects from power management. -// See "Game Timing and Multicore Processors" for more details -//-------------------------------------------------------------------------------------- -void CDXUTTimer::LimitThreadAffinityToCurrentProc() -{ - HANDLE hCurrentProcess = GetCurrentProcess(); - - // Get the processor affinity mask for this process - DWORD_PTR dwProcessAffinityMask = 0; - DWORD_PTR dwSystemAffinityMask = 0; - - if( GetProcessAffinityMask( hCurrentProcess, &dwProcessAffinityMask, &dwSystemAffinityMask ) != 0 && - dwProcessAffinityMask ) - { - // Find the lowest processor that our process is allows to run against - DWORD_PTR dwAffinityMask = ( dwProcessAffinityMask & ( ( ~dwProcessAffinityMask ) + 1 ) ); - - // Set this as the processor that our thread must always run against - // This must be a subset of the process affinity mask - HANDLE hCurrentThread = GetCurrentThread(); - if( INVALID_HANDLE_VALUE != hCurrentThread ) - { - SetThreadAffinityMask( hCurrentThread, dwAffinityMask ); - CloseHandle( hCurrentThread ); - } - } - - CloseHandle( hCurrentProcess ); -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given D3DFORMAT. -//-------------------------------------------------------------------------------------- -LPCWSTR WINAPI DXUTD3DFormatToString( D3DFORMAT format, bool bWithPrefix ) -{ - WCHAR* pstr = NULL; - switch( format ) - { - case D3DFMT_UNKNOWN: - pstr = L"D3DFMT_UNKNOWN"; break; - case D3DFMT_R8G8B8: - pstr = L"D3DFMT_R8G8B8"; break; - case D3DFMT_A8R8G8B8: - pstr = L"D3DFMT_A8R8G8B8"; break; - case D3DFMT_X8R8G8B8: - pstr = L"D3DFMT_X8R8G8B8"; break; - case D3DFMT_R5G6B5: - pstr = L"D3DFMT_R5G6B5"; break; - case D3DFMT_X1R5G5B5: - pstr = L"D3DFMT_X1R5G5B5"; break; - case D3DFMT_A1R5G5B5: - pstr = L"D3DFMT_A1R5G5B5"; break; - case D3DFMT_A4R4G4B4: - pstr = L"D3DFMT_A4R4G4B4"; break; - case D3DFMT_R3G3B2: - pstr = L"D3DFMT_R3G3B2"; break; - case D3DFMT_A8: - pstr = L"D3DFMT_A8"; break; - case D3DFMT_A8R3G3B2: - pstr = L"D3DFMT_A8R3G3B2"; break; - case D3DFMT_X4R4G4B4: - pstr = L"D3DFMT_X4R4G4B4"; break; - case D3DFMT_A2B10G10R10: - pstr = L"D3DFMT_A2B10G10R10"; break; - case D3DFMT_A8B8G8R8: - pstr = L"D3DFMT_A8B8G8R8"; break; - case D3DFMT_X8B8G8R8: - pstr = L"D3DFMT_X8B8G8R8"; break; - case D3DFMT_G16R16: - pstr = L"D3DFMT_G16R16"; break; - case D3DFMT_A2R10G10B10: - pstr = L"D3DFMT_A2R10G10B10"; break; - case D3DFMT_A16B16G16R16: - pstr = L"D3DFMT_A16B16G16R16"; break; - case D3DFMT_A8P8: - pstr = L"D3DFMT_A8P8"; break; - case D3DFMT_P8: - pstr = L"D3DFMT_P8"; break; - case D3DFMT_L8: - pstr = L"D3DFMT_L8"; break; - case D3DFMT_A8L8: - pstr = L"D3DFMT_A8L8"; break; - case D3DFMT_A4L4: - pstr = L"D3DFMT_A4L4"; break; - case D3DFMT_V8U8: - pstr = L"D3DFMT_V8U8"; break; - case D3DFMT_L6V5U5: - pstr = L"D3DFMT_L6V5U5"; break; - case D3DFMT_X8L8V8U8: - pstr = L"D3DFMT_X8L8V8U8"; break; - case D3DFMT_Q8W8V8U8: - pstr = L"D3DFMT_Q8W8V8U8"; break; - case D3DFMT_V16U16: - pstr = L"D3DFMT_V16U16"; break; - case D3DFMT_A2W10V10U10: - pstr = L"D3DFMT_A2W10V10U10"; break; - case D3DFMT_UYVY: - pstr = L"D3DFMT_UYVY"; break; - case D3DFMT_YUY2: - pstr = L"D3DFMT_YUY2"; break; - case D3DFMT_DXT1: - pstr = L"D3DFMT_DXT1"; break; - case D3DFMT_DXT2: - pstr = L"D3DFMT_DXT2"; break; - case D3DFMT_DXT3: - pstr = L"D3DFMT_DXT3"; break; - case D3DFMT_DXT4: - pstr = L"D3DFMT_DXT4"; break; - case D3DFMT_DXT5: - pstr = L"D3DFMT_DXT5"; break; - case D3DFMT_D16_LOCKABLE: - pstr = L"D3DFMT_D16_LOCKABLE"; break; - case D3DFMT_D32: - pstr = L"D3DFMT_D32"; break; - case D3DFMT_D15S1: - pstr = L"D3DFMT_D15S1"; break; - case D3DFMT_D24S8: - pstr = L"D3DFMT_D24S8"; break; - case D3DFMT_D24X8: - pstr = L"D3DFMT_D24X8"; break; - case D3DFMT_D24X4S4: - pstr = L"D3DFMT_D24X4S4"; break; - case D3DFMT_D16: - pstr = L"D3DFMT_D16"; break; - case D3DFMT_L16: - pstr = L"D3DFMT_L16"; break; - case D3DFMT_VERTEXDATA: - pstr = L"D3DFMT_VERTEXDATA"; break; - case D3DFMT_INDEX16: - pstr = L"D3DFMT_INDEX16"; break; - case D3DFMT_INDEX32: - pstr = L"D3DFMT_INDEX32"; break; - case D3DFMT_Q16W16V16U16: - pstr = L"D3DFMT_Q16W16V16U16"; break; - case D3DFMT_MULTI2_ARGB8: - pstr = L"D3DFMT_MULTI2_ARGB8"; break; - case D3DFMT_R16F: - pstr = L"D3DFMT_R16F"; break; - case D3DFMT_G16R16F: - pstr = L"D3DFMT_G16R16F"; break; - case D3DFMT_A16B16G16R16F: - pstr = L"D3DFMT_A16B16G16R16F"; break; - case D3DFMT_R32F: - pstr = L"D3DFMT_R32F"; break; - case D3DFMT_G32R32F: - pstr = L"D3DFMT_G32R32F"; break; - case D3DFMT_A32B32G32R32F: - pstr = L"D3DFMT_A32B32G32R32F"; break; - case D3DFMT_CxV8U8: - pstr = L"D3DFMT_CxV8U8"; break; - default: - pstr = L"Unknown format"; break; - } - if( bWithPrefix || wcsstr( pstr, L"D3DFMT_" ) == NULL ) - return pstr; - else - return pstr + lstrlen( L"D3DFMT_" ); -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given DXGI_FORMAT. -//-------------------------------------------------------------------------------------- -LPCWSTR WINAPI DXUTDXGIFormatToString( DXGI_FORMAT format, bool bWithPrefix ) -{ - WCHAR* pstr = NULL; - switch( format ) - { - case DXGI_FORMAT_R32G32B32A32_TYPELESS: - pstr = L"DXGI_FORMAT_R32G32B32A32_TYPELESS"; break; - case DXGI_FORMAT_R32G32B32A32_FLOAT: - pstr = L"DXGI_FORMAT_R32G32B32A32_FLOAT"; break; - case DXGI_FORMAT_R32G32B32A32_UINT: - pstr = L"DXGI_FORMAT_R32G32B32A32_UINT"; break; - case DXGI_FORMAT_R32G32B32A32_SINT: - pstr = L"DXGI_FORMAT_R32G32B32A32_SINT"; break; - case DXGI_FORMAT_R32G32B32_TYPELESS: - pstr = L"DXGI_FORMAT_R32G32B32_TYPELESS"; break; - case DXGI_FORMAT_R32G32B32_FLOAT: - pstr = L"DXGI_FORMAT_R32G32B32_FLOAT"; break; - case DXGI_FORMAT_R32G32B32_UINT: - pstr = L"DXGI_FORMAT_R32G32B32_UINT"; break; - case DXGI_FORMAT_R32G32B32_SINT: - pstr = L"DXGI_FORMAT_R32G32B32_SINT"; break; - case DXGI_FORMAT_R16G16B16A16_TYPELESS: - pstr = L"DXGI_FORMAT_R16G16B16A16_TYPELESS"; break; - case DXGI_FORMAT_R16G16B16A16_FLOAT: - pstr = L"DXGI_FORMAT_R16G16B16A16_FLOAT"; break; - case DXGI_FORMAT_R16G16B16A16_UNORM: - pstr = L"DXGI_FORMAT_R16G16B16A16_UNORM"; break; - case DXGI_FORMAT_R16G16B16A16_UINT: - pstr = L"DXGI_FORMAT_R16G16B16A16_UINT"; break; - case DXGI_FORMAT_R16G16B16A16_SNORM: - pstr = L"DXGI_FORMAT_R16G16B16A16_SNORM"; break; - case DXGI_FORMAT_R16G16B16A16_SINT: - pstr = L"DXGI_FORMAT_R16G16B16A16_SINT"; break; - case DXGI_FORMAT_R32G32_TYPELESS: - pstr = L"DXGI_FORMAT_R32G32_TYPELESS"; break; - case DXGI_FORMAT_R32G32_FLOAT: - pstr = L"DXGI_FORMAT_R32G32_FLOAT"; break; - case DXGI_FORMAT_R32G32_UINT: - pstr = L"DXGI_FORMAT_R32G32_UINT"; break; - case DXGI_FORMAT_R32G32_SINT: - pstr = L"DXGI_FORMAT_R32G32_SINT"; break; - case DXGI_FORMAT_R32G8X24_TYPELESS: - pstr = L"DXGI_FORMAT_R32G8X24_TYPELESS"; break; - case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: - pstr = L"DXGI_FORMAT_D32_FLOAT_S8X24_UINT"; break; - case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: - pstr = L"DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS"; break; - case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: - pstr = L"DXGI_FORMAT_X32_TYPELESS_G8X24_UINT"; break; - case DXGI_FORMAT_R10G10B10A2_TYPELESS: - pstr = L"DXGI_FORMAT_R10G10B10A2_TYPELESS"; break; - case DXGI_FORMAT_R10G10B10A2_UNORM: - pstr = L"DXGI_FORMAT_R10G10B10A2_UNORM"; break; - case DXGI_FORMAT_R10G10B10A2_UINT: - pstr = L"DXGI_FORMAT_R10G10B10A2_UINT"; break; - case DXGI_FORMAT_R11G11B10_FLOAT: - pstr = L"DXGI_FORMAT_R11G11B10_FLOAT"; break; - case DXGI_FORMAT_R8G8B8A8_TYPELESS: - pstr = L"DXGI_FORMAT_R8G8B8A8_TYPELESS"; break; - case DXGI_FORMAT_R8G8B8A8_UNORM: - pstr = L"DXGI_FORMAT_R8G8B8A8_UNORM"; break; - case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: - pstr = L"DXGI_FORMAT_R8G8B8A8_UNORM_SRGB"; break; - case DXGI_FORMAT_R8G8B8A8_UINT: - pstr = L"DXGI_FORMAT_R8G8B8A8_UINT"; break; - case DXGI_FORMAT_R8G8B8A8_SNORM: - pstr = L"DXGI_FORMAT_R8G8B8A8_SNORM"; break; - case DXGI_FORMAT_R8G8B8A8_SINT: - pstr = L"DXGI_FORMAT_R8G8B8A8_SINT"; break; - case DXGI_FORMAT_R16G16_TYPELESS: - pstr = L"DXGI_FORMAT_R16G16_TYPELESS"; break; - case DXGI_FORMAT_R16G16_FLOAT: - pstr = L"DXGI_FORMAT_R16G16_FLOAT"; break; - case DXGI_FORMAT_R16G16_UNORM: - pstr = L"DXGI_FORMAT_R16G16_UNORM"; break; - case DXGI_FORMAT_R16G16_UINT: - pstr = L"DXGI_FORMAT_R16G16_UINT"; break; - case DXGI_FORMAT_R16G16_SNORM: - pstr = L"DXGI_FORMAT_R16G16_SNORM"; break; - case DXGI_FORMAT_R16G16_SINT: - pstr = L"DXGI_FORMAT_R16G16_SINT"; break; - case DXGI_FORMAT_R32_TYPELESS: - pstr = L"DXGI_FORMAT_R32_TYPELESS"; break; - case DXGI_FORMAT_D32_FLOAT: - pstr = L"DXGI_FORMAT_D32_FLOAT"; break; - case DXGI_FORMAT_R32_FLOAT: - pstr = L"DXGI_FORMAT_R32_FLOAT"; break; - case DXGI_FORMAT_R32_UINT: - pstr = L"DXGI_FORMAT_R32_UINT"; break; - case DXGI_FORMAT_R32_SINT: - pstr = L"DXGI_FORMAT_R32_SINT"; break; - case DXGI_FORMAT_R24G8_TYPELESS: - pstr = L"DXGI_FORMAT_R24G8_TYPELESS"; break; - case DXGI_FORMAT_D24_UNORM_S8_UINT: - pstr = L"DXGI_FORMAT_D24_UNORM_S8_UINT"; break; - case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: - pstr = L"DXGI_FORMAT_R24_UNORM_X8_TYPELESS"; break; - case DXGI_FORMAT_X24_TYPELESS_G8_UINT: - pstr = L"DXGI_FORMAT_X24_TYPELESS_G8_UINT"; break; - case DXGI_FORMAT_R8G8_TYPELESS: - pstr = L"DXGI_FORMAT_R8G8_TYPELESS"; break; - case DXGI_FORMAT_R8G8_UNORM: - pstr = L"DXGI_FORMAT_R8G8_UNORM"; break; - case DXGI_FORMAT_R8G8_UINT: - pstr = L"DXGI_FORMAT_R8G8_UINT"; break; - case DXGI_FORMAT_R8G8_SNORM: - pstr = L"DXGI_FORMAT_R8G8_SNORM"; break; - case DXGI_FORMAT_R8G8_SINT: - pstr = L"DXGI_FORMAT_R8G8_SINT"; break; - case DXGI_FORMAT_R16_TYPELESS: - pstr = L"DXGI_FORMAT_R16_TYPELESS"; break; - case DXGI_FORMAT_R16_FLOAT: - pstr = L"DXGI_FORMAT_R16_FLOAT"; break; - case DXGI_FORMAT_D16_UNORM: - pstr = L"DXGI_FORMAT_D16_UNORM"; break; - case DXGI_FORMAT_R16_UNORM: - pstr = L"DXGI_FORMAT_R16_UNORM"; break; - case DXGI_FORMAT_R16_UINT: - pstr = L"DXGI_FORMAT_R16_UINT"; break; - case DXGI_FORMAT_R16_SNORM: - pstr = L"DXGI_FORMAT_R16_SNORM"; break; - case DXGI_FORMAT_R16_SINT: - pstr = L"DXGI_FORMAT_R16_SINT"; break; - case DXGI_FORMAT_R8_TYPELESS: - pstr = L"DXGI_FORMAT_R8_TYPELESS"; break; - case DXGI_FORMAT_R8_UNORM: - pstr = L"DXGI_FORMAT_R8_UNORM"; break; - case DXGI_FORMAT_R8_UINT: - pstr = L"DXGI_FORMAT_R8_UINT"; break; - case DXGI_FORMAT_R8_SNORM: - pstr = L"DXGI_FORMAT_R8_SNORM"; break; - case DXGI_FORMAT_R8_SINT: - pstr = L"DXGI_FORMAT_R8_SINT"; break; - case DXGI_FORMAT_A8_UNORM: - pstr = L"DXGI_FORMAT_A8_UNORM"; break; - case DXGI_FORMAT_R1_UNORM: - pstr = L"DXGI_FORMAT_R1_UNORM"; break; - case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: - pstr = L"DXGI_FORMAT_R9G9B9E5_SHAREDEXP"; break; - case DXGI_FORMAT_R8G8_B8G8_UNORM: - pstr = L"DXGI_FORMAT_R8G8_B8G8_UNORM"; break; - case DXGI_FORMAT_G8R8_G8B8_UNORM: - pstr = L"DXGI_FORMAT_G8R8_G8B8_UNORM"; break; - case DXGI_FORMAT_BC1_TYPELESS: - pstr = L"DXGI_FORMAT_BC1_TYPELESS"; break; - case DXGI_FORMAT_BC1_UNORM: - pstr = L"DXGI_FORMAT_BC1_UNORM"; break; - case DXGI_FORMAT_BC1_UNORM_SRGB: - pstr = L"DXGI_FORMAT_BC1_UNORM_SRGB"; break; - case DXGI_FORMAT_BC2_TYPELESS: - pstr = L"DXGI_FORMAT_BC2_TYPELESS"; break; - case DXGI_FORMAT_BC2_UNORM: - pstr = L"DXGI_FORMAT_BC2_UNORM"; break; - case DXGI_FORMAT_BC2_UNORM_SRGB: - pstr = L"DXGI_FORMAT_BC2_UNORM_SRGB"; break; - case DXGI_FORMAT_BC3_TYPELESS: - pstr = L"DXGI_FORMAT_BC3_TYPELESS"; break; - case DXGI_FORMAT_BC3_UNORM: - pstr = L"DXGI_FORMAT_BC3_UNORM"; break; - case DXGI_FORMAT_BC3_UNORM_SRGB: - pstr = L"DXGI_FORMAT_BC3_UNORM_SRGB"; break; - case DXGI_FORMAT_BC4_TYPELESS: - pstr = L"DXGI_FORMAT_BC4_TYPELESS"; break; - case DXGI_FORMAT_BC4_UNORM: - pstr = L"DXGI_FORMAT_BC4_UNORM"; break; - case DXGI_FORMAT_BC4_SNORM: - pstr = L"DXGI_FORMAT_BC4_SNORM"; break; - case DXGI_FORMAT_BC5_TYPELESS: - pstr = L"DXGI_FORMAT_BC5_TYPELESS"; break; - case DXGI_FORMAT_BC5_UNORM: - pstr = L"DXGI_FORMAT_BC5_UNORM"; break; - case DXGI_FORMAT_BC5_SNORM: - pstr = L"DXGI_FORMAT_BC5_SNORM"; break; - case DXGI_FORMAT_B5G6R5_UNORM: - pstr = L"DXGI_FORMAT_B5G6R5_UNORM"; break; - case DXGI_FORMAT_B5G5R5A1_UNORM: - pstr = L"DXGI_FORMAT_B5G5R5A1_UNORM"; break; - case DXGI_FORMAT_B8G8R8A8_UNORM: - pstr = L"DXGI_FORMAT_B8G8R8A8_UNORM"; break; - default: - pstr = L"Unknown format"; break; - } - if( bWithPrefix || wcsstr( pstr, L"DXGI_FORMAT_" ) == NULL ) - return pstr; - else - return pstr + lstrlen( L"DXGI_FORMAT_" ); -} - - -//-------------------------------------------------------------------------------------- -// Outputs to the debug stream a formatted Unicode string with a variable-argument list. -//-------------------------------------------------------------------------------------- -VOID WINAPI DXUTOutputDebugStringW( LPCWSTR strMsg, ... ) -{ -#if defined(DEBUG) || defined(_DEBUG) - WCHAR strBuffer[512]; - - va_list args; - va_start(args, strMsg); - vswprintf_s( strBuffer, 512, strMsg, args ); - strBuffer[511] = L'\0'; - va_end(args); - - OutputDebugString( strBuffer ); -#else - UNREFERENCED_PARAMETER( strMsg ); -#endif -} - - -//-------------------------------------------------------------------------------------- -// Outputs to the debug stream a formatted MBCS string with a variable-argument list. -//-------------------------------------------------------------------------------------- -VOID WINAPI DXUTOutputDebugStringA( LPCSTR strMsg, ... ) -{ -#if defined(DEBUG) || defined(_DEBUG) - CHAR strBuffer[512]; - - va_list args; - va_start(args, strMsg); - sprintf_s( strBuffer, 512, strMsg, args ); - strBuffer[511] = '\0'; - va_end(args); - - OutputDebugStringA( strBuffer ); -#else - UNREFERENCED_PARAMETER( strMsg ); -#endif -} - - -//-------------------------------------------------------------------------------------- -// Direct3D9 dynamic linking support -- calls top-level D3D9 APIs with graceful -// failure if APIs are not present. -//-------------------------------------------------------------------------------------- - -// Function prototypes -typedef IDirect3D9* (WINAPI * LPDIRECT3DCREATE9) (UINT); -typedef INT (WINAPI * LPD3DPERF_BEGINEVENT)(D3DCOLOR, LPCWSTR); -typedef INT (WINAPI * LPD3DPERF_ENDEVENT)(void); -typedef VOID (WINAPI * LPD3DPERF_SETMARKER)(D3DCOLOR, LPCWSTR); -typedef VOID (WINAPI * LPD3DPERF_SETREGION)(D3DCOLOR, LPCWSTR); -typedef BOOL (WINAPI * LPD3DPERF_QUERYREPEATFRAME)(void); -typedef VOID (WINAPI * LPD3DPERF_SETOPTIONS)( DWORD dwOptions ); -typedef DWORD (WINAPI * LPD3DPERF_GETSTATUS)( void ); -typedef HRESULT (WINAPI * LPCREATEDXGIFACTORY)(REFIID, void ** ); -typedef HRESULT (WINAPI * LPD3D11CREATEDEVICE)( IDXGIAdapter*, D3D_DRIVER_TYPE, HMODULE, UINT32, D3D_FEATURE_LEVEL*, UINT, UINT32, ID3D11Device**, D3D_FEATURE_LEVEL*, ID3D11DeviceContext** ); - -// Module and function pointers -static HMODULE s_hModD3D9 = NULL; -static LPDIRECT3DCREATE9 s_DynamicDirect3DCreate9 = NULL; -static LPD3DPERF_BEGINEVENT s_DynamicD3DPERF_BeginEvent = NULL; -static LPD3DPERF_ENDEVENT s_DynamicD3DPERF_EndEvent = NULL; -static LPD3DPERF_SETMARKER s_DynamicD3DPERF_SetMarker = NULL; -static LPD3DPERF_SETREGION s_DynamicD3DPERF_SetRegion = NULL; -static LPD3DPERF_QUERYREPEATFRAME s_DynamicD3DPERF_QueryRepeatFrame = NULL; -static LPD3DPERF_SETOPTIONS s_DynamicD3DPERF_SetOptions = NULL; -static LPD3DPERF_GETSTATUS s_DynamicD3DPERF_GetStatus = NULL; -static HMODULE s_hModDXGI = NULL; -static LPCREATEDXGIFACTORY s_DynamicCreateDXGIFactory = NULL; -static HMODULE s_hModD3D11 = NULL; -static LPD3D11CREATEDEVICE s_DynamicD3D11CreateDevice = NULL; - -// Ensure function pointers are initialized -static bool DXUT_EnsureD3D9APIs( void ) -{ - // If the module is non-NULL, this function has already been called. Note - // that this doesn't guarantee that all ProcAddresses were found. - if( s_hModD3D9 != NULL ) - return true; - - // This may fail if Direct3D 9 isn't installed - s_hModD3D9 = LoadLibrary( L"d3d9.dll" ); - if( s_hModD3D9 != NULL ) - { - s_DynamicDirect3DCreate9 = (LPDIRECT3DCREATE9)GetProcAddress( s_hModD3D9, "Direct3DCreate9" ); - s_DynamicD3DPERF_BeginEvent = (LPD3DPERF_BEGINEVENT)GetProcAddress( s_hModD3D9, "D3DPERF_BeginEvent" ); - s_DynamicD3DPERF_EndEvent = (LPD3DPERF_ENDEVENT)GetProcAddress( s_hModD3D9, "D3DPERF_EndEvent" ); - s_DynamicD3DPERF_SetMarker = (LPD3DPERF_SETMARKER)GetProcAddress( s_hModD3D9, "D3DPERF_SetMarker" ); - s_DynamicD3DPERF_SetRegion = (LPD3DPERF_SETREGION)GetProcAddress( s_hModD3D9, "D3DPERF_SetRegion" ); - s_DynamicD3DPERF_QueryRepeatFrame = (LPD3DPERF_QUERYREPEATFRAME)GetProcAddress( s_hModD3D9, "D3DPERF_QueryRepeatFrame" ); - s_DynamicD3DPERF_SetOptions = (LPD3DPERF_SETOPTIONS)GetProcAddress( s_hModD3D9, "D3DPERF_SetOptions" ); - s_DynamicD3DPERF_GetStatus = (LPD3DPERF_GETSTATUS)GetProcAddress( s_hModD3D9, "D3DPERF_GetStatus" ); - } - - return s_hModD3D9 != NULL; -} - -bool DXUT_EnsureD3D11APIs( void ) -{ - // If both modules are non-NULL, this function has already been called. Note - // that this doesn't guarantee that all ProcAddresses were found. - if( s_hModD3D11 != NULL && s_hModDXGI != NULL ) - return true; - - // This may fail if Direct3D 11 isn't installed - s_hModD3D11 = LoadLibrary( L"d3d11.dll" ); - if( s_hModD3D11 != NULL ) - { - s_DynamicD3D11CreateDevice = ( LPD3D11CREATEDEVICE )GetProcAddress( s_hModD3D11, "D3D11CreateDevice" ); - } - - if( !s_DynamicCreateDXGIFactory ) - { - s_hModDXGI = LoadLibrary( L"dxgi.dll" ); - if( s_hModDXGI ) - { - s_DynamicCreateDXGIFactory = ( LPCREATEDXGIFACTORY )GetProcAddress( s_hModDXGI, "CreateDXGIFactory1" ); - } - - return ( s_hModDXGI != NULL ) && ( s_hModD3D11 != NULL ); - } - - return ( s_hModD3D11 != NULL ); -} - -IDirect3D9* WINAPI DXUT_Dynamic_Direct3DCreate9( UINT SDKVersion ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicDirect3DCreate9 != NULL ) - return s_DynamicDirect3DCreate9( SDKVersion ); - else - return NULL; -} - -int WINAPI DXUT_Dynamic_D3DPERF_BeginEvent( D3DCOLOR col, LPCWSTR wszName ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicD3DPERF_BeginEvent != NULL ) - return s_DynamicD3DPERF_BeginEvent( col, wszName ); - else - return -1; -} - -int WINAPI DXUT_Dynamic_D3DPERF_EndEvent( void ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicD3DPERF_EndEvent != NULL ) - return s_DynamicD3DPERF_EndEvent(); - else - return -1; -} - -void WINAPI DXUT_Dynamic_D3DPERF_SetMarker( D3DCOLOR col, LPCWSTR wszName ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicD3DPERF_SetMarker != NULL ) - s_DynamicD3DPERF_SetMarker( col, wszName ); -} - -void WINAPI DXUT_Dynamic_D3DPERF_SetRegion( D3DCOLOR col, LPCWSTR wszName ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicD3DPERF_SetRegion != NULL ) - s_DynamicD3DPERF_SetRegion( col, wszName ); -} - -BOOL WINAPI DXUT_Dynamic_D3DPERF_QueryRepeatFrame( void ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicD3DPERF_QueryRepeatFrame != NULL ) - return s_DynamicD3DPERF_QueryRepeatFrame(); - else - return FALSE; -} - -void WINAPI DXUT_Dynamic_D3DPERF_SetOptions( DWORD dwOptions ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicD3DPERF_SetOptions != NULL ) - s_DynamicD3DPERF_SetOptions( dwOptions ); -} - -DWORD WINAPI DXUT_Dynamic_D3DPERF_GetStatus( void ) -{ - if( DXUT_EnsureD3D9APIs() && s_DynamicD3DPERF_GetStatus != NULL ) - return s_DynamicD3DPERF_GetStatus(); - else - return 0; -} - -HRESULT WINAPI DXUT_Dynamic_CreateDXGIFactory1( REFIID rInterface, void** ppOut ) -{ - if( DXUT_EnsureD3D11APIs() && s_DynamicCreateDXGIFactory != NULL ) - return s_DynamicCreateDXGIFactory( rInterface, ppOut ); - else - return DXUTERR_NODIRECT3D11; -} - - - -HRESULT WINAPI DXUT_Dynamic_D3D11CreateDevice( IDXGIAdapter* pAdapter, - D3D_DRIVER_TYPE DriverType, - HMODULE Software, - UINT32 Flags, - D3D_FEATURE_LEVEL* pFeatureLevels, - UINT FeatureLevels, - UINT32 SDKVersion, - ID3D11Device** ppDevice, - D3D_FEATURE_LEVEL* pFeatureLevel, - ID3D11DeviceContext** ppImmediateContext ) -{ - if( DXUT_EnsureD3D11APIs() && s_DynamicD3D11CreateDevice != NULL ) - return s_DynamicD3D11CreateDevice( pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, - SDKVersion, ppDevice, pFeatureLevel, ppImmediateContext ); - else - return DXUTERR_NODIRECT3D11; -} - -//-------------------------------------------------------------------------------------- -// Trace a string description of a decl -//-------------------------------------------------------------------------------------- -void WINAPI DXUTTraceDecl( D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE] ) -{ - int iDecl = 0; - for( iDecl = 0; iDecl < MAX_FVF_DECL_SIZE; iDecl++ ) - { - if( decl[iDecl].Stream == 0xFF ) - break; - - DXUTOutputDebugString( L"decl[%d]=Stream:%d, Offset:%d, %s, %s, %s, UsageIndex:%d\n", iDecl, - decl[iDecl].Stream, - decl[iDecl].Offset, - DXUTTraceD3DDECLTYPEtoString( decl[iDecl].Type ), - DXUTTraceD3DDECLMETHODtoString( decl[iDecl].Method ), - DXUTTraceD3DDECLUSAGEtoString( decl[iDecl].Usage ), - decl[iDecl].UsageIndex ); - } - - DXUTOutputDebugString( L"decl[%d]=D3DDECL_END\n", iDecl ); -} - -#define TRACE_ID(iD) case iD: return L#iD; - -//-------------------------------------------------------------------------------------- -WCHAR* WINAPI DXUTTraceWindowsMessage( UINT uMsg ) -{ - switch( uMsg ) - { - TRACE_ID(WM_NULL); - TRACE_ID(WM_CREATE); - TRACE_ID(WM_DESTROY); - TRACE_ID(WM_MOVE); - TRACE_ID(WM_SIZE); - TRACE_ID(WM_ACTIVATE); - TRACE_ID(WM_SETFOCUS); - TRACE_ID(WM_KILLFOCUS); - TRACE_ID(WM_ENABLE); - TRACE_ID(WM_SETREDRAW); - TRACE_ID(WM_SETTEXT); - TRACE_ID(WM_GETTEXT); - TRACE_ID(WM_GETTEXTLENGTH); - TRACE_ID(WM_PAINT); - TRACE_ID(WM_CLOSE); - TRACE_ID(WM_QUERYENDSESSION); - TRACE_ID(WM_QUERYOPEN); - TRACE_ID(WM_ENDSESSION); - TRACE_ID(WM_QUIT); - TRACE_ID(WM_ERASEBKGND); - TRACE_ID(WM_SYSCOLORCHANGE); - TRACE_ID(WM_SHOWWINDOW); - TRACE_ID(WM_WININICHANGE); - TRACE_ID(WM_DEVMODECHANGE); - TRACE_ID(WM_ACTIVATEAPP); - TRACE_ID(WM_FONTCHANGE); - TRACE_ID(WM_TIMECHANGE); - TRACE_ID(WM_CANCELMODE); - TRACE_ID(WM_SETCURSOR); - TRACE_ID(WM_MOUSEACTIVATE); - TRACE_ID(WM_CHILDACTIVATE); - TRACE_ID(WM_QUEUESYNC); - TRACE_ID(WM_GETMINMAXINFO); - TRACE_ID(WM_PAINTICON); - TRACE_ID(WM_ICONERASEBKGND); - TRACE_ID(WM_NEXTDLGCTL); - TRACE_ID(WM_SPOOLERSTATUS); - TRACE_ID(WM_DRAWITEM); - TRACE_ID(WM_MEASUREITEM); - TRACE_ID(WM_DELETEITEM); - TRACE_ID(WM_VKEYTOITEM); - TRACE_ID(WM_CHARTOITEM); - TRACE_ID(WM_SETFONT); - TRACE_ID(WM_GETFONT); - TRACE_ID(WM_SETHOTKEY); - TRACE_ID(WM_GETHOTKEY); - TRACE_ID(WM_QUERYDRAGICON); - TRACE_ID(WM_COMPAREITEM); - TRACE_ID(WM_GETOBJECT); - TRACE_ID(WM_COMPACTING); - TRACE_ID(WM_COMMNOTIFY); - TRACE_ID(WM_WINDOWPOSCHANGING); - TRACE_ID(WM_WINDOWPOSCHANGED); - TRACE_ID(WM_POWER); - TRACE_ID(WM_COPYDATA); - TRACE_ID(WM_CANCELJOURNAL); - TRACE_ID(WM_NOTIFY); - TRACE_ID(WM_INPUTLANGCHANGEREQUEST); - TRACE_ID(WM_INPUTLANGCHANGE); - TRACE_ID(WM_TCARD); - TRACE_ID(WM_HELP); - TRACE_ID(WM_USERCHANGED); - TRACE_ID(WM_NOTIFYFORMAT); - TRACE_ID(WM_CONTEXTMENU); - TRACE_ID(WM_STYLECHANGING); - TRACE_ID(WM_STYLECHANGED); - TRACE_ID(WM_DISPLAYCHANGE); - TRACE_ID(WM_GETICON); - TRACE_ID(WM_SETICON); - TRACE_ID(WM_NCCREATE); - TRACE_ID(WM_NCDESTROY); - TRACE_ID(WM_NCCALCSIZE); - TRACE_ID(WM_NCHITTEST); - TRACE_ID(WM_NCPAINT); - TRACE_ID(WM_NCACTIVATE); - TRACE_ID(WM_GETDLGCODE); - TRACE_ID(WM_SYNCPAINT); - TRACE_ID(WM_NCMOUSEMOVE); - TRACE_ID(WM_NCLBUTTONDOWN); - TRACE_ID(WM_NCLBUTTONUP); - TRACE_ID(WM_NCLBUTTONDBLCLK); - TRACE_ID(WM_NCRBUTTONDOWN); - TRACE_ID(WM_NCRBUTTONUP); - TRACE_ID(WM_NCRBUTTONDBLCLK); - TRACE_ID(WM_NCMBUTTONDOWN); - TRACE_ID(WM_NCMBUTTONUP); - TRACE_ID(WM_NCMBUTTONDBLCLK); - TRACE_ID(WM_NCXBUTTONDOWN); - TRACE_ID(WM_NCXBUTTONUP); - TRACE_ID(WM_NCXBUTTONDBLCLK); - TRACE_ID(WM_INPUT); - TRACE_ID(WM_KEYDOWN); - TRACE_ID(WM_KEYUP); - TRACE_ID(WM_CHAR); - TRACE_ID(WM_DEADCHAR); - TRACE_ID(WM_SYSKEYDOWN); - TRACE_ID(WM_SYSKEYUP); - TRACE_ID(WM_SYSCHAR); - TRACE_ID(WM_SYSDEADCHAR); - TRACE_ID(WM_UNICHAR); - TRACE_ID(WM_IME_STARTCOMPOSITION); - TRACE_ID(WM_IME_ENDCOMPOSITION); - TRACE_ID(WM_IME_COMPOSITION); - TRACE_ID(WM_INITDIALOG); - TRACE_ID(WM_COMMAND); - TRACE_ID(WM_SYSCOMMAND); - TRACE_ID(WM_TIMER); - TRACE_ID(WM_HSCROLL); - TRACE_ID(WM_VSCROLL); - TRACE_ID(WM_INITMENU); - TRACE_ID(WM_INITMENUPOPUP); - TRACE_ID(WM_MENUSELECT); - TRACE_ID(WM_MENUCHAR); - TRACE_ID(WM_ENTERIDLE); - TRACE_ID(WM_MENURBUTTONUP); - TRACE_ID(WM_MENUDRAG); - TRACE_ID(WM_MENUGETOBJECT); - TRACE_ID(WM_UNINITMENUPOPUP); - TRACE_ID(WM_MENUCOMMAND); - TRACE_ID(WM_CHANGEUISTATE); - TRACE_ID(WM_UPDATEUISTATE); - TRACE_ID(WM_QUERYUISTATE); - TRACE_ID(WM_CTLCOLORMSGBOX); - TRACE_ID(WM_CTLCOLOREDIT); - TRACE_ID(WM_CTLCOLORLISTBOX); - TRACE_ID(WM_CTLCOLORBTN); - TRACE_ID(WM_CTLCOLORDLG); - TRACE_ID(WM_CTLCOLORSCROLLBAR); - TRACE_ID(WM_CTLCOLORSTATIC); - TRACE_ID(MN_GETHMENU); - TRACE_ID(WM_MOUSEMOVE); - TRACE_ID(WM_LBUTTONDOWN); - TRACE_ID(WM_LBUTTONUP); - TRACE_ID(WM_LBUTTONDBLCLK); - TRACE_ID(WM_RBUTTONDOWN); - TRACE_ID(WM_RBUTTONUP); - TRACE_ID(WM_RBUTTONDBLCLK); - TRACE_ID(WM_MBUTTONDOWN); - TRACE_ID(WM_MBUTTONUP); - TRACE_ID(WM_MBUTTONDBLCLK); - TRACE_ID(WM_MOUSEWHEEL); - TRACE_ID(WM_XBUTTONDOWN); - TRACE_ID(WM_XBUTTONUP); - TRACE_ID(WM_XBUTTONDBLCLK); - TRACE_ID(WM_PARENTNOTIFY); - TRACE_ID(WM_ENTERMENULOOP); - TRACE_ID(WM_EXITMENULOOP); - TRACE_ID(WM_NEXTMENU); - TRACE_ID(WM_SIZING); - TRACE_ID(WM_CAPTURECHANGED); - TRACE_ID(WM_MOVING); - TRACE_ID(WM_POWERBROADCAST); - TRACE_ID(WM_DEVICECHANGE); - TRACE_ID(WM_MDICREATE); - TRACE_ID(WM_MDIDESTROY); - TRACE_ID(WM_MDIACTIVATE); - TRACE_ID(WM_MDIRESTORE); - TRACE_ID(WM_MDINEXT); - TRACE_ID(WM_MDIMAXIMIZE); - TRACE_ID(WM_MDITILE); - TRACE_ID(WM_MDICASCADE); - TRACE_ID(WM_MDIICONARRANGE); - TRACE_ID(WM_MDIGETACTIVE); - TRACE_ID(WM_MDISETMENU); - TRACE_ID(WM_ENTERSIZEMOVE); - TRACE_ID(WM_EXITSIZEMOVE); - TRACE_ID(WM_DROPFILES); - TRACE_ID(WM_MDIREFRESHMENU); - TRACE_ID(WM_IME_SETCONTEXT); - TRACE_ID(WM_IME_NOTIFY); - TRACE_ID(WM_IME_CONTROL); - TRACE_ID(WM_IME_COMPOSITIONFULL); - TRACE_ID(WM_IME_SELECT); - TRACE_ID(WM_IME_CHAR); - TRACE_ID(WM_IME_REQUEST); - TRACE_ID(WM_IME_KEYDOWN); - TRACE_ID(WM_IME_KEYUP); - TRACE_ID(WM_MOUSEHOVER); - TRACE_ID(WM_MOUSELEAVE); - TRACE_ID(WM_NCMOUSEHOVER); - TRACE_ID(WM_NCMOUSELEAVE); - TRACE_ID(WM_WTSSESSION_CHANGE); - TRACE_ID(WM_TABLET_FIRST); - TRACE_ID(WM_TABLET_LAST); - TRACE_ID(WM_CUT); - TRACE_ID(WM_COPY); - TRACE_ID(WM_PASTE); - TRACE_ID(WM_CLEAR); - TRACE_ID(WM_UNDO); - TRACE_ID(WM_RENDERFORMAT); - TRACE_ID(WM_RENDERALLFORMATS); - TRACE_ID(WM_DESTROYCLIPBOARD); - TRACE_ID(WM_DRAWCLIPBOARD); - TRACE_ID(WM_PAINTCLIPBOARD); - TRACE_ID(WM_VSCROLLCLIPBOARD); - TRACE_ID(WM_SIZECLIPBOARD); - TRACE_ID(WM_ASKCBFORMATNAME); - TRACE_ID(WM_CHANGECBCHAIN); - TRACE_ID(WM_HSCROLLCLIPBOARD); - TRACE_ID(WM_QUERYNEWPALETTE); - TRACE_ID(WM_PALETTEISCHANGING); - TRACE_ID(WM_PALETTECHANGED); - TRACE_ID(WM_HOTKEY); - TRACE_ID(WM_PRINT); - TRACE_ID(WM_PRINTCLIENT); - TRACE_ID(WM_APPCOMMAND); - TRACE_ID(WM_THEMECHANGED); - TRACE_ID(WM_HANDHELDFIRST); - TRACE_ID(WM_HANDHELDLAST); - TRACE_ID(WM_AFXFIRST); - TRACE_ID(WM_AFXLAST); - TRACE_ID(WM_PENWINFIRST); - TRACE_ID(WM_PENWINLAST); - TRACE_ID(WM_APP); - default: - return L"Unknown"; - } -} - - -//-------------------------------------------------------------------------------------- -WCHAR* WINAPI DXUTTraceD3DDECLTYPEtoString( BYTE t ) -{ - switch( t ) - { - case D3DDECLTYPE_FLOAT1: - return L"D3DDECLTYPE_FLOAT1"; - case D3DDECLTYPE_FLOAT2: - return L"D3DDECLTYPE_FLOAT2"; - case D3DDECLTYPE_FLOAT3: - return L"D3DDECLTYPE_FLOAT3"; - case D3DDECLTYPE_FLOAT4: - return L"D3DDECLTYPE_FLOAT4"; - case D3DDECLTYPE_D3DCOLOR: - return L"D3DDECLTYPE_D3DCOLOR"; - case D3DDECLTYPE_UBYTE4: - return L"D3DDECLTYPE_UBYTE4"; - case D3DDECLTYPE_SHORT2: - return L"D3DDECLTYPE_SHORT2"; - case D3DDECLTYPE_SHORT4: - return L"D3DDECLTYPE_SHORT4"; - case D3DDECLTYPE_UBYTE4N: - return L"D3DDECLTYPE_UBYTE4N"; - case D3DDECLTYPE_SHORT2N: - return L"D3DDECLTYPE_SHORT2N"; - case D3DDECLTYPE_SHORT4N: - return L"D3DDECLTYPE_SHORT4N"; - case D3DDECLTYPE_USHORT2N: - return L"D3DDECLTYPE_USHORT2N"; - case D3DDECLTYPE_USHORT4N: - return L"D3DDECLTYPE_USHORT4N"; - case D3DDECLTYPE_UDEC3: - return L"D3DDECLTYPE_UDEC3"; - case D3DDECLTYPE_DEC3N: - return L"D3DDECLTYPE_DEC3N"; - case D3DDECLTYPE_FLOAT16_2: - return L"D3DDECLTYPE_FLOAT16_2"; - case D3DDECLTYPE_FLOAT16_4: - return L"D3DDECLTYPE_FLOAT16_4"; - case D3DDECLTYPE_UNUSED: - return L"D3DDECLTYPE_UNUSED"; - default: - return L"D3DDECLTYPE Unknown"; - } -} - -WCHAR* WINAPI DXUTTraceD3DDECLMETHODtoString( BYTE m ) -{ - switch( m ) - { - case D3DDECLMETHOD_DEFAULT: - return L"D3DDECLMETHOD_DEFAULT"; - case D3DDECLMETHOD_PARTIALU: - return L"D3DDECLMETHOD_PARTIALU"; - case D3DDECLMETHOD_PARTIALV: - return L"D3DDECLMETHOD_PARTIALV"; - case D3DDECLMETHOD_CROSSUV: - return L"D3DDECLMETHOD_CROSSUV"; - case D3DDECLMETHOD_UV: - return L"D3DDECLMETHOD_UV"; - case D3DDECLMETHOD_LOOKUP: - return L"D3DDECLMETHOD_LOOKUP"; - case D3DDECLMETHOD_LOOKUPPRESAMPLED: - return L"D3DDECLMETHOD_LOOKUPPRESAMPLED"; - default: - return L"D3DDECLMETHOD Unknown"; - } -} - -WCHAR* WINAPI DXUTTraceD3DDECLUSAGEtoString( BYTE u ) -{ - switch( u ) - { - case D3DDECLUSAGE_POSITION: - return L"D3DDECLUSAGE_POSITION"; - case D3DDECLUSAGE_BLENDWEIGHT: - return L"D3DDECLUSAGE_BLENDWEIGHT"; - case D3DDECLUSAGE_BLENDINDICES: - return L"D3DDECLUSAGE_BLENDINDICES"; - case D3DDECLUSAGE_NORMAL: - return L"D3DDECLUSAGE_NORMAL"; - case D3DDECLUSAGE_PSIZE: - return L"D3DDECLUSAGE_PSIZE"; - case D3DDECLUSAGE_TEXCOORD: - return L"D3DDECLUSAGE_TEXCOORD"; - case D3DDECLUSAGE_TANGENT: - return L"D3DDECLUSAGE_TANGENT"; - case D3DDECLUSAGE_BINORMAL: - return L"D3DDECLUSAGE_BINORMAL"; - case D3DDECLUSAGE_TESSFACTOR: - return L"D3DDECLUSAGE_TESSFACTOR"; - case D3DDECLUSAGE_POSITIONT: - return L"D3DDECLUSAGE_POSITIONT"; - case D3DDECLUSAGE_COLOR: - return L"D3DDECLUSAGE_COLOR"; - case D3DDECLUSAGE_FOG: - return L"D3DDECLUSAGE_FOG"; - case D3DDECLUSAGE_DEPTH: - return L"D3DDECLUSAGE_DEPTH"; - case D3DDECLUSAGE_SAMPLE: - return L"D3DDECLUSAGE_SAMPLE"; - default: - return L"D3DDECLUSAGE Unknown"; - } -} - - -//-------------------------------------------------------------------------------------- -// Multimon API handling for OSes with or without multimon API support -//-------------------------------------------------------------------------------------- -#define DXUT_PRIMARY_MONITOR ((HMONITOR)0x12340042) -typedef HMONITOR ( WINAPI* LPMONITORFROMWINDOW )( HWND, DWORD ); -typedef BOOL ( WINAPI* LPGETMONITORINFO )( HMONITOR, LPMONITORINFO ); -typedef HMONITOR ( WINAPI* LPMONITORFROMRECT )( LPCRECT lprcScreenCoords, DWORD dwFlags ); - -BOOL WINAPI DXUTGetMonitorInfo( HMONITOR hMonitor, LPMONITORINFO lpMonitorInfo ) -{ - static bool s_bInited = false; - static LPGETMONITORINFO s_pFnGetMonitorInfo = NULL; - if( !s_bInited ) - { - s_bInited = true; - HMODULE hUser32 = GetModuleHandle( L"USER32" ); - if( hUser32 ) - { - OSVERSIONINFOA osvi = - { - 0 - }; osvi.dwOSVersionInfoSize = sizeof( osvi ); GetVersionExA( ( OSVERSIONINFOA* )&osvi ); - bool bNT = ( VER_PLATFORM_WIN32_NT == osvi.dwPlatformId ); - s_pFnGetMonitorInfo = ( LPGETMONITORINFO )( bNT ? GetProcAddress( hUser32, - "GetMonitorInfoW" ) : - GetProcAddress( hUser32, "GetMonitorInfoA" ) ); - } - } - - if( s_pFnGetMonitorInfo ) - return s_pFnGetMonitorInfo( hMonitor, lpMonitorInfo ); - - RECT rcWork; - if( ( hMonitor == DXUT_PRIMARY_MONITOR ) && lpMonitorInfo && ( lpMonitorInfo->cbSize >= sizeof( MONITORINFO ) ) && - SystemParametersInfoA( SPI_GETWORKAREA, 0, &rcWork, 0 ) ) - { - lpMonitorInfo->rcMonitor.left = 0; - lpMonitorInfo->rcMonitor.top = 0; - lpMonitorInfo->rcMonitor.right = GetSystemMetrics( SM_CXSCREEN ); - lpMonitorInfo->rcMonitor.bottom = GetSystemMetrics( SM_CYSCREEN ); - lpMonitorInfo->rcWork = rcWork; - lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY; - return TRUE; - } - return FALSE; -} - - -HMONITOR WINAPI DXUTMonitorFromWindow( HWND hWnd, DWORD dwFlags ) -{ - static bool s_bInited = false; - static LPMONITORFROMWINDOW s_pFnGetMonitorFromWindow = NULL; - if( !s_bInited ) - { - s_bInited = true; - HMODULE hUser32 = GetModuleHandle( L"USER32" ); - if( hUser32 ) s_pFnGetMonitorFromWindow = ( LPMONITORFROMWINDOW )GetProcAddress( hUser32, - "MonitorFromWindow" ); - } - - if( s_pFnGetMonitorFromWindow ) - return s_pFnGetMonitorFromWindow( hWnd, dwFlags ); - else - return DXUT_PRIMARY_MONITOR; -} - - -HMONITOR WINAPI DXUTMonitorFromRect( LPCRECT lprcScreenCoords, DWORD dwFlags ) -{ - static bool s_bInited = false; - static LPMONITORFROMRECT s_pFnGetMonitorFromRect = NULL; - if( !s_bInited ) - { - s_bInited = true; - HMODULE hUser32 = GetModuleHandle( L"USER32" ); - if( hUser32 ) s_pFnGetMonitorFromRect = ( LPMONITORFROMRECT )GetProcAddress( hUser32, "MonitorFromRect" ); - } - - if( s_pFnGetMonitorFromRect ) - return s_pFnGetMonitorFromRect( lprcScreenCoords, dwFlags ); - else - return DXUT_PRIMARY_MONITOR; -} - - -//-------------------------------------------------------------------------------------- -// Get the desktop resolution of an adapter. This isn't the same as the current resolution -// from GetAdapterDisplayMode since the device might be fullscreen -//-------------------------------------------------------------------------------------- -void WINAPI DXUTGetDesktopResolution( UINT AdapterOrdinal, UINT* pWidth, UINT* pHeight ) -{ - DXUTDeviceSettings DeviceSettings = DXUTGetDeviceSettings(); - - WCHAR strDeviceName[256] = {0}; - DEVMODE devMode; - ZeroMemory( &devMode, sizeof( DEVMODE ) ); - devMode.dmSize = sizeof( DEVMODE ); - if( DeviceSettings.ver == DXUT_D3D9_DEVICE ) - { - CD3D9Enumeration* pd3dEnum = DXUTGetD3D9Enumeration(); - CD3D9EnumAdapterInfo* pAdapterInfo = pd3dEnum->GetAdapterInfo( AdapterOrdinal ); - if( pAdapterInfo ) - { - MultiByteToWideChar( CP_ACP, 0, pAdapterInfo->AdapterIdentifier.DeviceName, -1, strDeviceName, 256 ); - strDeviceName[255] = 0; - } - } - else - { - CD3D11Enumeration* pd3dEnum = DXUTGetD3D11Enumeration(); - CD3D11EnumOutputInfo* pOutputInfo = pd3dEnum->GetOutputInfo( AdapterOrdinal, DeviceSettings.d3d11.Output ); - if( pOutputInfo ) - { - wcscpy_s( strDeviceName, 256, pOutputInfo->Desc.DeviceName ); - } - } - - EnumDisplaySettings( strDeviceName, ENUM_REGISTRY_SETTINGS, &devMode ); - if( pWidth ) - *pWidth = devMode.dmPelsWidth; - if( pHeight ) - *pHeight = devMode.dmPelsHeight; -} - - -//-------------------------------------------------------------------------------------- -// Display error msg box to help debug -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTTrace( const WCHAR* strFile, DWORD dwLine, HRESULT hr, - const WCHAR* strMsg, bool bPopMsgBox ) -{ - bool bShowMsgBoxOnError = DXUTGetShowMsgBoxOnError(); - if( bPopMsgBox && bShowMsgBoxOnError == false ) - bPopMsgBox = false; - - return DXTrace( strFile, dwLine, hr, strMsg, bPopMsgBox ); -} - - -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -void WINAPI DXUTConvertDeviceSettings11to9( DXUTD3D11DeviceSettings* pIn, DXUTD3D9DeviceSettings* pOut ) -{ - pOut->AdapterOrdinal = pIn->AdapterOrdinal; - - if( pIn->DriverType == D3D_DRIVER_TYPE_HARDWARE ) - pOut->DeviceType = D3DDEVTYPE_HAL; - else if( pIn->DriverType == D3D_DRIVER_TYPE_REFERENCE ) - pOut->DeviceType = D3DDEVTYPE_REF; - else if( pIn->DriverType == D3D_DRIVER_TYPE_NULL ) - pOut->DeviceType = D3DDEVTYPE_NULLREF; - - pOut->AdapterFormat = ConvertFormatDXGIToD3D9( pIn->sd.BufferDesc.Format ); - pOut->BehaviorFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING; - pOut->pp.BackBufferWidth = pIn->sd.BufferDesc.Width; - pOut->pp.BackBufferHeight = pIn->sd.BufferDesc.Height; - pOut->pp.BackBufferFormat = ConvertFormatDXGIToD3D9( pIn->sd.BufferDesc.Format ); - pOut->pp.BackBufferCount = pIn->sd.BufferCount; - pOut->pp.MultiSampleType = ( D3DMULTISAMPLE_TYPE )pIn->sd.SampleDesc.Count; - pOut->pp.MultiSampleQuality = pIn->sd.SampleDesc.Quality; - pOut->pp.SwapEffect = D3DSWAPEFFECT_DISCARD; - pOut->pp.hDeviceWindow = pIn->sd.OutputWindow; - pOut->pp.Windowed = pIn->sd.Windowed; - pOut->pp.EnableAutoDepthStencil = true; - pOut->pp.AutoDepthStencilFormat = D3DFMT_D24FS8; - pOut->pp.Flags = 0; - if( pIn->sd.BufferDesc.RefreshRate.Denominator == 0 ) - pOut->pp.FullScreen_RefreshRateInHz = 60; - else - pOut->pp.FullScreen_RefreshRateInHz = pIn->sd.BufferDesc.RefreshRate.Numerator / - pIn->sd.BufferDesc.RefreshRate.Denominator; - - switch( pIn->SyncInterval ) - { - case 0: - pOut->pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; break; - case 2: - pOut->pp.PresentationInterval = D3DPRESENT_INTERVAL_TWO; break; - case 3: - pOut->pp.PresentationInterval = D3DPRESENT_INTERVAL_THREE; break; - case 4: - pOut->pp.PresentationInterval = D3DPRESENT_INTERVAL_FOUR; break; - - case 1: - default: - pOut->pp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; - break; - } -} - - -//-------------------------------------------------------------------------------------- -void WINAPI DXUTConvertDeviceSettings9to11( DXUTD3D9DeviceSettings* pIn, DXUTD3D11DeviceSettings* pOut ) -{ - pOut->AdapterOrdinal = pIn->AdapterOrdinal; - - if( pIn->DeviceType == D3DDEVTYPE_HAL ) - pOut->DriverType = D3D_DRIVER_TYPE_HARDWARE; - else if( pIn->DeviceType == D3DDEVTYPE_REF ) - pOut->DriverType = D3D_DRIVER_TYPE_REFERENCE; - else if( pIn->DeviceType == D3DDEVTYPE_NULLREF ) - pOut->DriverType = D3D_DRIVER_TYPE_NULL; - - pOut->Output = 0; - - pOut->sd.BufferDesc.Width = pIn->pp.BackBufferWidth; - pOut->sd.BufferDesc.Height = pIn->pp.BackBufferHeight; - pOut->sd.BufferDesc.RefreshRate.Numerator = pIn->pp.FullScreen_RefreshRateInHz; - pOut->sd.BufferDesc.RefreshRate.Denominator = 1; - pOut->sd.BufferDesc.Format = ConvertFormatD3D9ToDXGI( pIn->pp.BackBufferFormat ); - - if( pIn->pp.MultiSampleType == D3DMULTISAMPLE_NONMASKABLE ) - { - pOut->sd.SampleDesc.Count = pIn->pp.MultiSampleQuality; - pOut->sd.SampleDesc.Quality = 0; - } - else - { - pOut->sd.SampleDesc.Count = pIn->pp.MultiSampleType; - pOut->sd.SampleDesc.Quality = pIn->pp.MultiSampleQuality; - } - - pOut->sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; - pOut->sd.BufferCount = pIn->pp.BackBufferCount; - pOut->sd.OutputWindow = pIn->pp.hDeviceWindow; - pOut->sd.Windowed = pIn->pp.Windowed; - -#if defined(DEBUG) || defined(_DEBUG) - pOut->CreateFlags = D3D11_CREATE_DEVICE_DEBUG; -#else - pOut->CreateFlags = 0; -#endif - - switch( pIn->pp.PresentationInterval ) - { - case D3DPRESENT_INTERVAL_IMMEDIATE: - pOut->SyncInterval = 0; break; - case D3DPRESENT_INTERVAL_ONE: - pOut->SyncInterval = 1; break; - case D3DPRESENT_INTERVAL_TWO: - pOut->SyncInterval = 2; break; - case D3DPRESENT_INTERVAL_THREE: - pOut->SyncInterval = 3; break; - case D3DPRESENT_INTERVAL_FOUR: - pOut->SyncInterval = 4; break; - - case D3DPRESENT_INTERVAL_DEFAULT: - default: - pOut->SyncInterval = 1; - break; - } - - pOut->PresentFlags = 0; -} - - - -DXGI_FORMAT WINAPI ConvertFormatD3D9ToDXGI( D3DFORMAT fmt ) -{ - switch( fmt ) - { - case D3DFMT_UNKNOWN: - return DXGI_FORMAT_UNKNOWN; - case D3DFMT_R8G8B8: - case D3DFMT_A8R8G8B8: - case D3DFMT_X8R8G8B8: - return DXGI_FORMAT_R8G8B8A8_UNORM; - case D3DFMT_R5G6B5: - return DXGI_FORMAT_B5G6R5_UNORM; - case D3DFMT_X1R5G5B5: - case D3DFMT_A1R5G5B5: - return DXGI_FORMAT_B5G5R5A1_UNORM; - case D3DFMT_A4R4G4B4: - return DXGI_FORMAT_R8G8B8A8_UNORM; - case D3DFMT_R3G3B2: - return DXGI_FORMAT_R8G8B8A8_UNORM; - case D3DFMT_A8: - return DXGI_FORMAT_A8_UNORM; - case D3DFMT_A8R3G3B2: - return DXGI_FORMAT_R8G8B8A8_UNORM; - case D3DFMT_X4R4G4B4: - return DXGI_FORMAT_R8G8B8A8_UNORM; - case D3DFMT_A2B10G10R10: - return DXGI_FORMAT_R10G10B10A2_UNORM; - case D3DFMT_A8B8G8R8: - case D3DFMT_X8B8G8R8: - return DXGI_FORMAT_B8G8R8A8_UNORM; - case D3DFMT_G16R16: - return DXGI_FORMAT_R16G16_UNORM; - case D3DFMT_A2R10G10B10: - return DXGI_FORMAT_R10G10B10A2_UNORM; - case D3DFMT_A16B16G16R16: - return DXGI_FORMAT_R16G16B16A16_UNORM; - case D3DFMT_R16F: - return DXGI_FORMAT_R16_FLOAT; - case D3DFMT_G16R16F: - return DXGI_FORMAT_R16G16_FLOAT; - case D3DFMT_A16B16G16R16F: - return DXGI_FORMAT_R16G16B16A16_FLOAT; - case D3DFMT_R32F: - return DXGI_FORMAT_R32_FLOAT; - case D3DFMT_G32R32F: - return DXGI_FORMAT_R32G32_FLOAT; - case D3DFMT_A32B32G32R32F: - return DXGI_FORMAT_R32G32B32A32_FLOAT; - } - return DXGI_FORMAT_UNKNOWN; -} - - -D3DFORMAT WINAPI ConvertFormatDXGIToD3D9( DXGI_FORMAT fmt ) -{ - switch( fmt ) - { - case DXGI_FORMAT_UNKNOWN: - return D3DFMT_UNKNOWN; - case DXGI_FORMAT_R8G8B8A8_UNORM: - return D3DFMT_A8R8G8B8; - case DXGI_FORMAT_B5G6R5_UNORM: - return D3DFMT_R5G6B5; - case DXGI_FORMAT_B5G5R5A1_UNORM: - return D3DFMT_A1R5G5B5; - case DXGI_FORMAT_A8_UNORM: - return D3DFMT_A8; - case DXGI_FORMAT_R10G10B10A2_UNORM: - return D3DFMT_A2B10G10R10; - case DXGI_FORMAT_B8G8R8A8_UNORM: - return D3DFMT_A8B8G8R8; - case DXGI_FORMAT_R16G16_UNORM: - return D3DFMT_G16R16; - case DXGI_FORMAT_R16G16B16A16_UNORM: - return D3DFMT_A16B16G16R16; - case DXGI_FORMAT_R16_FLOAT: - return D3DFMT_R16F; - case DXGI_FORMAT_R16G16_FLOAT: - return D3DFMT_G16R16F; - case DXGI_FORMAT_R16G16B16A16_FLOAT: - return D3DFMT_A16B16G16R16F; - case DXGI_FORMAT_R32_FLOAT: - return D3DFMT_R32F; - case DXGI_FORMAT_R32G32_FLOAT: - return D3DFMT_G32R32F; - case DXGI_FORMAT_R32G32B32A32_FLOAT: - return D3DFMT_A32B32G32R32F; - } - return D3DFMT_UNKNOWN; -} - -//-------------------------------------------------------------------------------------- -IDirect3DDevice9* WINAPI DXUTCreateRefDevice9( HWND hWnd, bool bNullRef ) -{ - HRESULT hr; - IDirect3D9* pD3D = DXUT_Dynamic_Direct3DCreate9( D3D_SDK_VERSION ); - if( NULL == pD3D ) - return NULL; - - D3DDISPLAYMODE Mode; - pD3D->GetAdapterDisplayMode( 0, &Mode ); - - D3DPRESENT_PARAMETERS pp; - ZeroMemory( &pp, sizeof( D3DPRESENT_PARAMETERS ) ); - pp.BackBufferWidth = 1; - pp.BackBufferHeight = 1; - pp.BackBufferFormat = Mode.Format; - pp.BackBufferCount = 1; - pp.SwapEffect = D3DSWAPEFFECT_COPY; - pp.Windowed = TRUE; - pp.hDeviceWindow = hWnd; - - IDirect3DDevice9* pd3dDevice = NULL; - hr = pD3D->CreateDevice( D3DADAPTER_DEFAULT, bNullRef ? D3DDEVTYPE_NULLREF : D3DDEVTYPE_REF, - hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &pp, &pd3dDevice ); - - SAFE_RELEASE( pD3D ); - return pd3dDevice; -} - - -//-------------------------------------------------------------------------------------- -// Helper function to launch the Media Center UI after the program terminates -//-------------------------------------------------------------------------------------- -bool DXUTReLaunchMediaCenter() -{ - // Get the path to Media Center - WCHAR szExpandedPath[MAX_PATH]; - if( !ExpandEnvironmentStrings( L"%SystemRoot%\\ehome\\ehshell.exe", szExpandedPath, MAX_PATH ) ) - return false; - - // Skip if ehshell.exe doesn't exist - if( GetFileAttributes( szExpandedPath ) == 0xFFFFFFFF ) - return false; - - // Launch ehshell.exe - INT_PTR result = ( INT_PTR )ShellExecute( NULL, TEXT( "open" ), szExpandedPath, NULL, NULL, SW_SHOWNORMAL ); - return ( result > 32 ); -} - -typedef DWORD ( WINAPI* LPXINPUTGETSTATE )( DWORD dwUserIndex, XINPUT_STATE* pState ); -typedef DWORD ( WINAPI* LPXINPUTSETSTATE )( DWORD dwUserIndex, XINPUT_VIBRATION* pVibration ); -typedef DWORD ( WINAPI* LPXINPUTGETCAPABILITIES )( DWORD dwUserIndex, DWORD dwFlags, - XINPUT_CAPABILITIES* pCapabilities ); -typedef void ( WINAPI* LPXINPUTENABLE )( BOOL bEnable ); - -//-------------------------------------------------------------------------------------- -// Does extra processing on XInput data to make it slightly more convenient to use -//-------------------------------------------------------------------------------------- -HRESULT DXUTGetGamepadState( DWORD dwPort, DXUT_GAMEPAD* pGamePad, bool bThumbstickDeadZone, - bool bSnapThumbstickToCardinals ) -{ - if( dwPort >= DXUT_MAX_CONTROLLERS || pGamePad == NULL ) - return E_FAIL; - - static LPXINPUTGETSTATE s_pXInputGetState = NULL; - static LPXINPUTGETCAPABILITIES s_pXInputGetCapabilities = NULL; - if( NULL == s_pXInputGetState || NULL == s_pXInputGetCapabilities ) - { - HINSTANCE hInst = LoadLibrary( XINPUT_DLL ); - if( hInst ) - { - s_pXInputGetState = ( LPXINPUTGETSTATE )GetProcAddress( hInst, "XInputGetState" ); - s_pXInputGetCapabilities = ( LPXINPUTGETCAPABILITIES )GetProcAddress( hInst, "XInputGetCapabilities" ); - } - } - if( s_pXInputGetState == NULL ) - return E_FAIL; - - XINPUT_STATE InputState; - DWORD dwResult = s_pXInputGetState( dwPort, &InputState ); - - // Track insertion and removals - BOOL bWasConnected = pGamePad->bConnected; - pGamePad->bConnected = ( dwResult == ERROR_SUCCESS ); - pGamePad->bRemoved = ( bWasConnected && !pGamePad->bConnected ); - pGamePad->bInserted = ( !bWasConnected && pGamePad->bConnected ); - - // Don't update rest of the state if not connected - if( !pGamePad->bConnected ) - return S_OK; - - // Store the capabilities of the device - if( pGamePad->bInserted ) - { - ZeroMemory( pGamePad, sizeof( DXUT_GAMEPAD ) ); - pGamePad->bConnected = true; - pGamePad->bInserted = true; - if( s_pXInputGetCapabilities ) - s_pXInputGetCapabilities( dwPort, XINPUT_DEVTYPE_GAMEPAD, &pGamePad->caps ); - } - - // Copy gamepad to local structure (assumes that XINPUT_GAMEPAD at the front in CONTROLER_STATE) - memcpy( pGamePad, &InputState.Gamepad, sizeof( XINPUT_GAMEPAD ) ); - - if( bSnapThumbstickToCardinals ) - { - // Apply deadzone to each axis independantly to slightly snap to up/down/left/right - if( pGamePad->sThumbLX < XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE && - pGamePad->sThumbLX > -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ) - pGamePad->sThumbLX = 0; - if( pGamePad->sThumbLY < XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE && - pGamePad->sThumbLY > -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ) - pGamePad->sThumbLY = 0; - if( pGamePad->sThumbRX < XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE && - pGamePad->sThumbRX > -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ) - pGamePad->sThumbRX = 0; - if( pGamePad->sThumbRY < XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE && - pGamePad->sThumbRY > -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ) - pGamePad->sThumbRY = 0; - } - else if( bThumbstickDeadZone ) - { - // Apply deadzone if centered - if( ( pGamePad->sThumbLX < XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE && - pGamePad->sThumbLX > -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ) && - ( pGamePad->sThumbLY < XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE && - pGamePad->sThumbLY > -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE ) ) - { - pGamePad->sThumbLX = 0; - pGamePad->sThumbLY = 0; - } - if( ( pGamePad->sThumbRX < XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE && - pGamePad->sThumbRX > -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ) && - ( pGamePad->sThumbRY < XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE && - pGamePad->sThumbRY > -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE ) ) - { - pGamePad->sThumbRX = 0; - pGamePad->sThumbRY = 0; - } - } - - // Convert [-1,+1] range - pGamePad->fThumbLX = pGamePad->sThumbLX / 32767.0f; - pGamePad->fThumbLY = pGamePad->sThumbLY / 32767.0f; - pGamePad->fThumbRX = pGamePad->sThumbRX / 32767.0f; - pGamePad->fThumbRY = pGamePad->sThumbRY / 32767.0f; - - // Get the boolean buttons that have been pressed since the last call. - // Each button is represented by one bit. - pGamePad->wPressedButtons = ( pGamePad->wLastButtons ^ pGamePad->wButtons ) & pGamePad->wButtons; - pGamePad->wLastButtons = pGamePad->wButtons; - - // Figure out if the left trigger has been pressed or released - bool bPressed = ( pGamePad->bLeftTrigger > DXUT_GAMEPAD_TRIGGER_THRESHOLD ); - pGamePad->bPressedLeftTrigger = ( bPressed ) ? !pGamePad->bLastLeftTrigger : false; - pGamePad->bLastLeftTrigger = bPressed; - - // Figure out if the right trigger has been pressed or released - bPressed = ( pGamePad->bRightTrigger > DXUT_GAMEPAD_TRIGGER_THRESHOLD ); - pGamePad->bPressedRightTrigger = ( bPressed ) ? !pGamePad->bLastRightTrigger : false; - pGamePad->bLastRightTrigger = bPressed; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Don't pause the game or deactive the window without first stopping rumble otherwise -// the controller will continue to rumble -//-------------------------------------------------------------------------------------- -void DXUTEnableXInput( bool bEnable ) -{ - static LPXINPUTENABLE s_pXInputEnable = NULL; - if( NULL == s_pXInputEnable ) - { - HINSTANCE hInst = LoadLibrary( XINPUT_DLL ); - if( hInst ) - s_pXInputEnable = ( LPXINPUTENABLE )GetProcAddress( hInst, "XInputEnable" ); - } - - if( s_pXInputEnable ) - s_pXInputEnable( bEnable ); -} - - -//-------------------------------------------------------------------------------------- -// Don't pause the game or deactive the window without first stopping rumble otherwise -// the controller will continue to rumble -//-------------------------------------------------------------------------------------- -HRESULT DXUTStopRumbleOnAllControllers() -{ - static LPXINPUTSETSTATE s_pXInputSetState = NULL; - if( NULL == s_pXInputSetState ) - { - HINSTANCE hInst = LoadLibrary( XINPUT_DLL ); - if( hInst ) - s_pXInputSetState = ( LPXINPUTSETSTATE )GetProcAddress( hInst, "XInputSetState" ); - } - if( s_pXInputSetState == NULL ) - return E_FAIL; - - XINPUT_VIBRATION vibration; - vibration.wLeftMotorSpeed = 0; - vibration.wRightMotorSpeed = 0; - for( int iUserIndex = 0; iUserIndex < DXUT_MAX_CONTROLLERS; iUserIndex++ ) - s_pXInputSetState( iUserIndex, &vibration ); - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -// Helper functions to create SRGB formats from typeless formats and vice versa -//-------------------------------------------------------------------------------------- -DXGI_FORMAT MAKE_SRGB( DXGI_FORMAT format ) -{ - if( !DXUTIsInGammaCorrectMode() ) - return format; - - switch( format ) - { - case DXGI_FORMAT_R8G8B8A8_TYPELESS: - case DXGI_FORMAT_R8G8B8A8_UNORM: - case DXGI_FORMAT_R8G8B8A8_UINT: - case DXGI_FORMAT_R8G8B8A8_SNORM: - case DXGI_FORMAT_R8G8B8A8_SINT: - return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; - - case DXGI_FORMAT_BC1_TYPELESS: - case DXGI_FORMAT_BC1_UNORM: - return DXGI_FORMAT_BC1_UNORM_SRGB; - case DXGI_FORMAT_BC2_TYPELESS: - case DXGI_FORMAT_BC2_UNORM: - return DXGI_FORMAT_BC2_UNORM_SRGB; - case DXGI_FORMAT_BC3_TYPELESS: - case DXGI_FORMAT_BC3_UNORM: - return DXGI_FORMAT_BC3_UNORM_SRGB; - - }; - - return format; -} - -//-------------------------------------------------------------------------------------- -DXGI_FORMAT MAKE_TYPELESS( DXGI_FORMAT format ) -{ - if( !DXUTIsInGammaCorrectMode() ) - return format; - - switch( format ) - { - case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: - case DXGI_FORMAT_R8G8B8A8_UNORM: - case DXGI_FORMAT_R8G8B8A8_UINT: - case DXGI_FORMAT_R8G8B8A8_SNORM: - case DXGI_FORMAT_R8G8B8A8_SINT: - return DXGI_FORMAT_R8G8B8A8_TYPELESS; - - case DXGI_FORMAT_BC1_UNORM_SRGB: - case DXGI_FORMAT_BC1_UNORM: - return DXGI_FORMAT_BC1_TYPELESS; - case DXGI_FORMAT_BC2_UNORM_SRGB: - case DXGI_FORMAT_BC2_UNORM: - return DXGI_FORMAT_BC2_TYPELESS; - case DXGI_FORMAT_BC3_UNORM_SRGB: - case DXGI_FORMAT_BC3_UNORM: - return DXGI_FORMAT_BC3_TYPELESS; - }; - - return format; -} - -//-------------------------------------------------------------------------------------- -HRESULT DXUTSnapD3D9Screenshot( LPCTSTR szFileName ) -{ - HRESULT hr = S_OK; - IDirect3DDevice9* pDev = DXUTGetD3D9Device(); - if( !pDev ) - return E_FAIL; - - IDirect3DSurface9* pBackBuffer = NULL; - V_RETURN( pDev->GetBackBuffer( 0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer ) ); - - return D3DXSaveSurfaceToFile( szFileName, D3DXIFF_BMP, pBackBuffer, NULL, NULL ); -} - - - - -//-------------------------------------------------------------------------------------- -HRESULT DXUTSnapD3D11Screenshot( LPCTSTR szFileName, D3DX11_IMAGE_FILE_FORMAT iff ) -{ - IDXGISwapChain *pSwap = DXUTGetDXGISwapChain(); - - if (!pSwap) - return E_FAIL; - - ID3D11Texture2D* pBackBuffer; - HRESULT hr = pSwap->GetBuffer( 0, __uuidof( *pBackBuffer ), ( LPVOID* )&pBackBuffer ); - if (hr != S_OK) - return hr; - - ID3D11DeviceContext *dc = DXUTGetD3D11DeviceContext(); - if (!dc) { - SAFE_RELEASE(pBackBuffer); - return E_FAIL; - } - ID3D11Device *pDevice = DXUTGetD3D11Device(); - if (!dc) { - SAFE_RELEASE(pBackBuffer); - return E_FAIL; - } - - D3D11_TEXTURE2D_DESC dsc; - pBackBuffer->GetDesc(&dsc); - D3D11_RESOURCE_DIMENSION dim; - pBackBuffer->GetType(&dim); - // special case msaa textures - ID3D11Texture2D *pCompatableTexture = pBackBuffer; - if ( dsc.SampleDesc.Count > 1) { - D3D11_TEXTURE2D_DESC dsc_new = dsc; - dsc_new.SampleDesc.Count = 1; - dsc_new.SampleDesc.Quality = 0; - dsc_new.Usage = D3D11_USAGE_DEFAULT; - dsc_new.BindFlags = 0; - dsc_new.CPUAccessFlags = 0; - ID3D11Texture2D *resolveTexture; - hr = pDevice->CreateTexture2D(&dsc_new, NULL, &resolveTexture); - dc->ResolveSubresource(resolveTexture, 0, pBackBuffer, 0, dsc.Format); - pCompatableTexture = resolveTexture; - pCompatableTexture->GetDesc(&dsc); - } - - hr = D3DX11SaveTextureToFileW(dc, pCompatableTexture, iff, szFileName); - - - SAFE_RELEASE(pBackBuffer); - SAFE_RELEASE(pCompatableTexture); - - return hr; - -} diff --git a/sample/d3d11/common/DXUTmisc.h b/sample/d3d11/common/DXUTmisc.h deleted file mode 100644 index 1826487..0000000 --- a/sample/d3d11/common/DXUTmisc.h +++ /dev/null @@ -1,594 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTMisc.h -// -// Helper functions for Direct3D programming. -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_MISC_H -#define DXUT_MISC_H - -#ifndef MAX_FVF_DECL_SIZE -#define MAX_FVF_DECL_SIZE MAXD3DDECLLENGTH + 1 // +1 for END -#endif - -//-------------------------------------------------------------------------------------- -// XInput helper state/function -// This performs extra processing on XInput gamepad data to make it slightly more convenient to use -// -// Example usage: -// -// DXUT_GAMEPAD gamepad[4]; -// for( DWORD iPort=0; iPort class CGrowableArray -{ -public: - CGrowableArray() { m_pData = NULL; m_nSize = 0; m_nMaxSize = 0; } - CGrowableArray( const CGrowableArray& a ) { for( int i=0; i < a.m_nSize; i++ ) Add( a.m_pData[i] ); } - ~CGrowableArray() { RemoveAll(); } - - const TYPE& operator[]( int nIndex ) const { return GetAt( nIndex ); } - TYPE& operator[]( int nIndex ) { return GetAt( nIndex ); } - - CGrowableArray& operator=( const CGrowableArray& a ) { if( this == &a ) return *this; RemoveAll(); for( int i=0; i < a.m_nSize; i++ ) Add( a.m_pData[i] ); return *this; } - - HRESULT SetSize( int nNewMaxSize ); - HRESULT Add( const TYPE& value ); - HRESULT Insert( int nIndex, const TYPE& value ); - HRESULT SetAt( int nIndex, const TYPE& value ); - TYPE& GetAt( int nIndex ) const { assert( nIndex >= 0 && nIndex < m_nSize ); return m_pData[nIndex]; } - int GetSize() const { return m_nSize; } - TYPE* GetData() { return m_pData; } - bool Contains( const TYPE& value ){ return ( -1 != IndexOf( value ) ); } - - int IndexOf( const TYPE& value ) { return ( m_nSize > 0 ) ? IndexOf( value, 0, m_nSize ) : -1; } - int IndexOf( const TYPE& value, int iStart ) { return IndexOf( value, iStart, m_nSize - iStart ); } - int IndexOf( const TYPE& value, int nIndex, int nNumElements ); - - int LastIndexOf( const TYPE& value ) { return ( m_nSize > 0 ) ? LastIndexOf( value, m_nSize-1, m_nSize ) : -1; } - int LastIndexOf( const TYPE& value, int nIndex ) { return LastIndexOf( value, nIndex, nIndex+1 ); } - int LastIndexOf( const TYPE& value, int nIndex, int nNumElements ); - - HRESULT Remove( int nIndex ); - void RemoveAll() { SetSize(0); } - void Reset() { m_nSize = 0; } - -protected: - TYPE* m_pData; // the actual array of data - int m_nSize; // # of elements (upperBound - 1) - int m_nMaxSize; // max allocated - - HRESULT SetSizeInternal( int nNewMaxSize ); // This version doesn't call ctor or dtor. -}; - - -//-------------------------------------------------------------------------------------- -// Performs timer operations -// Use DXUTGetGlobalTimer() to get the global instance -//-------------------------------------------------------------------------------------- -class CDXUTTimer -{ -public: - CDXUTTimer(); - - void Reset(); // resets the timer - void Start(); // starts the timer - void Stop(); // stop (or pause) the timer - void Advance(); // advance the timer by 0.1 seconds - double GetAbsoluteTime(); // get the absolute system time - double GetTime(); // get the current time - float GetElapsedTime(); // get the time that elapsed between Get*ElapsedTime() calls - void GetTimeValues( double* pfTime, double* pfAbsoluteTime, float* pfElapsedTime ); // get all time values at once - bool IsStopped(); // returns true if timer stopped - - // Limit the current thread to one processor (the current one). This ensures that timing code runs - // on only one processor, and will not suffer any ill effects from power management. - void LimitThreadAffinityToCurrentProc(); - -protected: - LARGE_INTEGER GetAdjustedCurrentTime(); - - bool m_bUsingQPF; - bool m_bTimerStopped; - LONGLONG m_llQPFTicksPerSec; - - LONGLONG m_llStopTime; - LONGLONG m_llLastElapsedTime; - LONGLONG m_llBaseTime; -}; - -CDXUTTimer* WINAPI DXUTGetGlobalTimer(); - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given D3DFORMAT. -// bWithPrefix determines whether the string should include the "D3DFMT_" -//-------------------------------------------------------------------------------------- -LPCWSTR WINAPI DXUTD3DFormatToString( D3DFORMAT format, bool bWithPrefix ); - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given DXGI_FORMAT. -// bWithPrefix determines whether the string should include the "DXGI_FORMAT_" -//-------------------------------------------------------------------------------------- -LPCWSTR WINAPI DXUTDXGIFormatToString( DXGI_FORMAT format, bool bWithPrefix ); - - -//-------------------------------------------------------------------------------------- -// Device settings conversion -//-------------------------------------------------------------------------------------- -void WINAPI DXUTConvertDeviceSettings11to9( DXUTD3D11DeviceSettings* pIn, DXUTD3D9DeviceSettings* pOut ); -void WINAPI DXUTConvertDeviceSettings9to11( DXUTD3D9DeviceSettings* pIn, DXUTD3D11DeviceSettings* pOut ); - -DXGI_FORMAT WINAPI ConvertFormatD3D9ToDXGI( D3DFORMAT fmt ); -D3DFORMAT WINAPI ConvertFormatDXGIToD3D9( DXGI_FORMAT fmt ); - - -//-------------------------------------------------------------------------------------- -// Debug printing support -// See dxerr.h for more debug printing support -//-------------------------------------------------------------------------------------- -void WINAPI DXUTOutputDebugStringW( LPCWSTR strMsg, ... ); -void WINAPI DXUTOutputDebugStringA( LPCSTR strMsg, ... ); -HRESULT WINAPI DXUTTrace( const WCHAR* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, bool bPopMsgBox ); -void WINAPI DXUTTraceDecl( D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE] ); -WCHAR* WINAPI DXUTTraceD3DDECLUSAGEtoString( BYTE u ); -WCHAR* WINAPI DXUTTraceD3DDECLMETHODtoString( BYTE m ); -WCHAR* WINAPI DXUTTraceD3DDECLTYPEtoString( BYTE t ); -WCHAR* WINAPI DXUTTraceWindowsMessage( UINT uMsg ); - -#ifdef UNICODE -#define DXUTOutputDebugString DXUTOutputDebugStringW -#else -#define DXUTOutputDebugString DXUTOutputDebugStringA -#endif - -// These macros are very similar to dxerr's but it special cases the HRESULT defined -// by DXUT to pop better message boxes. -#if defined(DEBUG) || defined(_DEBUG) -#define DXUT_ERR(str,hr) DXUTTrace( __FILEW__, (DWORD)__LINE__, hr, str, false ) -#define DXUT_ERR_MSGBOX(str,hr) DXUTTrace( __FILEW__, (DWORD)__LINE__, hr, str, true ) -#define DXUTTRACE DXUTOutputDebugString -#else -#define DXUT_ERR(str,hr) (hr) -#define DXUT_ERR_MSGBOX(str,hr) (hr) -#define DXUTTRACE (__noop) -#endif - - -//-------------------------------------------------------------------------------------- -// Direct3D9 dynamic linking support -- calls top-level D3D9 APIs with graceful -// failure if APIs are not present. -//-------------------------------------------------------------------------------------- - -IDirect3D9 * WINAPI DXUT_Dynamic_Direct3DCreate9(UINT SDKVersion); -int WINAPI DXUT_Dynamic_D3DPERF_BeginEvent( D3DCOLOR col, LPCWSTR wszName ); -int WINAPI DXUT_Dynamic_D3DPERF_EndEvent( void ); -void WINAPI DXUT_Dynamic_D3DPERF_SetMarker( D3DCOLOR col, LPCWSTR wszName ); -void WINAPI DXUT_Dynamic_D3DPERF_SetRegion( D3DCOLOR col, LPCWSTR wszName ); -BOOL WINAPI DXUT_Dynamic_D3DPERF_QueryRepeatFrame( void ); -void WINAPI DXUT_Dynamic_D3DPERF_SetOptions( DWORD dwOptions ); -DWORD WINAPI DXUT_Dynamic_D3DPERF_GetStatus( void ); -HRESULT WINAPI DXUT_Dynamic_CreateDXGIFactory1( REFIID rInterface, void** ppOut ); - -HRESULT WINAPI DXUT_Dynamic_D3D11CreateDevice( IDXGIAdapter* pAdapter, - D3D_DRIVER_TYPE DriverType, - HMODULE Software, - UINT32 Flags, - D3D_FEATURE_LEVEL* pFeatureLevels, - UINT FeatureLevels, - UINT32 SDKVersion, - ID3D11Device** ppDevice, - D3D_FEATURE_LEVEL* pFeatureLevel, - ID3D11DeviceContext** ppImmediateContext ); - -bool DXUT_EnsureD3D11APIs( void ); - - -//-------------------------------------------------------------------------------------- -// Profiling/instrumentation support -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -// Some D3DPERF APIs take a color that can be used when displaying user events in -// performance analysis tools. The following constants are provided for your -// convenience, but you can use any colors you like. -//-------------------------------------------------------------------------------------- -const D3DCOLOR DXUT_PERFEVENTCOLOR = D3DCOLOR_XRGB( 200, 100, 100 ); -const D3DCOLOR DXUT_PERFEVENTCOLOR2 = D3DCOLOR_XRGB( 100, 200, 100 ); -const D3DCOLOR DXUT_PERFEVENTCOLOR3 = D3DCOLOR_XRGB( 100, 100, 200 ); - -//-------------------------------------------------------------------------------------- -// The following macros provide a convenient way for your code to call the D3DPERF -// functions only when PROFILE is defined. If PROFILE is not defined (as for the final -// release version of a program), these macros evaluate to nothing, so no detailed event -// information is embedded in your shipping program. It is recommended that you create -// and use three build configurations for your projects: -// Debug (nonoptimized code, asserts active, PROFILE defined to assist debugging) -// Profile (optimized code, asserts disabled, PROFILE defined to assist optimization) -// Release (optimized code, asserts disabled, PROFILE not defined) -//-------------------------------------------------------------------------------------- -#ifdef PROFILE -// PROFILE is defined, so these macros call the D3DPERF functions -#define DXUT_BeginPerfEvent( color, pstrMessage ) DXUT_Dynamic_D3DPERF_BeginEvent( color, pstrMessage ) -#define DXUT_EndPerfEvent() DXUT_Dynamic_D3DPERF_EndEvent() -#define DXUT_SetPerfMarker( color, pstrMessage ) DXUT_Dynamic_D3DPERF_SetMarker( color, pstrMessage ) -#else -// PROFILE is not defined, so these macros do nothing -#define DXUT_BeginPerfEvent( color, pstrMessage ) (__noop) -#define DXUT_EndPerfEvent() (__noop) -#define DXUT_SetPerfMarker( color, pstrMessage ) (__noop) -#endif - -//-------------------------------------------------------------------------------------- -// CDXUTPerfEventGenerator is a helper class that makes it easy to attach begin and end -// events to a block of code. Simply define a CDXUTPerfEventGenerator variable anywhere -// in a block of code, and the class's constructor will call DXUT_BeginPerfEvent when -// the block of code begins, and the class's destructor will call DXUT_EndPerfEvent when -// the block ends. -//-------------------------------------------------------------------------------------- -class CDXUTPerfEventGenerator -{ -public: -CDXUTPerfEventGenerator( D3DCOLOR color, LPCWSTR pstrMessage ) -{ - DXUT_BeginPerfEvent( color, pstrMessage ); -} -~CDXUTPerfEventGenerator( void ) -{ - DXUT_EndPerfEvent(); -} -}; - - -//-------------------------------------------------------------------------------------- -// Multimon handling to support OSes with or without multimon API support. -// Purposely avoiding the use of multimon.h so DXUT.lib doesn't require -// COMPILE_MULTIMON_STUBS and cause complication with MFC or other users of multimon.h -//-------------------------------------------------------------------------------------- -#ifndef MONITOR_DEFAULTTOPRIMARY -#define MONITORINFOF_PRIMARY 0x00000001 -#define MONITOR_DEFAULTTONULL 0x00000000 -#define MONITOR_DEFAULTTOPRIMARY 0x00000001 -#define MONITOR_DEFAULTTONEAREST 0x00000002 -typedef struct tagMONITORINFO -{ - DWORD cbSize; - RECT rcMonitor; - RECT rcWork; - DWORD dwFlags; -} MONITORINFO, *LPMONITORINFO; -typedef struct tagMONITORINFOEXW : public tagMONITORINFO -{ - WCHAR szDevice[CCHDEVICENAME]; -} MONITORINFOEXW, *LPMONITORINFOEXW; -typedef MONITORINFOEXW MONITORINFOEX; -typedef LPMONITORINFOEXW LPMONITORINFOEX; -#endif - -HMONITOR WINAPI DXUTMonitorFromWindow( HWND hWnd, DWORD dwFlags ); -HMONITOR WINAPI DXUTMonitorFromRect( LPCRECT lprcScreenCoords, DWORD dwFlags ); -BOOL WINAPI DXUTGetMonitorInfo( HMONITOR hMonitor, LPMONITORINFO lpMonitorInfo ); -void WINAPI DXUTGetDesktopResolution( UINT AdapterOrdinal, UINT* pWidth, UINT* pHeight ); - - -//-------------------------------------------------------------------------------------- -// Implementation of CGrowableArray -//-------------------------------------------------------------------------------------- - -// This version doesn't call ctor or dtor. -template HRESULT CGrowableArray ::SetSizeInternal( int nNewMaxSize ) -{ - if( nNewMaxSize < 0 || ( nNewMaxSize > INT_MAX / sizeof( TYPE ) ) ) - { - assert( false ); - return E_INVALIDARG; - } - - if( nNewMaxSize == 0 ) - { - // Shrink to 0 size & cleanup - if( m_pData ) - { - free( m_pData ); - m_pData = NULL; - } - - m_nMaxSize = 0; - m_nSize = 0; - } - else if( m_pData == NULL || nNewMaxSize > m_nMaxSize ) - { - // Grow array - int nGrowBy = ( m_nMaxSize == 0 ) ? 16 : m_nMaxSize; - - // Limit nGrowBy to keep m_nMaxSize less than INT_MAX - if( ( UINT )m_nMaxSize + ( UINT )nGrowBy > ( UINT )INT_MAX ) - nGrowBy = INT_MAX - m_nMaxSize; - - nNewMaxSize = __max( nNewMaxSize, m_nMaxSize + nGrowBy ); - - // Verify that (nNewMaxSize * sizeof(TYPE)) is not greater than UINT_MAX or the realloc will overrun - if( sizeof( TYPE ) > UINT_MAX / ( UINT )nNewMaxSize ) - return E_INVALIDARG; - - TYPE* pDataNew = ( TYPE* )realloc( m_pData, nNewMaxSize * sizeof( TYPE ) ); - if( pDataNew == NULL ) - return E_OUTOFMEMORY; - - m_pData = pDataNew; - m_nMaxSize = nNewMaxSize; - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -template HRESULT CGrowableArray ::SetSize( int nNewMaxSize ) -{ - int nOldSize = m_nSize; - - if( nOldSize > nNewMaxSize ) - { - assert( m_pData ); - if( m_pData ) - { - // Removing elements. Call dtor. - - for( int i = nNewMaxSize; i < nOldSize; ++i ) - m_pData[i].~TYPE(); - } - } - - // Adjust buffer. Note that there's no need to check for error - // since if it happens, nOldSize == nNewMaxSize will be true.) - HRESULT hr = SetSizeInternal( nNewMaxSize ); - - if( nOldSize < nNewMaxSize ) - { - assert( m_pData ); - if( m_pData ) - { - // Adding elements. Call ctor. - - for( int i = nOldSize; i < nNewMaxSize; ++i ) - ::new ( &m_pData[i] ) TYPE; - } - } - - return hr; -} - - -//-------------------------------------------------------------------------------------- -template HRESULT CGrowableArray ::Add( const TYPE& value ) -{ - HRESULT hr; - if( FAILED( hr = SetSizeInternal( m_nSize + 1 ) ) ) - return hr; - - // Construct the new element - ::new ( &m_pData[m_nSize] ) TYPE; - - // Assign - m_pData[m_nSize] = value; - ++m_nSize; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -template HRESULT CGrowableArray ::Insert( int nIndex, const TYPE& value ) -{ - HRESULT hr; - - // Validate index - if( nIndex < 0 || - nIndex > m_nSize ) - { - assert( false ); - return E_INVALIDARG; - } - - // Prepare the buffer - if( FAILED( hr = SetSizeInternal( m_nSize + 1 ) ) ) - return hr; - - // Shift the array - MoveMemory( &m_pData[nIndex + 1], &m_pData[nIndex], sizeof( TYPE ) * ( m_nSize - nIndex ) ); - - // Construct the new element - ::new ( &m_pData[nIndex] ) TYPE; - - // Set the value and increase the size - m_pData[nIndex] = value; - ++m_nSize; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -template HRESULT CGrowableArray ::SetAt( int nIndex, const TYPE& value ) -{ - // Validate arguments - if( nIndex < 0 || - nIndex >= m_nSize ) - { - assert( false ); - return E_INVALIDARG; - } - - m_pData[nIndex] = value; - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Searches for the specified value and returns the index of the first occurrence -// within the section of the data array that extends from iStart and contains the -// specified number of elements. Returns -1 if value is not found within the given -// section. -//-------------------------------------------------------------------------------------- -template int CGrowableArray ::IndexOf( const TYPE& value, int iStart, int nNumElements ) -{ - // Validate arguments - if( iStart < 0 || - iStart >= m_nSize || - nNumElements < 0 || - iStart + nNumElements > m_nSize ) - { - assert( false ); - return -1; - } - - // Search - for( int i = iStart; i < ( iStart + nNumElements ); i++ ) - { - if( value == m_pData[i] ) - return i; - } - - // Not found - return -1; -} - - -//-------------------------------------------------------------------------------------- -// Searches for the specified value and returns the index of the last occurrence -// within the section of the data array that contains the specified number of elements -// and ends at iEnd. Returns -1 if value is not found within the given section. -//-------------------------------------------------------------------------------------- -template int CGrowableArray ::LastIndexOf( const TYPE& value, int iEnd, int nNumElements ) -{ - // Validate arguments - if( iEnd < 0 || - iEnd >= m_nSize || - nNumElements < 0 || - iEnd - nNumElements < 0 ) - { - assert( false ); - return -1; - } - - // Search - for( int i = iEnd; i > ( iEnd - nNumElements ); i-- ) - { - if( value == m_pData[i] ) - return i; - } - - // Not found - return -1; -} - - - -//-------------------------------------------------------------------------------------- -template HRESULT CGrowableArray ::Remove( int nIndex ) -{ - if( nIndex < 0 || - nIndex >= m_nSize ) - { - assert( false ); - return E_INVALIDARG; - } - - // Destruct the element to be removed - m_pData[nIndex].~TYPE(); - - // Compact the array and decrease the size - MoveMemory( &m_pData[nIndex], &m_pData[nIndex + 1], sizeof( TYPE ) * ( m_nSize - ( nIndex + 1 ) ) ); - --m_nSize; - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -// Creates a REF or NULLREF D3D9 device and returns that device. The caller should call -// Release() when done with the device. -//-------------------------------------------------------------------------------------- -IDirect3DDevice9* WINAPI DXUTCreateRefDevice9( HWND hWnd, bool bNullRef = true ); - -//-------------------------------------------------------------------------------------- -// Creates a REF or NULLREF D3D10 device and returns the device. The caller should call -// Release() when done with the device. -//-------------------------------------------------------------------------------------- -//test d3d10 version ID3D10Device* WINAPI DXUTCreateRefDevice10( bool bNullRef = true ); - -//-------------------------------------------------------------------------------------- -// Helper function to launch the Media Center UI after the program terminates -//-------------------------------------------------------------------------------------- -bool DXUTReLaunchMediaCenter(); - -//-------------------------------------------------------------------------------------- -// Helper functions to create SRGB formats from typeless formats and vice versa -//-------------------------------------------------------------------------------------- -DXGI_FORMAT MAKE_SRGB( DXGI_FORMAT format ); -DXGI_FORMAT MAKE_TYPELESS( DXGI_FORMAT format ); - -#endif diff --git a/sample/d3d11/common/DXUTres.cpp b/sample/d3d11/common/DXUTres.cpp deleted file mode 100644 index c4fc5dc..0000000 --- a/sample/d3d11/common/DXUTres.cpp +++ /dev/null @@ -1,8338 +0,0 @@ -//---------------------------------------------------------------------------- -// File: DXUTRes.cpp -// -// Copyright (c) Microsoft Corp. All rights reserved. -//----------------------------------------------------------------------------- -#include "DXUT.h" -#include "DXUTres.h" - -static const DWORD g_DXUTGUITextureSrcData[] = -{ - 0x20534444, 0x0000007c, 0x00001007, 0x00000100, 0x00000100, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x00000041, 0x00000000, 0x00000020, 0x000000ff, - 0x0000ff00, 0x00ff0000, 0xff000000, 0x00001002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000400, 0x11000400, 0x11000400, 0x11000400, - 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, - 0x11000000, 0x00000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000400, 0x22000400, 0x22000400, 0x22000400, - 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, 0x33000000, 0x44000000, - 0x44000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x66000000, 0x66000000, - 0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000000, 0x66000000, 0x661e1e1e, 0x771e1e1e, - 0x771e1c1e, 0x771e1c1e, 0x771e1c1e, 0x771e1c1e, 0x771e1e1e, 0x771e1e1e, 0x771e1e1e, 0x771e1e1e, - 0x771e1c1e, 0x881e1c1e, 0x881e1c1e, 0x881e1c1e, 0x88373937, 0x88373937, 0x881b1c1b, 0x881b1c1b, - 0x881e201e, 0x881e201e, 0x881e201e, 0x881e201e, 0x88313631, 0x88313631, 0x88313631, 0x88191b19, - 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x881b1e1b, 0x881b1e1b, 0x881b1e1b, 0x88373737, - 0x88313331, 0x88313331, 0x88313331, 0x88313331, 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, - 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x88191e19, 0x88191e19, 0x88191e19, 0x77191e19, - 0x77191a19, 0x77191a19, 0x77191a19, 0x77191a19, 0x77191719, 0x77191719, 0x77191719, 0x66191719, - 0x66161616, 0x66161616, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x44000000, 0x44000000, - 0x44000000, 0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x22000400, 0x22000400, 0x333c413c, 0x443c3d3f, 0x443c3d3f, 0x443c3d3f, 0x553c3d3f, - 0x66454145, 0x77454145, 0x77454145, 0x88817d81, 0x99797779, 0x99797779, 0x99797779, 0x99797779, - 0x99797979, 0xaa797979, 0xaa797979, 0xaa797979, 0xbb7e7c7e, 0xcc7e7c7e, 0xbb7e7c7e, 0xbb7e7c7e, - 0xbb7e7f7e, 0xbb7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, - 0xbb7e7c7e, 0xcc7c7b7d, 0xcc7a7879, 0xbb707071, 0xbb686869, 0xbb5d6060, 0xbb565858, 0xbb4d4f4c, - 0xcc454745, 0xcc3c3b3e, 0x77383838, 0x55393837, 0x55373737, 0x44373737, 0x33373737, 0x33373937, - 0x22000400, 0x22000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, - 0x22000000, 0x33000000, 0x44000000, 0x55000000, 0x55030303, 0x66030303, 0x66050505, 0x66080808, - 0x66101010, 0x77212021, 0x77212021, 0x77313131, 0x88373637, 0x88373637, 0x99525152, 0x99525152, - 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, - 0x995a555a, 0x995a555a, 0x995a555a, 0x995a555a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, - 0x995a555a, 0x995a555a, 0x995a555a, 0x995a555a, 0x99525552, 0x99525552, 0x99525552, 0x99525552, - 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x994a514a, 0x994a514a, 0x994a514a, 0x994a514a, - 0x99525552, 0x99525552, 0x99525552, 0x99525552, 0x99525152, 0x99525152, 0x99525152, 0x99525152, - 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x99525552, 0x99525552, 0x99525552, 0x99525552, - 0x99525552, 0x99525552, 0x99525552, 0x99525552, 0x994a514a, 0x994a514a, 0x994a514a, 0x994a514a, - 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a454a, 0x994a454a, 0x994a454a, 0x994a454a, - 0x99424142, 0x99424142, 0x99424142, 0x99424142, 0x99424142, 0x99424142, 0x99424142, 0x992c2b2c, - 0x88293129, 0x881b201b, 0x771b201b, 0x771b201b, 0x66101010, 0x66101010, 0x660b0b0b, 0x66050505, - 0x66000400, 0x66000100, 0x55000100, 0x55000000, 0x55000000, 0x44000000, 0x33000000, 0x22000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080708, 0x11100d10, 0x11100d10, 0x22191419, - 0x33212324, 0x55424647, 0x66424647, 0x8863696b, 0x99737473, 0xbb737473, 0xccadaead, 0xeeadaead, - 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5b6bd, 0xffb5b6bd, 0xffb5b6bd, 0xffb5b6bd, - 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, - 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, - 0xffbdbabd, 0xffbcbabd, 0xffbcb8bc, 0xffb6b2b6, 0xffb3afb3, 0xffb0aeaf, 0xffadabaa, 0xffaaa9aa, - 0xffa9a7a8, 0xffa7a7a7, 0xffa6a6a6, 0xffa6a6a5, 0xffa6a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a2a5, - 0xffa5a2a5, 0xffa5a2a5, 0xeea5a2a5, 0xdd9c9a9c, 0xcc9c9a9c, 0xaa686768, 0x99686768, 0x885a5d5a, - 0x553c3e3c, 0x443c3e3c, 0x331e1f1e, 0x11101010, 0x11101010, 0x110b0b0b, 0x00050505, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000400, 0x33000400, 0x44000400, 0x55000400, - 0x66080808, 0x66080808, 0x663a3a3a, 0x773a3a3a, 0x885a5d5a, 0x886b6f6e, 0x996b6f6e, 0x997b8081, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99797879, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x996b716b, 0x99737773, 0x996b716b, 0x996b716b, - 0x99737173, 0x99797779, 0x99737173, 0x99737173, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99636563, 0x99636563, 0x99636563, 0x99636563, - 0x99636163, 0x99636163, 0x99636163, 0x99636163, 0x995a5d5a, 0x995a5d5a, 0x995a5d5a, 0x995a5d5a, - 0x995a5552, 0x995a5552, 0x995a5552, 0x995a5552, 0x994a4d50, 0x994a4d50, 0x994a4d50, 0x9931353a, - 0x88313331, 0x88313331, 0x77101010, 0x66101010, 0x66080408, 0x66080408, 0x66080408, 0x55080408, - 0x55000000, 0x44000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11191819, 0x22191819, 0x33191819, 0x66656465, 0x887b7d7b, 0xbba2a5a5, 0xddc8ccce, 0xffc8ccce, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd9d8d9, 0xffd6d2d6, 0xffd6d2d6, 0xffd6cece, 0xffcfcccc, 0xffc8c7c8, 0xffc6c2c3, - 0xffc4c0c2, 0xffc2c0c2, 0xffc5c2c4, 0xffc4c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffbdbebd, - 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffa5a6a5, - 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xee868a86, 0xdd868a86, 0xaa868a86, 0x885a615a, 0x55505250, - 0x33101410, 0x11101410, 0x11101410, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x44000000, 0x55000400, 0x66000400, 0x77343634, 0x77686868, - 0x886b6c6b, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x998c9294, 0x998c9294, 0x998c9294, 0x998c9294, - 0x998c8e8c, 0x99868786, 0x99868786, 0x99868786, 0x99848384, 0x99848384, 0x99848384, 0x99848384, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x997e7f7e, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x997e7c7e, 0x99848284, - 0x9984827b, 0x9984827b, 0x9984827b, 0x9984827b, 0x99848284, 0x99848284, 0x99848284, 0x997e7c7e, - 0x99848284, 0x997e7c7e, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x997b7c7b, - 0x997e7c7e, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x997b7b7b, 0x99848284, 0x99848284, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99767776, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99737373, 0x997b797b, - 0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x997b797b, 0x997b797b, 0x997b797b, 0x99707070, - 0x9970706e, 0x9970706e, 0x9970706e, 0x9970706e, 0x99636565, 0x99636565, 0x99636565, 0x99636565, - 0x99525652, 0x99525652, 0x99525652, 0x99525652, 0x99504d50, 0x882c282c, 0x772c282c, 0x77080408, - 0x66000000, 0x66000000, 0x55000000, 0x55000000, 0x44000000, 0x22000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x11000000, 0x33525452, 0x77525452, - 0xaab2afb2, 0xddfffbff, 0xfffffbff, 0xfffffbff, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, - 0xffefefef, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, - 0xffe1e4e1, 0xffe1e4e1, 0xffe1e4e1, 0xffe1e4e1, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe1e1e1, - 0xffe6e1e6, 0xffe6e1e6, 0xffe6e1e6, 0xffe6e1e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, - 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe1dde1, - 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, - 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3dd, 0xffdee3dd, 0xffdee1de, 0xffdee0db, - 0xffdedbd9, 0xffe2dddc, 0xffdbd9db, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd3d4d3, - 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffcbc9cb, - 0xffcbc9cb, 0xffcbc9cb, 0xffcbc9cb, 0xffb2b2b2, 0xffb2b2b2, 0xffb2b2b2, 0xffb2b2b2, 0xff8f908f, - 0xff8f908f, 0xbb8f908f, 0x88505250, 0x663c3d3c, 0x333c3d3c, 0x11000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x44000000, 0x55000000, 0x77343234, 0x77686868, 0x999c9a9c, 0x999c9a9c, 0x999c9a9c, - 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x998c9294, 0x998c9294, 0x998c9294, 0x998c9294, - 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x997e7f7e, 0x99848684, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, - 0x9984827b, 0x9984827b, 0x9984827b, 0x9984827b, 0x99848284, 0x99848284, 0x997e7c7e, 0x997e7c7e, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x997b7c7b, 0x997b7c7b, - 0x99848284, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x99848284, 0x99848284, 0x997b7b7b, 0x997b7b7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x99737973, 0x99737973, 0x99737973, 0x99737973, 0x99737173, 0x99737173, 0x99504d50, 0x99504d50, - 0x88424142, 0x88212021, 0x77212021, 0x66000000, 0x55000000, 0x55000000, 0x44000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x22000400, 0x66525452, 0xaaa5a7a5, 0xeef7fbf7, 0xfff7fbf7, - 0xfffffbff, 0xfffffbff, 0xfffffbff, 0xfffffbff, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, - 0xffe6ebe6, 0xffe6ebe6, 0xffe1e4e1, 0xffe1e4e1, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, - 0xffe6e1e6, 0xffe6e1e6, 0xffe6e1e6, 0xffefe7ef, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, - 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3e6, 0xffe6e3e6, 0xffe1dde1, 0xffe6e3e6, - 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, - 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, - 0xffe5e2df, 0xffe1e0dd, 0xffdcdbdc, 0xffdddfe0, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffb5b6b5, 0xdd797979, 0xaa797979, 0x663c3d3c, 0x22000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, - 0x55000000, 0x77343234, 0x88686468, 0x999c969c, 0x999c9a9c, 0x999c9a9c, 0x999c9a9c, 0x999c9a9c, - 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x998c9294, 0x998c9294, 0x998c9294, 0x998c9294, - 0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99848384, 0x99848384, 0x99848384, 0x99848384, - 0x997e807e, 0x997e807e, 0x997e807e, 0x997e807e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, - 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, - 0x997e7c79, 0x997e7c79, 0x997e7c79, 0x99797776, 0x99797779, 0x99797779, 0x997e7c7e, 0x997e7c7e, - 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997b7c7b, 0x997b7c7b, 0x99737773, 0x997b7c7b, - 0x99797779, 0x997e7c7e, 0x99797779, 0x997e7c7e, 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, - 0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767876, - 0x99767776, 0x997b7d7b, 0x997b7d7b, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x99737973, 0x99737973, 0x99737973, 0x99737973, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99636163, 0x99636163, 0x99424142, 0x88212021, 0x77191419, 0x66000000, 0x55000000, 0x55000000, - 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x11000400, 0x66797b79, 0xccb5b6b5, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, - 0xfffffbff, 0xfffffbff, 0xfffffbff, 0xfffffbff, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, - 0xffe1e4e1, 0xffe1e4e1, 0xffe1e4e1, 0xffdbdddb, 0xffe1e1e1, 0xffe1e1e1, 0xffdbdcdb, 0xffe1e1e1, - 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffe1dde1, 0xffe1dde1, 0xffe1dde1, 0xffe1dde1, - 0xffe1dddb, 0xffe1dddb, 0xffe1dddb, 0xffe1dddb, 0xffe1dde1, 0xffe1dde1, 0xffe1dde1, 0xffe1dde1, - 0xffe1dddb, 0xffe1dddb, 0xffe1dddb, 0xffe1dddb, 0xffdbdddb, 0xffdbdddb, 0xffdbdddb, 0xffdbdddb, - 0xffdbdddb, 0xffdbdddb, 0xffdbdddb, 0xffdbdddb, 0xffdbdcd9, 0xffdbdcd9, 0xffdcdcda, 0xffdcdbda, - 0xffdddadb, 0xffddd9dc, 0xffdad8d9, 0xffd7dadb, 0xffdbdddc, 0xffdddfdd, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xbb737973, - 0x664d524d, 0x11000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, 0x00080808, 0x33080808, 0x66080808, - 0x8852555a, 0x99848686, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, - 0x99949294, 0x99949294, 0x99949294, 0x99898889, 0x998c8684, 0x998c8684, 0x998c8684, 0x9984807e, - 0x99848284, 0x99848284, 0x99848284, 0x997b7b7e, 0x997b7d7b, 0x997b7d7b, 0x99767876, 0x99767876, - 0x997b797b, 0x997b797b, 0x99767576, 0x99767576, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737473, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99767570, 0x99767570, 0x997b7973, 0x99767570, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99767576, 0x99767576, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7973, 0x9973706e, 0x996b6768, 0x99635d63, 0x994a4a4a, 0x77292b29, 0x66080c08, 0x66080c08, - 0x66000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x333a393a, 0xbbb2b2b2, 0xeeefefef, 0xffefefef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xfff7f7f7, 0xfff7f7f7, 0xffececec, 0xffececec, 0xffefebe6, 0xffefebe6, 0xffe6e4e1, 0xffe6e4e1, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffdedce1, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd3d7d3, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd3d7d3, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d6d6, 0xffd8d7d6, - 0xffd8d6d7, 0xffd8d3d6, 0xffd8d3d7, 0xffd9d4d8, 0xffd9d6d9, 0xffd8d7d7, 0xffd6d7d6, 0xffd3d7d3, - 0xffd3d7d3, 0xffd3d7d3, 0xffd6dbd6, 0xffd3d7d3, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbde, - 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, 0xffd0d1ce, 0xffd0d1ce, 0xffc5bebd, 0xffc5c6c5, - 0xee9a9797, 0xaa6e6868, 0x3342393a, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, 0x33080808, 0x66080808, 0x885a595a, - 0x99848686, 0x99848686, 0x999c9e9c, 0x999c9e9c, 0x99919291, 0x99919291, 0x99919291, 0x99919291, - 0x99898889, 0x99898889, 0x99898889, 0x997e7f7e, 0x9984807e, 0x997b7b79, 0x997b7b79, 0x997b7b79, - 0x997b7b7e, 0x997b7b7e, 0x997b7b7e, 0x99737479, 0x99767876, 0x99767876, 0x99707370, 0x99707370, - 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99737573, 0x99737573, 0x99737573, 0x99707370, - 0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, - 0x996e706e, 0x99707370, 0x99707370, 0x996e706e, 0x99707370, 0x99707370, 0x99707370, 0x996e706e, - 0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, 0x99707370, 0x996e706e, 0x99707370, 0x99707370, - 0x99737173, 0x99737473, 0x99737373, 0x99737173, 0x99737370, 0x99737370, 0x99737370, 0x99737370, - 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, - 0x9970716e, 0x99767570, 0x99767570, 0x99767570, 0x99737573, 0x99737370, 0x99737370, 0x99737370, - 0x99737370, 0x99737573, 0x99737370, 0x99737370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, - 0x99707373, 0x99707373, 0x99707373, 0x99707373, 0x99707370, 0x99707370, 0x99707370, 0x99707370, - 0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99767576, 0x99767576, 0x99767576, 0x99767576, - 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767876, 0x99767876, 0x99767876, 0x99767876, - 0x997b7973, 0x997b7973, 0x997b7973, 0x9973706e, 0x996b696b, 0x994a4a4a, 0x88292b29, 0x77080c08, - 0x66000000, 0x66000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55474847, - 0xddb2b2b2, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff4f3f4, 0xfff4f3f4, 0xfff4f3f4, 0xfff4f3f4, - 0xffececec, 0xffececec, 0xffe1e1e1, 0xffe1e1e1, 0xffe6e4e1, 0xffdedddb, 0xffdedddb, 0xffdedddb, - 0xffdedce1, 0xffdedce1, 0xffdedce1, 0xffd6d5db, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd3d4d3, - 0xffd9d7d9, 0xffd9d7d9, 0xffd9d7d9, 0xffd9d7d9, 0xffd3d7d3, 0xffd3d7d3, 0xffd3d7d3, 0xffd3d7d3, - 0xffd3d7d3, 0xffd3d7d3, 0xffd3d7d3, 0xffd0d2d0, 0xffd3d7d3, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, - 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, - 0xffd3d4d3, 0xffd0d1d0, 0xffd3d4d3, 0xffd0d1d0, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, - 0xffd0d4d0, 0xffd3d5d3, 0xffd0d4d0, 0xffd3d5d3, 0xffd6d4d3, 0xffd6d4d3, 0xffd6d4d3, 0xffd7d4d4, - 0xffd6d2d3, 0xffd5cfd3, 0xffd5d0d4, 0xffd5d3d4, 0xffd5d5d4, 0xffd2d5d3, 0xffd3d4d3, 0xffd3d7d3, - 0xffd3d7d3, 0xffd3d7d3, 0xffd3d7d3, 0xffd0d2d0, 0xffd3d7d3, 0xffd3d7d3, 0xffd0d2d0, 0xffd3d7d9, - 0xffd3d7d9, 0xffd3d7d9, 0xffd3d7d9, 0xffd3d4d3, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, - 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd0d1ce, 0xffc5c6c5, - 0xffc5c6c5, 0xff9a9797, 0xcc9a9797, 0x55313231, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33080808, 0x66080808, 0x995a595a, 0x99848284, - 0x99848686, 0x99848686, 0x99848686, 0x99848686, 0x99919291, 0x99868686, 0x99868686, 0x99868686, - 0x997e7f7e, 0x997e7f7e, 0x99737573, 0x99737573, 0x997b7b79, 0x997b7b79, 0x99737573, 0x99737573, - 0x99737479, 0x99737479, 0x99737479, 0x99737479, 0x99707370, 0x99707370, 0x99707370, 0x99707370, - 0x99707170, 0x99707170, 0x99707170, 0x996b6d6b, 0x996e706e, 0x996e706e, 0x996e706e, 0x996b6d6b, - 0x996e706e, 0x996e706e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996b6d6b, 0x996e706e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996e706e, 0x996e706e, 0x996e706e, 0x996b6d6b, 0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x9973706e, 0x9973706e, 0x9973706e, 0x9973706e, - 0x99737073, 0x99737073, 0x99737073, 0x99737373, 0x99737373, 0x99737073, 0x99737073, 0x99737073, - 0x9970716e, 0x9970716e, 0x9970716e, 0x9970716e, 0x9973706e, 0x99737370, 0x9973706e, 0x9973706e, - 0x9973706e, 0x9973706e, 0x99737370, 0x99737370, 0x99707370, 0x99707370, 0x996e706e, 0x996e706e, - 0x996e7073, 0x996e7073, 0x996e7073, 0x996e7073, 0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, - 0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, 0x99707170, 0x99707170, 0x99707170, 0x99707170, - 0x99707170, 0x99707170, 0x99707170, 0x99707170, 0x99707370, 0x99707370, 0x99707370, 0x99707370, - 0x997b7973, 0x9973706e, 0x9973706e, 0x9973706e, 0x996b696b, 0x996b696b, 0x994a4a4a, 0x99292b29, - 0x66101010, 0x66000000, 0x66000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x66474847, 0xeed6d7d6, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff4f3f4, 0xffe9e7e9, 0xffe9e7e9, 0xffe9e7e9, - 0xffe1e1e1, 0xffe1e1e1, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d5db, 0xffd6d5db, 0xffd6d5db, 0xffd6d5db, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, - 0xffd3d2d3, 0xffd3d2d3, 0xffd3d2d3, 0xffcecece, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffcecece, - 0xffd0d2d0, 0xffd0d2d0, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd3d4d3, 0xffd0d1d0, 0xffd0d1d0, - 0xffced2ce, 0xffd0d4d0, 0xffd0d4d0, 0xffced2ce, 0xffd6d1d0, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d2d2, - 0xffd6d2d3, 0xffd4d0d2, 0xffd4d0d3, 0xffd5d2d5, 0xffd6d3d6, 0xffd5d4d5, 0xffd3d4d3, 0xffd0d2d0, - 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d3, - 0xffd0d2d3, 0xffd0d2d3, 0xffd0d2d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, - 0xffd3d4d3, 0xffd9d9d9, 0xffd9d9d9, 0xffd6dbd6, 0xffd0d1ce, 0xffd0d1ce, 0xffd0d1ce, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xff9a9797, 0xdd949694, 0x44313231, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x66080808, 0x995a595a, 0x99848284, 0x99848284, - 0x99848686, 0x99848686, 0x99848686, 0x99848686, 0x99868686, 0x99868686, 0x99868686, 0x997b797b, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x996b6d73, 0x996b6d73, 0x996b6d73, 0x996b6d73, 0x996b6d6b, 0x996b6d6b, 0x99707370, 0x996b6d6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996e706e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99736d6b, 0x9973706e, 0x9973706e, 0x9973706e, - 0x99737073, 0x99736d73, 0x99737073, 0x99737073, 0x99736d73, 0x99736d73, 0x99736d73, 0x99737073, - 0x996b6d6b, 0x9970716e, 0x9970716e, 0x996b6d6b, 0x99736d6b, 0x99736d6b, 0x99736d6b, 0x99736d6b, - 0x9973706e, 0x9973706e, 0x99736d6b, 0x9973706e, 0x996e706e, 0x99707370, 0x99707370, 0x996b6d6b, - 0x996e7073, 0x996b6d73, 0x996b6d73, 0x996e7073, 0x996e706e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x99707170, 0x996b6d6b, 0x99707170, 0x996b6d6b, 0x99707370, 0x99707370, 0x996b6d6b, 0x996b6d6b, - 0x9973706e, 0x9973706e, 0x9973706e, 0x9973706e, 0x996b696b, 0x996b696b, 0x996b696b, 0x994a4a4a, - 0x88313131, 0x66101010, 0x66000000, 0x55000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x44474847, 0xeed6d7d6, 0xffd6d7d6, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffe9e7e9, 0xffe9e7e9, 0xffe9e7e9, 0xffdedbde, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d5db, 0xffceced6, 0xffceced6, 0xffceced6, 0xffcecece, 0xffcecece, 0xffd3d4d3, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffd6d1d0, 0xffd6d1d0, 0xffd6d1d0, 0xffd7d2d2, - 0xffd7d3d5, 0xffd6d1d5, 0xffd6d1d4, 0xffd6d3d5, 0xffd5d4d5, 0xffd1d2d1, 0xffd0d1d0, 0xffd0d2d0, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffd3d4d3, 0xffcecece, 0xffd3d4d3, 0xffcecece, 0xffd3d4d3, - 0xffd3d4d3, 0xffcecece, 0xffcecece, 0xffd0d1ce, 0xffd0d1ce, 0xffd0d1ce, 0xffd0d1ce, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xff949694, 0xcc949694, 0x33313231, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x44000000, 0x884a4542, 0x99737173, 0x99737173, 0x99737173, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99737373, - 0x99737173, 0x99737173, 0x99706f70, 0x99706f70, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x99706d70, 0x99737173, 0x99706d70, 0x99706d70, 0x996b6b6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, - 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, - 0x996b6d6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996e6c6e, 0x99706f70, 0x996e6c6e, 0x99706f70, - 0x996b6f6b, 0x996b6d6b, 0x996b6f6b, 0x996b6f6b, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, - 0x996b7070, 0x996b6f6e, 0x996b6f6e, 0x996b6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, - 0x99736f6e, 0x99737070, 0x99737070, 0x99737070, 0x996e6f6e, 0x99737173, 0x99707070, 0x996e6f6e, - 0x9970706e, 0x9970706e, 0x9970706e, 0x9970706e, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x996e6f6e, - 0x996b6f70, 0x996b6f70, 0x996b6f70, 0x996b6f70, 0x996e6f6e, 0x99707070, 0x99707070, 0x996e6f6e, - 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x996e6f6e, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b6d6b, 0x996b6c6b, - 0x996b6f70, 0x996b6f70, 0x996b6c6e, 0x996b6c6e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x99686b6b, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x9963656b, 0x9963656b, 0x995d6065, 0x9952555a, - 0x994a4d4a, 0x881e1f1e, 0x66080808, 0x66080808, 0x44000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11101010, 0xccc5cac5, 0xffc5cac5, 0xffc5cac5, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbd6, 0xffdedbd6, 0xffdedbd6, 0xffd6d5d3, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d0d3, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecdce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffcecdce, 0xffcecece, 0xffcecdce, 0xffcecdce, - 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffcecece, 0xffced0d0, - 0xffced0ce, 0xffcecece, 0xffced0ce, 0xffced0ce, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, - 0xffced1d3, 0xffced0d0, 0xffced0d0, 0xffced0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, - 0xffd6d0d0, 0xffd6d1d3, 0xffd6d1d3, 0xffd6d1d3, 0xffd0d0d0, 0xffd6d2d6, 0xffd3d1d3, 0xffd1d0d1, - 0xffd5d2d4, 0xffd7d3d6, 0xffd7d3d6, 0xffd6d3d5, 0xffd1d2d3, 0xffcecfce, 0xffcdcece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcbcccb, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcbcacb, 0xffc5cac5, - 0xffc0c4c0, 0xffc0c4c0, 0xffb5b6b5, 0xffa5a6a5, 0xffa5a6a5, 0xaa737473, 0x11101010, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x22000000, 0x661e1e1e, 0x99656263, 0x99737173, 0x99737173, 0x99737173, - 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99737373, 0x99737373, 0x99737373, 0x996b6c6b, - 0x996e6c6e, 0x996e6c6e, 0x99706f70, 0x99706f70, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, - 0x99706d70, 0x99706d70, 0x99706d70, 0x996e696e, 0x996b6b6b, 0x996b6b6b, 0x996b696b, 0x996b6b6b, - 0x996b696b, 0x996b6b6b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6d6b, - 0x996b6c6b, 0x996b6b6b, 0x996b6c6b, 0x996b6b6b, 0x996e6c6e, 0x996e6c6e, 0x99706f70, 0x996e6c6e, - 0x996b6f6b, 0x996b6f6b, 0x996b6f6b, 0x996b6f6b, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, - 0x996b6f6e, 0x996b7070, 0x996b7070, 0x996b6f6e, 0x996e6f6e, 0x99707070, 0x99707070, 0x996e6f6e, - 0x99737070, 0x99737070, 0x99736f6e, 0x99736f6e, 0x996e6f6e, 0x99707070, 0x99737173, 0x996e6f6e, - 0x996e6f68, 0x996e6f68, 0x9970706e, 0x9970706e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, - 0x996b6f70, 0x996b6f70, 0x996b6f70, 0x996b706e, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, - 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, - 0x996b6d6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, - 0x996b6f70, 0x996b6c6e, 0x996b6c6e, 0x996b6c6e, 0x99686b6b, 0x99686b6b, 0x9965686b, 0x99686b6b, - 0x996b696b, 0x99686768, 0x99686768, 0x99686768, 0x9963656b, 0x995d6065, 0x995d6065, 0x9952555a, - 0x994a4d4a, 0x99343634, 0x77080808, 0x66080808, 0x66000000, 0x22000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x664d4e4d, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, - 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d5d3, 0xffd6d5d3, 0xffced0d0, 0xffced0d0, - 0xffd0cdd0, 0xffd0cdd0, 0xffd3d0d3, 0xffd3d0d3, 0xffcbcdcb, 0xffcbcdcb, 0xffcbcdcb, 0xffcbcdcb, - 0xffcecdce, 0xffced0ce, 0xffced0ce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecace, 0xffcecdce, - 0xffcecace, 0xffcecdce, 0xffcecace, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffcecece, - 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, - 0xffced0d0, 0xffced1d3, 0xffced1d3, 0xffced0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, - 0xffd6d1d3, 0xffd6d1d3, 0xffd6d0d0, 0xffd6d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, - 0xffd5d2d3, 0xffd6d3d6, 0xffd7d2d5, 0xffd6d1d5, 0xffd6d1d5, 0xffd4cfd3, 0xffd0ced0, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffced2ce, 0xffcecace, 0xffcecece, 0xffcecece, 0xffcbcccb, - 0xffcbcccb, 0xffcbcccb, 0xffcbcccb, 0xffcbcacb, 0xffcbcacb, 0xffcbcacb, 0xffcbcacb, 0xffc5cac5, - 0xffc0c4c0, 0xffc0c4c0, 0xffb5b6b5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0x66424242, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x44000000, 0x883c3b3c, 0x99656263, 0x99656263, 0x99656263, 0x99737173, - 0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, - 0x996b696b, 0x996b696b, 0x996e6c6e, 0x996e6c6e, 0x996b6b6b, 0x996b6b6b, 0x996b686b, 0x996b6b6b, - 0x996e696e, 0x996e696e, 0x996e696e, 0x996e696e, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b696b, - 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, - 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x99706f70, 0x99706f70, 0x99706f70, 0x99706f70, - 0x996b6d6b, 0x996b6f6b, 0x996b6f6b, 0x996b6f6b, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, - 0x996b6f6e, 0x996b6f6e, 0x996b7070, 0x996b7070, 0x99707070, 0x99707070, 0x996e6f6e, 0x99707070, - 0x99736f6e, 0x99737070, 0x99736f6e, 0x99737070, 0x99707070, 0x996e6f6e, 0x99707070, 0x99707070, - 0x9970706e, 0x9970706e, 0x9970706e, 0x9970706e, 0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, - 0x996b706e, 0x996b706e, 0x996b6f70, 0x996b6f70, 0x996e6f6e, 0x99737173, 0x99707070, 0x99707070, - 0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, - 0x996b6c6b, 0x996b6b6b, 0x996b6d6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, - 0x996b6c6e, 0x996b6c6e, 0x996b6c6e, 0x996b6c6e, 0x9965686b, 0x9965686b, 0x9965686b, 0x9965686b, - 0x99686768, 0x99686768, 0x99656465, 0x99656465, 0x9963656b, 0x995d6065, 0x99585a60, 0x9952555a, - 0x994a4d4a, 0x994a4d4a, 0x881e1f1e, 0x66080808, 0x66000000, 0x44000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0xddc5cac5, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, - 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffcecece, 0xffced0d0, 0xffced0d0, 0xffced0d0, 0xffc5cace, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcbcdcb, 0xffcbcdcb, 0xffc8ccc8, 0xffcbcdcb, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, 0xffcecace, - 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced1d3, - 0xffcecece, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, - 0xffced0d0, 0xffced0d0, 0xffced1d3, 0xffced1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd0d0d0, 0xffd3d1d3, - 0xffd6d0d0, 0xffd6d1d3, 0xffd6d0d0, 0xffd6d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, - 0xffd4d2d2, 0xffd6d2d6, 0xffd6d1d5, 0xffd5d1d5, 0xffd5d2d4, 0xffd2d1d2, 0xffcfcfcf, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcbcccb, - 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcacb, 0xffc8c6c8, 0xffc8c6c8, 0xffc8c6c8, 0xffc0c4c0, - 0xffc0c4c0, 0xffbabdba, 0xffb5b6b5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xbb737473, 0x110e0d0e, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x55000000, 0x995a595a, 0x99656263, 0x99656263, 0x99656263, 0x99656263, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6c6b, 0x996b6c6b, 0x99636563, 0x99636563, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b686b, 0x996b686b, 0x996b686b, 0x996b686b, - 0x996b656b, 0x996e696e, 0x996e696e, 0x996e696e, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, - 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, - 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x99706f70, 0x99737173, 0x99706f70, 0x99737173, - 0x996b6f6b, 0x996b6f6b, 0x996b6f6b, 0x996b706b, 0x99706d70, 0x996e6d6e, 0x996e6d6e, 0x99706d70, - 0x996b7070, 0x996b7070, 0x996b6f6e, 0x996b6f6e, 0x99707070, 0x99707070, 0x99737173, 0x99707070, - 0x99737070, 0x99737070, 0x99737173, 0x99737173, 0x99707070, 0x99737173, 0x99707070, 0x99707070, - 0x9970706e, 0x9970706e, 0x9970706e, 0x9970706e, 0x99707070, 0x99707070, 0x99707070, 0x99707070, - 0x996b706e, 0x996b706e, 0x996b706e, 0x996b706e, 0x99707070, 0x99707070, 0x99737173, 0x99737173, - 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x996b6d6b, - 0x996b6c6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, - 0x996b6c6e, 0x996b696b, 0x996b696b, 0x996b696b, 0x9965686b, 0x9965686b, 0x9963656b, 0x9963656b, - 0x99656465, 0x99656465, 0x99656465, 0x99636163, 0x995d6065, 0x995d6065, 0x99585a60, 0x9952555a, - 0x994a4d4a, 0x994a4d4a, 0x99343634, 0x66080808, 0x66000000, 0x55000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x44313131, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffc5cace, 0xffc5cace, 0xffc5cace, 0xffc5cace, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, - 0xffcecace, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced1d3, 0xffced0d0, 0xffced1d3, - 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced2ce, 0xffd3ced3, 0xffd0ced0, 0xffd0ced0, 0xffd3ced3, - 0xffced1d3, 0xffced1d3, 0xffced0d0, 0xffced0d0, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, - 0xffd6d1d3, 0xffd6d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, - 0xffd6d2d6, 0xffd7d2d6, 0xffd5d3d5, 0xffd5d1d5, 0xffd3d1d2, 0xffd0d0d0, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecace, 0xffcecace, 0xffcecace, 0xffc8c9c8, - 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c6c8, 0xffc8c6c8, 0xffc8c6c8, 0xffc5c2c5, 0xffc0c4c0, - 0xffbabdba, 0xffbabdba, 0xffb5b6b5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xeea5a6a5, 0x44292829, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x22000400, 0x771e201e, 0x995a595a, 0x99525452, 0x995a5a5a, 0x99636163, 0x99636163, - 0x996b696b, 0x99656568, 0x99656568, 0x99656568, 0x99636563, 0x99636563, 0x99636563, 0x99636563, - 0x99686568, 0x99656565, 0x99656565, 0x99656565, 0x996b6765, 0x996b6765, 0x996b6868, 0x996b6765, - 0x996b676b, 0x996b686b, 0x996b676b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b696b, - 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, - 0x996e6f6e, 0x996b6d6b, 0x996b6d6b, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, - 0x99737173, 0x99737173, 0x99737173, 0x996e746e, 0x99737173, 0x99737373, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707173, 0x996e7173, 0x99707173, 0x99707173, - 0x99707070, 0x99707070, 0x996e6f6e, 0x99707070, 0x99736f6e, 0x99737070, 0x99736f6e, 0x99737070, - 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, 0x996b6d6b, - 0x996b6f6e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99686868, 0x99656765, 0x99656765, 0x99636563, - 0x99636463, 0x99636463, 0x99636263, 0x99636163, 0x99636163, 0x995d5c5d, 0x995d5c5d, 0x995a595a, - 0x99525552, 0x993f423f, 0x993f423f, 0x77191c19, 0x77000000, 0x66000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x88737173, 0xffbdbabd, 0xffbdbabd, 0xffc5c2c5, 0xffc5c2c5, - 0xffc5cac5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c9c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c9c5, 0xffc5cac5, 0xffc5c9c5, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, 0xffcecace, - 0xffcecace, 0xffcecace, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffd0d0d0, 0xffcecece, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d5d0, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, - 0xffd6d4d6, 0xffd6d3d6, 0xffd7d1d5, 0xffd5d1d4, 0xffd2d0d2, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, - 0xffd0d0d0, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffc5cac5, - 0xffc5c8c5, 0xffc5c8c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c2bd, - 0xffc0bdbd, 0xffc0bdbd, 0xffbdbabd, 0xffb5b6b5, 0xffadadad, 0xffa5a3a5, 0xff9c9a9c, 0x77585a58, - 0x00000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x33000400, 0x883c3d3c, 0x995a595a, 0x99525452, 0x99525452, 0x995a5a5a, 0x99636163, - 0x99656568, 0x99656568, 0x99656568, 0x99656568, 0x99636563, 0x99636463, 0x99636463, 0x99636463, - 0x99656565, 0x99656565, 0x99656565, 0x99656565, 0x996b6765, 0x996b6765, 0x996b6765, 0x996b6765, - 0x996b676b, 0x996b686b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6b6b, - 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 0x996b6b6b, 0x996b6d6b, 0x996b6c6b, - 0x996e6f6e, 0x996b6d6b, 0x99707070, 0x99737173, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x99707070, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737473, 0x99737373, 0x99737373, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737373, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707173, 0x99737173, 0x99737173, 0x99707173, - 0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x99737070, 0x99737070, 0x99737070, 0x99737070, - 0x996e6f6e, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99686868, 0x99656765, 0x99656765, 0x99656765, - 0x99636263, 0x99636263, 0x99636263, 0x99636163, 0x99605e60, 0x99605e60, 0x995d5c5d, 0x995a595a, - 0x99525552, 0x993f423f, 0x993f423f, 0x88191c19, 0x77030303, 0x66000000, 0x22000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xddadaaad, 0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, 0xffc5c2c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c9c5, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcbccc8, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, - 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, - 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, - 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, - 0xffd6d5d6, 0xffd6d4d6, 0xffd6d1d3, 0xffd1d1d1, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffd0d0d0, - 0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffcecace, 0xffc5cac5, - 0xffc5c8c5, 0xffc5c8c5, 0xffc5c8c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c4c5, 0xffc5c2bd, - 0xffc3c0bd, 0xffc0bdbd, 0xffbdbabd, 0xffb5b6b5, 0xffadadad, 0xffa5a3a5, 0xffa5a3a5, 0xaa585a58, - 0x11000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x44000400, 0x993c3d3c, 0x995a595a, 0x994a4d4a, 0x99525452, 0x995a5a5a, 0x99636163, - 0x99606165, 0x99606165, 0x99656568, 0x99656568, 0x99636563, 0x99636263, 0x99636263, 0x99636263, - 0x99686568, 0x99656565, 0x99656565, 0x99656565, 0x996b6765, 0x996b6563, 0x996b6765, 0x996b6868, - 0x996b686b, 0x996b686b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, - 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x99737173, 0x99707070, 0x99707070, 0x99707070, 0x99707070, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737573, 0x99737373, 0x99737573, - 0x99737373, 0x99737473, 0x99737373, 0x99737373, 0x99737373, 0x99737473, 0x99737173, 0x99737473, - 0x99737173, 0x99737473, 0x99737373, 0x99737373, 0x99737473, 0x99737373, 0x99737173, 0x99737173, - 0x99737373, 0x99737373, 0x99737473, 0x99737473, 0x99737173, 0x99737373, 0x99737373, 0x99737373, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707173, 0x99707173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99707070, 0x99707070, 0x99707070, 0x996e6f6e, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, - 0x996b7070, 0x996b6f6e, 0x996b6f6e, 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99656765, 0x99686868, 0x99656765, 0x99656765, - 0x99636463, 0x99636263, 0x99636263, 0x99636163, 0x99605e60, 0x995d5c5d, 0x995d5c5d, 0x995a595a, - 0x99525552, 0x99525552, 0x993f423f, 0x882c2f2c, 0x77050505, 0x66000000, 0x33000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0xffadaaad, 0xffb5b2b5, 0xffb5b2b5, 0xffbdbabd, 0xffc5c2c5, - 0xffc5c2c5, 0xffc5c2c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, - 0xffc5c8c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c5, 0xffc5c8c5, 0xffc5c6c5, 0xffc5c9c5, 0xffc5cac5, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcbccc8, 0xffcecace, 0xffcecdce, 0xffcecdce, 0xffcecece, - 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, - 0xffd6d4d3, 0xffd6d2d6, 0xffd6d4d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d7d6, - 0xffd6d4d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d7d6, - 0xffd6d4d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, - 0xffd6d5d6, 0xffd6d5d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffd3d1d3, - 0xffd3d1d3, 0xffd0d0d0, 0xffd0d0d0, 0xffced1d3, 0xffced0d0, 0xffced0d0, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffcecace, 0xffc5c9c5, - 0xffc5cac5, 0xffc5c8c5, 0xffc5c8c5, 0xffc5c6c5, 0xffc5c5c5, 0xffc5c4c5, 0xffc5c2c5, 0xffc5c2bd, - 0xffc0bdbd, 0xffc0bdbd, 0xffbdbabd, 0xffb5b6b5, 0xffadadad, 0xffa5a3a5, 0xffa5a3a5, 0xcc848684, - 0x22000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x55000400, 0x993c3d3c, 0x993c3d3c, 0x994a4d4a, 0x99525452, 0x995a5a5a, 0x995a5a5a, - 0x995a5d63, 0x99606165, 0x99606165, 0x99606165, 0x99636163, 0x99636263, 0x99636463, 0x99636263, - 0x99686568, 0x99656565, 0x99656565, 0x99656565, 0x996b6563, 0x996b6868, 0x996b6765, 0x996b6868, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, - 0x996b6c6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 0x996b6c6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x996e6f6e, 0x99707070, 0x99737173, 0x99707070, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99707370, 0x99707370, 0x99737173, 0x99707370, 0x99737373, 0x99737473, 0x99737173, 0x99737473, - 0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737373, 0x99737473, 0x99737373, 0x99737473, - 0x99737573, 0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x99737373, - 0x99737573, 0x99737373, 0x99737473, 0x99737473, 0x99737373, 0x99737573, 0x99737473, 0x99737473, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x99737173, 0x99737173, 0x99737173, 0x99707070, - 0x996b7070, 0x996b6f6e, 0x996b6f6e, 0x996b6f6e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, - 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99656765, 0x99686868, 0x99656765, - 0x99636463, 0x99636463, 0x99636263, 0x99636163, 0x99605e60, 0x99605e60, 0x995d5c5d, 0x995d5c5d, - 0x99525552, 0x99525552, 0x993f423f, 0x992c2f2c, 0x77080808, 0x77000000, 0x44000000, 0x00000000, - 0x00000000, 0x00000000, 0x443a393a, 0xffadaaad, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, - 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c6c5, 0xffc5c4c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c5, 0xffc5c6c5, 0xffc5cac5, 0xffc5c9c5, 0xffc5cac5, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffd0d0d0, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d4d3, 0xffd6d4d3, 0xffd6d2d6, 0xffd6d4d3, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d5, - 0xffd6d7d6, 0xffd6d5d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffced1d3, 0xffced0d0, 0xffced0d0, 0xffced0d0, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffceccce, 0xffc5cac5, - 0xffc5c9c5, 0xffc5cac5, 0xffc5c9c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c2bd, - 0xffc3c0bd, 0xffc0bdbd, 0xffc0bdbd, 0xffb5b6b5, 0xffadadad, 0xffa5a3a5, 0xffa5a3a5, 0xdd848684, - 0x222c2f2c, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x55161716, 0x99424542, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, 0x995a595a, - 0x995d5e5d, 0x995d5e5d, 0x99606060, 0x99606060, 0x99636263, 0x99636263, 0x99636263, 0x99636463, - 0x99636563, 0x99636563, 0x99656765, 0x99636563, 0x996b686b, 0x996b676b, 0x996b686b, 0x996b696b, - 0x996b696b, 0x996b6b6b, 0x996b696b, 0x996b696b, 0x996e6c6e, 0x996e6c6e, 0x996e6c6e, 0x99706f70, - 0x996b6d6b, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x99707070, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737373, 0x99737173, - 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737473, 0x99737473, 0x99737473, 0x99737373, 0x99737573, 0x99737473, 0x99737473, 0x99737373, - 0x99737373, 0x99737373, 0x99737473, 0x99737373, 0x99737373, 0x99737173, 0x99737173, 0x99737373, - 0x99737373, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, - 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b696b, 0x996b6868, 0x996b6765, 0x996b6765, - 0x99656465, 0x99656465, 0x99656465, 0x99636163, 0x99636163, 0x99605e60, 0x995d5c5d, 0x995a595a, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x770b0b0b, 0x77000000, 0x55000000, 0x00000000, - 0x00000000, 0x00000000, 0x44373737, 0xffa5a6a5, 0xffadaaad, 0xffb2b5b8, 0xffb5babd, 0xffb5babd, - 0xffbdc0c0, 0xffbdc0c0, 0xffbdc0c0, 0xffbdc2c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c5, 0xffc5c6c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecccb, - 0xffcecace, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, - 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd0d0d0, 0xffd3d1d3, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d9, 0xffd7d7d7, 0xffd8d7d8, 0xffd6d6d6, 0xffd7d6d6, - 0xffd5d8d9, 0xffd6d8d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, - 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d1d6, 0xffd6d1d6, 0xffd6d1d6, 0xffd6d1d6, 0xffd3d1d3, - 0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffceccce, 0xffcecccb, - 0xffcec9c8, 0xffcec9c8, 0xffcec9c8, 0xffcbc8cb, 0xffcbc8cb, 0xffc8c5c8, 0xffc8c5c8, 0xffc5c2c5, - 0xffc3c0c3, 0xffc0bdc0, 0xffbdbabd, 0xffb5bab5, 0xffafb2af, 0xffaaaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x44343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x55161716, 0x99424542, 0x99424542, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, - 0x995a5d5a, 0x995d5e5d, 0x99636163, 0x99606060, 0x99636263, 0x99636263, 0x99636263, 0x99636463, - 0x99636563, 0x99636563, 0x99636563, 0x99656765, 0x996b676b, 0x996b686b, 0x996b686b, 0x996b696b, - 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996e6c6e, 0x996e6c6e, 0x99706f70, 0x99706f70, - 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, - 0x99737373, 0x99737373, 0x99737573, 0x99737473, 0x99737473, 0x99737573, 0x99737473, 0x99737473, - 0x99737573, 0x99737573, 0x99767776, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99767776, - 0x99767776, 0x997b797b, 0x99797879, 0x99767776, 0x99737776, 0x99737776, 0x99737776, 0x99737776, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737473, 0x99737473, 0x99737573, 0x99737573, 0x99737473, 0x99737473, 0x99737473, - 0x99737573, 0x99737573, 0x99737473, 0x99737573, 0x99737473, 0x99737473, 0x99737373, 0x99737473, - 0x99737373, 0x99737473, 0x99737473, 0x99737173, 0x99737373, 0x99737373, 0x99737173, 0x99737173, - 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, - 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6765, - 0x99686768, 0x99656465, 0x99656465, 0x99656465, 0x99636163, 0x99605e60, 0x995d5c5d, 0x995a595a, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101010, 0x77000000, 0x55000000, 0x11000000, - 0x00000000, 0x00000000, 0x55373737, 0xffa5a6a5, 0xffadaaad, 0xffafafb2, 0xffb2b5b8, 0xffb5babd, - 0xffbdbebd, 0xffbdc0c0, 0xffbdc2c5, 0xffbdc1c3, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c5c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c9c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecccb, - 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffced0d0, - 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, - 0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d5d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd9d8d9, 0xffd6d7d6, 0xffd6d7d6, 0xffd9d8d6, 0xffdbd9d6, 0xffd9d8d6, - 0xffd6d7d6, 0xffd6dbde, 0xffd6d9db, 0xffd7d9dc, 0xffd9d9d9, 0xffdbd8dc, 0xffdcd8dd, 0xffd9d7da, - 0xffd5d7da, 0xffd5d7d6, 0xffd5d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d5d6, - 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d1d6, 0xffd0d0d0, - 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecccb, - 0xffcecccb, 0xffcecccb, 0xffcec9c8, 0xffcbc8cb, 0xffc8c5c8, 0xffc8c5c8, 0xffc8c5c8, 0xffc5c2c5, - 0xffc3c0c3, 0xffc0bdc0, 0xffbdbabd, 0xffb5bab5, 0xffafb2af, 0xffaaaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x55343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x66161716, 0x99424542, 0x99424542, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, - 0x995a5d5a, 0x995d5e5d, 0x995d5e5d, 0x99636163, 0x99636163, 0x99636263, 0x99636463, 0x99636463, - 0x99636563, 0x99656765, 0x99656765, 0x99656765, 0x996b686b, 0x996b676b, 0x996b686b, 0x996b696b, - 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996e6c6e, 0x99706f70, 0x99737173, 0x99706f70, - 0x996e6f6e, 0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x99737173, 0x99737173, - 0x99737473, 0x99737573, 0x99737373, 0x99737473, 0x99737373, 0x99737373, 0x99737473, 0x99737573, - 0x99737473, 0x99737473, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99767776, 0x997b797b, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x997b797b, - 0x99797879, 0x99767776, 0x99767776, 0x99767776, 0x99737776, 0x99737776, 0x99737776, 0x99737776, - 0x99737773, 0x99737573, 0x99737773, 0x99737773, 0x99767773, 0x99767773, 0x99767773, 0x99767773, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737373, 0x99737573, 0x99737373, 0x99737573, 0x99737373, 0x99737473, 0x99737373, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, - 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b6b6b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6868, - 0x99686768, 0x99686768, 0x99656465, 0x99656465, 0x99636163, 0x99605e60, 0x995d5c5d, 0x995d5c5d, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101010, 0x77000000, 0x55000000, 0x11000000, - 0x00000000, 0x00000000, 0x66373737, 0xffa5a6a5, 0xffadaaad, 0xffafafb2, 0xffb5babd, 0xffb5babd, - 0xffbdbebd, 0xffbdc0c0, 0xffbdc0c0, 0xffbdc2c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c9c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecccb, - 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffced1d3, 0xffced0d0, - 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, - 0xffd9d8d9, 0xffdbd9db, 0xffd9d8d9, 0xffdbd9db, 0xffdbd9d6, 0xffdbd9d6, 0xffdbd9d6, 0xffdedbd6, - 0xffd6d9db, 0xffd6d8d9, 0xffd6d9db, 0xffd7d8dc, 0xffd9dadb, 0xffdbdadc, 0xffdcd8dc, 0xffdcd8dc, - 0xffdcd7dc, 0xffdad7da, 0xffd8d8d7, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, - 0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd3d1d3, - 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecccb, - 0xffcecccb, 0xffcecccb, 0xffcec9c8, 0xffcecace, 0xffcbc8cb, 0xffcbc8cb, 0xffc8c5c8, 0xffc5c2c5, - 0xffc5c2c5, 0xffc0bdc0, 0xffc0bdc0, 0xffb5bab5, 0xffafb2af, 0xffaaaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x55343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x66161716, 0x99424542, 0x99424542, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, - 0x995a5d5a, 0x995d5e5d, 0x995d5e5d, 0x99606060, 0x99636163, 0x99636263, 0x99636263, 0x99636463, - 0x99636563, 0x99656765, 0x99686868, 0x99686868, 0x996b686b, 0x996b686b, 0x996b696b, 0x996b696b, - 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x99706f70, 0x99706f70, 0x99706f70, 0x99706f70, - 0x99707070, 0x99707070, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737473, 0x99737573, 0x99737473, 0x99737373, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99797879, 0x997b797b, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99797879, 0x99767776, - 0x99767776, 0x99767776, 0x99767776, 0x997b797b, 0x99737776, 0x99737879, 0x99737776, 0x99737776, - 0x99737973, 0x99737773, 0x99737973, 0x99737973, 0x997b7973, 0x99767773, 0x99767773, 0x997b7973, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737573, 0x99737473, 0x99737573, 0x99737473, 0x99737573, 0x99737573, 0x99737373, 0x99737373, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, - 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, - 0x99686768, 0x99686768, 0x99656465, 0x99656465, 0x99636163, 0x99636163, 0x995d5c5d, 0x995d5c5d, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101010, 0x77000000, 0x66000000, 0x11000000, - 0x00000000, 0x00000000, 0x776e6f6e, 0xffa5a6a5, 0xffadaaad, 0xffafafb2, 0xffb2b5b8, 0xffb5babd, - 0xffbdbebd, 0xffbdc0c0, 0xffbdc0c0, 0xffbdc1c3, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c5c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c8c5, 0xffc5cac5, 0xffc5cac5, 0xffcecace, 0xffcecace, 0xffcecccb, 0xffcecccb, - 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffced0d0, 0xffced1d3, 0xffced1d3, - 0xffd3d1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d8d6, - 0xffdbd9db, 0xffdedbde, 0xffdbd9db, 0xffdbd9db, 0xffdbd9d6, 0xffdbd9d6, 0xffdedbd6, 0xffdbd9d6, - 0xffd6d9db, 0xffd6d9db, 0xffd6dadb, 0xffd7dade, 0xffdadbdb, 0xffdbdadc, 0xffdbd8dc, 0xffdcd8dc, - 0xffdcdadc, 0xffd9dad9, 0xffd7d8d7, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, - 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecccb, - 0xffcecccb, 0xffcecccb, 0xffcecccb, 0xffcecace, 0xffcbc8cb, 0xffcbc8cb, 0xffc8c5c8, 0xffc5c2c5, - 0xffc5c2c5, 0xffc0bdc0, 0xffc0bdc0, 0xffb5bab5, 0xffafb2af, 0xffaaaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x66343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x995a595a, 0x995a595a, - 0x995d5c5d, 0x99605e60, 0x99605e60, 0x99605e60, 0x99636163, 0x99636263, 0x99636463, 0x99636563, - 0x996b656b, 0x996b676b, 0x996b686b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6b6b, - 0x996e6c6b, 0x996e6c6b, 0x99706f6b, 0x996e6c6b, 0x996e7070, 0x996e7070, 0x99686f6e, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737473, 0x99737473, 0x99737473, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99767876, 0x99767876, 0x99767876, 0x99767876, - 0x997b7979, 0x997b7d7b, 0x997b7576, 0x997b7979, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99767876, 0x99797b79, 0x99767876, 0x99767876, - 0x997b787b, 0x997b787b, 0x997b787b, 0x997b787b, 0x99767876, 0x99767876, 0x99767876, 0x99767876, - 0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99737776, 0x99737573, 0x99737573, 0x99737573, - 0x99737473, 0x99737373, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b696b, - 0x99656865, 0x99656865, 0x99636563, 0x99636563, 0x99606160, 0x99606160, 0x995d5d5d, 0x995d5d5d, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101410, 0x77000000, 0x66000000, 0x11000000, - 0x00000000, 0x00000000, 0x77686968, 0xff9c9e9c, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffb5b7b5, - 0xffbdbebd, 0xffc0c0c0, 0xffc3c1c3, 0xffc3c1c3, 0xffc5c2c5, 0xffc8c5c5, 0xffc8c5c5, 0xffcbc8c5, - 0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, - 0xffcecece, 0xffcecece, 0xffd0d0d0, 0xffcecece, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd3d4d3, - 0xffd6d4d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d8d6, - 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6dbd6, 0xffd6dbd6, 0xffd9dcd9, 0xffd6dbd6, - 0xffdedbde, 0xffdeddde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedcde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedade, 0xffdcdcdd, 0xffdbdbdc, 0xffdbdbdc, 0xffdbdbdc, 0xffdcdadc, - 0xffdcdadd, 0xffdcdadc, 0xffd9d9d9, 0xffd8d9db, 0xffd9d8d9, 0xffdbd9db, 0xffd9d8d9, 0xffd6d9d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, - 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecdd0, 0xffceccd3, 0xffcbcccb, 0xffc8c9c8, 0xffc8c9c8, 0xffc5c6c5, 0xffc5c6c5, - 0xffc3c2c3, 0xffc0bec0, 0xffc0bec0, 0xffbdbab5, 0xffb5b2af, 0xffadaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x66343734, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, - 0x995d5c5d, 0x99605e60, 0x99605e60, 0x99636163, 0x99636263, 0x99636263, 0x99636563, 0x99636563, - 0x996b676b, 0x996b686b, 0x996b676b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, - 0x99706f6b, 0x996e6c6b, 0x99706f6b, 0x99706f6b, 0x996e7070, 0x996e7070, 0x996e7070, 0x996e7070, - 0x99737173, 0x99737373, 0x99737173, 0x99737473, 0x99737373, 0x99737373, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99767876, 0x99767876, 0x99767876, 0x99797b79, - 0x997b7979, 0x997b7979, 0x997b7979, 0x997b7979, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b7b7b, - 0x997b797b, 0x997b797b, 0x997b7b7b, 0x997b7c7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99797b79, - 0x997b787b, 0x997b787b, 0x997b787b, 0x997b787b, 0x99797b79, 0x99767876, 0x99767876, 0x99797b79, - 0x99797b79, 0x99767876, 0x99767876, 0x99767876, 0x997b797b, 0x99797879, 0x997b797b, 0x99797879, - 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99737776, 0x99737776, 0x99737776, 0x99737573, - 0x99737573, 0x99737573, 0x99737473, 0x99737373, 0x99737173, 0x99737373, 0x99737173, 0x99737173, - 0x99707070, 0x99737173, 0x99707070, 0x996e6f6e, 0x996b6c6b, 0x996b6d6b, 0x996b6c6b, 0x996b6b6b, - 0x99686b68, 0x99656865, 0x99656865, 0x99636563, 0x99636563, 0x99606160, 0x99606160, 0x995a595a, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101410, 0x77000000, 0x66000000, 0x11000000, - 0x00000000, 0x00000000, 0x88686968, 0xff9c9e9c, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffb5b7b5, - 0xffbdbebd, 0xffc0c0c0, 0xffc0c0c0, 0xffc5c2c5, 0xffc8c5c5, 0xffc8c5c5, 0xffcbc8c5, 0xffcbc8c5, - 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, - 0xffd0d0d0, 0xffcecece, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, - 0xffd6d2d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, - 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6dbd6, 0xffd9dcd9, 0xffd9dcd9, 0xffd9dcd9, - 0xffdedbde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedbde, 0xffdeddde, - 0xffdedcde, 0xffdedcde, 0xffdddddd, 0xffdbdddd, 0xffdbdddc, 0xffdbdddc, 0xffdddbdd, 0xffdedbde, - 0xffdfdbdf, 0xffe0dbdf, 0xffdcdadc, 0xffd7dadc, 0xffd8d9d9, 0xffdad9da, 0xffdbd9db, 0xffd6d9d6, - 0xffd6d9d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, - 0xffd6d5d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd0d0d0, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecdd0, 0xffcbcccb, 0xffcbcccb, 0xffc8c9c8, 0xffc5c6c5, 0xffc5c6c5, - 0xffc3c2c3, 0xffc3c2c3, 0xffbdbabd, 0xffbdbab5, 0xffb5b2af, 0xffadaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x66343734, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x77161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, - 0x995d5c5d, 0x99605e60, 0x99636163, 0x99636163, 0x99636463, 0x99636563, 0x99636563, 0x99636563, - 0x996b676b, 0x996b676b, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, - 0x99706f6b, 0x99706f6b, 0x99706f6b, 0x99706f6b, 0x996e7070, 0x996e7070, 0x99737173, 0x99737173, - 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737473, 0x99737473, 0x99737573, 0x99737573, - 0x99737573, 0x99737573, 0x99737773, 0x99737773, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99767876, 0x99797b79, 0x99797b79, 0x99797b79, - 0x997b7979, 0x997b7979, 0x997b7979, 0x997b7979, 0x997b797b, 0x997b7c7b, 0x997b7c7b, 0x997b7b7b, - 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x997b7c7b, 0x997b7b7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, - 0x997e7c7b, 0x997e7c7b, 0x99817f7b, 0x997e7c7b, 0x99797b79, 0x99797b79, 0x997b7d7b, 0x997b7d7b, - 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99797b79, - 0x99797b79, 0x99767876, 0x99797b79, 0x99797b79, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x99767776, 0x99737776, 0x99737776, 0x99737776, 0x99737776, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737473, 0x99737173, 0x99737173, - 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, - 0x99686b68, 0x99656865, 0x99656865, 0x99656865, 0x99636563, 0x99606160, 0x995d5d5d, 0x995d5d5d, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101410, 0x77000000, 0x66000000, 0x11000000, - 0x00000000, 0x00000000, 0x99686968, 0xff9c9e9c, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, - 0xffbdbebd, 0xffc0c0c0, 0xffc5c2c5, 0xffc5c2c5, 0xffc8c5c5, 0xffcbc8c5, 0xffcbc8c5, 0xffcbc8c5, - 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, - 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d1d0, 0xffd0d1d0, 0xffd3d4d3, 0xffd3d4d3, - 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, - 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffd9dcd9, 0xffd9dcd9, 0xffd9dcd9, 0xffdbdddb, - 0xffdedcde, 0xffdeddde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedfde, 0xffdedfde, 0xffdeddde, - 0xffdeddde, 0xffdeddde, 0xffe1dee1, 0xffdfdedf, 0xffdddfdd, 0xffdddddc, 0xffdddcdd, 0xffdddfe0, - 0xffdfdedf, 0xffdfdcdf, 0xffdfdcdf, 0xffdfdbdf, 0xffdfdbde, 0xffdfdbdf, 0xffdcd9dc, 0xffd6d9d6, - 0xffd6d9d6, 0xffd6d9d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d5d6, - 0xffd6d7d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd3d1d3, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecdd0, 0xffcbcccb, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffc5c6c5, - 0xffc3c2c3, 0xffc3c2c3, 0xffc0bec0, 0xffbdbab5, 0xffb5b2af, 0xffadaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x66343734, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x77161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x995a595a, 0x995a595a, - 0x99605e60, 0x99605e60, 0x99636163, 0x99636163, 0x99636563, 0x99636563, 0x99636563, 0x99636563, - 0x996b676b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b6c6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, - 0x99706f6b, 0x99706f6b, 0x99706f6b, 0x9973716b, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99737173, 0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x99737573, 0x99737573, 0x99737573, - 0x99737773, 0x99737773, 0x99737773, 0x99737973, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99797b79, 0x99797b79, 0x99797b79, 0x997b7d7b, - 0x997b7979, 0x997b7d7b, 0x997b7979, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 0x997b7c7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997e7c7b, 0x99817f7b, 0x99817f7b, 0x997e7c7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99797b79, - 0x997b7d7b, 0x997b7b7b, 0x997b7d7b, 0x997b7b7b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99797b79, - 0x997b7d7b, 0x99797b79, 0x997b7d7b, 0x99797b79, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x9973797b, 0x99737776, 0x99737776, 0x99737776, - 0x99737573, 0x99737573, 0x99737573, 0x99737473, 0x99737573, 0x99737473, 0x99737373, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, - 0x996b6d6b, 0x99686b68, 0x99656865, 0x99656865, 0x99636563, 0x99606160, 0x99606160, 0x995d5d5d, - 0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101410, 0x77000000, 0x66000000, 0x11000000, - 0x00000000, 0x00000000, 0x88686968, 0xff9c9e9c, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, - 0xffc0c0c0, 0xffc0c0c0, 0xffc3c1c3, 0xffc5c2c5, 0xffc8c5c5, 0xffcbc8c5, 0xffcbc8c5, 0xffcbc8c5, - 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, 0xffcecece, 0xffcecdce, 0xffcecece, 0xffcecece, - 0xffd0d0d0, 0xffd3d1d3, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, - 0xffd6d4d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, - 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffd9dcd9, 0xffd9dcd9, 0xffdbdddb, 0xffdedfde, - 0xffdeddde, 0xffdedfde, 0xffdeddde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdfdee0, 0xffe1dfe1, 0xffe2dfe2, 0xffe2dfe2, 0xffe4dfe4, 0xffe2dee1, 0xffdddee2, - 0xffdedddf, 0xffdedcdf, 0xffdedcdf, 0xffdfdedf, 0xffdfdede, 0xffdedede, 0xffdedbde, 0xffd5dbd5, - 0xffd6d9d6, 0xffd6d9d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d5d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecdd0, 0xffcecece, 0xffcbcccb, 0xffcbcccb, 0xffc8c9c8, 0xffc5c6c5, - 0xffc3c2c3, 0xffc3c2c3, 0xffc0bec0, 0xffbdbab5, 0xffb5b2af, 0xffadaaaa, 0xffa5a2a5, 0xff9c9e9c, - 0x66343734, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, - 0x995a5d5a, 0x995d605d, 0x99606260, 0x99606260, 0x99656465, 0x99686768, 0x99686768, 0x99686768, - 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 0x996e6f6e, 0x996b6d6b, 0x996e6f6e, - 0x99737173, 0x996e6f73, 0x99707073, 0x99707073, 0x99737373, 0x99737173, 0x99737473, 0x99737473, - 0x99737573, 0x99737573, 0x99737776, 0x99737776, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x997b7876, 0x997b7876, 0x997b7876, 0x997b7876, 0x997b797b, 0x997b797b, 0x997b7b7b, 0x997b797b, - 0x997b7d7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, - 0x997e807e, 0x99818381, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7c7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99797b79, 0x99767876, 0x99767876, 0x99767876, - 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737373, - 0x99737373, 0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, - 0x996b6c6b, 0x996b6b6b, 0x996b696b, 0x996b696b, 0x99636563, 0x99606160, 0x995d5d5d, 0x995d5d5d, - 0x995a5552, 0x99524e4d, 0x99424142, 0x99424142, 0x77101010, 0x77000000, 0x66000000, 0x11000000, - 0x00000400, 0x00000400, 0x886e6d6e, 0xffa5a2a5, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, - 0xffc0c1c0, 0xffc0c1c0, 0xffc3c4c3, 0xffc3c4c3, 0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, - 0xffcecace, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, - 0xffd0d1d6, 0xffd0d1d6, 0xffd0d1d6, 0xffd0d1d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, - 0xffdedbd6, 0xffdedbd6, 0xffdedcd9, 0xffdedcd9, 0xffdedcde, 0xffdedbde, 0xffdeddde, 0xffdedcde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffe1e0e1, 0xffe6e3e6, 0xffe1e0e1, 0xffdedfde, 0xffdedfde, 0xffe1e1e1, 0xffe1e1e1, 0xffdddfdd, - 0xffe1dfe1, 0xffe3e0e3, 0xffe4e1e4, 0xffe3e0e3, 0xffe4e1e4, 0xffe4dfe4, 0xffe5dfe4, 0xffe5dee5, - 0xffe6dfe5, 0xffe6dfe5, 0xffe4dfe3, 0xffe0dee0, 0xffdfdedf, 0xffdfdede, 0xffdededf, 0xffdedcdb, - 0xffdedcdb, 0xffdedcdb, 0xffdedbde, 0xffd9d8d9, 0xffdbd9db, 0xffd9d8d9, 0xffd9d8d9, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd0d1d0, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffc5c6c5, - 0xffc5c6c5, 0xffc0c1c0, 0xffbdbebd, 0xffb5b6b5, 0xffafafaf, 0xffaaa9aa, 0xffa5a2a5, 0xff9c9a9c, - 0x55343334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, - 0x995a5d5a, 0x995d605d, 0x99606260, 0x99636563, 0x99656465, 0x99656465, 0x99686768, 0x996b696b, - 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x99737173, 0x99707070, 0x99707070, 0x99737173, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737373, 0x99737473, 0x99737473, - 0x99737573, 0x99737573, 0x99737776, 0x99737879, 0x99797879, 0x99767776, 0x99767776, 0x99767776, - 0x997b7b79, 0x997b7876, 0x997b7876, 0x997b7876, 0x997b797b, 0x997b797b, 0x997b7c7b, 0x997b7c7b, - 0x997b797b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99817f81, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, - 0x997e807e, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997e7f7e, 0x997e7f7e, 0x99818081, 0x997e7f7e, - 0x99818081, 0x99818081, 0x99848284, 0x99848284, 0x997e807e, 0x997e807e, 0x997e807e, 0x997e807e, - 0x99818081, 0x997e7f7e, 0x997e7f7e, 0x99818081, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, - 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997e807e, 0x997e807e, 0x997e807e, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7c7b, 0x997b7b7b, 0x997b797b, 0x997b7b7b, 0x99797b79, 0x99797b79, 0x99767876, 0x99767876, - 0x99797879, 0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737473, 0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, - 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b696b, 0x99636563, 0x99636563, 0x99606160, 0x995d5d5d, - 0x995a5552, 0x99524e4d, 0x994a4847, 0x99424142, 0x77101010, 0x77000000, 0x66000000, 0x11000000, - 0x00000400, 0x00000400, 0x776e6d6e, 0xffa5a2a5, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, - 0xffc0c1c0, 0xffc0c1c0, 0xffc3c4c3, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc8c9c8, 0xffcbcccb, - 0xffceccce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffced1d3, 0xffced1d3, 0xffced1d3, 0xffced2d6, - 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6dbd6, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, - 0xffdedcd9, 0xffdedcd9, 0xffdedcd9, 0xffdedcd9, 0xffdedcde, 0xffdedcde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdee0de, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffe4e1e4, 0xffe4e1e4, 0xffe1e0e1, 0xffe1e0e1, 0xffe1e1e1, 0xffe1e1e1, 0xffe4e4e4, 0xffe0e0e0, - 0xffe3e0e3, 0xffe3e0e3, 0xffe4e1e4, 0xffe5e2e5, 0xffe4e1e4, 0xffe4dfe4, 0xffe5e0e5, 0xffe5e2e5, - 0xffe6e2e5, 0xffe6e2e5, 0xffe6dfe6, 0xffe0dedf, 0xffdfdedf, 0xffdfdedf, 0xffdfdede, 0xffdfdcdd, - 0xffdedcdb, 0xffdedcdb, 0xffdedbde, 0xffdedbde, 0xffdbd9db, 0xffd9d8d9, 0xffd9d8d9, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd0d1d0, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffc5c6c5, - 0xffc5c6c5, 0xffc0c1c0, 0xffbdbebd, 0xffb5b6b5, 0xffafafaf, 0xffaaa9aa, 0xffa5a2a5, 0xff9c9a9c, - 0x55343334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x995a595a, 0x995a595a, - 0x995d605d, 0x99606260, 0x99606260, 0x99606260, 0x99656465, 0x99686768, 0x99686768, 0x996b696b, - 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b6c6b, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x99707070, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737573, 0x99737573, 0x99737573, - 0x99737776, 0x99737776, 0x99737776, 0x9973797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b7b79, 0x997b7b79, 0x997b7b79, 0x997b7d7b, 0x997b7b7b, 0x997b7b7b, 0x997b7c7b, 0x997b7c7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99817f81, 0x99817f81, 0x99817f81, 0x99817f81, - 0x997b7d7b, 0x997e807e, 0x997e807e, 0x997e807e, 0x99818081, 0x99818081, 0x99818081, 0x997e7f7e, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99818381, 0x997e807e, 0x99818381, 0x997e807e, - 0x99848284, 0x99818081, 0x99818081, 0x99818081, 0x99848284, 0x997e7f7e, 0x99818081, 0x99818081, - 0x99818081, 0x997e7f7e, 0x99818081, 0x99818081, 0x997e807e, 0x997e807e, 0x997e807e, 0x997e807e, - 0x997e807e, 0x997e807e, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 0x997b7c7b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99797b79, - 0x99797879, 0x99767776, 0x99797879, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737473, 0x99737473, 0x99737373, 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, - 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b696b, 0x99636563, 0x99636563, 0x995d5d5d, 0x995d5d5d, - 0x995a5552, 0x99524e4d, 0x99424142, 0x99424142, 0x77101010, 0x77000000, 0x66000000, 0x11000000, - 0x00000400, 0x00000400, 0x66373937, 0xffa5a2a5, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, - 0xffc0c1c0, 0xffc3c4c3, 0xffc3c4c3, 0xffc5c6c5, 0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, - 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecece, 0xffced0d0, 0xffced0d0, 0xffced1d3, 0xffced1d3, - 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd6d5d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, - 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6dbd6, 0xffd9d9d9, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, - 0xffdedcd9, 0xffdedddb, 0xffdedcd9, 0xffdedfde, 0xffdeddde, 0xffdeddde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdee1de, 0xffdee1de, 0xffdee0de, 0xffdee1de, - 0xffe1e0e1, 0xffe6e3e6, 0xffe6e3e6, 0xffe4e1e4, 0xffe4e4e4, 0xffe3e3e4, 0xffe3e3e3, 0xffe2e3e2, - 0xffe3e3e3, 0xffe4e2e4, 0xffe4e2e4, 0xffe4e2e4, 0xffe5e2e5, 0xffe5e3e5, 0xffe5e2e5, 0xffe5e2e5, - 0xffe5e2e5, 0xffe6e2e5, 0xffe6e3e5, 0xffe3e0e3, 0xffe0dfe0, 0xffe0dfdf, 0xffe0dfdf, 0xffe0dede, - 0xffdfdddd, 0xffdedcdb, 0xffdedcdb, 0xffdedbde, 0xffdbd9db, 0xffdedbde, 0xffdbd9db, 0xffd6d9d6, - 0xffd6d8d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd3d4d3, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffc5c6c5, - 0xffc5c6c5, 0xffc0c1c0, 0xffbdbebd, 0xffb5b6b5, 0xffafafaf, 0xffa5a2a5, 0xffa5a2a5, 0xff9c9a9c, - 0x55343334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, - 0x995a5d5a, 0x995d605d, 0x99606260, 0x99606260, 0x99686768, 0x99656465, 0x99686768, 0x996b696b, - 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6d6b, 0x996e6f6e, 0x99707070, 0x99737173, 0x99707070, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737776, 0x99737776, 0x99737776, 0x99737776, 0x99797879, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b7b79, 0x997b7b79, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b827b, 0x99817f81, 0x99817f81, 0x99817f81, 0x99848284, - 0x99818381, 0x99818381, 0x997e807e, 0x99818381, 0x99848284, 0x99848284, 0x99848284, 0x99848284, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99818381, 0x99818381, 0x99818381, 0x99818381, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848684, 0x99818381, 0x99848684, 0x99818381, - 0x99848684, 0x997e807e, 0x997e807e, 0x997e807e, 0x997b7f7b, 0x997b827b, 0x997b7f7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 0x99797b79, 0x997b7d7b, 0x99797b79, 0x99767876, - 0x997b797b, 0x997b797b, 0x99797879, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x99737473, 0x99737473, 0x99737473, 0x99737373, 0x99737173, 0x99737173, 0x99707070, 0x99707070, - 0x996b6d6b, 0x996b6c6b, 0x996b6b6b, 0x996b696b, 0x99636563, 0x99606160, 0x995d5d5d, 0x995a595a, - 0x995a5552, 0x99524e4d, 0x99424142, 0x99424142, 0x77101010, 0x77000000, 0x55000000, 0x11000000, - 0x00000400, 0x00000400, 0x66373937, 0xffa5a2a5, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, - 0xffc0c1c0, 0xffc0c1c0, 0xffc3c4c3, 0xffc5c6c5, 0xffc8c9c8, 0xffc5c6c5, 0xffc8c9c8, 0xffcbcccb, - 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffced1d3, 0xffced2d6, 0xffced2d6, - 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, - 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, - 0xffdedddb, 0xffdedddb, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdee0de, 0xffdee1de, 0xffdee0de, 0xffdee3de, 0xffdee1de, 0xffdee1de, 0xffdee1de, 0xffdee3de, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe3e4e3, 0xffe3e4e3, 0xffe2e4e2, 0xffe3e4e3, - 0xffe4e4e3, 0xffe4e3e4, 0xffe4e3e4, 0xffe4e4e5, 0xffe5e5e4, 0xffe5e3e5, 0xffe5e3e5, 0xffe5e2e5, - 0xffe6e2e5, 0xffe6e3e5, 0xffe6e3e5, 0xffe6e1e5, 0xffe3e0e3, 0xffe2dfe2, 0xffe0dfdf, 0xffe0dedf, - 0xffe0dfdc, 0xffdedcdc, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdbd9db, 0xffd6d9d6, - 0xffd6d9d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd3d4d3, - 0xffd3d4d3, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffc5c6c5, - 0xffc5c6c5, 0xffc0c1c0, 0xffbdbebd, 0xffb5b6b5, 0xffafafaf, 0xffaaa9aa, 0xffa5a2a5, 0xff9c9a9c, - 0x55343334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x66161616, 0x99424142, 0x99424142, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, - 0x995d5d5d, 0x99606160, 0x99606160, 0x99636563, 0x99656765, 0x99656765, 0x996b696b, 0x996b696b, - 0x996b6b6b, 0x996b6b6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d73, 0x996e7073, 0x99707373, 0x996e7073, - 0x99737373, 0x99737373, 0x99737473, 0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x99767776, 0x99767776, 0x997b797b, 0x99797879, 0x997b797b, 0x997b797b, 0x997b7b7b, 0x997b7b7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997e807e, 0x997b7d7b, 0x997e807e, - 0x997e8084, 0x997e8084, 0x997e8084, 0x997e8084, 0x99848284, 0x99848284, 0x99848284, 0x99848384, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848384, 0x99848484, 0x99848484, - 0x99898484, 0x99898484, 0x99898484, 0x99898484, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99898789, 0x99868486, 0x99868486, 0x99868486, 0x99868486, 0x99868486, 0x99848284, 0x99868486, - 0x99848484, 0x99848384, 0x99848384, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848384, - 0x99848384, 0x99848384, 0x99848284, 0x99848284, 0x99818081, 0x997e7f7e, 0x997e7f7e, 0x99818081, - 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 0x997b7b7b, 0x997b7c7b, - 0x997b7b7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99767876, 0x99767876, 0x99767876, 0x99737573, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737073, 0x99736d73, - 0x99737173, 0x99706d6e, 0x996e6968, 0x996e6968, 0x99636563, 0x99606060, 0x99606060, 0x995d5a5d, - 0x99525152, 0x99525152, 0x99454345, 0x99454345, 0x77080c08, 0x77000000, 0x55000000, 0x11000000, - 0x00000000, 0x00000000, 0x66373637, 0xffa5a2a5, 0xffadaaad, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, - 0xffc0bec0, 0xffc3c2c3, 0xffc3c2c3, 0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffd0ced0, 0xffd0ced0, 0xffd3d2d3, 0xffd3d2d3, 0xffd3d2d3, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedcde, 0xffdedcde, 0xffdeddde, 0xffdeddde, - 0xffdedfde, 0xffdedfde, 0xffdee0e1, 0xffdedfde, 0xffdedfde, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e1e1, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e5e6, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe5e3e5, 0xffe4e5e4, 0xffe3e5e3, 0xffe4e5e3, - 0xffe4e6e4, 0xffe5e5e4, 0xffe5e6e5, 0xffe5e7e5, 0xffe5e6e4, 0xffe6e6e5, 0xffe6e6e6, 0xffe6e4e6, - 0xffe6e4e6, 0xffe6e4e6, 0xffe6e4e6, 0xffe6e3e5, 0xffe6e3e5, 0xffe6e1e5, 0xffe5e2e4, 0xffdfdfde, - 0xffdfe1df, 0xffdfdede, 0xffdedfde, 0xffdeddde, 0xffdedcde, 0xffdedcde, 0xffdedbde, 0xffd9d9d9, - 0xffdbdcdb, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d6, - 0xffd6d4d6, 0xffd6d1d6, 0xffd6d1d6, 0xffced2d6, 0xffceced0, 0xffceced0, 0xffcecacb, 0xffc5c6c5, - 0xffc3c2c3, 0xffc3c2c3, 0xffc0bec0, 0xffb5b2b5, 0xffadabad, 0xffa5a5a5, 0xff9c9e9c, 0xff8c8e8c, - 0x442f322f, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x55000000, 0x99424142, 0x99424142, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, - 0x995d5d5d, 0x995d5d5d, 0x99606160, 0x99636563, 0x99636563, 0x99656765, 0x99686868, 0x996b696b, - 0x996b6b6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996e7073, 0x996e7073, 0x996e7073, 0x99707373, - 0x99737473, 0x99737473, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99767776, - 0x997b797b, 0x99767776, 0x997b797b, 0x997b797b, 0x997b7b7b, 0x997b7b7b, 0x997b7c7b, 0x997b7c7b, - 0x997e7f7e, 0x997b7d7b, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997e807e, 0x997e807e, 0x99818381, - 0x997e8084, 0x997e8084, 0x99818384, 0x99818384, 0x99848384, 0x99848384, 0x99848384, 0x99848484, - 0x99868686, 0x99898a89, 0x99848284, 0x99868686, 0x99848684, 0x99848684, 0x99848684, 0x99848484, - 0x99898484, 0x99898484, 0x99898484, 0x99868784, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99898789, 0x99898789, 0x99868486, 0x99898789, 0x99898789, 0x99868486, 0x99868486, 0x99868486, - 0x99848684, 0x99848684, 0x99848484, 0x99848484, 0x99848484, 0x99848384, 0x99848484, 0x99848384, - 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99818081, 0x99818081, 0x99818081, - 0x99818081, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, - 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x997b797b, 0x99767876, 0x99767876, 0x99767876, 0x99767876, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737373, 0x99737073, - 0x99706d6e, 0x99706d6e, 0x996e6968, 0x996e6968, 0x99636563, 0x99606060, 0x99606060, 0x995d5a5d, - 0x99525152, 0x99525152, 0x99454345, 0x99373637, 0x77050805, 0x77000000, 0x55000000, 0x00000000, - 0x00000000, 0x00000000, 0x33373637, 0xffa5a2a5, 0xffa5a2a5, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, - 0xffc0bec0, 0xffc3c2c3, 0xffc3c2c3, 0xffc5c6c5, 0xffc5c6c5, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, - 0xffcecece, 0xffcecece, 0xffd0ced0, 0xffd3ced3, 0xffd3d2d3, 0xffd3d2d3, 0xffd3d2d3, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedcde, 0xffdeddde, 0xffdeddde, 0xffdedfde, 0xffdedfde, - 0xffdee0e1, 0xffdedfde, 0xffdee0e1, 0xffdee0e1, 0xffe1e1e1, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e4e6, 0xffe6e4e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, - 0xffe6e5e6, 0xffe6e8e6, 0xffe6e5e6, 0xffe6e8e6, 0xffe5e8e5, 0xffe4e7e4, 0xffe3e7e4, 0xffe4e5e4, - 0xffe5e6e5, 0xffe5e6e5, 0xffe5e7e5, 0xffe5e8e6, 0xffe6e7e5, 0xffe6e7e6, 0xffe6e6e6, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e4e6, 0xffe6e4e6, 0xffe6e3e6, 0xffe6e4e5, 0xffe6e3e5, 0xffe6e1e5, 0xffe4e2e3, - 0xffe1e1e1, 0xffdfdfde, 0xffdedfde, 0xffdeddde, 0xffdeddde, 0xffdeddde, 0xffdedbde, 0xffdbdcdb, - 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d6, - 0xffd6d4d6, 0xffd6d4d6, 0xffd6d1d6, 0xffceced0, 0xffceced0, 0xffceced0, 0xffcecacb, 0xffc5c6c5, - 0xffc3c2c3, 0xffc3c2c3, 0xffbdbabd, 0xffb5b2b5, 0xffadabad, 0xffa5a5a5, 0xff9c9e9c, 0xee8c8e8c, - 0x332f322f, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x44000000, 0x99424142, 0x99424142, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, - 0x995d5d5d, 0x995d5d5d, 0x99606160, 0x99606160, 0x99636563, 0x99656765, 0x99686868, 0x996b696b, - 0x996b6b6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996e7073, 0x996e7073, 0x996e7073, 0x99707373, - 0x99737473, 0x99737573, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99797879, 0x99797879, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b7c7b, 0x997b7c7b, 0x997b7c7b, 0x997b7d7b, - 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e807e, 0x99818381, 0x99818381, 0x99818381, - 0x99818384, 0x99818384, 0x99818384, 0x99818384, 0x99848384, 0x99848684, 0x99848684, 0x99848484, - 0x99868686, 0x99868686, 0x99868686, 0x99868686, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99868784, 0x99868784, 0x99868784, 0x99868784, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99898789, 0x99898789, 0x99898789, 0x99898789, 0x998c8a8c, 0x99898789, 0x99898789, 0x99898789, - 0x99848684, 0x99848684, 0x99848684, 0x99848484, 0x99848684, 0x99848484, 0x99848484, 0x99848384, - 0x99848484, 0x99848384, 0x99848384, 0x99848484, 0x99848284, 0x99848284, 0x99818081, 0x99848284, - 0x99818081, 0x99818081, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, - 0x997b7d7b, 0x997b7b7b, 0x997b7b7b, 0x997b797b, 0x99797b79, 0x99797b79, 0x99767876, 0x99767876, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737373, 0x99737073, - 0x99706d6e, 0x99706d6e, 0x996e6968, 0x996b6563, 0x99636563, 0x99606060, 0x995d5a5d, 0x995a555a, - 0x99525152, 0x99454345, 0x99454345, 0x88292829, 0x77030403, 0x77000000, 0x44000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0xffa5a2a5, 0xffa5a2a5, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, - 0xffc0bec0, 0xffc3c2c3, 0xffc3c2c3, 0xffc3c2c3, 0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, - 0xffcecece, 0xffcecece, 0xffd0ced0, 0xffd3ced3, 0xffd3d2d3, 0xffd3d2d3, 0xffd3d2d3, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6dbd6, 0xffd6dbd6, - 0xffdedbde, 0xffdedcde, 0xffdeddde, 0xffdeddde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdee0e1, 0xffdee0e1, 0xffdee1e4, 0xffdee1e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, - 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e5e6, - 0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe8e9e7, 0xffebeae9, 0xffeeeaed, - 0xffe9e7e8, 0xffe9e8ea, 0xffe6e8e8, 0xffe6e8e6, 0xffe6e9e6, 0xffe6e8e6, 0xffe7e9e7, 0xffe7e7e5, - 0xffe6e6e5, 0xffe7e7e6, 0xffe6e7e6, 0xffe6e4e6, 0xffe6e6e6, 0xffe6e3e5, 0xffe5e3e5, 0xffe5e1e4, - 0xffe1e1e1, 0xffdfe1df, 0xffdee0de, 0xffdedfde, 0xffdeddde, 0xffdeddde, 0xffdedcde, 0xffdbdcdb, - 0xffdbdcdb, 0xffdbdcdb, 0xffd9d9d9, 0xffd6d9d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d7d6, 0xffd6d4d6, - 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffceced0, 0xffceced0, 0xffceced0, 0xffcecacb, 0xffc5c6c5, - 0xffc3c2c3, 0xffc0bec0, 0xffbdbabd, 0xffb5b2b5, 0xffadabad, 0xffa5a5a5, 0xff9c9e9c, 0xdd8c8e8c, - 0x22000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x44000000, 0x882c2b2c, 0x99424142, 0x99424542, 0x99424542, 0x994a4c4a, 0x995a595a, - 0x995a595a, 0x995d5d5d, 0x995d5d5d, 0x99606160, 0x99636563, 0x99656765, 0x996b696b, 0x996b696b, - 0x996b6b6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996e7073, 0x996e7073, 0x99707373, 0x99707373, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997e7f7e, 0x997e7f7e, 0x99818081, 0x99848284, 0x99818381, 0x99818381, 0x99818381, 0x99818381, - 0x99818384, 0x99818384, 0x99818384, 0x99818384, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99868686, 0x99868686, 0x99868686, 0x99868686, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99848a84, 0x99868784, 0x99868784, 0x99848a84, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x998c8a8c, 0x99898789, 0x99898789, 0x998c8a8c, 0x998c8a8c, 0x99898789, 0x99898789, 0x99898789, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99848684, 0x99848684, 0x99848484, 0x99848484, 0x99848284, 0x99848284, 0x99848284, 0x99848284, - 0x997e7f7e, 0x99818081, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7b7b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99767876, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737073, - 0x99706d6e, 0x996e6968, 0x996e6968, 0x996b6563, 0x99606060, 0x99606060, 0x995d5a5d, 0x995a555a, - 0x99525152, 0x99454345, 0x99454345, 0x88292829, 0x77030403, 0x77000000, 0x33000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xdda5a2a5, 0xffa5a2a5, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, - 0xffbdbabd, 0xffc0bec0, 0xffc3c2c3, 0xffc3c2c3, 0xffc5c6c5, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, - 0xffcecece, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 0xffd3d2d3, 0xffd3d2d3, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6dbd6, 0xffd6dbd6, - 0xffdedcde, 0xffdeddde, 0xffdeddde, 0xffdeddde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdee0e1, 0xffdee1e4, 0xffdee3e6, 0xffdee3e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e7e6, - 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe7e9e7, 0xffe8e8e8, - 0xffeaece9, 0xffe7e9e6, 0xffe6e9e6, 0xffe6ebe6, 0xffe6e9e6, 0xffe7e9e7, 0xffe9e9e9, 0xffe7e7e6, - 0xffe6e6e6, 0xffe6e7e7, 0xffe7e4e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e4e5, 0xffe5e3e5, 0xffe4e1e4, - 0xffe2e1e2, 0xffdfe0df, 0xffdee0de, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdeddde, 0xffdedfde, - 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d4d6, 0xffd6d1d6, 0xffceced0, 0xffceced0, 0xffcecacb, 0xffcec6c5, 0xffc3c2c3, - 0xffc3c2c3, 0xffc0bec0, 0xffbdbabd, 0xffb5b2b5, 0xffadabad, 0xff9c9e9c, 0xff9c9e9c, 0xbb5d605d, - 0x22000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x22000000, 0x77262826, 0x993a3d3a, 0x99424142, 0x99424142, 0x994d4c4d, 0x99525152, - 0x99525452, 0x995a5a5a, 0x99636163, 0x99636163, 0x99656565, 0x99656565, 0x996b696b, 0x996b696b, - 0x996b6c6e, 0x996b6c6e, 0x996b6f70, 0x996b6f70, 0x99737173, 0x99737173, 0x99737173, 0x99737473, - 0x99737576, 0x99737576, 0x99737576, 0x99737576, 0x99767876, 0x99797b79, 0x99797b79, 0x99797b79, - 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997b7d7b, 0x997b7d7b, 0x997e807e, 0x997e807e, - 0x99848084, 0x99848084, 0x99848384, 0x99848384, 0x99868486, 0x99868486, 0x99868486, 0x99868486, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99868786, 0x99868786, 0x99868786, 0x99848684, - 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99868886, - 0x998c888c, 0x998c888c, 0x998c888c, 0x998c888c, 0x99898a89, 0x99868686, 0x99898a89, 0x99898a89, - 0x998c888c, 0x998c888c, 0x998c888c, 0x998c8b8c, 0x99898b89, 0x99868886, 0x99868886, 0x99868886, - 0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99868786, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848284, 0x99868686, 0x99848284, 0x99848284, - 0x99848384, 0x99848384, 0x99848284, 0x99848284, 0x997e807e, 0x997e807e, 0x997e807e, 0x997b7d7b, - 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7b7b, 0x997b7b7b, 0x997b797b, 0x997b797b, - 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99707370, 0x99707370, 0x996e706e, - 0x996b6d6b, 0x99686968, 0x99656565, 0x99656565, 0x99636163, 0x99636163, 0x995d5c5d, 0x99585658, - 0x994a494a, 0x994a494a, 0x994a494a, 0x77191b19, 0x77000000, 0x77000000, 0x22000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xaa736d73, 0xff9fa29f, 0xff9fa29f, 0xffb5b6b5, 0xffb5b6b5, - 0xffbdbabd, 0xffbdbabd, 0xffc5c2c5, 0xffc5c2c5, 0xffc8c6c8, 0xffc8c6c8, 0xffcecace, 0xffcecace, - 0xffd0cdd0, 0xffd0cdd0, 0xffd3d0d3, 0xffd3d0d3, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, 0xffdedbde, 0xffdedcde, 0xffdedcde, 0xffdedcde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e1e1, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e4e6, 0xffe6e4e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e8e9, 0xffe6e8e9, 0xffe6e7e6, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe6e7e6, - 0xffefebe6, 0xffefebe6, 0xffefebe6, 0xffefebe6, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, - 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffedeaed, 0xffede9ed, - 0xffeae8e9, 0xffe5e7e9, 0xffe8e7e9, 0xffe7e7e6, 0xffe6e6e6, 0xffe6e6e5, 0xffe5e6e5, 0xffe3e4e3, - 0xffe3e3e3, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e0e1, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedddb, - 0xffdedddb, 0xffdedcd9, 0xffdedcd9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, - 0xffd6d7d6, 0xffd3d4d3, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffc8cacb, 0xffc3c6c8, 0xffc5c2c5, - 0xffc5c2c5, 0xffbdbcbd, 0xffb5b5b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xff8f908f, 0x774a4d4a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x66131413, 0x993a3d3a, 0x99424142, 0x99424142, 0x99474647, 0x994d4c4d, - 0x99525452, 0x995a5a5a, 0x995a5a5a, 0x99636163, 0x99656565, 0x99656565, 0x99656565, 0x996b696b, - 0x996b6c6e, 0x996b6c6e, 0x996b6f70, 0x996b6f70, 0x99737173, 0x99737173, 0x99737173, 0x99737373, - 0x99737573, 0x99737576, 0x99737576, 0x99737576, 0x99767876, 0x99767876, 0x99767876, 0x99797b79, - 0x997e7c7e, 0x997e7c7e, 0x99817f81, 0x99817f81, 0x997b7d7b, 0x997e807e, 0x997e807e, 0x997e807e, - 0x99848384, 0x99848384, 0x99848384, 0x99848384, 0x99868486, 0x99868486, 0x99868486, 0x99868486, - 0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99898889, 0x99868786, 0x99868786, - 0x99868886, 0x99868886, 0x99898b89, 0x99898b89, 0x99868886, 0x99898b89, 0x99898b89, 0x99898b89, - 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x99898a89, 0x99898a89, 0x99898a89, 0x99898a89, - 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x99868886, 0x99898b89, 0x99868886, 0x99868886, - 0x99898889, 0x99898889, 0x99898889, 0x99868786, 0x99868786, 0x99868786, 0x99848684, 0x99868786, - 0x99848684, 0x99868786, 0x99898889, 0x99848684, 0x99868686, 0x99848284, 0x99868686, 0x99868686, - 0x99848384, 0x99848484, 0x99848284, 0x99848384, 0x99818381, 0x997e807e, 0x997e807e, 0x997e807e, - 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7b7b, 0x997b7b7b, - 0x997b797b, 0x99797879, 0x99767776, 0x99767776, 0x99737573, 0x99707370, 0x99707370, 0x996b6d6b, - 0x99686968, 0x99686968, 0x99656565, 0x99636163, 0x99636163, 0x995d5c5d, 0x99585658, 0x99585658, - 0x994a494a, 0x994a494a, 0x99313231, 0x77000400, 0x77000000, 0x66000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x554d494d, 0xff9fa29f, 0xff9fa29f, 0xff9fa29f, 0xffb5b6b5, - 0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, 0xffc5c2c5, 0xffc8c6c8, 0xffc8c6c8, 0xffc8c6c8, 0xffcecace, - 0xffd0cdd0, 0xffd0cdd0, 0xffd3d0d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d5d6, - 0xffd6d7d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedcde, - 0xffdedfde, 0xffdedfde, 0xffdee0de, 0xffdee0de, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e1e1, - 0xffe6e5e6, 0xffe6e4e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, - 0xffe6e9ec, 0xffe6e8e9, 0xffe6e9ec, 0xffe6e9ec, 0xffe9e9e9, 0xffececec, 0xffe9e9e9, 0xffe9e9e9, - 0xffefece9, 0xffefebe6, 0xffefece9, 0xffefece9, 0xffefebef, 0xffefecef, 0xffefecef, 0xffefecef, - 0xffefecef, 0xffefecef, 0xffefecef, 0xffefecef, 0xffefebef, 0xffeeecef, 0xffeeeced, 0xffede9ed, - 0xffede9ed, 0xffede7ec, 0xffece7ec, 0xffeae7ea, 0xffe7e7e7, 0xffe6e6e6, 0xffe5e6e5, 0xffe3e5e3, - 0xffe3e4e3, 0xffe4e4e4, 0xffe1e1e1, 0xffe1e0e1, 0xffe1e0e1, 0xffe1e0e1, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedddb, 0xffdedddb, 0xffdbdcdb, 0xffdbdcdb, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, - 0xffd3d4d3, 0xffd3d4d3, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffc8cacb, 0xffc3c6c8, 0xffc5c2c5, - 0xffbdbcbd, 0xffbdbcbd, 0xffb5b5b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xff8f908f, 0x44313331, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x55000000, 0x993a3d3a, 0x99424142, 0x99424142, 0x99424142, 0x994d4c4d, - 0x99525452, 0x995a5a5a, 0x995a5a5a, 0x995a5a5a, 0x99606160, 0x99606160, 0x99656565, 0x996b696b, - 0x996b696b, 0x996b6c6e, 0x996b6f70, 0x996b6f70, 0x99737173, 0x99737173, 0x99737373, 0x99737373, - 0x99737573, 0x99737576, 0x99737576, 0x99737579, 0x99767876, 0x99767876, 0x99797b79, 0x997b7d7b, - 0x99817f81, 0x997e7c7e, 0x997e7c7e, 0x99817f81, 0x997e807e, 0x997e807e, 0x99818381, 0x99818381, - 0x99848384, 0x99848384, 0x99848384, 0x99848384, 0x99868486, 0x99898789, 0x99868486, 0x99898789, - 0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99898889, 0x99898889, 0x998c8a8c, 0x99898889, - 0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, - 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8e8c, 0x998c8e8c, 0x99898a89, 0x998c8e8c, 0x99898a89, - 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x99898b89, 0x99898b89, 0x99898b89, 0x99868886, - 0x998c8a8c, 0x998c8a8c, 0x99898889, 0x99868786, 0x998c8a8c, 0x99898889, 0x99868786, 0x99868786, - 0x99868786, 0x99898889, 0x998c8a8c, 0x99868786, 0x99868686, 0x99868686, 0x99868686, 0x99868686, - 0x99848484, 0x99848484, 0x99848484, 0x99848384, 0x99818381, 0x997e807e, 0x997e807e, 0x997e807e, - 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7b7b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x99767776, 0x99767776, 0x99737573, 0x99707370, 0x996e706e, 0x996b6d6b, - 0x99686968, 0x99686968, 0x99656565, 0x99636163, 0x99636163, 0x995d5c5d, 0x99585658, 0x99525152, - 0x994a494a, 0x994a494a, 0x88313231, 0x77000400, 0x77000000, 0x55000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x22262426, 0xee9fa29f, 0xff9fa29f, 0xff9fa29f, 0xff9fa29f, - 0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffc3c2c3, 0xffc3c2c3, 0xffc8c6c8, 0xffcecace, - 0xffcecace, 0xffd0cdd0, 0xffd3d0d3, 0xffd3d0d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d5d6, 0xffd6d5d6, - 0xffd6d8d6, 0xffd6d7d6, 0xffd6d9d6, 0xffd6d9d6, 0xffdedbde, 0xffdedbde, 0xffdedcde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdee0de, 0xffe1e1e1, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, - 0xffe6e4e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e7e6, 0xffe9e8e9, 0xffe6e7e6, 0xffe9e8e9, - 0xffe6e9ec, 0xffe6e9ec, 0xffe6e9ec, 0xffe6e9ec, 0xffececec, 0xffececec, 0xffececec, 0xffececec, - 0xffefedec, 0xffefece9, 0xffefece9, 0xffefece9, 0xffefecef, 0xffefecef, 0xffefedef, 0xffefecef, - 0xffefedef, 0xffefedef, 0xffefedef, 0xffefefef, 0xffefedef, 0xffefedef, 0xffeeecee, 0xffeee9ee, - 0xffede9ed, 0xffedeaec, 0xffeceaec, 0xffe9eae9, 0xffe8e7e8, 0xffe7e7e7, 0xffe7e5e7, 0xffe4e4e4, - 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e1e4, 0xffe4e1e4, 0xffe1e0e1, 0xffe1e0e1, 0xffdedfde, - 0xffdedfde, 0xffdedddb, 0xffdedcd9, 0xffdbdcdb, 0xffdbdcdb, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, - 0xffd3d4d3, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffc8cacb, 0xffc3c6c8, 0xffbdc2c5, 0xffc5c2c5, - 0xffbdbcbd, 0xffb5b5b5, 0xffb5b5b5, 0xffadaead, 0xffadaead, 0xff8f908f, 0xbb707370, 0x11191a19, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x33000000, 0x77131413, 0x99424142, 0x99424142, 0x99424142, 0x99424142, - 0x994a4d4a, 0x99525452, 0x99525452, 0x995a5a5a, 0x995a5d5a, 0x99606160, 0x99656565, 0x99656565, - 0x996b696b, 0x996b6c6e, 0x996b6c6e, 0x996b6f70, 0x99737173, 0x99737173, 0x99737373, 0x99737573, - 0x99737576, 0x99737576, 0x99737576, 0x99737579, 0x99767876, 0x99797b79, 0x997b7d7b, 0x997b7d7b, - 0x99817f81, 0x997e7c7e, 0x99817f81, 0x99848284, 0x997e807e, 0x99818381, 0x99818381, 0x99818381, - 0x99848384, 0x99848684, 0x99848684, 0x99848684, 0x99898789, 0x99898789, 0x99898789, 0x998c8a8c, - 0x99898889, 0x99868786, 0x99898889, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, - 0x99898b89, 0x99898b89, 0x99898b89, 0x998c8e8c, 0x99898b89, 0x998c8e8c, 0x99898b89, 0x998c8e8c, - 0x998c8b8c, 0x998c8e8c, 0x998c8b8c, 0x998c8b8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x99898b89, 0x998c8e8c, 0x99898b89, 0x99898b89, - 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x99898889, 0x99898889, - 0x99898889, 0x99868786, 0x99868786, 0x99868786, 0x99898a89, 0x99868686, 0x99868686, 0x99868686, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99818381, 0x99818381, 0x99818381, 0x997e807e, - 0x99848284, 0x997e7f7e, 0x99818081, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, - 0x997b797b, 0x99797879, 0x99767776, 0x99767776, 0x99737573, 0x996e706e, 0x996b6d6b, 0x996b6d6b, - 0x99686968, 0x99656565, 0x99636163, 0x99636163, 0x995d5c5d, 0x99585658, 0x99585658, 0x99525152, - 0x994a494a, 0x994a494a, 0x77191b19, 0x77000400, 0x77000000, 0x33000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x99737973, 0xff9fa29f, 0xff9fa29f, 0xff9fa29f, - 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, 0xffbdbebd, 0xffc3c2c3, 0xffc8c6c8, 0xffc8c6c8, - 0xffcecace, 0xffd0cdd0, 0xffd0cdd0, 0xffd3d0d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d5d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffdedbde, 0xffdeddde, 0xffdedfde, 0xffdedfde, - 0xffdee1de, 0xffdedfde, 0xffdee0de, 0xffdee3de, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e7e6, - 0xffe6e5e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe9e8e9, 0xffe9e8e9, 0xffe9e8e9, 0xffefebef, - 0xffe6ebef, 0xffe6e9ec, 0xffe6ebef, 0xffe6ebef, 0xffececec, 0xffececec, 0xffececec, 0xffececec, - 0xffefedec, 0xffefedec, 0xffefefef, 0xffefefef, 0xffefedef, 0xffefefef, 0xffefedef, 0xffefefef, - 0xffefedef, 0xffefefef, 0xffefedef, 0xffefedef, 0xffefedef, 0xffefedef, 0xffeeedef, 0xffeeeded, - 0xffeeebed, 0xffece9eb, 0xffeaeaea, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe6e7e7, 0xffe6e7e6, - 0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e3e6, 0xffe4e1e4, 0xffe6e3e6, 0xffe1e0e1, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdbdcdb, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, - 0xffd3d4d3, 0xffd0d1d0, 0xffcecece, 0xffc8cacb, 0xffc3c6c8, 0xffc3c6c8, 0xffbdc2c5, 0xffbdbcbd, - 0xffbdbcbd, 0xffb5b5b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xff8f908f, 0x66525552, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x55080408, 0x882c2b2c, 0x99424142, 0x99424142, 0x99424142, - 0x99424142, 0x994d4e4d, 0x99525552, 0x99525552, 0x995a5a5d, 0x99636163, 0x99636163, 0x99636163, - 0x9968686e, 0x9968686e, 0x996b6d73, 0x996b6d73, 0x99736d6b, 0x9973706e, 0x99737370, 0x99737573, - 0x99737573, 0x99767776, 0x99767776, 0x997b797b, 0x997b797b, 0x997b797b, 0x997e7c7e, 0x997e7c7e, - 0x997b7d7b, 0x997b7d7b, 0x997e807e, 0x99818381, 0x99848284, 0x99848284, 0x99848284, 0x99848284, - 0x99848684, 0x99848684, 0x99848684, 0x99868786, 0x998c8886, 0x998c8886, 0x998c8886, 0x998c8b89, - 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998f8c8f, 0x998f8c8f, 0x998c8a8c, 0x998c8a8c, - 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x998f908f, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x998f8c8f, 0x998c8a8c, 0x998f8c8f, 0x998c8a8c, 0x998c8e8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, - 0x9986888c, 0x9986888c, 0x9986888c, 0x9986888c, 0x998c8886, 0x998c8886, 0x998c8886, 0x998c8886, - 0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99848684, 0x99848484, 0x99848484, 0x99848384, - 0x99818381, 0x997e807e, 0x997e807e, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99797b79, - 0x9973797b, 0x9973797b, 0x99737779, 0x99737476, 0x99737173, 0x99737173, 0x996e6d6e, 0x99686968, - 0x9963656b, 0x9963656b, 0x99606065, 0x99606065, 0x995a5d5a, 0x995a5d5a, 0x994a4c4a, 0x994a4c4a, - 0x994a494a, 0x88343234, 0x77080408, 0x77080408, 0x66000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000400, 0xdda5a2a5, 0xffa5a2a5, 0xffa5a2a5, - 0xffaaa9aa, 0xffafafaf, 0xffb5b6b5, 0xffb5b6b5, 0xffbdbcbd, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, - 0xffc8cacb, 0xffcbced0, 0xffcbced0, 0xffcbced0, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d4d3, 0xffd6d7d6, - 0xffd6d7d6, 0xffd9d9d9, 0xffd9d9d9, 0xffdbdcdb, 0xffdeddde, 0xffdeddde, 0xffdeddde, 0xffdeddde, - 0xffdedfde, 0xffe1e1e1, 0xffe1e1e1, 0xffe4e4e4, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e5e6, 0xffe6e5e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe9e9e9, 0xffefebe6, 0xffefebe6, 0xffefebe6, 0xffefece9, - 0xffefebef, 0xffefebef, 0xffefebef, 0xffefedf1, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xfff1f2f1, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff0efef, 0xfff3f2f2, 0xfff1efef, - 0xfff1eeef, 0xffeeebec, 0xffeeebee, 0xffebe9ea, 0xffe9e9e9, 0xffe6e7e7, 0xffe6e7e6, 0xffe6e8e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe1e1e1, 0xffe1e1e1, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdbdddb, 0xffd6dbde, 0xffd6dbde, 0xffd6d8db, 0xffd6d5d9, 0xffd6d7de, - 0xffd0d1d6, 0xffd0d1d6, 0xffcbccce, 0xffc5c6c5, 0xffc5c6c5, 0xffc0c2c0, 0xffc0c2c0, 0xffbdbebd, - 0xffb5b5b5, 0xffb5b5b5, 0xffadabad, 0xffa5a6a5, 0xffa5a6a5, 0xcc707170, 0x11080808, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x33000000, 0x66161616, 0x99424142, 0x99424142, 0x99424142, - 0x99424142, 0x99474847, 0x994d4e4d, 0x99525552, 0x995a5a5d, 0x995a5a5d, 0x99636163, 0x99636163, - 0x9968686e, 0x9968686e, 0x9968686e, 0x996b6d73, 0x99736d6b, 0x99737370, 0x99737573, 0x99737573, - 0x99767776, 0x99767776, 0x99767776, 0x997b797b, 0x997e7c7e, 0x99817f81, 0x997e7c7e, 0x99817f81, - 0x997e807e, 0x997e807e, 0x997e807e, 0x997e807e, 0x99848284, 0x99848686, 0x99848686, 0x99848686, - 0x99848684, 0x99868786, 0x99868786, 0x99868786, 0x998c8886, 0x998c8886, 0x998c8b89, 0x998c8b89, - 0x998c8c8f, 0x998c8c8f, 0x998c8a8c, 0x998c8c8f, 0x998f8c8f, 0x99918f91, 0x998f8c8f, 0x99918f91, - 0x998f8f8f, 0x998f8f8f, 0x998f8f8f, 0x998f8f8f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, - 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, - 0x998f908f, 0x998f908f, 0x998c8e8c, 0x998f908f, 0x998c8e8c, 0x998f908f, 0x998f908f, 0x998c8e8c, - 0x99918f91, 0x998f8c8f, 0x998f8c8f, 0x998f8c8f, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8a8c, - 0x99898b8c, 0x99898b8c, 0x99898b8c, 0x99898b8c, 0x998c8b89, 0x998c8886, 0x998c8b89, 0x998c8886, - 0x99898889, 0x99868786, 0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99818381, 0x99818381, 0x99818381, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99797b79, - 0x9973797b, 0x99737779, 0x99737779, 0x99737476, 0x99737173, 0x996e6d6e, 0x99686968, 0x99686968, - 0x9963656b, 0x9963656b, 0x99606065, 0x995d5a60, 0x995a5d5a, 0x995a5d5a, 0x994a4c4a, 0x994a4c4a, - 0x99343234, 0x771e1b1e, 0x77080408, 0x77080408, 0x33000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x55373937, 0xeea5a2a5, 0xffa5a2a5, - 0xffa5a2a5, 0xffaaa9aa, 0xffafafaf, 0xffb5b6b5, 0xffbdbcbd, 0xffbdbcbd, 0xffc5c2c5, 0xffc5c2c5, - 0xffc8cacb, 0xffc8cacb, 0xffc8cacb, 0xffced2d6, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d7d6, 0xffd6d7d6, - 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffdbdcdb, 0xffdeddde, 0xffdee0de, 0xffdeddde, 0xffdee0de, - 0xffe1e1e1, 0xffe1e1e1, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e7e6, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffefebe6, 0xffefebe6, 0xffefece9, 0xffefece9, - 0xffefedf1, 0xffefedf1, 0xffefedf1, 0xffefedf1, 0xffefefef, 0xfff1f0f1, 0xffefefef, 0xfff1f0f1, - 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, - 0xfff4f4f4, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff4f4f4, 0xfff1f2f1, 0xfff2f2f1, 0xfff1f0f0, - 0xfff1efef, 0xffefeded, 0xffede9ed, 0xffece9ec, 0xffeae9ea, 0xffe9e9e9, 0xffe9e9e9, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdbdddb, 0xffd6dbde, 0xffd6d8db, 0xffd6d8db, 0xffd6d5d9, 0xffd0d1d6, - 0xffd0d1d6, 0xffcbccce, 0xffcbccce, 0xffc5c6c5, 0xffc5c6c5, 0xffc0c2c0, 0xffbabeba, 0xffbdbebd, - 0xffb5b5b5, 0xffb5b5b5, 0xffadabad, 0xffa5a6a5, 0xdda5a6a5, 0x443c3d3c, 0x00080808, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55000000, 0x77161616, 0x99424142, 0x99424142, - 0x99424142, 0x99424142, 0x99474847, 0x994d4e4d, 0x99525458, 0x995a5a5d, 0x99636163, 0x99636163, - 0x99656268, 0x9968686e, 0x9968686e, 0x996b6d73, 0x9973706e, 0x99737370, 0x99737573, 0x99737573, - 0x99767776, 0x99767776, 0x997b797b, 0x997b797b, 0x99817f81, 0x99817f81, 0x99817f81, 0x99817f81, - 0x997e807e, 0x997e807e, 0x99818381, 0x99818381, 0x99848686, 0x99848686, 0x99848686, 0x99848686, - 0x99868786, 0x99868786, 0x998c8a8c, 0x998c8a8c, 0x998c8b89, 0x998c8b89, 0x998c8b89, 0x998c8b89, - 0x998c8c8f, 0x998c8c8f, 0x998c8c8f, 0x998c8f91, 0x99918f91, 0x99918f91, 0x99949294, 0x99949294, - 0x99919091, 0x99919091, 0x998f8f8f, 0x99919091, 0x998f908f, 0x99919391, 0x998f908f, 0x99919391, - 0x998f908f, 0x998f908f, 0x99919391, 0x998f908f, 0x998f908f, 0x998f908f, 0x99919391, 0x998f908f, - 0x998f908f, 0x998f908f, 0x99919391, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, - 0x99918f91, 0x99918f91, 0x99918f91, 0x99918f91, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x99898b8c, 0x99898b8c, 0x99898b8c, 0x99898b8c, 0x998c8b89, 0x998c8b89, 0x998c8b89, 0x998c8886, - 0x998c8a8c, 0x99868786, 0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99848684, 0x99848484, - 0x99818381, 0x99818381, 0x99818381, 0x99818381, 0x997b7d7b, 0x997b7d7b, 0x99797b79, 0x99797b79, - 0x99737779, 0x99737779, 0x99737476, 0x99737173, 0x99737173, 0x996e6d6e, 0x99686968, 0x99636563, - 0x9963656b, 0x99606065, 0x99606065, 0x995d5a60, 0x995a5d5a, 0x994a4c4a, 0x994a4c4a, 0x994a4c4a, - 0x771e1b1e, 0x77080408, 0x77080408, 0x55080408, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0x886e6d6e, 0xffa5a2a5, - 0xffa5a2a5, 0xffa5a2a5, 0xffaaa9aa, 0xffafafaf, 0xffb5b5b5, 0xffbdbcbd, 0xffc5c2c5, 0xffc5c2c5, - 0xffc5c6c5, 0xffc8cacb, 0xffc8cacb, 0xffcbced0, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d7d6, 0xffd6d7d6, - 0xffd9d9d9, 0xffd9d9d9, 0xffdbdcdb, 0xffdbdcdb, 0xffdee0de, 0xffdee0de, 0xffdee0de, 0xffdee0de, - 0xffe1e1e1, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe9e9e9, 0xffe9e9e9, 0xffececec, 0xffececec, 0xffefedec, 0xffefece9, 0xffefedec, 0xffefedec, - 0xffefedf1, 0xffefedf1, 0xffefedf1, 0xffeff0f4, 0xfff1f0f1, 0xfff1f0f1, 0xfff4f2f4, 0xfff4f2f4, - 0xfff1f2f1, 0xfff4f4f4, 0xfff1f2f1, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, - 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff2f1f1, - 0xfff0edee, 0xffeceae9, 0xffeae8e7, 0xffeae7ea, 0xffe8e6e8, 0xffeae9ea, 0xffe9e9e9, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffdedfde, - 0xffdedfde, 0xffdbdddb, 0xffdbdddb, 0xffd6d8db, 0xffd6d8db, 0xffd6d5d9, 0xffd6d2d6, 0xffd0d1d6, - 0xffcbccce, 0xffcbccce, 0xffc5c6c5, 0xffc5c6c5, 0xffc0c2c0, 0xffbabeba, 0xffbabeba, 0xffb5b5b5, - 0xffb5b5b5, 0xffadabad, 0xffadabad, 0xeea5a6a5, 0x773c3d3c, 0x00080808, 0x00080808, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x55000000, 0x77161616, 0x99424142, - 0x99424142, 0x99424142, 0x99424142, 0x99474847, 0x994a4d52, 0x99525458, 0x995a5a5d, 0x99636163, - 0x99656268, 0x99656268, 0x9968686e, 0x9968686e, 0x99736d6b, 0x9973706e, 0x99737370, 0x99737573, - 0x99737573, 0x99767776, 0x99797879, 0x997b797b, 0x997e7c7e, 0x997e7c7e, 0x99817f81, 0x99848284, - 0x99818381, 0x99818381, 0x99818381, 0x99848684, 0x99848686, 0x99848686, 0x99848686, 0x99848a89, - 0x99898889, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8b89, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x998c8f91, 0x998c8f91, 0x998c8f91, 0x998c9294, 0x99949294, 0x99949294, 0x99949294, 0x99949294, - 0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x99919391, 0x99919391, 0x99919391, 0x99919391, - 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, - 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x998f908f, - 0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x998c928c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8b89, 0x998c8b89, 0x998c8b89, 0x998c8b89, - 0x998c8a8c, 0x998c8a8c, 0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99818381, 0x99818381, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99797b79, 0x99767876, - 0x99737476, 0x99737476, 0x99737173, 0x99737173, 0x996e6d6e, 0x99686968, 0x99686968, 0x99636563, - 0x99606065, 0x99606065, 0x995d5a60, 0x995a555a, 0x994a4c4a, 0x994a4c4a, 0x994a4c4a, 0x77292829, - 0x77080408, 0x77080408, 0x66080408, 0x11080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0x00000400, 0x996e6d6e, - 0xeea5a2a5, 0xffa5a2a5, 0xffa5a2a5, 0xffaaa9aa, 0xffadaead, 0xffb5b5b5, 0xffbdbcbd, 0xffc5c2c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc8cacb, 0xffcbced0, 0xffd6d1d0, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d7d6, - 0xffd6d7d6, 0xffd9d9d9, 0xffdbdcdb, 0xffdbdcdb, 0xffdeddde, 0xffdeddde, 0xffdee0de, 0xffdee3de, - 0xffe4e4e4, 0xffe6e7e6, 0xffe4e4e4, 0xffe6e7e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6ebe6, - 0xffececec, 0xffececec, 0xffececec, 0xffececec, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffeff0f4, 0xffeff0f4, 0xffeff0f4, 0xffeff3f7, 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, - 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff7f7f7, 0xfff4f4f4, 0xfff4f4f4, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff5f5f4, - 0xffefeeeb, 0xffebe8e8, 0xffe8e5e8, 0xffe7e4e8, 0xffe8e5e8, 0xffeae8ea, 0xffe9e9e9, 0xffe6e9e6, - 0xffe6e9e6, 0xffe6e7e6, 0xffe6e8e6, 0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe1e1e1, 0xffdedfde, - 0xffdedfde, 0xffdbdddb, 0xffd6dbd6, 0xffd6d8db, 0xffd6d5d9, 0xffd6d2d6, 0xffd6d2d6, 0xffcbccce, - 0xffcbccce, 0xffcbccce, 0xffc5c6c5, 0xffc0c2c0, 0xffc0c2c0, 0xffbabeba, 0xffb5bab5, 0xffb5b5b5, - 0xffb5b5b5, 0xffadabad, 0xeea5a2a5, 0x773c3d3c, 0x11080808, 0x00080808, 0x00080808, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x55000000, 0x77191419, - 0x882f2d2f, 0x99424142, 0x99424142, 0x99424142, 0x993c3b3c, 0x99525152, 0x99525152, 0x99525152, - 0x99636163, 0x99636163, 0x99636163, 0x99636163, 0x99636565, 0x996b7173, 0x996b7173, 0x996b7173, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, - 0x99868886, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998f8f8f, 0x998f8f8f, 0x998f8f8f, 0x998f8f8f, - 0x99949094, 0x99949094, 0x99949094, 0x999c969c, 0x99949694, 0x99949694, 0x99949694, 0x99949694, - 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, - 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, - 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x998f9091, - 0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x998f8c8f, 0x99949294, 0x99949294, 0x99949294, - 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, - 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7973, 0x997b7973, 0x997b7973, 0x997b7973, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99636563, 0x99636563, 0x99636563, 0x99636563, - 0x99525552, 0x99525552, 0x99525552, 0x99525552, 0x99525152, 0x88373637, 0x771b1b1b, 0x77000000, - 0x77000305, 0x66000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x77686968, 0xdd9c9e9c, 0xff9c9e9c, 0xff9c9e9c, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, - 0xffb8b9b8, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd9dbde, 0xffdee3e6, 0xffdee3e6, 0xffdee3e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, - 0xffe9e9e9, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff1f0ef, 0xfff1f0ef, 0xfff1f0ef, 0xfff1f0ef, - 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff6f6f6, - 0xffefefef, 0xffeaeae9, 0xffe6e7e7, 0xffe5e4e5, 0xffe5e3e6, 0xffece9ed, 0xffefebef, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffc8c9c8, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xff9c9e9c, - 0xff9c9e9c, 0xcc9c9e9c, 0x55343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x55000000, - 0x66080408, 0x771b181b, 0x99424142, 0x99424142, 0x993c3b3c, 0x993c3b3c, 0x99525152, 0x99525152, - 0x99555555, 0x99555555, 0x99636163, 0x99636163, 0x99636565, 0x99636565, 0x996b7173, 0x996b7173, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848384, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, - 0x998c8e8c, 0x99868886, 0x998c8e8c, 0x998c8e8c, 0x998f8f8f, 0x99949694, 0x998f8f8f, 0x998f8f8f, - 0x99949094, 0x99949094, 0x99949094, 0x99949094, 0x99949694, 0x99949694, 0x99949694, 0x99949694, - 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, - 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, - 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x998f9091, - 0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x998f8c8f, 0x99949294, - 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x99868886, - 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x99848384, 0x99848684, 0x99848684, 0x997e7f7e, 0x997e7f7e, - 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99767576, 0x997b7973, 0x997b7973, 0x9973706e, 0x9973706e, - 0x99737173, 0x99737173, 0x99656465, 0x99656465, 0x99636563, 0x99636563, 0x99636563, 0x99505150, - 0x99525552, 0x99525552, 0x99525552, 0x993a3b3a, 0x771b1b1b, 0x66000000, 0x77000000, 0x77000000, - 0x66000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x33343534, 0x99686968, 0xee9c9e9c, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, - 0xffb8b9b8, 0xffb8b9b8, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c3, 0xffc5c8c3, 0xffced2ce, 0xffced2ce, - 0xffd0d1d0, 0xffd0d1d0, 0xffd6dbd6, 0xffd6dbd6, 0xffd9dbde, 0xffd9dbde, 0xffdee3e6, 0xffdee3e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e5e6, 0xffefebef, 0xffefebef, 0xffefebef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff1f0ef, 0xfff7f7f7, 0xfff1f0ef, 0xfff1f0ef, - 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff6f7f6, - 0xfff2f1f1, 0xffebeaea, 0xffe4e5e5, 0xffe3e1e4, 0xffe6e4e7, 0xffedeaed, 0xffefebef, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffced0ce, 0xffd6d7d6, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffb8b7b8, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xdd9c9e9c, - 0x88686968, 0x33343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, - 0x44080408, 0x66080408, 0x66080408, 0x771b181b, 0x993c3b3c, 0x993c3b3c, 0x993c3b3c, 0x993c3b3c, - 0x99474947, 0x99555555, 0x99555555, 0x99555555, 0x995a5958, 0x99636565, 0x99636565, 0x99636565, - 0x99686868, 0x996e6f6e, 0x996e6f6e, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x99848384, 0x99848384, 0x99848384, 0x99848384, - 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x998f8f8f, 0x99898889, 0x998f8f8f, 0x998f8f8f, - 0x99949094, 0x998c8b8c, 0x99949094, 0x99949094, 0x998f908f, 0x99949694, 0x998f908f, 0x99949694, - 0x998f908f, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99919291, 0x99919291, 0x99919291, - 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99919291, 0x99919291, 0x99919291, 0x99919291, - 0x99949694, 0x9991908f, 0x9991908f, 0x9991908f, 0x998f9091, 0x998f9091, 0x998f9091, 0x998f9091, - 0x998f8e8f, 0x998f8e8f, 0x998f8e8f, 0x99949294, 0x99949294, 0x998f8c8f, 0x998f8c8f, 0x998f8c8f, - 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99818381, - 0x99848384, 0x99848384, 0x99848384, 0x99848384, 0x997e7f7e, 0x997e7f7e, 0x99797879, 0x99797879, - 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x9973706e, 0x9973706e, 0x996b6768, 0x996b6768, - 0x99656465, 0x99656465, 0x99656465, 0x99585658, 0x99505150, 0x99505150, 0x99505150, 0x99505150, - 0x993a3b3a, 0x993a3b3a, 0x77212221, 0x66080808, 0x77000000, 0x77000000, 0x77000000, 0x44000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x44343534, 0xaa7b797b, 0xeeadaaad, 0xffadaaad, 0xffadaaad, - 0xffaaabaa, 0xffaaabaa, 0xffb8b9b8, 0xffb8b9b8, 0xffbdbdb8, 0xffc5c8c3, 0xffc5c8c3, 0xffc5c8c3, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd3d2d6, 0xffd9dbde, 0xffd9dbde, 0xffd9dbde, - 0xffe1e0e1, 0xffe1e0e1, 0xffe1e0e1, 0xffe6e7e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xfff1f0ef, 0xfff1f0ef, 0xfff1f0ef, 0xfff1f0ef, - 0xfff1f3f1, 0xffecefec, 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff7f7f7, 0xfff1f3f1, 0xfff7f7f7, - 0xfff4f3f4, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff4f3f4, 0xfff7f7f7, 0xfff4f3f4, - 0xfff5f5f4, 0xffeeedec, 0xffe4e4e5, 0xffe1e1e2, 0xffe3e1e3, 0xffe5e4e6, 0xffe6e4e6, 0xffe1dfde, - 0xffe1dfde, 0xffe1dfde, 0xffe1dfde, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffced0ce, - 0xffced0ce, 0xffced0ce, 0xffc5c5c5, 0xffc8c9c8, 0xffc8c9c8, 0xffbabcba, 0xffbabcba, 0xffb8b7b8, - 0xffb8b7b8, 0xffb8b7b8, 0xffaaa9aa, 0xffb5b2b5, 0xeeb5b2b5, 0xdd7b7b7e, 0x997b7b7e, 0x33343534, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x22080408, 0x55080408, 0x66080408, 0x66101010, 0x77101010, 0x88262626, 0x883c3b3c, - 0x993a3d3a, 0x993a3d3a, 0x99474947, 0x99474947, 0x99524d4a, 0x99524d4a, 0x995a5958, 0x995a5958, - 0x99636163, 0x99636163, 0x99636163, 0x99686868, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, - 0x99737173, 0x99737173, 0x99797879, 0x99797879, 0x99737573, 0x997b7c7b, 0x997b7c7b, 0x997b7c7b, - 0x997b7d7b, 0x997b7d7b, 0x99818381, 0x99818381, 0x99848284, 0x99848284, 0x99848284, 0x99848284, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, - 0x99898b89, 0x99848684, 0x99898b89, 0x99898b89, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, - 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, - 0x998c8684, 0x998c8684, 0x998c8684, 0x998c8684, 0x9984868c, 0x9984868c, 0x9984868c, 0x9984868c, - 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99898789, 0x99848284, 0x99848284, 0x99848284, - 0x99818381, 0x997b7d7b, 0x99818381, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, - 0x997b7c7b, 0x997b7c7b, 0x99737573, 0x99737573, 0x99737173, 0x99737173, 0x99737173, 0x99737173, - 0x99706d70, 0x99706d70, 0x996b656b, 0x996b656b, 0x99635d63, 0x99635d63, 0x99635d63, 0x99635d63, - 0x99585658, 0x99585658, 0x994a494a, 0x994a494a, 0x993c3d3c, 0x993c3d3c, 0x993c3d3c, 0x88292829, - 0x77080808, 0x66080808, 0x77080808, 0x77080808, 0x77000000, 0x55000000, 0x22000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11191819, 0x33191819, 0x664a494a, 0xbb7b797b, - 0xdd9c9e9c, 0xee9c9e9c, 0xffaaabaa, 0xffaaabaa, 0xffb5b2ad, 0xffb5b2ad, 0xffb5b2ad, 0xffbdbdb8, - 0xffc5bec5, 0xffc5bec5, 0xffcbc8cb, 0xffcbc8cb, 0xffcecace, 0xffcecace, 0xffcecace, 0xffd3d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffdbd9db, 0xffdbd9db, 0xffd6dbd6, 0xffd6dbd6, 0xffdee0de, 0xffdee0de, - 0xffdedfde, 0xffdedfde, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e3de, 0xffe6e3de, 0xffece9e6, 0xffece9e6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, - 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, - 0xffefebe6, 0xffeeeae5, 0xffdedfde, 0xffddddde, 0xffdeddde, 0xffd6d7d6, 0xffd6d7d6, 0xffdbd7d6, - 0xffdbd7d6, 0xffdbd7d6, 0xffd6cece, 0xffcecece, 0xffcecece, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c5c5, - 0xffc5c5c5, 0xffc5c5c5, 0xffbdbabd, 0xffbabcba, 0xffadaead, 0xffadaead, 0xffadaead, 0xffaaa9aa, - 0xffaaa9aa, 0xee9c9a9c, 0xdd9c9a9c, 0xaa7b7b7e, 0x55424347, 0x22080c10, 0x11080c10, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x44000000, 0x55030103, 0x66050305, 0x66080408, - 0x66131213, 0x77131213, 0x88262326, 0x883a353a, 0x88313131, 0x99313131, 0x994a494a, 0x994a494a, - 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, - 0x99636563, 0x99636563, 0x99636563, 0x99636563, 0x996b6d73, 0x996b6d73, 0x996b6d73, 0x996b6d73, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x997b757b, 0x997b757b, 0x997b757b, 0x997b757b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, - 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, - 0x996b716b, 0x996b716b, 0x996b716b, 0x996b716b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, - 0x99636563, 0x99636563, 0x99636563, 0x99636563, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, - 0x99525152, 0x99525152, 0x99525152, 0x99525152, 0x994a494a, 0x994a494a, 0x994a494a, 0x994a494a, - 0x99313531, 0x99313531, 0x88313531, 0x88212321, 0x77191419, 0x77100d10, 0x66080708, 0x66000000, - 0x77000000, 0x77000000, 0x66000000, 0x55000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030403, 0x11080c08, - 0x22000400, 0x442f312f, 0x885d5d5d, 0xbb8c8a8c, 0xdd9c9a9c, 0xdd9c9a9c, 0xee9c9a9c, 0xff9c9a9c, - 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcececd, 0xffcccdce, 0xffcccdcc, - 0xffcbc9cc, 0xffc9c8c9, 0xffc7c4c7, 0xffc2c1c3, 0xffbebdbf, 0xffb6babd, 0xffb5babd, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a2a5, - 0xffa5a2a5, 0xffa5a2a5, 0xffa5a2a5, 0xee9c9a9c, 0xee9c9a9c, 0xdd9c9a9c, 0xdd9c9a9c, 0xbb7b797b, - 0x77525252, 0x44292b29, 0x22000400, 0x11080c08, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x33000000, 0x44000000, - 0x55000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66191819, 0x77191819, 0x77191819, - 0x88313331, 0x88313331, 0x88313331, 0x88313331, 0x993f3d3f, 0x993f3d3f, 0x993f3d3f, 0x993f3d3f, - 0x99424342, 0x99424342, 0x99424342, 0x99424342, 0x99474a4d, 0x99474a4d, 0x99474a4d, 0x99474a4d, - 0x99504d50, 0x99504d50, 0x99504d50, 0x99504d50, 0x99555155, 0x99555155, 0x99555155, 0x99555155, - 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, - 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, - 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, - 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, - 0x99505150, 0x99505150, 0x99505150, 0x99505150, 0x99505150, 0x99505150, 0x99505150, 0x99505150, - 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x99474847, 0x99474847, 0x99474847, 0x99474847, - 0x99424342, 0x99424342, 0x99424342, 0x99424342, 0x993c3b3c, 0x993c3b3c, 0x993c3b3c, 0x993c3b3c, - 0x99373737, 0x99373737, 0x88373737, 0x88373737, 0x88313131, 0x88313131, 0x77191819, 0x77191819, - 0x77101210, 0x66000000, 0x66000000, 0x66000000, 0x77000000, 0x77000000, 0x66000000, 0x55000000, - 0x44000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x11000400, 0x11000400, 0x22000400, 0x44343634, 0x77686868, - 0x99797b79, 0xbb797b79, 0xcc797b79, 0xcc797b79, 0xddadaead, 0xeeadaead, 0xeeadaead, 0xeeadaead, - 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcccbcb, 0xffc8c8c9, 0xffc6c5c6, - 0xffb3b2b4, 0xffadadaf, 0xffb0b0b3, 0xffafb1b4, 0xffb1b5b9, 0xffb4b9bc, 0xffb5babd, 0xffadaead, - 0xffadaead, 0xffadaead, 0xeeadaead, 0xeea5a6a5, 0xeea5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xcca5a2a5, - 0xcca5a2a5, 0xbb6e6d6e, 0x886e6d6e, 0x66343334, 0x55343334, 0x22343334, 0x11000000, 0x11000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x22000000, 0x33000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, 0x66000000, - 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66080408, 0x66080408, 0x77080408, 0x77242024, - 0x77212221, 0x77212221, 0x77212221, 0x88212221, 0x88242726, 0x88242726, 0x88242726, 0x88242726, - 0x882c282c, 0x882c282c, 0x882c282c, 0x882c282c, 0x882f2d2f, 0x882f2d2f, 0x882f2d2f, 0x992f2d2f, - 0x882f2e2f, 0x882f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, - 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, - 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, - 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, - 0x992c2d2c, 0x992c2d2c, 0x992c2d2c, 0x992c2d2c, 0x992c2d2c, 0x882c2d2c, 0x882c2d2c, 0x882c2d2c, - 0x88292829, 0x88292829, 0x88292829, 0x88292829, 0x88242624, 0x88242624, 0x88242624, 0x88242624, - 0x88212221, 0x88212221, 0x88212221, 0x88212221, 0x771e1e1e, 0x771e1e1e, 0x771e1e1e, 0x771e1e1e, - 0x77000400, 0x66000400, 0x66000400, 0x66000400, 0x66000000, 0x66000000, 0x77000000, 0x77000000, - 0x77000000, 0x66000000, 0x66000000, 0x55000000, 0x44000000, 0x33000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x22000400, 0x443a3d3a, 0x443a3d3a, 0x663a3d3a, - 0x663c3f3c, 0x773c3f3c, 0x88797b79, 0xaa797b79, 0xbb7e7f7e, 0xbb7e7f7e, 0xbb7e7f7e, 0xbb7e7f7e, - 0xcc848684, 0xcc848684, 0xcc848684, 0xcc848684, 0xcc898889, 0xdd898889, 0xdd898889, 0xdd898889, - 0xdd8c8b8c, 0xdd8c8b8c, 0xdd8c8b8c, 0xdd8c8b8c, 0xdd8c8b8c, 0xdd8c8b8c, 0xee8c8b8c, 0xee8c8b8c, - 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, - 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8b8b8b, 0xee898989, - 0xee878588, 0xee848285, 0xcc7e7d80, 0xbb7b7c7f, 0xbb797c7e, 0xbb797c7e, 0xaa797c7e, 0xaa737473, - 0x88737473, 0x77737473, 0x663a3a3a, 0x55373a37, 0x44373a37, 0x33373a37, 0x22000400, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, - 0x33000000, 0x44000000, 0x44000000, 0x55000000, 0x55080408, 0x55080408, 0x66080408, 0x66080408, - 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000400, 0x66000400, 0x66000400, 0x66000400, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66000400, 0x66000400, 0x66000400, 0x66000400, - 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, - 0x66000400, 0x66000400, 0x66000400, 0x55000400, 0x55000000, 0x44000000, 0x44000000, 0x33000000, - 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, - 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, - 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, - 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080407, - 0x00080408, 0x00060308, 0x00000400, 0x00010100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x22000000, 0x22000000, 0x22000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x44000000, - 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, - 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, - 0x44000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x22000000, 0x22000000, - 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030403, 0x00030403, - 0x00050505, 0x00050505, 0x00050505, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030403, 0x00030403, 0x00030403, - 0x00030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x22000000, 0x22000000, 0x33000000, 0x33000000, - 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, - 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x22000000, 0x22000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030403, 0x00050805, 0x11080c08, - 0x22101010, 0x22101010, 0x11101010, 0x11050505, 0x00000400, 0x00000100, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00050805, 0x11050805, 0x11080c08, 0x11080c08, - 0x11080808, 0x00030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, - 0x22000000, 0x22000000, 0x22000000, 0x33000000, 0x22000000, 0x22000000, 0x22000000, 0x11000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x55050705, 0xaa101410, 0xcc191819, 0xcc191819, 0xcc191819, 0xcc191819, - 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, - 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191819, 0xcc191819, 0xcc191819, 0xbb191819, - 0x66080808, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x44050405, 0x66100c10, - 0x99101010, 0xbb191819, 0xcc191819, 0xdd191819, 0xcc191819, 0xbb191819, 0x99101010, 0x77101010, - 0x44080408, 0x22030103, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11080808, 0x55080808, 0xbb4a494a, 0xdd8c8a8c, 0xeea5a6a5, 0xeea5a6a5, 0xeea5a6a5, 0xeea5a6a5, - 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, - 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeea5a6a5, 0xeea5a6a5, 0xeea5a6a5, 0xee8c8e8c, - 0xbb3c3b3c, 0x77080808, 0x22080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x00080408, 0x00080408, 0x11080408, 0x33080408, 0x88080408, 0xcc4a464a, 0xee4a464a, - 0xee8c8a8c, 0xffa7a6a7, 0xffa7a6a7, 0xffa7a6a7, 0xffafb3af, 0xff898c89, 0xee898c89, 0xee636563, - 0xcc4a494a, 0x88080408, 0x44080408, 0x22080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x22080808, 0xaa080808, 0xdd8c8a8c, 0xffcecace, 0xffcbcccb, 0xffcbcccb, 0xffcbcccb, 0xffcbcccb, - 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, - 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffbdbebd, - 0xeea5a2a5, 0xbb080808, 0x33080808, 0x00080808, 0x00000000, 0x110e0d0e, 0x110e0d0e, 0x331b1b1b, - 0x44212021, 0x55212021, 0x44212021, 0x22101010, 0x11100f10, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x110b0b0b, 0x110e0f0e, 0x330e0f0e, 0x441b1e1b, 0x330e0f0e, - 0x220b0b0b, 0x110b0b0b, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x00080408, 0x11080408, 0x55080408, 0xaa4a464a, 0xee8c888c, 0xff8c888c, 0xffcecace, - 0xffc3c2c3, 0xffc3c2c3, 0xffc3c2c3, 0xffdedfde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffafb3af, - 0xff8c8e8c, 0xee8c8e8c, 0xbb4a494a, 0x66080408, 0x22000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x22080808, 0xcc080808, 0xee8c8a8c, 0xffcecace, 0xffcbcccb, 0xffcbcccb, 0xffdedfde, 0xffdedfde, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffa5a2a5, 0xdd080808, 0x44080808, 0x00080808, 0x00000000, 0x110e0d0e, 0x331b1b1b, 0x551b1b1b, - 0x77212021, 0x88212021, 0x88212021, 0x55212021, 0x33211e21, 0x11100f10, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x110b0b0b, 0x22161616, 0x441b1e1b, 0x661b1e1b, 0x661b1e1b, 0x551b1e1b, - 0x44161616, 0x220b0b0b, 0x000b0b0b, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x11080408, 0x66080408, 0xcc3c3b3c, 0xee8c888c, 0xffcecace, 0xffcecace, 0xffcecace, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffced2ce, 0xffced2ce, 0xee8c8e8c, 0xcc4a494a, 0x771b1a1b, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x22080808, 0xcc080808, 0xee8c8a8c, 0xffcecace, 0xffcbcccb, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffa5a2a5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x220e0d0e, 0x551b1b1b, 0x77292829, - 0x99313131, 0xaa313131, 0xbb313131, 0xaa313131, 0x77312d31, 0x33211e21, 0x11100f10, 0x11000000, - 0x00000000, 0x110b0b0b, 0x22161616, 0x44212021, 0x88292d29, 0x99292d29, 0x99292d29, 0x77292d29, - 0x66212021, 0x33161616, 0x110b0b0b, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11080408, 0x55080408, 0xcc3c3b3c, 0xffa5aaa5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xff8c8e8c, 0xcc524d52, 0x771b1a1b, 0x22000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9a9a9a, 0xffdedfde, 0xffd6d7d6, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffecedec, 0xffecedec, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffe4e5e4, 0xffe4e5e4, 0xffdedfde, 0xffdedfde, - 0xffb5b2b5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x220e0d0e, 0x551b1b1b, 0x88292829, - 0xaa292d29, 0xbb292d29, 0xcc292d29, 0xcc212321, 0xbb2c2e2c, 0x882c2e2c, 0x442c2e2c, 0x22101010, - 0x11191419, 0x22191419, 0x44292629, 0x99292629, 0xbb292729, 0xbb313131, 0xaa313131, 0x99313131, - 0x77212421, 0x44161816, 0x110b0c0b, 0x00000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x33080808, 0xbb4a4a4a, 0xee8c8c8c, 0xffcecece, 0xffd6d7d6, 0xffd6d7d6, 0xffdeddde, 0xffdeddde, - 0xffdee3de, 0xffe6e9e6, 0xffe6e9e6, 0xffe6e9e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, - 0xffe6e7e6, 0xffdedbde, 0xffdedbde, 0xffd6ced6, 0xee8c8e8c, 0xbb4a494a, 0x55080408, 0x11080408, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, 0x00080808, 0x00080808, 0x00080808, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9a9a9a, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffe6e7e6, - 0xffecedec, 0xffecedec, 0xfff1f4f1, 0xfff1f4f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, - 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xffe9ece9, 0xffe9ece9, 0xffe4e5e4, 0xffdedfde, - 0xffb5b2b5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x110e0d0e, 0x441b1b1b, 0x88292829, - 0xbb292d29, 0xcc212321, 0xcc212321, 0xdd191a19, 0xdd1e1f1e, 0xcc1e1f1e, 0x992c2e2c, 0x552c2e2c, - 0x33292629, 0x553a373a, 0x993a373a, 0xcc292629, 0xcc211e21, 0xcc292729, 0xbb292729, 0xbb292729, - 0x88212421, 0x33161816, 0x110b0c0b, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x11000000, - 0x88080808, 0xee8c8c8c, 0xffcecece, 0xffcecece, 0xffd6d7d6, 0xffdeddde, 0xffe6e4e6, 0xffe6e4e6, - 0xffe6e9e6, 0xffe6e9e6, 0xffeff0ef, 0xffeff0ef, 0xfff1f2f1, 0xffececec, 0xffececec, 0xffececec, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffdedbde, 0xffced2ce, 0xee8c8e8c, 0x99080408, 0x33080408, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x110e0c0e, 0x11131413, 0x22131413, 0x22131413, 0x22131413, - 0x110e120e, 0x110e120e, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9a9a9a, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffe6e7e6, 0xffefefef, - 0xfff1f4f1, 0xfff1f4f1, 0xfff1f4f1, 0xfff1f4f1, 0xfff4f7f4, 0xfff4f7f4, 0xfff4f7f4, 0xfff4f7f4, - 0xfff4f6f4, 0xfff4f6f4, 0xfff4f6f4, 0xfff4f6f4, 0xffeff3ef, 0xffe9ece9, 0xffe9ece9, 0xffe4e5e4, - 0xffb5b2b5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x000e0d0e, 0x221b1b1b, 0x55292829, - 0xaa292d29, 0xcc212321, 0xdd191a19, 0xdd191a19, 0xee101010, 0xdd101010, 0xdd1e1f1e, 0xaa3a3d3a, - 0x774a494a, 0x993a373a, 0xcc292629, 0xdd191419, 0xdd211e21, 0xdd211e21, 0xcc292729, 0xaa292729, - 0x66212421, 0x33161816, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x44050405, - 0xcc4a4a4a, 0xff8c8c8c, 0xffcecece, 0xffcecece, 0xffdeddde, 0xffe6e4e6, 0xffe6e4e6, 0xffefebef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, - 0xffeff3ef, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffced2ce, 0xff8c8e8c, 0xcc4a494a, 0x55080408, - 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x110e0c0e, 0x221b181b, 0x441e201e, 0x661e201e, 0x66292d29, 0x66292d29, - 0x551b1f1b, 0x331b1f1b, 0x110e120e, 0x11000400, 0x00030303, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9a9a9a, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffefefef, 0xffefefef, - 0xfff1f4f1, 0xfff1f4f1, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, - 0xfff7fbf7, 0xfff7fbf7, 0xfff4f6f4, 0xfff4f6f4, 0xffeff3ef, 0xffeff3ef, 0xffe9ece9, 0xffe4e5e4, - 0xffb5b2b5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x110e0d0e, 0x221b1b1b, - 0x66292d29, 0xbb292d29, 0xdd191a19, 0xee101010, 0xee101010, 0xee101010, 0xee101010, 0xdd1e1f1e, - 0xbb292629, 0xdd292629, 0xee191419, 0xee191419, 0xdd191419, 0xdd191419, 0xcc292729, 0x88313131, - 0x44212421, 0x330b0c0b, 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x66100c10, - 0xee4a4a4a, 0xffcecece, 0xffcecece, 0xffcecece, 0xffe6e4e6, 0xffe6e4e6, 0xffefebef, 0xffefebef, - 0xffeff0ef, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xffeff3ef, 0xffeff3ef, 0xffe6e7e6, 0xffe6e7e6, 0xffced2ce, 0xffced2ce, 0xee4a494a, 0x88080408, - 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x110e0c0e, 0x331b181b, 0x66292429, 0x88292d29, 0xaa292d29, 0xaa292d29, 0xaa292d29, - 0x99292d29, 0x77292d29, 0x551b1f1b, 0x220e120e, 0x11080808, 0x00030303, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffe6e3e6, 0xffece9ec, 0xfff1f0f1, 0xfff1f0f1, - 0xfff7f7f7, 0xfffafafa, 0xfffcfcfc, 0xfffcfcfc, 0xfffffcff, 0xfffffcff, 0xfffffcff, 0xfffffcff, - 0xfffffcff, 0xfffffcff, 0xfffffbff, 0xfffffbff, 0xfff1f4f1, 0xfff1f4f1, 0xffecedec, 0xffe6e7e6, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00050405, 0x11100c10, - 0x33212321, 0x77313531, 0xbb313531, 0xee101210, 0xee080808, 0xee080808, 0xee080808, 0xee080808, - 0xee100c10, 0xee100c10, 0xee100c10, 0xee100c10, 0xee101010, 0xdd212021, 0xaa313131, 0x55313131, - 0x33101010, 0x33050505, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x11000000, 0x99101310, - 0xee8c8e8c, 0xffc3c4c3, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffecedec, 0xffecedec, 0xfff1f4f1, - 0xfff7f7f7, 0xfff7f7f7, 0xfffafafa, 0xfffafafa, 0xfffafafa, 0xfffafafa, 0xfffafafa, 0xfff7f7f7, - 0xfffaf6fa, 0xfff4f0f4, 0xfff4f0f4, 0xffefebef, 0xffe6e7e6, 0xffe6e7e6, 0xeea2a3a2, 0xaa191c19, - 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030303, - 0x11080808, 0x221e201e, 0x66292d29, 0xaa292d29, 0xbb292d29, 0xcc262726, 0xcc262726, 0xcc262726, - 0xcc262726, 0xbb292d29, 0x88262726, 0x55242224, 0x220b0c0b, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffe6e3e6, 0xffece9ec, 0xfff1f0f1, 0xfff7f7f7, - 0xfff7f7f7, 0xfffcfcfc, 0xfffcfcfc, 0xffffffff, 0xfffffeff, 0xfffffeff, 0xfffffeff, 0xfffffeff, - 0xfffffeff, 0xfffffeff, 0xfffffeff, 0xfffffbff, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffe6e7e6, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x11050405, - 0x11101210, 0x33212321, 0x77313531, 0xcc313531, 0xee080808, 0xee080808, 0xff080808, 0xff080808, - 0xff050705, 0xee050705, 0xee0b090b, 0xee100c10, 0xee101010, 0xbb313131, 0x77313131, 0x44212021, - 0x33050505, 0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x22000000, 0xbb191c19, - 0xffa7a9a7, 0xffc3c4c3, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffecedec, 0xfff1f4f1, 0xfff1f4f1, - 0xfffafafa, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffffbff, 0xfffaf6fa, 0xfff4f0f4, 0xfff4f0f4, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a3a2, 0xcc191c19, - 0x44000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00050505, - 0x11131413, 0x551e201e, 0x99292d29, 0xbb292d29, 0xcc242224, 0xcc242224, 0xdd242224, 0xdd242224, - 0xdd242224, 0xcc262726, 0xbb292d29, 0x88262726, 0x33161816, 0x110b0c0b, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffe6e3e6, 0xffece9ec, 0xfff1f0f1, 0xfff7f7f7, - 0xfffafafa, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffe6e7e6, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x22101210, 0x44212321, 0x88313531, 0xcc2f332f, 0xee080808, 0xff080808, 0xff080808, - 0xff050705, 0xff050705, 0xee0b090b, 0xee100c10, 0xcc212021, 0x99424142, 0x66212021, 0x44101010, - 0x33000000, 0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x22000000, 0xcc191c19, - 0xffa7a9a7, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffecedec, 0xfff1f4f1, 0xfff1f4f1, 0xfff7fbf7, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfffcfcfc, - 0xfffffbff, 0xfffaf6fa, 0xfffaf6fa, 0xfff4f0f4, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a3a2, 0xdd191c19, - 0x44000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, - 0x22131413, 0x66292d29, 0xaa292d29, 0xcc1e201e, 0xdd242224, 0xdd242224, 0xdd242224, 0xdd211c21, - 0xdd211c21, 0xcc242224, 0xbb292d29, 0x99292d29, 0x55212421, 0x220b0c0b, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffece9ec, 0xfff1f0f1, 0xfff1f0f1, 0xfff7f7f7, - 0xfffafafa, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffecedec, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x22101210, 0x55313531, 0x99424942, 0xdd1b1e1b, 0xff080808, 0xff080808, - 0xff000400, 0xff050705, 0xff050705, 0xee100c10, 0xcc313131, 0x99424142, 0x66212021, 0x44101010, - 0x33050505, 0x33000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x33000000, 0xdd191c19, - 0xffa7a9a7, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffecedec, 0xfff1f4f1, 0xfff1f4f1, 0xfff7fbf7, - 0xfffcfcfc, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, - 0xfffffbff, 0xfffffbff, 0xfffaf6fa, 0xfff4f0f4, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a3a2, 0xdd191c19, - 0x55000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, - 0x33131413, 0x77292d29, 0xbb292d29, 0xcc1e201e, 0xdd211c21, 0xdd242224, 0xdd242224, 0xdd242224, - 0xdd211c21, 0xdd242224, 0xcc292d29, 0xaa292d29, 0x66212421, 0x330b0c0b, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xeea5a2a5, 0xffefebef, 0xffe6e7e6, 0xffececec, 0xfff1f2f1, 0xfff7f7f7, - 0xfff7fbf7, 0xfffafcfa, 0xfffcfefc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff4f6f4, 0xfff1f0f1, 0xffefebef, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x11080408, 0x22191619, 0x553a393a, 0xaa424542, 0xee1b1c1b, 0xff080808, 0xff080808, - 0xff000400, 0xff000400, 0xff000400, 0xee0e100e, 0xee1e1e1e, 0xbb3a393a, 0x882c2b2c, 0x551e1e1e, - 0x440e0d0e, 0x33000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x22000000, 0xcc191c19, - 0xffb8bab8, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffefefef, 0xfff1f3f1, 0xfff4f7f4, 0xfff7fbf7, - 0xfffffcff, 0xfffffeff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xfffcfbfc, 0xfffcfbfc, 0xfffaf7fa, 0xfff7f3f7, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a2a2, 0xdd191819, - 0x55000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, - 0x22131713, 0x77292d29, 0xbb292d29, 0xcc1e221e, 0xdd242224, 0xdd242224, 0xdd211c21, 0xdd211c21, - 0xdd191c19, 0xdd1e221e, 0xcc292d29, 0xaa292d29, 0x66292429, 0x330e0c0e, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xeea5a2a5, 0xffefebef, 0xffe6e7e6, 0xffececec, 0xfff1f2f1, 0xfff7f7f7, - 0xfff7fbf7, 0xfffafcfa, 0xfffcfefc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff4f6f4, 0xfff1f0f1, 0xffefebef, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0x11080408, 0x33292729, 0x773a393a, 0xdd1b1c1b, 0xee080808, 0xff080808, 0xff080808, - 0xff000400, 0xff000400, 0xff000400, 0xee0e100e, 0xee101010, 0xdd1e1e1e, 0xbb3a393a, 0x772c2b2c, - 0x441b1b1b, 0x330e0d0e, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x22000000, 0xbb191c19, - 0xff919291, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffefefef, 0xfff1f3f1, 0xfff4f7f4, 0xfff7fbf7, - 0xfffffeff, 0xfffffeff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xfffcfbfc, 0xfffcfbfc, 0xfffaf7fa, 0xfff7f3f7, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a2a2, 0xcc191819, - 0x44000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00050505, - 0x22131713, 0x661e221e, 0xaa292d29, 0xcc292d29, 0xdd242224, 0xdd242224, 0xdd211c21, 0xdd211c21, - 0xdd1e221e, 0xdd242724, 0xcc292d29, 0x99242724, 0x551b181b, 0x330e0c0e, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xeea5a2a5, 0xffefebef, 0xffe6e7e6, 0xffececec, 0xfff1f2f1, 0xfff7f7f7, - 0xfff7fbf7, 0xfffafcfa, 0xfffcfefc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff4f6f4, 0xfff1f0f1, 0xffefebef, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00030103, - 0x11080408, 0x22191619, 0x663a393a, 0xcc292729, 0xee080808, 0xff080808, 0xff080808, 0xff080808, - 0xee0e100e, 0xee0e100e, 0xee0e100e, 0xee0e100e, 0xee101010, 0xee101010, 0xdd1e1e1e, 0xaa2c2b2c, - 0x66292829, 0x330e0d0e, 0x220e0d0e, 0x11000000, 0x11000000, 0x00000000, 0x22000000, 0x99101310, - 0xee919291, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffefefef, 0xfff1f3f1, 0xfff4f7f4, 0xfff7fbf7, - 0xfffffcff, 0xfffffeff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xfffcfbfc, 0xfffcfbfc, 0xfffaf7fa, 0xfff7f3f7, 0xffe6e7e6, 0xffe6e7e6, 0xeea2a2a2, 0xaa191819, - 0x44000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030303, - 0x11080c08, 0x441e221e, 0x88292d29, 0xbb292d29, 0xcc262726, 0xdd242224, 0xdd242224, 0xdd242224, - 0xdd1e221e, 0xcc292d29, 0xbb292d29, 0x88242724, 0x441b181b, 0x330e0c0e, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xeea5a2a5, 0xffefebef, 0xffe6e7e6, 0xffececec, 0xfff1f2f1, 0xfff7f7f7, - 0xfff7fbf7, 0xfffafcfa, 0xfffcfefc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff4f6f4, 0xfff1f0f1, 0xffefebef, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00030103, 0x00080408, - 0x11191619, 0x44292729, 0xaa3a393a, 0xdd191619, 0xee080808, 0xee080808, 0xee080808, 0xee080808, - 0xdd1b1c1b, 0xdd292829, 0xee0e100e, 0xee0e100e, 0xee101010, 0xee1e1e1e, 0xdd1e1e1e, 0xcc2c2b2c, - 0x99292829, 0x55292829, 0x220e0d0e, 0x11000000, 0x11080908, 0x11000000, 0x11000000, 0x77080908, - 0xee6b696b, 0xffb8bab8, 0xffdee3de, 0xffdee3de, 0xffefefef, 0xfff1f3f1, 0xfff4f7f4, 0xfff7fbf7, - 0xfffffcff, 0xfffffeff, 0xfffffeff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xfffcfbfc, 0xfffaf7fa, 0xfffaf7fa, 0xfff7f3f7, 0xffe6e7e6, 0xffe6e7e6, 0xee5d5d5d, 0x88191819, - 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11080c08, 0x22131713, 0x661e221e, 0x99292d29, 0xbb292d29, 0xcc292d29, 0xcc262726, 0xcc292d29, - 0xcc292d29, 0xbb292d29, 0x99242724, 0x66191c19, 0x330e0c0e, 0x22000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffe6e9e6, 0xffe6e9e6, 0xffeff0ef, 0xfff7f7f7, - 0xfffaf7fa, 0xfffcfbfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffe6e7e6, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x110b0c0b, - 0x33262826, 0x88313531, 0xdd1b1c1b, 0xee101010, 0xee101010, 0xee101010, 0xee101010, 0xdd1e1e1e, - 0xaa4a454a, 0x994a454a, 0xcc312f31, 0xdd191a19, 0xee191c19, 0xdd191c19, 0xdd212321, 0xcc292a29, - 0xbb262426, 0x88262426, 0x441b181b, 0x22100c10, 0x22080c08, 0x11030403, 0x11000000, 0x44050805, - 0xcc504c50, 0xff979397, 0xffdedbde, 0xffdedbde, 0xffececec, 0xffececec, 0xfff7f7f7, 0xfff7f7f7, - 0xfffafbfa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfffcfcfc, - 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xffdee3de, 0xff979897, 0xcc504e50, 0x66080408, - 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x110b0b0b, 0x33161616, 0x66212021, 0x88292d29, 0xaa292d29, 0xbb292d29, 0xbb292d29, - 0xaa292829, 0x88292829, 0x661b1b1b, 0x440e0d0e, 0x33080408, 0x22030103, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffdee3de, 0xffe6e9e6, 0xffeff0ef, 0xfff7f7f7, - 0xfffaf7fa, 0xfffcfbfc, 0xfffcfbfc, 0xffffffff, 0xfffcfefc, 0xfffcfefc, 0xfffcfefc, 0xfffcfefc, - 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfffcfcfc, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffe6e7e6, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x110b0c0b, 0x22161816, - 0x66262826, 0xbb262826, 0xdd1b1c1b, 0xee101010, 0xee101010, 0xee101010, 0xdd1e1e1e, 0xaa3a393a, - 0x77312f31, 0x77312f31, 0x88312f31, 0xbb312f31, 0xdd212321, 0xdd212321, 0xdd292a29, 0xcc313131, - 0xbb313131, 0x99262426, 0x661b181b, 0x33100c10, 0x33080c08, 0x11030403, 0x00000000, 0x22000000, - 0x88080408, 0xee979397, 0xffdedbde, 0xffdedbde, 0xffececec, 0xffececec, 0xfff7f7f7, 0xfff7f7f7, - 0xfffafbfa, 0xfffafbfa, 0xfffafbfa, 0xfffafbfa, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xffdee3de, 0xee979897, 0x99080408, 0x44080408, - 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x110b0b0b, 0x33161616, 0x441e1f1e, 0x661e1f1e, 0x77292d29, 0x771e1f1e, - 0x661b1b1b, 0x551b1b1b, 0x440e0d0e, 0x33000000, 0x22030103, 0x22000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffdee3de, 0xffe6e9e6, 0xffeff0ef, 0xffeff0ef, - 0xfffaf7fa, 0xfffaf7fa, 0xfffcfbfc, 0xfffcfbfc, 0xfffafcfa, 0xfffafcfa, 0xfffafcfa, 0xfffafcfa, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffafafa, 0xfff1f4f1, 0xfff1f4f1, 0xffecedec, 0xffe6e7e6, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x110b0c0b, 0x44212421, - 0x99262826, 0xcc262826, 0xdd1b1c1b, 0xdd1b1c1b, 0xdd101010, 0xdd1e1e1e, 0xbb3a393a, 0x772c2b2c, - 0x66191a19, 0x66191a19, 0x66191a19, 0x88312f31, 0xaa292a29, 0xcc292a29, 0xcc292a29, 0xbb313131, - 0xaa313131, 0x99262426, 0x77262426, 0x441b181b, 0x33050805, 0x22030403, 0x00000000, 0x11000000, - 0x44080408, 0xbb504c50, 0xee979397, 0xffdedbde, 0xffe1e1e1, 0xffececec, 0xffececec, 0xfff7f7f7, - 0xfff4f7f4, 0xfff4f7f4, 0xfffafbfa, 0xfffafbfa, 0xfffafafa, 0xfffafafa, 0xfffafafa, 0xfff7f7f7, - 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xffe1dfe1, 0xee979897, 0xcc504e50, 0x66080408, 0x33080408, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x110b0b0b, 0x22131213, 0x33131213, 0x44131213, 0x44131213, - 0x440e0d0e, 0x330e0d0e, 0x33000000, 0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffdee3de, 0xffe6e9e6, 0xffeff0ef, 0xffeff0ef, - 0xfff7f3f7, 0xfffaf7fa, 0xfffaf7fa, 0xfffaf7fa, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, - 0xfffafafa, 0xfffafafa, 0xfff7f7f7, 0xfff7f7f7, 0xfff1f4f1, 0xfff1f4f1, 0xffecedec, 0xffe6e7e6, - 0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x000b0c0b, 0x22161816, 0x66212421, - 0x99262826, 0xbb262826, 0xcc262826, 0xdd1b1c1b, 0xdd1e1e1e, 0xbb2c2b2c, 0x772c2b2c, 0x551e1e1e, - 0x55000400, 0x55000400, 0x55000400, 0x55191a19, 0x66212321, 0x99292a29, 0xaa292a29, 0xaa292a29, - 0x99313131, 0x88262426, 0x661b181b, 0x441b181b, 0x22050805, 0x22030403, 0x00000000, 0x00000000, - 0x22080408, 0x66080408, 0xcc504c50, 0xff979397, 0xffd6d7d6, 0xffe1e1e1, 0xffececec, 0xffececec, - 0xffeff3ef, 0xfff4f7f4, 0xfff4f7f4, 0xfff4f7f4, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f3f7, 0xfff7f3f7, 0xffe1dfe1, 0xffb5b6b5, 0xdd504e50, 0x88080408, 0x44080408, 0x22080408, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11080408, 0x22080408, 0x22080408, 0x22080408, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33080808, 0xcc080808, 0xee919491, 0xffd6dbd6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, - 0xffa5a6a5, 0xdd080408, 0x55080408, 0x00080408, 0x00000000, 0x110b0b0b, 0x33161616, 0x66212021, - 0x88292829, 0xaa292829, 0xbb292829, 0xcc292829, 0xbb292829, 0x77292829, 0x551b1b1b, 0x550e0d0e, - 0x44030303, 0x44000000, 0x44030303, 0x44080808, 0x440b0b0b, 0x55212021, 0x77212021, 0x88212021, - 0x88212021, 0x77212021, 0x55191819, 0x44101010, 0x22080408, 0x11030103, 0x00000000, 0x00000000, - 0x00000000, 0x22000000, 0x771b1b1b, 0xcc525152, 0xee979397, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffdee3de, 0xffdee3de, 0xff979897, 0xdd504e50, 0x88101410, 0x44000000, 0x22000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x22080808, 0xbb080808, 0xee919491, 0xffd6dbd6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, - 0xeea5a6a5, 0xcc080408, 0x44080408, 0x00080408, 0x00000000, 0x110b0b0b, 0x220b0b0b, 0x44161616, - 0x661e1e1e, 0x77292829, 0x88292829, 0x99292829, 0x77292829, 0x551b1b1b, 0x440e0d0e, 0x44000000, - 0x44000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x330b0b0b, 0x44161616, 0x66161616, - 0x66191819, 0x66191819, 0x55101010, 0x33101010, 0x22030103, 0x11030103, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x22000000, 0x771b1b1b, 0xbb504c50, 0xee979397, 0xff979397, 0xffdedbde, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xff979897, 0xee979897, 0xcc504e50, 0x88080408, 0x44000000, 0x22000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11080808, 0x66080808, 0xbb4d4e4d, 0xee919491, 0xeea5a7a5, 0xffa5a7a5, 0xffa5a7a5, 0xffa5a7a5, - 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, - 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffaaa7aa, 0xffaaa7aa, 0xeeaaa7aa, 0xeeaaa7aa, - 0xcc707070, 0x99080408, 0x33080408, 0x00080408, 0x00000000, 0x00000000, 0x110b0b0b, 0x220b0b0b, - 0x33131313, 0x441e1e1e, 0x441e1e1e, 0x441e1e1e, 0x440e0d0e, 0x440e0d0e, 0x44000000, 0x44000000, - 0x33000000, 0x33000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x220b0b0b, 0x330b0b0b, - 0x44101010, 0x44101010, 0x44080808, 0x33080808, 0x11030103, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x55080408, 0x99080408, 0xcc504c50, 0xee504c50, - 0xeeaaa9aa, 0xffaaa9aa, 0xffaaa9aa, 0xffaaa9aa, 0xffa7a9a7, 0xffa7a9a7, 0xeea7a9a7, 0xee606260, - 0xcc504e50, 0x99080408, 0x66080408, 0x44080408, 0x22000000, 0x11000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080808, 0x22080808, 0x77080808, 0xbb080808, 0xdd212021, 0xdd212021, 0xdd212021, 0xdd212021, - 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, - 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd212021, 0xdd212021, 0xdd212021, 0xcc212021, - 0x99080408, 0x44080408, 0x22080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x110b0b0b, - 0x11080808, 0x11080808, 0x22080808, 0x22080808, 0x33000000, 0x33000000, 0x33000000, 0x33000000, - 0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x22000000, - 0x22080808, 0x33080808, 0x33080808, 0x22080808, 0x11000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11080408, 0x33080408, 0x55080408, 0x88080408, - 0xaa211c21, 0xcc211c21, 0xdd211c21, 0xdd211c21, 0xdd191c19, 0xcc191c19, 0xaa191c19, 0x88191c19, - 0x66080408, 0x44080408, 0x33080408, 0x22080408, 0x11000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x22000000, 0x33000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x44000000, - 0x33000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x11000000, 0x11000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x22000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x22000000, - 0x33000000, 0x44000000, 0x44000000, 0x55000000, 0x55000000, 0x44000000, 0x44000000, 0x33000000, - 0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x33000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, - 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x22000000, 0x22000000, 0x33000300, 0x33000300, 0x44000400, 0x44000400, - 0x55080808, 0x55101010, 0x66101010, 0x66191819, 0x661b1e1b, 0x661b1e1b, 0x66292d29, 0x66292d29, - 0x77313531, 0x77313531, 0x77313531, 0x77313531, 0x773a3d3a, 0x773a3d3a, 0x773a3d3a, 0x773a3d3a, - 0x77424142, 0x77424142, 0x77424142, 0x77424142, 0x77424542, 0x77424542, 0x77424542, 0x77424542, - 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, - 0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, - 0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x88424142, - 0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x883a3d3a, 0x883a3d3a, 0x883a3d3a, 0x883a3d3a, - 0x883a3d3a, 0x883a3d3a, 0x883a3d3a, 0x883a3d3a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, - 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, - 0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313131, 0x88313131, 0x88313131, 0x88313131, - 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, - 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, - 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, - 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, - 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, - 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, - 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313131, - 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313531, 0x88313531, 0x88313531, 0x88313531, - 0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313531, - 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, - 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, - 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x88313531, 0x88313531, 0x88313531, 0x88313531, - 0x88313531, 0x77313531, 0x77313531, 0x88313531, 0x88313131, 0x77313131, 0x77313131, 0x77313131, - 0x77292d29, 0x77292d29, 0x77292d29, 0x77292d29, 0x77292829, 0x77292829, 0x77292829, 0x77292829, - 0x77212021, 0x77212021, 0x77212021, 0x77212021, 0x77191819, 0x77191819, 0x77191819, 0x66101010, - 0x66101010, 0x660b0b0b, 0x660b0b0b, 0x660b0b0b, 0x55080808, 0x55080808, 0x55050505, 0x44050505, - 0x33000400, 0x33000400, 0x22000400, 0x22000300, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080408, 0x22080408, 0x44080408, 0x55080408, - 0x66191419, 0x66191419, 0x77423f42, 0x77423f42, 0x77424542, 0x77424542, 0x77606260, 0x77606260, - 0x77636163, 0x77636163, 0x88636163, 0x88636163, 0x886b696b, 0x886b696b, 0x886b696b, 0x886b696b, - 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x9973797b, 0x9973797b, 0x9973797b, 0x9973797b, - 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, - 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, - 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, - 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b7573, 0xaa7b7573, 0xaa7b7573, 0xaa7b7573, - 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, - 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, - 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, - 0xaa736d73, 0xaa736d73, 0xaa736d73, 0xaa736d73, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa737573, 0xaa737573, 0xbb737573, 0xbb737573, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, - 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa636563, 0xaa636563, 0xaa636563, 0xaa636563, - 0x995a5d5a, 0x995a5d5a, 0x995a5d5a, 0x995a5d5a, 0x99525552, 0x99525552, 0x99525552, 0x88525552, - 0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, - 0x88191c19, 0x77191c19, 0x77191c19, 0x77191c19, 0x66080c08, 0x44080c08, 0x33080c08, 0x22080c08, - 0x11080408, 0x00080408, 0x00080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x55080408, 0x77343134, 0x88605d60, 0x88605d60, - 0x886b6b6b, 0x886b6b6b, 0x886b6b6b, 0x996b6b6b, 0x997e807e, 0x997e807e, 0xaa7e807e, 0xaa7e807e, - 0xaa898a89, 0xaa898a89, 0xaa898a89, 0xaa898a89, 0xbb8c8f8c, 0xbb8c8f8c, 0xbb8c8f8c, 0xbb8c8f8c, - 0xbb949494, 0xbb949494, 0xbb949494, 0xcc949494, 0xcc949797, 0xcc949797, 0xcc949797, 0xcc949797, - 0xcc979a97, 0xcc979a97, 0xcc979a97, 0xcc979a97, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, - 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, - 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, - 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9b9a, 0xcc9c9b9a, 0xcc9c9b9a, 0xcc9c9b9a, - 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, - 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, - 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, - 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, - 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, - 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, - 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, - 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, - 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, - 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, - 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, - 0xcc9f9b9f, 0xcc9f9b9f, 0xcc9f9b9f, 0xcc9f9b9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, - 0xcc9a9d9f, 0xcc9a9d9f, 0xcc9a9d9f, 0xcc9a9d9f, 0xcc9a9a9a, 0xcc9a9a9a, 0xcc9a9a9a, 0xcc9a9a9a, - 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9a9a, 0xcc9a9a9a, 0xcc9a9a9a, 0xcc9a9a9a, - 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, - 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc94979a, 0xcc94979a, 0xcc94979a, 0xcc94979a, - 0xcc979697, 0xcc979697, 0xcc979697, 0xcc979697, 0xcc919291, 0xcc919291, 0xcc919291, 0xcc919291, - 0xcc919291, 0xcc919291, 0xcc919291, 0xcc919291, 0xcc8f908f, 0xcc8f908f, 0xcc8f908f, 0xcc8f908f, - 0xcc8c8b8c, 0xcc8c8b8c, 0xcc8c8b8c, 0xcc8c8b8c, 0xbb848884, 0xbb848884, 0xbb848884, 0xbb848884, - 0xbb7e7d7e, 0xbb7e7d7e, 0xbb7e7d7e, 0xbb7e7d7e, 0xaa737073, 0xaa737073, 0xaa737073, 0xaa737073, - 0xaa6b6b6b, 0x996b6b6b, 0x99424342, 0x99424342, 0x99373937, 0x88373937, 0x77373937, 0x66080c08, - 0x66080408, 0x22080408, 0x00080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x33000000, 0x77262626, 0x88605d60, 0x88605d60, 0x998c8a8c, 0xaa8c8a8c, - 0xaa949694, 0xaa949694, 0xbb949694, 0xbb949694, 0xbb9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, - 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9ca29c, 0xcc9ca29c, 0xdd9ca29c, 0xdd9ca29c, - 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, - 0xdda5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xdda5aaad, 0xdda5aaad, 0xdda5aaad, 0xdda5aaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, - 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, - 0xdda5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, - 0xdd9c9a9c, 0xdd9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc949294, 0xcc949294, 0xcc949294, 0xcc949294, - 0xcc949294, 0xcc949294, 0xcc949294, 0xbb6b6b6b, 0xbb656565, 0xbb656565, 0xaa656565, 0xaa656565, - 0xbb656265, 0x77373337, 0x44080408, 0x11080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x33000000, 0x884d4c4d, 0x99737173, 0xaa8c8a8c, 0xaa8c8a8c, 0xcc8c8a8c, 0xcc8c8a8c, - 0xcc949694, 0xcc949694, 0xdd949694, 0xdd949694, 0xdd9c9e9c, 0xdd9c9e9c, 0xdd9c9e9c, 0xdd9c9e9c, - 0xdd9c9e9c, 0xdd9c9e9c, 0xdd9c9e9c, 0xdd9c9e9c, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, - 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, - 0xdda5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xdda5aaad, 0xdda5aaad, 0xdda5aaad, 0xdda5aaad, - 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, - 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, - 0xdda5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, - 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd949294, 0xdd949294, 0xdd949294, 0xdd949294, - 0xdd949294, 0xdd949294, 0xdd949294, 0xdd949294, 0xdd949294, 0xcc949294, 0xcc949294, 0xcc949294, - 0xee949294, 0xbb656265, 0x99373337, 0x55080408, 0x11080808, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11100c10, 0x773c393a, 0x9994928c, 0xbb94928c, 0xcc8f908f, 0xcc8f908f, 0xdd9ca29c, 0xdd9ca29c, - 0xdda5a1a2, 0xdda5a1a2, 0xdda5a1a2, 0xdda5a1a2, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, - 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a6a7, 0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddb5aead, 0xddb5aead, 0xddb5aead, 0xddb5aead, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb2b3b2, 0xddb2b3b2, 0xddb2b3b2, 0xddb2b3b2, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, - 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, - 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, - 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a979a, 0xdd9a979a, 0xdd9a979a, 0xdd9a979a, - 0xeea5a2a5, 0xdd8c8b8c, 0xbb8c8b8c, 0xaa5a5d5a, 0x662c2d2c, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x44100c10, 0x99686563, 0xbb94928c, 0xcc94928c, 0xdd9ca29c, 0xcc8f908f, 0xdd9ca29c, 0xdd9ca29c, - 0xdda5a1a2, 0xdda5a1a2, 0xdda5a1a2, 0xdda5a1a2, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, - 0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, 0xdda7a6a7, 0xddb5b2b5, 0xdda7a6a7, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, - 0xddb5aead, 0xddb5aead, 0xddb5aead, 0xddb5aead, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb2b3b2, 0xddb2b3b2, 0xddb2b3b2, 0xddb2b3b2, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, 0xddb5b2b5, - 0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, - 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, - 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdd9a9a9a, - 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a979a, 0xdd9a979a, 0xdd9a979a, 0xdd9a979a, - 0xeea5a2a5, 0xeea5a2a5, 0xdd8c8b8c, 0xcc8c8b8c, 0xbb585958, 0x332c2d2c, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00050405, - 0x773c393a, 0xbb94928c, 0xcc94928c, 0xdd94928c, 0xdd9ca29c, 0xdd817f81, 0xff736d73, 0xff817f81, - 0xff847d7b, 0xff948f8f, 0xff948f8f, 0xff948f8f, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c928c, 0xff8c928c, 0xff8c928c, 0xff8c928c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c928c, 0xff8c928c, 0xff8c928c, 0xff8c928c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8a8c, 0xff8c8a8c, 0xff8c8a8c, 0xff8c8a8c, - 0xffa5a2a5, 0xeea5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdd848684, 0x77585958, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11100c10, - 0x88686563, 0xcc94928c, 0xdd94928c, 0xdd94928c, 0xdd9ca29c, 0xdd817f81, 0xff817f81, 0xff8f908f, - 0xffa5a1a2, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffb5aead, 0xffb5aead, 0xffb5aead, 0xffb5aead, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, - 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, - 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, - 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb2b3b2, 0xffb2b3b2, 0xffb2b3b2, 0xffb2b3b2, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, - 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, - 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffa7a5a7, - 0xffa5a2a5, 0xeea5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdd848684, 0xaa585958, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22191419, - 0x99636163, 0xcc898a89, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda7a6a7, 0xdd949294, 0xff949294, 0xffa7a6a7, - 0xffbdbebd, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffbdbebd, - 0xffb2b2b2, 0xee9c9a9c, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9e9c, 0xbb686968, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33191419, - 0xaa636163, 0xdd898a89, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda7a6a7, 0xdd949294, 0xffa7a6a7, 0xffbababa, - 0xffd0d2d0, 0xffe4e7e4, 0xffe4e7e4, 0xffe4e7e4, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, - 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffe4e7e4, 0xffe4e7e4, 0xffe4e7e4, 0xffd0d2d0, - 0xffb2b2b2, 0xeea7a6a7, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9e9c, 0xcc686968, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33100d10, - 0xaa636163, 0xdd898a89, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda7a6a7, 0xdd949294, 0xffa7a6a7, 0xffcecece, - 0xffe4e7e4, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xffe4e7e4, - 0xffbdbebd, 0xeea7a6a7, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9e9c, 0xcc686968, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33100d10, - 0xaa636163, 0xdd898a89, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda7a6a7, 0xdd949294, 0xffbababa, 0xffcecece, - 0xffe4e7e4, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xffe4e7e4, - 0xffbdbebd, 0xeea7a6a7, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9e9c, 0xcc9c9e9c, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33101010, - 0xaa4a5152, 0xdd868a89, 0xdda5a6a5, 0xdda5a6a5, 0xddadadad, 0xdd9c9a9c, 0xffadadad, 0xffced2ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffbdbebd, 0xeea7a9a7, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xcc6e736e, 0x00000400, 0x00000300, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22191819, - 0x994a5152, 0xdd868a89, 0xdda5a6a5, 0xdda5a6a5, 0xddadadad, 0xdd9c9a9c, 0xffadadad, 0xffced2ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffbdbebd, 0xeea7a9a7, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xbb6e736e, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, - 0x994a5152, 0xcc868a89, 0xdda5a6a5, 0xdda5a6a5, 0xddadadad, 0xdd9c9a9c, 0xffadadad, 0xffced2ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffbdbebd, 0xeea7a9a7, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xbb6e736e, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, - 0x994a5152, 0xcc868a89, 0xdda5a6a5, 0xdda5a6a5, 0xddadadad, 0xdd9c9a9c, 0xffadadad, 0xffced2ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffbdbebd, 0xeea7a9a7, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xbb6e736e, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, - 0x884a494a, 0xcc868486, 0xdda5a2a5, 0xdda5a2a5, 0xddadaead, 0xdd9c9a9c, 0xffadaead, 0xffced7ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeaaaaaa, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xaa6e716e, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11101010, - 0x884a494a, 0xcc868486, 0xdda5a2a5, 0xdda5a2a5, 0xddadaead, 0xdd9c9a9c, 0xffadaead, 0xffced7ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeaaaaaa, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xaa6e716e, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, - 0x884a494a, 0xcca5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xddadaead, 0xdd9c9a9c, 0xffadaead, 0xffced7ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeaaaaaa, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xaa6e716e, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, - 0x994a494a, 0xcca5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xddadaead, 0xdd9c9a9c, 0xffadaead, 0xffced7ce, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeaaaaaa, 0xdd9c9e9c, 0xddaaaaaa, 0xdda5aaa5, 0xaa6e716e, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101310, - 0x995a595a, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xddafaeaf, 0xdd9c9a9c, 0xffafaeaf, 0xffd6d7d6, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeafadaf, 0xdda5a2a5, 0xdda5a2a5, 0xddb5b6b5, 0xbb797b79, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101310, - 0x995a595a, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xddafaeaf, 0xdd9c9a9c, 0xffafaeaf, 0xffd6d7d6, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeafadaf, 0xdda5a2a5, 0xdda5a2a5, 0xddb5b6b5, 0xbb797b79, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101310, - 0xaa5a595a, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xddafaeaf, 0xdd9c9a9c, 0xffafaeaf, 0xffd6d7d6, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeafadaf, 0xdda5a2a5, 0xddafadaf, 0xddb5b6b5, 0xcc797b79, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33101310, - 0xaa737373, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xddafaeaf, 0xdd9c9a9c, 0xffafaeaf, 0xffd6d7d6, - 0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, - 0xffc5c2c5, 0xeeafadaf, 0xdda5a2a5, 0xddafadaf, 0xddb5b6b5, 0xcc797b79, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33101010, - 0xaa606060, 0xddada6ad, 0xddada6ad, 0xddada6ad, 0xddbab7ba, 0xdd949294, 0xffbab7ba, 0xffcecace, - 0xffeff0ef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffeff0ef, - 0xffc5c2c5, 0xeea5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaeb5, 0xcc737479, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33080808, - 0xaa606060, 0xddada6ad, 0xddada6ad, 0xddada6ad, 0xddbab7ba, 0xdd949294, 0xffbab7ba, 0xffcecace, - 0xffeff0ef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffeff0ef, - 0xffc5c2c5, 0xeea5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaeb5, 0xbb737479, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33191819, - 0x99606060, 0xccada6ad, 0xddada6ad, 0xddada6ad, 0xddbab7ba, 0xdd949294, 0xffa7a5a7, 0xffcecace, - 0xffdee1de, 0xffeff0ef, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, - 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffeff0ef, 0xffdee1de, - 0xffc5c2c5, 0xeea5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaeb5, 0xbb737479, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, - 0x883a3d3a, 0xbb868386, 0xddada6ad, 0xddada6ad, 0xddbab7ba, 0xdd949294, 0xffa7a5a7, 0xffbab7ba, - 0xffced2ce, 0xffdee1de, 0xffeff0ef, 0xffeff0ef, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffeff0ef, 0xffeff0ef, 0xffdee1de, 0xffced2ce, - 0xffbababa, 0xeea5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaeb5, 0x99737479, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11080808, - 0x773a3a3a, 0xaa6b6c6b, 0xcc9c9e9c, 0xdd9c9e9c, 0xddadaaad, 0xdd949294, 0xff949294, 0xffadaaad, - 0xffbdbebd, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, - 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced1d3, 0xffced1d3, 0xffced1d3, 0xffced1d3, - 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, - 0xffced1ce, 0xffced1ce, 0xffced1ce, 0xffced1ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, - 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, - 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffb8bcb8, - 0xffadaead, 0xeeadaead, 0xddadaead, 0xddadaead, 0xcc848a84, 0x772c2e2c, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x66080808, 0x883a3a3a, 0xaa6b6c6b, 0xcc9c9e9c, 0xddadaaad, 0xccadaaad, 0xddadaaad, 0xddadaaad, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, - 0xddc5c2c5, 0xddc5c2c5, 0xddc8c8c8, 0xddc8c8c8, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, - 0xddc5c6c5, 0xddc5c6c5, 0xddc8cac8, 0xddc8cac8, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, - 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, - 0xddd0d1d0, 0xddd3d0d3, 0xddd0d1d0, 0xddd0d1d0, 0xddd6d2d6, 0xddd6d2d6, 0xddd6d2d6, 0xddd6d2d6, - 0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, 0xddd6d7d6, 0xddd6d7d6, - 0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, - 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd3d7d3, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, - 0xddd9d8d9, 0xdddedbde, 0xddd9d8d9, 0xddd9d8d9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, - 0xdddedbde, 0xdddedbde, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, - 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, - 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd3d5d3, 0xddd3d5d3, 0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, - 0xddd3d5d3, 0xddd3d5d3, 0xddced2ce, 0xddced2ce, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, - 0xddcecece, 0xddced0ce, 0xddcecece, 0xddcecece, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, - 0xddcecdce, 0xddcecdce, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, - 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, - 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, - 0xddadadad, 0xddadadad, 0xddadadad, 0xddadadad, 0xdda2a5a2, 0xdda2a5a2, 0xdda2a5a2, 0xdda2a5a2, - 0xeeadaead, 0xeeadaead, 0xcc818381, 0xbb818381, 0xaa585c58, 0x442c2e2c, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33080808, 0x883a3a3a, 0x883a3a3a, 0xaa6b6c6b, 0xcc949294, 0xbb949294, 0xccadaaad, 0xddadaaad, - 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddc3c2c3, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc8c8c8, - 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc8cac8, - 0xddc8cac8, 0xddc8cac8, 0xddc8cac8, 0xddcbcecb, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, - 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddced0d0, 0xddced0d0, 0xddced0d0, 0xddced2d6, - 0xddced2ce, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, 0xddd6d2d6, 0xddd6d2d6, 0xddd6d2d6, 0xddd3d4d3, - 0xddd3d5d3, 0xddd3d5d3, 0xddd3d5d3, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, - 0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, 0xddd6dbd6, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, - 0xddd9d8d9, 0xddd9d8d9, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9d8d9, 0xddd9d8d9, - 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd3d8d3, 0xddd6dbd6, 0xddd3d8d3, 0xddd6dbd6, - 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd3d5d3, 0xddd3d5d3, 0xddd3d5d3, - 0xddd3d5d3, 0xddd6d7d6, 0xddd3d5d3, 0xddd0d4d0, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, - 0xddced0ce, 0xddced0ce, 0xddced0ce, 0xddced0ce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, - 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcec6ce, - 0xddc8cac8, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, - 0xddc8c8c8, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, - 0xddc3c5c3, 0xddbfc0bf, 0xddc2c4c2, 0xddbebfbe, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, - 0xddadadad, 0xddadadad, 0xddadadad, 0xddadadad, 0xdda2a5a2, 0xdda2a5a2, 0xdda2a5a2, 0xdda2a5a2, - 0xeeadaead, 0xdd818381, 0xbb818381, 0x99555855, 0x772c2e2c, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11080808, 0x66080808, 0x773a3a3a, 0x773a3a3a, 0x99636163, 0x997b797b, 0xbb949294, 0xbb949294, - 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcca5a2a5, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddc3c2c3, 0xddc3c2c3, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddc3c5c3, 0xddc3c5c3, - 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc5c2c5, 0xddc8c8c8, 0xddc5c2c5, 0xddc8c8c8, - 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8cac8, 0xddc5c6c5, 0xddc8cac8, 0xddcbcecb, - 0xddcbcecb, 0xddc8cac8, 0xddc8cac8, 0xddcbcecb, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, - 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddced0d0, 0xddced1d3, 0xddced1d3, 0xddced2d6, - 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddd3d4d3, 0xddd3d4d3, 0xddd3d4d3, 0xddd0d5d0, - 0xddd6d7d6, 0xddd3d5d3, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, - 0xddd6dbd6, 0xddd3d8d3, 0xddd6dbd6, 0xddd6dbd6, 0xddd9d8d9, 0xdddedbde, 0xdddedbde, 0xdddedbde, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xdddedfde, 0xdddedfde, 0xddd9dbd9, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xdddedfde, 0xdddedfde, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xdddedfde, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, - 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd6dbd6, 0xddd6dbd6, 0xddd3d8d3, 0xddd6dbd6, - 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd3d5d3, 0xddd6d7d6, - 0xddd3d5d3, 0xddd6d7d6, 0xddd3d5d3, 0xddd0d4d0, 0xddd6d2d6, 0xddd6d2d6, 0xddd0d1d0, 0xddd0d1d0, - 0xddced2ce, 0xddced1ce, 0xddced0ce, 0xddced0ce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, - 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, - 0xddc8cac8, 0xddc5c6c5, 0xddc8cac8, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, - 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc5c3c6, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, - 0xddc4c4c3, 0xddc4c4c3, 0xddc4c4c2, 0xddc1c0c1, 0xddbfc1bf, 0xddbdbebe, 0xddbdbebe, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, - 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, - 0xddadadad, 0xddadadad, 0xdd9c9a9c, 0xcc9c9a9c, 0xcca2a5a2, 0xcc8c8e8c, 0xcc8c8e8c, 0xcc8c8e8c, - 0xdd818381, 0xaa555855, 0x77292d29, 0x55292d29, 0x22000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x22000000, 0x77101010, 0x77313131, 0x773f3f3f, 0x773f3f3f, 0x885a5d5a, 0x995a5d5a, - 0x99737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa8c8a8c, 0xbb8c8a8c, 0xbb8c8a8c, 0xbb8c8a8c, - 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcca5a6a5, 0xcca5a6a5, 0xcca5a6a5, 0xcca5a6a5, - 0xccadaead, 0xccadaead, 0xccadaead, 0xccadaead, 0xccb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, - 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, - 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbebd, 0xddbdbebd, 0xddbec0bf, 0xddc0c2c1, - 0xddc7cacc, 0xddc8cccd, 0xddc0c3c5, 0xddc2c6c9, 0xddc3c5c7, 0xddc3c3c4, 0xddc0c3c2, 0xddbfc2c0, - 0xddc3c2c3, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, - 0xddc5cac5, 0xddc5cac5, 0xddc5cac5, 0xddc5cac5, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, - 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, - 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, - 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, - 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, - 0xddcecfce, 0xddcfd0cf, 0xddd2d0d0, 0xddd1d3d2, 0xddd7d9d7, 0xddd9dad8, 0xdddbdddb, 0xdddde0de, - 0xdde0e3e2, 0xdde2e2e3, 0xdde2e3e1, 0xdde3e3e4, 0xdde5e3e5, 0xdde4e3e4, 0xdde3e0e2, 0xdddfdcdf, - 0xddd3d1d0, 0xddcecece, 0xddcfd0cf, 0xddd1d0d0, 0xddd5d6d4, 0xddd5d4d5, 0xddd5d4d4, 0xddd2d1d2, - 0xddd0cdd0, 0xddcfccd0, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, - 0xddc5cace, 0xddc5cace, 0xddc5cace, 0xddc5cace, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, - 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, - 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, - 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc8c8c9, 0xddc9c8ca, 0xddc9cbcb, 0xddcacdcc, - 0xddc9c7c8, 0xddc8c8c9, 0xddcac8ca, 0xddc8c7c9, 0xddc6c7c6, 0xddc2c6c3, 0xddc2c3c1, 0xddc4c7c3, - 0xddb9bab9, 0xddb8b6b8, 0xddb7b7b7, 0xddbababa, 0xddbcbfbc, 0xddbcc0bc, 0xddbdc2bd, 0xddbdc2bd, - 0xddb5b6b5, 0xddb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccadb2ad, 0xccadb2ad, 0xccadb2ad, 0xccadb2ad, - 0xcca5a6a5, 0xcca5a6a5, 0xcca5a6a5, 0xcca5a6a5, 0xcc9c9a94, 0xcc9c9a94, 0xcc9c9a94, 0xcc9c9a94, - 0xbb84827b, 0xbb84827b, 0xbb84827b, 0xaa84827b, 0xaa6b6d6b, 0xaa6b6d6b, 0x996b6d6b, 0x99474947, - 0xbb524d52, 0x661b1a1b, 0x44000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x22000000, 0x66101010, 0x77242224, 0x663f3f3f, 0x663f3f3f, 0x663f3f3f, - 0x77504e50, 0x77504e50, 0x77504e50, 0x77504e50, 0x88656565, 0x88656565, 0x88656565, 0x99656565, - 0x99767476, 0x99767476, 0x99767476, 0xaa767476, 0xaa7e7f7e, 0xaa7e7f7e, 0xaa7e7f7e, 0xaa7e7f7e, - 0xaa868786, 0xaa868786, 0xbb868786, 0xbb868786, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, - 0xbb949494, 0xbb949494, 0xbb949494, 0xbb949494, 0xcc9c989c, 0xcc9c989c, 0xcc9c989c, 0xcc9c989c, - 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, - 0xccbdbabd, 0xccbdbabd, 0xccbdbabd, 0xccbdbabd, 0xccbdbebd, 0xccbdbebd, 0xccbcbdbc, 0xccb9baba, - 0xccb1b3b4, 0xccb2b4b4, 0xccb2b5b5, 0xccb3b5b6, 0xccb1b4b6, 0xccb3b5b6, 0xccb4b8b8, 0xccb7b9b9, - 0xccc0c0c2, 0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, - 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, - 0xccc5cac5, 0xccc5cac5, 0xccc5cac5, 0xccc5cac5, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, - 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, - 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, - 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, - 0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, - 0xcccecfce, 0xcccdcecd, 0xcccdcdcd, 0xcccbcbca, 0xccc7c8c7, 0xccc3c5c5, 0xccc3c4c4, 0xccc2c3c2, - 0xccbec1bf, 0xccbbbdbc, 0xccb7b8b6, 0xccb0b2b0, 0xccaeb1af, 0xccb0b1b0, 0xccb5b4b4, 0xccbcbabb, - 0xcca3a6a3, 0xccb8bab7, 0xccc9c9c7, 0xccc9c7c8, 0xccacacac, 0xccb5b3b7, 0xccb8b5b7, 0xccb7b5b5, - 0xccb0aeb1, 0xccb7b6b5, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, - 0xccc5cace, 0xccc5cace, 0xccc5cace, 0xccc5cace, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, - 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, - 0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, - 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, - 0xccc5c6c5, 0xccc5c6c5, 0xccabaeac, 0xcca5a6a5, 0xcca8a9a8, 0xccaeadac, 0xccaeacab, 0xccb5b5b4, - 0xccbcbdbd, 0xccb0b1b2, 0xcca9a9a9, 0xcca5a4a6, 0xcc9f9fa1, 0xcc9da09f, 0xcc9ca09e, 0xccafb3b1, - 0xccacadab, 0xcca8a9a7, 0xcca0a09f, 0xcc999a99, 0xbb939492, 0xbb8d918e, 0xbb8c908c, 0xbb8c908c, - 0xbb868686, 0xbb868686, 0xbb868686, 0xbb868686, 0xbb7b7f7b, 0xbb7b7f7b, 0xaa7b7f7b, 0xaa7b7f7b, - 0xaa737370, 0xaa737370, 0xaa737370, 0xaa737370, 0x99686763, 0x99686763, 0x99686763, 0x99686763, - 0x995a5955, 0x885a5955, 0x885a5955, 0x8831312f, 0x77242424, 0x77242424, 0x77242424, 0x66242424, - 0x661b1a1b, 0x33000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x44080408, 0x66080408, 0x66242224, 0x66242224, - 0x662c2b2c, 0x662c2b2c, 0x662c2b2c, 0x662c2b2c, 0x663f413f, 0x663f413f, 0x663f413f, 0x663f413f, - 0x77504e50, 0x77504e50, 0x77504e50, 0x77504e50, 0x77585858, 0x77585858, 0x77585858, 0x77585858, - 0x88606060, 0x88606060, 0x88606060, 0x88606060, 0x88636563, 0x88636563, 0x88636563, 0x88636563, - 0x886b6b6b, 0x886b6b6b, 0x996b6b6b, 0x996b6b6b, 0x99736f73, 0x99736f73, 0x99736f73, 0x99736f73, - 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, - 0x99707170, 0x99707170, 0x99707170, 0x99707170, 0xaa767576, 0x99767576, 0xaa767576, 0xaa767576, - 0xaa7b7c7e, 0xaa7b7c7e, 0xaa7b7c7f, 0xaa7d7e80, 0xaa7a7a7c, 0xaa7b7a7c, 0xaa787979, 0xaa777677, - 0xaa797979, 0xaa797979, 0xaa797979, 0xaa797979, 0xaa979694, 0xaa979694, 0xaa979694, 0xaa979694, - 0xaa949694, 0xaa949694, 0xaa949694, 0xaa949694, 0xaa797b79, 0xaa797b79, 0xaa797b79, 0xaa797b79, - 0xaa797979, 0xaa797979, 0xaa797979, 0xaa797979, 0xaa7b7976, 0xaa7b7976, 0xaa7b7976, 0xaa7b7976, - 0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, - 0xaa767576, 0x99767576, 0x99767576, 0x99767576, 0x99767876, 0x99767876, 0x99767876, 0x99767876, - 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767576, - 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99707770, 0x99707770, 0x99707770, 0x99707770, - 0x99707370, 0x99707370, 0x99707370, 0x99717571, 0x99787c79, 0x99787d79, 0x99787d79, 0x99797d79, - 0x99787d79, 0x99797d79, 0x99797d78, 0x99797d79, 0x99797c79, 0x99797c79, 0x99797c79, 0x99797c78, - 0x99747672, 0x99727672, 0x99727371, 0x99707371, 0x99797879, 0x99797878, 0x99797879, 0x99787879, - 0x99777577, 0xaa777676, 0xaa767476, 0xaa767476, 0xaa767476, 0xaa767476, 0xaa767476, 0xaa767476, - 0xaa6e7170, 0xaa6e7170, 0xaa6e7170, 0xaa6e7170, 0xaa737373, 0xaa737373, 0xaa737373, 0xaa737373, - 0xaa737373, 0xaa737373, 0xaa737373, 0xaa737373, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, - 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa707070, 0xaa707070, 0xaa707070, 0xaa707070, - 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, - 0x996e706e, 0xaa6f716f, 0x99747673, 0x99757774, 0x99767676, 0x99777876, 0x99737373, 0x99737272, - 0x99757577, 0x996e6e72, 0x996b6c70, 0x996b6c70, 0x99686c68, 0x99686c68, 0x99686c68, 0x996b6f6b, - 0x99636563, 0x995d5e5d, 0x995d5e5d, 0x995d5e5d, 0x995a5e5a, 0x885a5e5a, 0x885a5e5a, 0x885a5e5a, - 0x88585558, 0x88585558, 0x88585558, 0x88585558, 0x884a4c4a, 0x884a4c4a, 0x884a4c4a, 0x884a4c4a, - 0x77423f3c, 0x77423f3c, 0x77423f3c, 0x77423f3c, 0x77343331, 0x77343331, 0x77343331, 0x77343331, - 0x6631312f, 0x66080808, 0x66080808, 0x66080808, 0x66000000, 0x66000000, 0x55000000, 0x33000000, - 0x44000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080408, 0x11080408, 0x22080408, 0x33080408, - 0x44080808, 0x55080808, 0x55080808, 0x66080808, 0x66191c19, 0x66191c19, 0x66191c19, 0x66191c19, - 0x66292829, 0x66292829, 0x66292829, 0x66292829, 0x66313131, 0x66313131, 0x66313131, 0x66313131, - 0x663a393a, 0x663a393a, 0x663a393a, 0x663a393a, 0x663a3d3a, 0x663a3d3a, 0x663a3d3a, 0x663a3d3a, - 0x66424142, 0x66424142, 0x66424142, 0x66424142, 0x664a454a, 0x664a454a, 0x664a454a, 0x664a454a, - 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, - 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x77525152, 0x77525152, 0x77525152, 0x77525152, - 0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x77525152, - 0x77525552, 0x77525552, 0x77525552, 0x77525552, 0x774a4542, 0x774a4542, 0x774a4542, 0x774a4542, - 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77525552, 0x77525552, 0x77525552, 0x77525552, - 0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x7752514a, 0x7752514a, 0x7752514a, 0x7752514a, - 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, - 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, - 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, - 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x77424942, 0x77424942, 0x77424942, 0x77424942, - 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424942, 0x77424942, 0x77424942, 0x77424942, - 0x77424942, 0x77424942, 0x77424942, 0x77424942, 0x77424942, 0x77424942, 0x77424942, 0x77424942, - 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, - 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, - 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, - 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, - 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, - 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424542, - 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424142, 0x77424142, 0x77424142, 0x77424142, - 0x773a3d42, 0x773a3d42, 0x773a3d42, 0x773a3d42, 0x773a3d3a, 0x773a3d3a, 0x773a3d3a, 0x773a3d3a, - 0x66313531, 0x66313531, 0x66313531, 0x66313531, 0x66292d29, 0x66292d29, 0x66292d29, 0x66292d29, - 0x66292429, 0x66292429, 0x66292429, 0x66292429, 0x66191819, 0x66191819, 0x66191819, 0x66191819, - 0x66100c08, 0x66100c08, 0x66100c08, 0x66100c08, 0x66000000, 0x66000000, 0x66000000, 0x66000000, - 0x66080808, 0x66080808, 0x66080808, 0x55080808, 0x44000000, 0x22000000, 0x11000000, 0x11000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, 0x22000000, 0x33000000, 0x44000000, - 0x44000000, 0x44000000, 0x55000000, 0x55000000, 0x55000400, 0x55000400, 0x55000400, 0x55000400, - 0x55080808, 0x66080808, 0x66080808, 0x66080808, 0x662f2f2f, 0x662f2f2f, 0x662f2f2f, 0x662f2f2f, - 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, - 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, - 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, - 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, - 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, - 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, - 0x662f2f2f, 0x662f2f2f, 0x662f2f2f, 0x662f2f2f, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, - 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080400, 0x66080400, 0x66080400, 0x66080400, - 0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000400, - 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, - 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x44000000, 0x44000000, 0x33000000, 0x33000000, - 0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000400, 0x11000400, 0x11000400, 0x22000400, - 0x22080808, 0x22080808, 0x22080808, 0x22080808, 0x33000000, 0x33000000, 0x33000000, 0x33000000, - 0x33000000, 0x33000000, 0x33000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, - 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, - 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x55000000, 0x44000000, 0x44000000, 0x44000000, - 0x44000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, - 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55080808, 0x44080808, 0x44080808, 0x44080808, - 0x55080808, 0x44080808, 0x44080808, 0x55080808, 0x55080808, 0x44080808, 0x44080808, 0x44080808, - 0x44080808, 0x44080808, 0x44080808, 0x44080808, 0x44080808, 0x44080808, 0x44080808, 0x44080808, - 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, - 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, - 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, - 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, - 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, - 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, - 0x44080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, - 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, - 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, - 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, - 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080400, 0x44080400, 0x44080400, 0x44080400, - 0x44000400, 0x44000400, 0x44000400, 0x44000400, 0x44000400, 0x44000400, 0x44000400, 0x44000400, - 0x44000000, 0x44000000, 0x44000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, - 0x33000000, 0x33000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0x00000400, 0x00000400, - 0x00080808, 0x00080808, 0x00080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11080808, 0x11080808, 0x11080808, 0x11080808, - 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, - 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, - 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080400, 0x11080400, 0x11080400, 0x11080400, - 0x11000400, 0x11000400, 0x11000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xbb4d4e4d, 0xbb737573, 0xbb737573, - 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, - 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, - 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, - 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, - 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, - 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, - 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, - 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, - 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, - 0xbb737573, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xcc737573, 0xcc737573, 0xcc737573, - 0xcca5a6a5, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, - 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xcca5a6a5, 0xcca5a6a5, - 0xcc737173, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xdd737573, 0xdd737573, 0xddadaead, - 0xdda5a6a5, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, - 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddbabcba, 0xdda5a6a5, - 0xddadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xee737573, 0xeeadaead, 0xeeadaead, - 0xeebabcba, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeed0d1d0, 0xeebabcba, - 0xeeadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xee737573, 0xeeadaead, 0xeeadaead, - 0xeed0d1d0, 0xeefffffe, 0xeeffffff, 0xeeffffff, 0xeefefffe, 0xfffefeff, 0xeefffeff, 0xeefefeff, - 0xeefeffff, 0xeefeffff, 0xeeffffff, 0xeefeffff, 0xeeffffff, 0xeefffefe, 0xeefffefe, 0xeefeffff, - 0xfffefefe, 0xeefefffe, 0xeefffffe, 0xeeffffff, 0xfffefffe, 0xeefffefe, 0xeeffffff, 0xeefffffe, - 0xfffefffe, 0xeefffeff, 0xeefeffff, 0xeefffeff, 0xffffffff, 0xeefffffe, 0xfffffefe, 0xfffffeff, - 0xeefeffff, 0xffffffff, 0xfffffffe, 0xeefffeff, 0xeefefffe, 0xffffffff, 0xeefffeff, 0xeefefffe, - 0xeefffffe, 0xeefffeff, 0xeefeffff, 0xeefeffff, 0xeefffffe, 0xeeffffff, 0xeeffffff, 0xeeffffff, - 0xeeffffff, 0xeefffeff, 0xfffeffff, 0xeefffffe, 0xeefffeff, 0xfffefffe, 0xeefffffe, 0xeeffffff, - 0xeefffefe, 0xffffffff, 0xeeffffff, 0xeefefefe, 0xeefefefe, 0xeeffffff, 0xeefffefe, 0xeefeffff, - 0xfffffffe, 0xeefffffe, 0xeefffefe, 0xeeffffff, 0xeefefeff, 0xeefefeff, 0xfffffeff, 0xfffffeff, - 0xffffffff, 0xeefeffff, 0xeefefeff, 0xeefffeff, 0xfffeffff, 0xeefffefe, 0xffffffff, 0xeefffffe, - 0xeeffffff, 0xfffffeff, 0xeefffffe, 0xeeffffff, 0xeefeffff, 0xfffefefe, 0xeefffeff, 0xeefffffe, - 0xeefffefe, 0xeefffeff, 0xfffefefe, 0xfffffffe, 0xeefffeff, 0xeefefeff, 0xeefffefe, 0xeeffffff, - 0xeefffeff, 0xeefefeff, 0xfffefeff, 0xeefefefe, 0xfffffffe, 0xfffefeff, 0xeefefeff, 0xeeffffff, - 0xeefefefe, 0xeefffffe, 0xeefefefe, 0xeefffeff, 0xfffefffe, 0xfffefefe, 0xeefefffe, 0xeefefffe, - 0xfffffffe, 0xffffffff, 0xeefeffff, 0xfffffefe, 0xeefefefe, 0xeefffefe, 0xfffefefe, 0xeefefeff, - 0xfffeffff, 0xeeffffff, 0xfffefefe, 0xfffefefe, 0xeefeffff, 0xeefeffff, 0xfffffefe, 0xeeffffff, - 0xeefffefe, 0xeefefffe, 0xeefefffe, 0xeefffeff, 0xfffffefe, 0xeeffffff, 0xfffefeff, 0xfffffefe, - 0xeefeffff, 0xeefefeff, 0xeefefeff, 0xeefffffe, 0xfffffefe, 0xeefffeff, 0xeefefffe, 0xeefefefe, - 0xeefeffff, 0xeefefefe, 0xeefeffff, 0xeefffeff, 0xeefeffff, 0xeeffffff, 0xfffffeff, 0xeeffffff, - 0xeefefffe, 0xfffefffe, 0xfffefffe, 0xeefffeff, 0xfffffeff, 0xeefefefe, 0xeefefffe, 0xeefefffe, - 0xeefefffe, 0xeefffeff, 0xeefffeff, 0xfffeffff, 0xeefffffe, 0xeeffffff, 0xeefffefe, 0xeefefefe, - 0xeefefeff, 0xeefefefe, 0xeefefeff, 0xeeffffff, 0xeeffffff, 0xfffefffe, 0xfffeffff, 0xeefffefe, - 0xeefffffe, 0xeefefefe, 0xeefffefe, 0xeefeffff, 0xeefffffe, 0xeefefefe, 0xeefefffe, 0xeefeffff, - 0xeefffeff, 0xfffffffe, 0xeefeffff, 0xeefeffff, 0xeefffffe, 0xeefffffe, 0xeefefffe, 0xeefffeff, - 0xeefefeff, 0xfffffffe, 0xeefefeff, 0xeefefffe, 0xeeffffff, 0xeefffefe, 0xeefefeff, 0xeefffffe, - 0xeefefffe, 0xeefffeff, 0xeefefeff, 0xfffeffff, 0xeefefeff, 0xeefffeff, 0xeefffffe, 0xeefffeff, - 0xeefffefe, 0xeefefeff, 0xeefefffe, 0xeefefeff, 0xeefffeff, 0xeefffffe, 0xeefffffe, 0xeefefeff, - 0xeefefefe, 0xfffffeff, 0xeefffefe, 0xeefefeff, 0xeefefefe, 0xfffeffff, 0xeee6e7e6, 0xeed0d1d0, - 0xeeadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848384, 0xffc5c2c5, 0xffc5c2c5, - 0xffdedfde, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefeff, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefffe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefeff, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefffe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, - 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xffe9e9e9, 0xffdedfde, - 0xffdedfde, 0x00060306, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848384, 0xffc5c2c5, 0xffc5c2c5, - 0xffdedfde, 0xfffefdfd, 0xfffdfdfd, 0xfffdfefd, 0xfffdfdfd, 0xfffdfdfe, 0xfffdfdfd, 0xfffefefd, - 0xfffdfefe, 0xfffdfefd, 0xfffefefd, 0xfffefefd, 0xfffefefd, 0xfffdfefd, 0xfffdfdfd, 0xfffdfdfd, - 0xfffefefe, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfe, 0xfffefdfd, 0xfffefefd, 0xfffdfefd, 0xfffdfdfd, - 0xfffdfdfd, 0xfffdfefe, 0xfffdfdfd, 0xfffdfefd, 0xfffdfefe, 0xfffefdfd, 0xfffefdfd, 0xfffdfdfe, - 0xfffdfdfd, 0xfffdfefd, 0xfffdfdfe, 0xfffdfdfd, 0xfffdfdfe, 0xfffdfefd, 0xfffefdfe, 0xfffefdfd, - 0xfffdfefd, 0xfffefdfe, 0xfffefdfd, 0xfffefefd, 0xfffefefe, 0xfffefdfe, 0xfffefefe, 0xfffdfdfd, - 0xfffdfefd, 0xfffdfefd, 0xfffdfdfd, 0xfffdfdfd, 0xfffefdfe, 0xfffdfefe, 0xfffefdfd, 0xfffdfefd, - 0xfffdfdfd, 0xfffdfefe, 0xfffdfefd, 0xfffefdfd, 0xfffdfefe, 0xfffdfdfe, 0xfffdfefd, 0xfffefdfe, - 0xfffdfefd, 0xfffefefd, 0xfffdfefd, 0xfffdfefd, 0xfffdfefd, 0xfffdfefe, 0xfffefdfe, 0xfffdfefd, - 0xfffefefe, 0xfffdfdfe, 0xfffefefd, 0xfffdfdfd, 0xfffefefd, 0xfffefdfe, 0xfffefdfd, 0xfffefefd, - 0xfffdfefd, 0xfffdfefd, 0xfffdfdfe, 0xfffdfdfd, 0xfffefdfe, 0xfffdfefe, 0xfffdfdfd, 0xfffdfefd, - 0xfffdfdfe, 0xfffefdfe, 0xfffdfdfe, 0xfffdfefe, 0xfffefefe, 0xfffefefd, 0xfffefdfe, 0xfffdfdfe, - 0xfffdfdfd, 0xfffdfefd, 0xfffefdfd, 0xfffdfdfd, 0xfffdfdfe, 0xfffdfdfd, 0xfffefefe, 0xfffefdfd, - 0xfffefdfd, 0xfffdfefe, 0xfffdfdfe, 0xfffefdfd, 0xfffefdfd, 0xfffefdfe, 0xfffdfdfd, 0xfffdfdfd, - 0xfffefefe, 0xfffdfefe, 0xfffefdfd, 0xfffefefe, 0xfffdfdfd, 0xfffefdfd, 0xfffdfdfd, 0xfffefdfd, - 0xfffefdfe, 0xfffdfefd, 0xfffdfdfd, 0xfffdfefe, 0xfffdfdfd, 0xfffdfefe, 0xfffdfdfe, 0xfffdfdfd, - 0xfffefefe, 0xfffdfefd, 0xfffdfefe, 0xfffdfdfe, 0xfffdfdfe, 0xfffefefd, 0xfffefdfe, 0xfffdfdfd, - 0xfffdfdfd, 0xfffefefe, 0xfffdfdfe, 0xfffefdfe, 0xfffdfdfd, 0xfffdfefd, 0xfffefefe, 0xfffefdfd, - 0xfffdfefe, 0xfffdfefe, 0xfffefefe, 0xfffdfdfe, 0xfffdfdfd, 0xfffefdfd, 0xfffdfdfd, 0xfffdfdfd, - 0xfffdfdfd, 0xfffdfefd, 0xfffdfdfd, 0xfffefdfd, 0xfffefefe, 0xfffdfefd, 0xfffefdfd, 0xfffdfefe, - 0xfffefdfd, 0xfffefdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffefdfe, 0xfffefdfd, 0xfffefdfd, 0xfffdfefe, - 0xfffdfefd, 0xfffdfefd, 0xfffdfdfd, 0xfffefefe, 0xfffdfefd, 0xfffefdfd, 0xfffdfdfd, 0xfffefefd, - 0xfffefefd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfefd, 0xfffdfdfe, 0xfffefdfe, 0xfffefdfd, - 0xfffdfdfd, 0xfffefefd, 0xfffefefd, 0xfffdfefd, 0xfffefefd, 0xfffefdfd, 0xfffdfefe, 0xfffdfefd, - 0xfffdfdfd, 0xfffdfdfe, 0xfffdfdfe, 0xfffdfdfd, 0xfffdfdfe, 0xfffefdfe, 0xfffefdfd, 0xfffdfefe, - 0xfffdfdfd, 0xfffefefd, 0xfffdfdfd, 0xfffefdfe, 0xfffdfefe, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfe, - 0xfffefdfe, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffefdfe, 0xfffefdfe, 0xfffdfdfd, 0xfffdfdfe, - 0xfffefefd, 0xfffdfdfd, 0xfffefefe, 0xfffdfefd, 0xfffdfdfe, 0xfffdfdfe, 0xfff4f4f4, 0xffdedfde, - 0xffdedfde, 0x00060306, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848384, 0xffc5c2c5, 0xffc5c2c5, - 0xffe9e9e9, 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffcfcfd, 0xfffdfdfd, 0xfffdfdfd, - 0xfffcfdfd, 0xfffdfdfc, 0xfffcfdfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfc, - 0xfffdfcfd, 0xfffdfcfd, 0xfffdfcfc, 0xfffcfcfc, 0xfffdfcfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfd, - 0xfffdfdfd, 0xfffdfcfc, 0xfffdfcfd, 0xfffcfcfd, 0xfffdfdfc, 0xfffdfcfd, 0xfffdfdfc, 0xfffdfdfd, - 0xfffdfdfc, 0xfffcfdfd, 0xfffdfdfc, 0xfffdfcfd, 0xfffcfcfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffdfdfd, - 0xfffdfdfd, 0xfffdfdfd, 0xfffcfcfc, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfcfd, - 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, - 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffcfcfc, 0xfffcfdfd, 0xfffdfdfc, 0xfffdfcfd, - 0xfffdfcfd, 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfcfd, 0xfffdfdfd, - 0xfffdfdfd, 0xfffdfdfc, 0xfffdfdfd, 0xfffdfcfd, 0xfffcfdfd, 0xfffdfcfc, 0xfffdfcfd, 0xfffdfdfd, - 0xfffcfdfc, 0xfffdfdfd, 0xfffdfcfc, 0xfffdfcfc, 0xfffcfdfc, 0xfffcfdfd, 0xfffdfdfd, 0xfffcfcfd, - 0xfffdfcfd, 0xfffcfcfc, 0xfffdfdfc, 0xfffcfcfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffcfcfd, 0xfffdfdfd, - 0xfffdfcfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffcfcfc, 0xfffdfcfd, 0xfffcfdfd, 0xfffdfcfc, - 0xfffcfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfcfd, 0xfffdfdfd, - 0xfffdfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffdfcfd, - 0xfffdfdfd, 0xfffcfcfc, 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, - 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfd, - 0xfffdfdfd, 0xfffcfdfd, 0xfffdfcfc, 0xfffcfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, - 0xfffdfdfd, 0xfffdfcfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfcfd, 0xfffdfdfd, - 0xfffdfdfc, 0xfffdfdfc, 0xfffcfdfd, 0xfffcfdfd, 0xfffdfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, - 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfdfd, 0xfffcfdfc, 0xfffdfdfd, - 0xfffdfdfd, 0xfffcfcfd, 0xfffdfcfd, 0xfffcfdfc, 0xfffdfcfd, 0xfffcfdfc, 0xfffdfdfd, 0xfffdfdfd, - 0xfffdfcfc, 0xfffdfdfd, 0xfffcfcfd, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfcfd, 0xfffdfdfd, - 0xfffcfdfd, 0xfffdfcfd, 0xfffdfcfd, 0xfffdfdfc, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffcfdfd, - 0xfffdfcfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfcfc, - 0xfffcfcfd, 0xfffdfcfd, 0xfffdfdfc, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfc, - 0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfc, 0xfffdfdfd, 0xfffdfcfd, 0xfffcfdfd, 0xfffcfdfc, 0xfffdfdfd, - 0xfffdfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffcfdfd, 0xfffdfcfd, 0xfff4f4f4, 0xffe9e9e9, - 0xffdedfde, 0x00060306, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848384, 0xffc5c2c5, 0xffc5c2c5, - 0xffe9e9e9, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfbfc, - 0xfffbfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffbfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfbfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfbfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfb, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfb, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfb, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfb, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, - 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfff4f4f4, 0xffe9e9e9, - 0xffdedfde, 0x00060306, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848684, 0xffc5c6c5, 0xffc5c6c5, - 0xffe6ebe6, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, - 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffcfbfb, - 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfb, - 0xfffbfcfc, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfc, - 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfcfc, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, - 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, - 0xfffcfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffcfbfb, - 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfc, 0xfffbfcfb, 0xfffbfcfb, - 0xfffbfcfc, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, - 0xfffcfbfb, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfc, 0xfffbfbfb, 0xfffbfbfb, - 0xfffbfbfc, 0xfffbfbfb, 0xfffbfcfc, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, - 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, - 0xfffbfcfb, 0xfffbfcfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffcfbfb, 0xfffbfbfc, - 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, - 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfc, 0xfffcfbfb, - 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfb, - 0xfffbfbfc, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfc, 0xfffcfbfb, 0xfffbfcfb, - 0xfffbfbfb, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, - 0xfffbfbfc, 0xfffbfcfc, 0xfffcfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfc, 0xfffbfbfb, - 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, - 0xfffbfcfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfc, 0xfffbfcfc, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfcfc, - 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, - 0xfffbfcfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfc, 0xfffbfcfc, - 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfc, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfcfb, 0xfffbfbfb, - 0xfffbfbfb, 0xfffbfcfb, 0xfffcfbfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfb, - 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, - 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, - 0xfffbfbfc, 0xfffbfcfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfff7f8f7, 0xffe6ebe6, - 0xffdedfde, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848684, 0xffc5c6c5, 0xffc5c6c5, - 0xffe6ebe6, 0xfffafafb, 0xfffafafb, 0xfffafafa, 0xfffafbfa, 0xfffbfafb, 0xfffafafa, 0xfffafafa, - 0xfffafbfa, 0xfffbfafa, 0xfffbfafa, 0xfffafbfa, 0xfffbfafa, 0xfffbfafb, 0xfffafafa, 0xfffbfafa, - 0xfffafafa, 0xfffafafb, 0xfffbfafb, 0xfffafafa, 0xfffbfbfa, 0xfffafafa, 0xfffafbfb, 0xfffafbfb, - 0xfffafbfa, 0xfffafafb, 0xfffafbfa, 0xfffbfafa, 0xfffbfbfa, 0xfffafbfa, 0xfffbfafa, 0xfffafbfa, - 0xfffafafa, 0xfffbfafa, 0xfffafbfa, 0xfffbfafb, 0xfffafafb, 0xfffafafa, 0xfffafbfa, 0xfffbfbfb, - 0xfffafbfa, 0xfffbfafb, 0xfffafafa, 0xfffafbfb, 0xfffafbfa, 0xfffafafa, 0xfffafafb, 0xfffafbfb, - 0xfffbfafa, 0xfffafbfa, 0xfffafafb, 0xfffafafb, 0xfffafafb, 0xfffafafb, 0xfffbfbfb, 0xfffafafa, - 0xfffafafa, 0xfffafafb, 0xfffbfafa, 0xfffafbfa, 0xfffafbfa, 0xfffafbfa, 0xfffafafa, 0xfffbfbfa, - 0xfffafafa, 0xfffbfbfa, 0xfffbfafa, 0xfffbfafb, 0xfffafafa, 0xfffafbfa, 0xfffafafa, 0xfffafbfa, - 0xfffafafa, 0xfffafafa, 0xfffbfafb, 0xfffafafa, 0xfffafbfa, 0xfffafafa, 0xfffafafa, 0xfffafafa, - 0xfffbfbfa, 0xfffafafa, 0xfffbfafa, 0xfffafafb, 0xfffbfbfa, 0xfffafbfa, 0xfffafbfa, 0xfffafafa, - 0xfffafbfb, 0xfffbfbfa, 0xfffafafa, 0xfffafafa, 0xfffbfafb, 0xfffafafb, 0xfffafbfa, 0xfffafbfa, - 0xfffbfbfa, 0xfffbfbfb, 0xfffafbfa, 0xfffafafa, 0xfffbfbfa, 0xfffbfafa, 0xfffafbfa, 0xfffafafa, - 0xfffbfafb, 0xfffafafa, 0xfffbfafb, 0xfffbfbfb, 0xfffbfafb, 0xfffafafa, 0xfffafafa, 0xfffafbfa, - 0xfffafafa, 0xfffafafb, 0xfffafafb, 0xfffafafb, 0xfffbfafb, 0xfffbfafb, 0xfffafbfa, 0xfffbfafa, - 0xfffafafa, 0xfffafbfb, 0xfffbfafa, 0xfffafafb, 0xfffafbfb, 0xfffafbfa, 0xfffafafa, 0xfffbfbfa, - 0xfffafbfa, 0xfffafafa, 0xfffafafb, 0xfffbfafa, 0xfffafafa, 0xfffbfafa, 0xfffbfafb, 0xfffbfafb, - 0xfffafafa, 0xfffafbfa, 0xfffbfbfa, 0xfffafbfa, 0xfffbfbfa, 0xfffafbfa, 0xfffafbfb, 0xfffafbfa, - 0xfffbfbfb, 0xfffafbfb, 0xfffbfafb, 0xfffafafa, 0xfffafafa, 0xfffbfafa, 0xfffbfafa, 0xfffbfafb, - 0xfffbfbfa, 0xfffafbfa, 0xfffafafa, 0xfffafbfa, 0xfffbfafa, 0xfffafafb, 0xfffafbfa, 0xfffafafb, - 0xfffbfbfa, 0xfffbfafa, 0xfffbfbfa, 0xfffbfafb, 0xfffbfafa, 0xfffafafa, 0xfffafafa, 0xfffbfafb, - 0xfffafafa, 0xfffbfbfb, 0xfffbfafb, 0xfffafafb, 0xfffafafa, 0xfffbfafa, 0xfffbfafb, 0xfffbfafb, - 0xfffbfafa, 0xfffafafb, 0xfffbfafa, 0xfffafafb, 0xfffafafa, 0xfffafbfb, 0xfffbfbfa, 0xfffbfafa, - 0xfffafbfa, 0xfffafafa, 0xfffafbfa, 0xfffbfbfa, 0xfffafbfb, 0xfffafbfb, 0xfffbfafb, 0xfffafafa, - 0xfffafbfb, 0xfffafafb, 0xfffbfbfa, 0xfffafafa, 0xfffafafb, 0xfffafafa, 0xfffafafb, 0xfffafbfa, - 0xfffbfafa, 0xfffbfbfb, 0xfffafafb, 0xfffafbfb, 0xfffafbfb, 0xfffbfafa, 0xfffafbfb, 0xfffafafa, - 0xfffafafa, 0xfffafbfa, 0xfffbfafa, 0xfffafbfa, 0xfffbfafa, 0xfffbfafa, 0xfffafbfa, 0xfffbfafb, - 0xfffafbfa, 0xfffafafb, 0xfffbfafa, 0xfffbfafb, 0xfffafbfb, 0xfffbfbfa, 0xfff7f8f7, 0xffe6ebe6, - 0xffdedfde, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848684, 0xffc5c6c5, 0xffc5c6c5, - 0xffe6ebe6, 0xfffafafa, 0xfff9f9fa, 0xfffaf9fa, 0xfff9faf9, 0xfff9faf9, 0xfffafafa, 0xfff9f9f9, - 0xfffaf9f9, 0xfff9f9f9, 0xfff9f9f9, 0xfffaf9f9, 0xfff9fafa, 0xfff9fafa, 0xfff9f9fa, 0xfffafaf9, - 0xfff9faf9, 0xfffafafa, 0xfff9f9fa, 0xfff9f9f9, 0xfff9f9f9, 0xfffaf9fa, 0xfffaf9fa, 0xfff9f9f9, - 0xfffafaf9, 0xfff9f9f9, 0xfff9faf9, 0xfffaf9f9, 0xfffafaf9, 0xfffaf9f9, 0xfff9f9fa, 0xfff9f9f9, - 0xfffafafa, 0xfff9faf9, 0xfff9f9f9, 0xfff9fafa, 0xfffafaf9, 0xfff9f9fa, 0xfffaf9f9, 0xfff9f9fa, - 0xfff9faf9, 0xfffafafa, 0xfffafafa, 0xfffafaf9, 0xfff9faf9, 0xfff9f9f9, 0xfff9fafa, 0xfffafaf9, - 0xfffafaf9, 0xfffafafa, 0xfff9f9fa, 0xfffaf9fa, 0xfffafaf9, 0xfff9f9f9, 0xfffaf9f9, 0xfff9fafa, - 0xfff9fafa, 0xfff9faf9, 0xfffaf9f9, 0xfffaf9fa, 0xfffaf9f9, 0xfff9f9fa, 0xfffaf9f9, 0xfff9f9f9, - 0xfff9faf9, 0xfffaf9fa, 0xfffaf9f9, 0xfffaf9f9, 0xfff9faf9, 0xfffafafa, 0xfff9f9f9, 0xfff9f9fa, - 0xfffafafa, 0xfff9f9f9, 0xfffafaf9, 0xfffaf9f9, 0xfff9faf9, 0xfff9f9f9, 0xfffafaf9, 0xfff9f9fa, - 0xfff9faf9, 0xfff9fafa, 0xfffaf9fa, 0xfffafaf9, 0xfffafaf9, 0xfffaf9fa, 0xfff9f9fa, 0xfffaf9f9, - 0xfffaf9fa, 0xfff9fafa, 0xfffaf9f9, 0xfff9f9f9, 0xfffaf9f9, 0xfff9f9fa, 0xfffafafa, 0xfff9fafa, - 0xfff9f9fa, 0xfffaf9f9, 0xfffafaf9, 0xfffafaf9, 0xfff9faf9, 0xfff9f9fa, 0xfff9fafa, 0xfffaf9fa, - 0xfff9f9fa, 0xfffaf9f9, 0xfffafafa, 0xfff9faf9, 0xfffafaf9, 0xfffaf9f9, 0xfff9faf9, 0xfffaf9fa, - 0xfffafafa, 0xfffafaf9, 0xfff9faf9, 0xfffafaf9, 0xfffafafa, 0xfffafafa, 0xfff9f9f9, 0xfff9f9fa, - 0xfffaf9fa, 0xfff9f9f9, 0xfffafaf9, 0xfffafaf9, 0xfffafaf9, 0xfffaf9f9, 0xfffafafa, 0xfff9f9fa, - 0xfff9fafa, 0xfff9faf9, 0xfffaf9f9, 0xfffaf9fa, 0xfff9f9f9, 0xfff9fafa, 0xfff9f9fa, 0xfff9f9fa, - 0xfff9f9f9, 0xfffafaf9, 0xfff9f9f9, 0xfff9faf9, 0xfff9f9fa, 0xfffaf9fa, 0xfff9faf9, 0xfffafafa, - 0xfff9f9fa, 0xfffaf9fa, 0xfffafaf9, 0xfffaf9f9, 0xfffafafa, 0xfff9f9fa, 0xfffafaf9, 0xfffaf9f9, - 0xfff9faf9, 0xfffafaf9, 0xfff9faf9, 0xfff9f9f9, 0xfff9f9f9, 0xfff9f9f9, 0xfffafaf9, 0xfffaf9fa, - 0xfff9faf9, 0xfffaf9f9, 0xfffafaf9, 0xfffafaf9, 0xfff9fafa, 0xfffafafa, 0xfffaf9f9, 0xfff9fafa, - 0xfff9f9f9, 0xfffafaf9, 0xfffaf9fa, 0xfff9f9f9, 0xfff9faf9, 0xfffafaf9, 0xfff9f9fa, 0xfff9f9fa, - 0xfffafaf9, 0xfffaf9fa, 0xfff9fafa, 0xfff9f9f9, 0xfff9faf9, 0xfff9f9f9, 0xfff9f9fa, 0xfff9fafa, - 0xfff9f9fa, 0xfffafafa, 0xfff9f9fa, 0xfffaf9fa, 0xfff9f9fa, 0xfffafaf9, 0xfff9fafa, 0xfff9f9fa, - 0xfff9faf9, 0xfff9f9fa, 0xfff9fafa, 0xfffaf9f9, 0xfff9f9f9, 0xfffafafa, 0xfff9f9f9, 0xfff9faf9, - 0xfffafaf9, 0xfff9faf9, 0xfff9f9fa, 0xfffaf9f9, 0xfffaf9fa, 0xfff9f9fa, 0xfff9f9f9, 0xfff9fafa, - 0xfffafafa, 0xfffafafa, 0xfff9f9f9, 0xfffafafa, 0xfff9f9f9, 0xfffaf9fa, 0xfff9f9f9, 0xfff9fafa, - 0xfff9f9f9, 0xfff9f9f9, 0xfffaf9fa, 0xfffaf9f9, 0xfffaf9f9, 0xfffaf9f9, 0xfff7f8f7, 0xffe6ebe6, - 0xffdedfde, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848684, 0xffc5c6c5, 0xffc5c6c5, - 0xffe6ebe6, 0xfff8f9f9, 0xfff9f8f8, 0xfff8f9f9, 0xfff9f8f9, 0xfff8f9f9, 0xfff9f8f9, 0xfff9f8f8, - 0xfff8f8f9, 0xfff9f9f9, 0xfff8f9f9, 0xfff8f8f9, 0xfff8f8f8, 0xfff9f8f8, 0xfff9f9f9, 0xfff9f9f8, - 0xfff9f9f9, 0xfff9f8f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff9f9f8, 0xfff9f8f8, 0xfff8f9f8, 0xfff8f8f9, - 0xfff9f8f9, 0xfff8f9f8, 0xfff9f8f8, 0xfff9f9f8, 0xfff9f8f8, 0xfff9f8f8, 0xfff8f9f9, 0xfff9f9f9, - 0xfff9f8f8, 0xfff8f9f9, 0xfff8f8f9, 0xfff9f8f9, 0xfff9f9f8, 0xfff9f8f8, 0xfff8f9f8, 0xfff8f8f9, - 0xfff9f9f9, 0xfff9f9f9, 0xfff8f9f9, 0xfff8f9f8, 0xfff9f8f9, 0xfff9f9f9, 0xfff8f9f9, 0xfff8f9f8, - 0xfff9f8f9, 0xfff8f8f8, 0xfff8f9f9, 0xfff9f9f9, 0xfff8f8f8, 0xfff9f8f9, 0xfff8f8f8, 0xfff9f9f9, - 0xfff8f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff8f8f9, 0xfff8f8f9, 0xfff8f9f8, 0xfff8f8f8, - 0xfff9f8f8, 0xfff8f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff9f9f9, 0xfff9f9f8, 0xfff8f8f8, - 0xfff8f8f8, 0xfff9f9f9, 0xfff9f8f8, 0xfff9f8f8, 0xfff8f8f9, 0xfff9f8f9, 0xfff9f9f9, 0xfff9f9f8, - 0xfff9f8f8, 0xfff8f8f8, 0xfff8f9f9, 0xfff9f9f9, 0xfff8f9f8, 0xfff9f9f8, 0xfff8f9f9, 0xfff8f9f9, - 0xfff9f8f8, 0xfff9f9f9, 0xfff8f8f8, 0xfff8f8f8, 0xfff9f9f8, 0xfff9f9f8, 0xfff9f9f9, 0xfff9f9f8, - 0xfff8f9f9, 0xfff9f8f8, 0xfff8f8f8, 0xfff9f9f8, 0xfff8f8f8, 0xfff8f8f9, 0xfff8f8f9, 0xfff8f9f9, - 0xfff9f9f9, 0xfff9f9f9, 0xfff8f8f9, 0xfff9f8f9, 0xfff8f8f9, 0xfff8f8f9, 0xfff9f8f8, 0xfff9f9f9, - 0xfff9f9f9, 0xfff8f9f9, 0xfff9f9f8, 0xfff9f9f9, 0xfff9f8f8, 0xfff8f8f8, 0xfff9f8f9, 0xfff8f8f8, - 0xfff9f8f9, 0xfff9f8f9, 0xfff9f9f8, 0xfff8f8f8, 0xfff8f8f9, 0xfff9f8f9, 0xfff9f8f9, 0xfff8f8f8, - 0xfff8f8f9, 0xfff9f9f9, 0xfff8f8f8, 0xfff8f9f8, 0xfff9f9f8, 0xfff9f8f8, 0xfff9f8f9, 0xfff9f9f9, - 0xfff9f9f9, 0xfff9f9f8, 0xfff9f8f8, 0xfff9f9f9, 0xfff9f9f9, 0xfff9f8f8, 0xfff8f8f9, 0xfff8f9f8, - 0xfff8f9f8, 0xfff9f8f9, 0xfff9f9f8, 0xfff9f9f8, 0xfff9f8f8, 0xfff8f9f9, 0xfff8f8f9, 0xfff8f8f9, - 0xfff9f8f8, 0xfff9f8f9, 0xfff8f8f9, 0xfff9f9f9, 0xfff9f8f9, 0xfff8f8f8, 0xfff8f9f8, 0xfff9f8f9, - 0xfff9f8f8, 0xfff9f9f9, 0xfff8f8f8, 0xfff9f8f8, 0xfff9f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff9f8f8, - 0xfff8f9f9, 0xfff8f9f8, 0xfff8f8f9, 0xfff9f8f8, 0xfff8f8f8, 0xfff9f9f9, 0xfff8f9f8, 0xfff8f9f8, - 0xfff9f8f8, 0xfff8f9f9, 0xfff8f8f8, 0xfff9f9f8, 0xfff9f9f8, 0xfff8f9f8, 0xfff9f8f8, 0xfff8f8f8, - 0xfff9f8f8, 0xfff9f9f9, 0xfff9f9f9, 0xfff9f8f8, 0xfff9f8f8, 0xfff9f9f8, 0xfff8f9f9, 0xfff9f8f9, - 0xfff8f8f9, 0xfff9f9f9, 0xfff9f9f8, 0xfff8f9f9, 0xfff8f9f9, 0xfff9f9f8, 0xfff9f8f9, 0xfff9f9f8, - 0xfff9f9f9, 0xfff9f8f9, 0xfff9f9f9, 0xfff8f8f9, 0xfff9f9f8, 0xfff8f9f9, 0xfff9f8f9, 0xfff9f9f9, - 0xfff9f9f8, 0xfff9f8f9, 0xfff8f8f8, 0xfff9f8f8, 0xfff8f8f9, 0xfff8f9f8, 0xfff8f8f8, 0xfff8f8f9, - 0xfff8f9f9, 0xfff9f9f9, 0xfff9f9f9, 0xfff8f9f8, 0xfff9f9f9, 0xfff9f8f8, 0xfff7f8f7, 0xffe6ebe6, - 0xffdedfde, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797d79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff7f8f7, 0xfff7f7f8, 0xfff8f8f8, 0xfff7f7f7, 0xfff8f7f8, 0xfff7f7f8, 0xfff8f8f8, - 0xfff8f8f8, 0xfff7f8f8, 0xfff7f7f8, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f8f8, 0xfff8f7f7, 0xfff8f8f7, - 0xfff7f8f8, 0xfff7f7f7, 0xfff7f7f8, 0xfff8f7f8, 0xfff8f8f7, 0xfff8f7f7, 0xfff7f8f7, 0xfff8f8f8, - 0xfff8f7f7, 0xfff8f7f8, 0xfff8f7f8, 0xfff8f8f7, 0xfff8f7f7, 0xfff8f8f8, 0xfff7f8f7, 0xfff8f8f7, - 0xfff8f8f7, 0xfff7f8f8, 0xfff7f7f7, 0xfff8f7f8, 0xfff8f7f7, 0xfff7f8f8, 0xfff8f8f8, 0xfff7f7f7, - 0xfff7f8f8, 0xfff7f7f8, 0xfff7f8f8, 0xfff7f8f8, 0xfff7f8f8, 0xfff7f7f8, 0xfff8f8f8, 0xfff7f8f8, - 0xfff7f8f8, 0xfff8f8f8, 0xfff7f8f7, 0xfff8f8f7, 0xfff7f7f7, 0xfff8f8f8, 0xfff7f7f8, 0xfff8f7f7, - 0xfff7f8f7, 0xfff8f8f7, 0xfff7f8f7, 0xfff8f8f8, 0xfff7f7f7, 0xfff8f7f7, 0xfff8f8f7, 0xfff7f8f8, - 0xfff7f8f7, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f8f7, 0xfff7f8f7, 0xfff8f8f7, 0xfff7f7f8, 0xfff8f7f8, - 0xfff8f8f8, 0xfff8f7f8, 0xfff7f8f8, 0xfff7f7f7, 0xfff7f8f7, 0xfff8f8f8, 0xfff7f7f8, 0xfff8f7f8, - 0xfff7f8f8, 0xfff8f8f7, 0xfff8f7f8, 0xfff8f8f8, 0xfff7f8f7, 0xfff8f7f8, 0xfff8f8f7, 0xfff7f8f8, - 0xfff7f7f8, 0xfff8f8f7, 0xfff8f8f7, 0xfff8f7f7, 0xfff7f7f7, 0xfff7f7f8, 0xfff7f8f8, 0xfff8f8f7, - 0xfff7f8f8, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f8f8, 0xfff7f7f7, 0xfff7f8f7, 0xfff8f7f7, 0xfff8f7f8, - 0xfff8f8f7, 0xfff8f7f8, 0xfff8f7f7, 0xfff7f8f8, 0xfff7f7f8, 0xfff7f7f8, 0xfff8f7f8, 0xfff8f7f7, - 0xfff7f7f8, 0xfff8f8f8, 0xfff7f7f8, 0xfff7f7f7, 0xfff8f8f7, 0xfff7f8f8, 0xfff8f7f8, 0xfff7f8f8, - 0xfff8f7f7, 0xfff8f7f8, 0xfff8f8f7, 0xfff7f8f8, 0xfff8f8f7, 0xfff8f8f7, 0xfff7f8f8, 0xfff8f8f7, - 0xfff8f8f8, 0xfff7f7f8, 0xfff7f7f8, 0xfff8f8f8, 0xfff7f7f7, 0xfff8f8f7, 0xfff7f7f8, 0xfff7f8f8, - 0xfff7f7f7, 0xfff7f7f7, 0xfff7f8f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff8f8f8, 0xfff7f7f8, 0xfff8f8f8, - 0xfff7f8f8, 0xfff8f8f8, 0xfff7f8f8, 0xfff7f8f7, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f7f8, 0xfff7f8f7, - 0xfff7f8f7, 0xfff8f8f7, 0xfff8f7f7, 0xfff8f7f8, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f7f7, 0xfff8f8f8, - 0xfff8f7f8, 0xfff8f8f7, 0xfff8f7f8, 0xfff8f7f7, 0xfff7f8f8, 0xfff8f8f7, 0xfff8f7f7, 0xfff8f8f7, - 0xfff7f8f7, 0xfff7f8f8, 0xfff7f8f8, 0xfff8f8f8, 0xfff8f8f7, 0xfff7f8f8, 0xfff7f8f8, 0xfff7f8f7, - 0xfff8f8f8, 0xfff8f8f7, 0xfff8f8f8, 0xfff7f7f7, 0xfff7f7f8, 0xfff8f7f8, 0xfff8f8f8, 0xfff8f7f8, - 0xfff8f8f8, 0xfff7f8f7, 0xfff7f8f7, 0xfff8f7f7, 0xfff8f7f7, 0xfff8f8f8, 0xfff7f7f8, 0xfff8f7f7, - 0xfff8f8f8, 0xfff8f8f7, 0xfff8f7f7, 0xfff7f7f8, 0xfff7f8f8, 0xfff8f7f7, 0xfff8f7f7, 0xfff8f8f7, - 0xfff8f7f7, 0xfff8f8f8, 0xfff8f8f8, 0xfff8f7f7, 0xfff8f8f8, 0xfff7f8f8, 0xfff7f8f8, 0xfff7f7f8, - 0xfff7f8f7, 0xfff7f8f7, 0xfff8f8f7, 0xfff8f8f8, 0xfff8f8f8, 0xfff7f7f8, 0xfff7f8f8, 0xfff8f7f7, - 0xfff7f7f8, 0xfff8f7f7, 0xfff8f8f8, 0xfff7f8f7, 0xfff7f8f7, 0xfff8f8f8, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797d79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f6f7, 0xfff6f7f6, 0xfff7f6f7, 0xfff6f6f7, 0xfff6f7f7, - 0xfff6f6f7, 0xfff7f6f7, 0xfff7f7f7, 0xfff6f7f6, 0xfff7f7f7, 0xfff6f7f7, 0xfff7f6f6, 0xfff7f7f6, - 0xfff6f6f6, 0xfff7f7f7, 0xfff6f6f6, 0xfff6f7f6, 0xfff7f7f6, 0xfff7f7f7, 0xfff6f6f7, 0xfff7f7f6, - 0xfff7f7f7, 0xfff7f7f6, 0xfff6f6f6, 0xfff6f7f6, 0xfff7f7f6, 0xfff7f7f6, 0xfff7f6f7, 0xfff7f6f7, - 0xfff6f7f6, 0xfff6f6f7, 0xfff7f7f7, 0xfff6f6f6, 0xfff6f7f7, 0xfff6f6f6, 0xfff6f7f6, 0xfff6f7f7, - 0xfff7f6f7, 0xfff6f6f6, 0xfff7f7f6, 0xfff6f7f6, 0xfff6f7f7, 0xfff7f7f7, 0xfff7f7f6, 0xfff7f7f7, - 0xfff6f6f6, 0xfff6f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f6f7, 0xfff7f6f7, 0xfff7f7f7, 0xfff6f7f7, - 0xfff6f7f6, 0xfff6f6f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f6f6, 0xfff7f7f6, 0xfff7f7f7, - 0xfff7f7f6, 0xfff6f6f7, 0xfff6f6f7, 0xfff7f7f6, 0xfff7f6f7, 0xfff7f6f6, 0xfff7f7f6, 0xfff6f7f7, - 0xfff7f6f7, 0xfff7f6f7, 0xfff7f6f7, 0xfff6f6f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f6, 0xfff6f6f6, - 0xfff6f7f6, 0xfff6f6f7, 0xfff7f6f7, 0xfff7f7f6, 0xfff6f6f7, 0xfff7f7f7, 0xfff7f6f6, 0xfff7f6f7, - 0xfff6f6f6, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f7f6, 0xfff7f6f7, 0xfff7f6f6, 0xfff7f6f7, 0xfff7f7f6, - 0xfff6f7f7, 0xfff7f6f6, 0xfff7f6f6, 0xfff7f6f6, 0xfff7f6f6, 0xfff6f7f7, 0xfff6f6f7, 0xfff7f6f7, - 0xfff6f7f7, 0xfff6f7f7, 0xfff6f7f6, 0xfff7f6f7, 0xfff7f7f6, 0xfff7f7f6, 0xfff6f7f7, 0xfff7f6f7, - 0xfff7f7f7, 0xfff7f7f6, 0xfff6f6f6, 0xfff7f7f7, 0xfff6f6f7, 0xfff7f7f7, 0xfff6f6f7, 0xfff6f6f6, - 0xfff6f6f7, 0xfff6f6f7, 0xfff7f6f7, 0xfff7f6f6, 0xfff7f6f6, 0xfff7f6f7, 0xfff7f7f6, 0xfff6f6f7, - 0xfff7f7f7, 0xfff6f7f6, 0xfff6f7f6, 0xfff7f7f7, 0xfff7f6f7, 0xfff6f6f6, 0xfff7f7f7, 0xfff7f6f7, - 0xfff7f7f6, 0xfff6f6f7, 0xfff7f6f7, 0xfff6f6f7, 0xfff6f7f6, 0xfff6f7f6, 0xfff6f6f7, 0xfff7f6f7, - 0xfff7f6f6, 0xfff7f6f6, 0xfff6f7f6, 0xfff7f7f7, 0xfff6f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f6f6, - 0xfff6f7f6, 0xfff7f6f6, 0xfff6f7f7, 0xfff6f6f6, 0xfff7f6f7, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f7f7, - 0xfff6f6f6, 0xfff6f6f6, 0xfff6f7f6, 0xfff7f7f6, 0xfff7f6f7, 0xfff6f7f7, 0xfff6f6f6, 0xfff6f6f7, - 0xfff6f6f7, 0xfff6f7f7, 0xfff6f7f7, 0xfff6f7f7, 0xfff6f6f6, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f7f7, - 0xfff6f7f7, 0xfff7f6f7, 0xfff6f6f6, 0xfff7f6f7, 0xfff6f7f6, 0xfff7f6f6, 0xfff6f7f7, 0xfff6f7f7, - 0xfff6f7f7, 0xfff6f7f6, 0xfff6f7f7, 0xfff6f7f7, 0xfff7f7f7, 0xfff7f6f6, 0xfff7f6f6, 0xfff7f6f7, - 0xfff7f7f6, 0xfff7f7f6, 0xfff7f6f7, 0xfff6f6f7, 0xfff7f6f7, 0xfff7f6f6, 0xfff7f7f7, 0xfff7f6f7, - 0xfff6f6f7, 0xfff7f7f6, 0xfff6f7f6, 0xfff6f7f6, 0xfff7f7f7, 0xfff7f6f7, 0xfff6f7f6, 0xfff7f6f6, - 0xfff6f6f7, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f6f6, 0xfff6f6f7, 0xfff7f7f6, 0xfff6f6f7, 0xfff7f6f6, - 0xfff6f6f7, 0xfff6f6f7, 0xfff7f7f6, 0xfff6f7f7, 0xfff7f6f6, 0xfff7f7f7, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797d79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff6f6f6, 0xfff6f6f5, 0xfff6f5f6, 0xfff5f5f6, 0xfff6f5f6, 0xfff6f6f6, 0xfff5f6f5, - 0xfff6f6f5, 0xfff5f6f6, 0xfff6f6f5, 0xfff6f5f6, 0xfff6f5f5, 0xfff6f5f6, 0xfff5f6f6, 0xfff6f5f6, - 0xfff6f5f6, 0xfff5f5f6, 0xfff6f6f6, 0xfff6f5f6, 0xfff5f6f6, 0xfff6f5f5, 0xfff6f6f6, 0xfff6f5f6, - 0xfff6f5f6, 0xfff5f5f6, 0xfff6f6f5, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f5f6, 0xfff6f6f6, 0xfff6f6f5, - 0xfff6f5f5, 0xfff5f5f6, 0xfff5f6f5, 0xfff5f6f5, 0xfff6f6f5, 0xfff5f5f6, 0xfff6f5f6, 0xfff6f6f6, - 0xfff5f6f6, 0xfff6f5f6, 0xfff5f5f6, 0xfff5f6f6, 0xfff5f6f5, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f6f6, - 0xfff5f5f5, 0xfff5f6f6, 0xfff6f6f5, 0xfff5f5f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f6f6, 0xfff5f6f6, - 0xfff5f5f6, 0xfff5f6f6, 0xfff5f5f6, 0xfff5f5f5, 0xfff6f5f5, 0xfff6f6f6, 0xfff5f5f5, 0xfff5f6f6, - 0xfff6f5f6, 0xfff6f6f5, 0xfff5f6f5, 0xfff5f6f5, 0xfff6f6f6, 0xfff5f6f6, 0xfff6f5f6, 0xfff5f5f5, - 0xfff6f5f6, 0xfff6f6f6, 0xfff6f6f6, 0xfff5f5f6, 0xfff6f5f6, 0xfff5f6f5, 0xfff6f5f6, 0xfff6f6f5, - 0xfff6f6f6, 0xfff6f5f6, 0xfff6f6f5, 0xfff5f6f6, 0xfff5f6f6, 0xfff5f6f5, 0xfff5f5f5, 0xfff6f6f5, - 0xfff6f6f6, 0xfff6f6f6, 0xfff5f6f5, 0xfff5f6f5, 0xfff5f5f6, 0xfff6f6f5, 0xfff6f5f5, 0xfff6f6f6, - 0xfff5f5f6, 0xfff6f5f6, 0xfff6f5f6, 0xfff6f5f6, 0xfff5f5f6, 0xfff6f6f5, 0xfff6f5f5, 0xfff6f6f5, - 0xfff6f6f6, 0xfff6f5f6, 0xfff5f6f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f6f6, 0xfff6f5f6, 0xfff5f5f5, - 0xfff5f6f5, 0xfff5f5f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff5f6f5, 0xfff6f5f5, 0xfff6f6f5, 0xfff6f6f5, - 0xfff5f6f6, 0xfff6f5f5, 0xfff6f6f6, 0xfff6f5f5, 0xfff5f5f6, 0xfff6f6f5, 0xfff5f6f6, 0xfff6f6f6, - 0xfff5f6f5, 0xfff5f5f5, 0xfff5f6f6, 0xfff6f6f6, 0xfff5f6f6, 0xfff6f6f5, 0xfff5f6f6, 0xfff5f6f5, - 0xfff6f5f6, 0xfff6f5f5, 0xfff5f6f6, 0xfff6f6f5, 0xfff5f6f5, 0xfff6f5f5, 0xfff5f5f5, 0xfff6f6f6, - 0xfff5f6f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff5f6f6, 0xfff5f6f6, 0xfff6f5f6, 0xfff5f6f6, 0xfff6f6f6, - 0xfff6f5f5, 0xfff6f6f6, 0xfff6f6f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f5f5, 0xfff6f6f5, 0xfff6f5f6, - 0xfff6f6f5, 0xfff5f6f5, 0xfff6f5f6, 0xfff5f6f5, 0xfff6f5f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f6f5, - 0xfff6f5f6, 0xfff6f6f6, 0xfff5f6f6, 0xfff5f6f6, 0xfff6f6f5, 0xfff5f5f6, 0xfff5f6f5, 0xfff6f6f6, - 0xfff6f6f6, 0xfff6f6f5, 0xfff6f6f6, 0xfff6f5f6, 0xfff5f6f6, 0xfff5f5f6, 0xfff6f5f5, 0xfff5f6f6, - 0xfff5f6f6, 0xfff6f5f6, 0xfff5f5f5, 0xfff5f5f6, 0xfff5f6f6, 0xfff6f6f5, 0xfff6f6f6, 0xfff5f6f5, - 0xfff5f6f5, 0xfff6f5f6, 0xfff6f5f6, 0xfff6f6f6, 0xfff6f5f6, 0xfff6f6f5, 0xfff6f6f6, 0xfff6f5f6, - 0xfff6f6f5, 0xfff5f5f5, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f5f6, 0xfff6f5f6, 0xfff6f6f5, 0xfff6f6f5, - 0xfff6f6f6, 0xfff5f6f5, 0xfff6f6f5, 0xfff6f6f5, 0xfff6f5f6, 0xfff6f6f6, 0xfff6f6f5, 0xfff5f6f6, - 0xfff6f6f6, 0xfff6f6f5, 0xfff6f5f5, 0xfff6f5f5, 0xfff6f6f6, 0xfff6f6f6, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797d79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff4f4f4, 0xfff5f5f5, 0xfff5f5f4, 0xfff5f4f5, 0xfff5f4f4, 0xfff5f4f4, 0xfff5f4f5, - 0xfff4f5f4, 0xfff4f4f5, 0xfff5f4f4, 0xfff5f4f4, 0xfff4f5f5, 0xfff5f5f4, 0xfff4f5f4, 0xfff4f4f5, - 0xfff5f4f5, 0xfff4f5f5, 0xfff5f4f4, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff4f5f4, - 0xfff4f5f4, 0xfff5f5f4, 0xfff5f5f4, 0xfff4f5f4, 0xfff5f4f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f5f5, - 0xfff5f5f4, 0xfff4f4f4, 0xfff4f5f4, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f5f4, 0xfff5f5f5, - 0xfff4f4f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff4f5f4, 0xfff5f5f4, 0xfff5f5f5, 0xfff5f4f4, - 0xfff5f4f5, 0xfff5f4f5, 0xfff4f5f4, 0xfff5f4f5, 0xfff5f5f4, 0xfff5f5f5, 0xfff4f4f5, 0xfff4f5f4, - 0xfff4f4f4, 0xfff4f5f4, 0xfff5f5f4, 0xfff5f5f4, 0xfff4f4f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff4f5f4, - 0xfff5f5f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff5f4f5, 0xfff4f4f5, 0xfff5f4f5, 0xfff4f5f5, 0xfff4f5f4, - 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff4f4f4, 0xfff5f5f5, 0xfff5f5f5, - 0xfff4f5f5, 0xfff5f4f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff5f4f5, 0xfff5f5f5, 0xfff5f4f5, 0xfff4f5f5, - 0xfff5f5f4, 0xfff4f4f4, 0xfff4f5f5, 0xfff4f4f4, 0xfff4f5f5, 0xfff5f5f4, 0xfff5f5f4, 0xfff4f5f5, - 0xfff4f4f4, 0xfff4f5f4, 0xfff4f5f5, 0xfff5f5f4, 0xfff4f5f5, 0xfff4f4f5, 0xfff5f5f4, 0xfff4f4f5, - 0xfff5f5f4, 0xfff4f4f5, 0xfff4f5f5, 0xfff4f5f4, 0xfff5f4f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f4f5, - 0xfff5f5f5, 0xfff4f5f4, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f5f4, 0xfff4f4f5, 0xfff4f4f5, - 0xfff4f4f5, 0xfff5f4f5, 0xfff4f4f4, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f4f4, - 0xfff4f4f4, 0xfff5f4f4, 0xfff5f5f5, 0xfff5f5f4, 0xfff5f5f5, 0xfff4f5f4, 0xfff5f5f5, 0xfff4f5f5, - 0xfff4f5f4, 0xfff5f4f4, 0xfff4f4f4, 0xfff5f5f4, 0xfff4f4f5, 0xfff5f4f5, 0xfff5f4f5, 0xfff5f4f5, - 0xfff5f5f5, 0xfff5f4f4, 0xfff4f5f4, 0xfff4f4f5, 0xfff5f5f5, 0xfff5f4f4, 0xfff5f5f5, 0xfff5f4f5, - 0xfff4f5f5, 0xfff4f5f5, 0xfff5f4f4, 0xfff5f5f5, 0xfff5f5f4, 0xfff5f4f4, 0xfff4f5f4, 0xfff5f4f4, - 0xfff5f5f4, 0xfff4f4f5, 0xfff5f4f4, 0xfff5f4f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff5f5f5, 0xfff4f5f5, - 0xfff4f5f4, 0xfff4f5f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff4f5f5, - 0xfff5f4f4, 0xfff5f5f5, 0xfff4f5f4, 0xfff5f5f4, 0xfff5f4f4, 0xfff4f5f5, 0xfff4f5f5, 0xfff5f5f5, - 0xfff4f4f4, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f5f5, 0xfff4f5f5, - 0xfff4f5f4, 0xfff5f5f4, 0xfff5f5f5, 0xfff5f4f5, 0xfff5f4f4, 0xfff4f4f4, 0xfff5f5f4, 0xfff5f5f4, - 0xfff5f4f5, 0xfff5f5f4, 0xfff4f5f4, 0xfff4f5f4, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f4f5, 0xfff4f5f5, - 0xfff5f5f4, 0xfff5f4f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff5f4f5, 0xfff4f4f5, 0xfff5f5f4, - 0xfff5f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff5f5f5, 0xfff4f5f4, 0xfff4f5f5, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff797c79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff3f4f4, 0xfff4f3f3, 0xfff3f4f4, 0xfff4f4f4, 0xfff3f4f4, 0xfff3f3f4, 0xfff4f3f3, - 0xfff3f3f4, 0xfff3f3f3, 0xfff4f4f4, 0xfff4f4f3, 0xfff3f4f4, 0xfff4f3f4, 0xfff3f4f4, 0xfff3f3f4, - 0xfff3f3f3, 0xfff3f4f3, 0xfff4f4f3, 0xfff4f4f3, 0xfff4f4f4, 0xfff4f4f3, 0xfff4f4f4, 0xfff3f3f4, - 0xfff4f4f4, 0xfff3f3f3, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f4f3, 0xfff3f4f4, 0xfff4f4f4, 0xfff4f4f3, - 0xfff4f4f3, 0xfff3f3f3, 0xfff3f3f4, 0xfff4f3f3, 0xfff4f4f4, 0xfff4f3f4, 0xfff3f3f3, 0xfff4f4f3, - 0xfff4f3f4, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f3f4, 0xfff3f4f3, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f3f4, - 0xfff4f4f4, 0xfff4f4f3, 0xfff4f3f3, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f3f4, 0xfff3f4f4, 0xfff3f4f3, - 0xfff4f3f3, 0xfff4f3f4, 0xfff3f3f4, 0xfff4f4f4, 0xfff3f3f3, 0xfff4f3f3, 0xfff3f3f4, 0xfff3f3f3, - 0xfff4f3f3, 0xfff3f3f4, 0xfff4f3f3, 0xfff3f3f4, 0xfff3f4f4, 0xfff4f3f3, 0xfff3f3f3, 0xfff4f3f4, - 0xfff4f4f4, 0xfff3f4f4, 0xfff4f3f3, 0xfff3f3f4, 0xfff3f3f3, 0xfff4f4f3, 0xfff4f4f4, 0xfff4f3f3, - 0xfff3f4f4, 0xfff3f3f4, 0xfff3f3f4, 0xfff3f4f3, 0xfff3f4f3, 0xfff3f4f4, 0xfff4f3f4, 0xfff4f3f3, - 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff3f4f4, 0xfff4f4f4, 0xfff3f4f3, 0xfff4f4f4, 0xfff4f3f4, - 0xfff3f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff3f3f3, 0xfff3f4f3, 0xfff4f4f3, 0xfff3f3f3, 0xfff3f3f3, - 0xfff4f4f3, 0xfff3f3f3, 0xfff4f3f3, 0xfff4f4f4, 0xfff4f4f4, 0xfff3f3f4, 0xfff3f4f3, 0xfff4f3f4, - 0xfff4f3f4, 0xfff4f4f4, 0xfff3f3f3, 0xfff4f4f3, 0xfff4f3f3, 0xfff3f3f3, 0xfff4f4f4, 0xfff3f4f4, - 0xfff3f3f4, 0xfff3f3f4, 0xfff4f4f4, 0xfff3f4f4, 0xfff3f3f3, 0xfff4f3f4, 0xfff3f4f4, 0xfff4f4f4, - 0xfff4f4f4, 0xfff3f4f3, 0xfff3f4f4, 0xfff3f4f4, 0xfff3f4f3, 0xfff4f4f4, 0xfff4f4f3, 0xfff3f3f4, - 0xfff4f3f4, 0xfff3f3f3, 0xfff3f3f4, 0xfff4f4f4, 0xfff4f3f4, 0xfff3f3f3, 0xfff3f4f4, 0xfff3f3f3, - 0xfff4f3f4, 0xfff3f4f4, 0xfff4f3f4, 0xfff4f3f4, 0xfff4f4f4, 0xfff3f3f4, 0xfff4f3f3, 0xfff4f4f4, - 0xfff4f3f3, 0xfff3f4f4, 0xfff4f4f4, 0xfff3f4f3, 0xfff4f3f4, 0xfff4f4f4, 0xfff4f3f3, 0xfff3f3f4, - 0xfff4f3f3, 0xfff4f4f3, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f4f3, 0xfff3f4f3, 0xfff4f4f4, 0xfff4f4f3, - 0xfff4f4f4, 0xfff4f4f3, 0xfff4f3f3, 0xfff4f3f4, 0xfff3f3f4, 0xfff3f4f3, 0xfff3f3f3, 0xfff4f4f4, - 0xfff3f3f4, 0xfff4f4f4, 0xfff4f3f3, 0xfff4f4f4, 0xfff4f4f3, 0xfff3f3f3, 0xfff4f4f4, 0xfff3f3f4, - 0xfff4f3f3, 0xfff4f3f3, 0xfff3f4f4, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f4f4, 0xfff3f3f4, 0xfff4f4f3, - 0xfff3f3f4, 0xfff4f3f4, 0xfff3f4f4, 0xfff3f3f3, 0xfff3f3f4, 0xfff3f3f3, 0xfff4f4f4, 0xfff4f4f4, - 0xfff3f3f4, 0xfff3f4f3, 0xfff4f4f3, 0xfff3f4f3, 0xfff3f3f4, 0xfff4f4f4, 0xfff4f4f3, 0xfff3f4f4, - 0xfff3f3f3, 0xfff4f3f4, 0xfff4f3f3, 0xfff3f3f4, 0xfff4f4f3, 0xfff3f4f3, 0xfff3f3f4, 0xfff3f4f3, - 0xfff4f3f4, 0xfff4f3f4, 0xfff4f4f3, 0xfff4f3f3, 0xfff3f4f4, 0xfff3f4f3, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff797c79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff3f3f3, 0xfff2f3f2, 0xfff3f2f3, 0xfff2f3f2, 0xfff2f3f3, 0xfff3f2f2, 0xfff2f3f2, - 0xfff2f3f3, 0xfff3f3f2, 0xfff3f3f2, 0xfff3f2f3, 0xfff2f3f3, 0xfff3f2f3, 0xfff2f2f2, 0xfff2f3f3, - 0xfff2f3f3, 0xfff2f2f2, 0xfff2f3f2, 0xfff2f3f2, 0xfff2f2f3, 0xfff2f3f3, 0xfff2f3f2, 0xfff2f2f3, - 0xfff3f2f3, 0xfff3f2f3, 0xfff3f3f3, 0xfff2f2f2, 0xfff3f3f2, 0xfff3f2f3, 0xfff3f2f3, 0xfff2f2f3, - 0xfff2f3f3, 0xfff3f3f3, 0xfff3f2f3, 0xfff3f3f3, 0xfff2f3f2, 0xfff3f3f3, 0xfff3f2f3, 0xfff3f2f2, - 0xfff2f3f3, 0xfff2f2f3, 0xfff3f3f3, 0xfff2f2f3, 0xfff2f3f2, 0xfff2f2f3, 0xfff2f2f2, 0xfff3f2f3, - 0xfff2f2f3, 0xfff3f2f2, 0xfff2f3f2, 0xfff2f2f2, 0xfff2f3f3, 0xfff2f3f2, 0xfff2f2f3, 0xfff3f2f3, - 0xfff3f2f3, 0xfff2f3f2, 0xfff3f2f2, 0xfff3f2f3, 0xfff2f2f2, 0xfff3f2f2, 0xfff3f3f3, 0xfff3f3f2, - 0xfff2f3f3, 0xfff2f3f2, 0xfff3f3f2, 0xfff3f3f2, 0xfff2f2f2, 0xfff2f3f2, 0xfff2f3f3, 0xfff2f3f3, - 0xfff3f2f2, 0xfff3f2f2, 0xfff3f2f3, 0xfff3f3f3, 0xfff3f2f3, 0xfff2f3f2, 0xfff2f2f3, 0xfff2f2f2, - 0xfff3f3f2, 0xfff2f3f3, 0xfff2f3f3, 0xfff2f3f3, 0xfff3f2f3, 0xfff2f2f3, 0xfff2f2f3, 0xfff2f3f2, - 0xfff2f3f3, 0xfff2f3f2, 0xfff2f3f3, 0xfff3f2f2, 0xfff3f3f3, 0xfff2f2f2, 0xfff2f2f3, 0xfff2f2f3, - 0xfff3f2f2, 0xfff3f3f2, 0xfff3f3f3, 0xfff3f3f3, 0xfff3f3f2, 0xfff2f2f2, 0xfff3f3f3, 0xfff3f2f2, - 0xfff3f2f2, 0xfff2f3f3, 0xfff3f2f3, 0xfff2f3f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff3f3f3, 0xfff3f2f3, - 0xfff3f2f3, 0xfff2f2f3, 0xfff3f2f2, 0xfff3f3f3, 0xfff2f3f3, 0xfff3f2f2, 0xfff3f2f3, 0xfff3f3f3, - 0xfff2f3f3, 0xfff2f2f3, 0xfff2f2f3, 0xfff2f2f2, 0xfff3f3f2, 0xfff3f2f2, 0xfff3f2f2, 0xfff2f2f3, - 0xfff2f3f2, 0xfff2f3f2, 0xfff3f2f3, 0xfff2f2f2, 0xfff3f2f3, 0xfff2f2f3, 0xfff2f3f2, 0xfff3f3f2, - 0xfff2f3f3, 0xfff3f2f3, 0xfff2f2f3, 0xfff3f3f3, 0xfff3f2f2, 0xfff2f2f3, 0xfff3f3f2, 0xfff3f2f2, - 0xfff3f2f3, 0xfff2f2f3, 0xfff3f3f2, 0xfff3f3f2, 0xfff3f2f3, 0xfff2f3f2, 0xfff2f2f2, 0xfff3f2f2, - 0xfff2f3f3, 0xfff3f2f2, 0xfff2f2f3, 0xfff3f3f2, 0xfff3f2f2, 0xfff3f2f2, 0xfff3f3f3, 0xfff2f3f2, - 0xfff2f3f3, 0xfff2f3f3, 0xfff2f3f2, 0xfff3f2f3, 0xfff2f2f2, 0xfff2f3f2, 0xfff2f2f3, 0xfff3f3f3, - 0xfff3f2f3, 0xfff2f3f2, 0xfff3f2f2, 0xfff3f2f2, 0xfff3f2f2, 0xfff3f3f3, 0xfff3f3f3, 0xfff3f3f2, - 0xfff3f3f3, 0xfff3f2f2, 0xfff2f3f2, 0xfff3f2f3, 0xfff3f2f2, 0xfff2f2f3, 0xfff3f2f2, 0xfff3f2f3, - 0xfff2f2f3, 0xfff2f3f3, 0xfff2f2f2, 0xfff2f3f3, 0xfff2f2f3, 0xfff3f3f3, 0xfff2f3f2, 0xfff3f2f2, - 0xfff2f2f2, 0xfff3f2f3, 0xfff3f2f2, 0xfff2f2f3, 0xfff2f2f3, 0xfff3f2f3, 0xfff2f2f3, 0xfff2f3f2, - 0xfff3f3f3, 0xfff3f3f3, 0xfff3f2f2, 0xfff2f2f2, 0xfff2f3f3, 0xfff3f2f3, 0xfff2f3f2, 0xfff3f3f2, - 0xfff2f2f2, 0xfff3f3f2, 0xfff2f2f2, 0xfff2f3f3, 0xfff2f2f3, 0xfff3f2f3, 0xfff3f2f3, 0xfff3f2f3, - 0xfff3f3f2, 0xfff3f3f2, 0xfff3f3f2, 0xfff3f2f3, 0xfff3f2f3, 0xfff2f3f3, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff797c79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff2f1f2, 0xfff1f1f1, 0xfff2f2f1, 0xfff1f2f2, 0xfff2f2f2, 0xfff1f2f1, 0xfff1f1f2, - 0xfff2f2f2, 0xfff1f2f1, 0xfff1f2f2, 0xfff1f2f2, 0xfff1f2f2, 0xfff2f1f1, 0xfff2f1f2, 0xfff1f2f1, - 0xfff2f2f1, 0xfff1f1f1, 0xfff2f2f1, 0xfff1f1f1, 0xfff2f1f1, 0xfff2f1f1, 0xfff1f1f1, 0xfff2f1f2, - 0xfff1f2f2, 0xfff2f1f1, 0xfff1f2f2, 0xfff1f1f2, 0xfff1f1f1, 0xfff1f1f2, 0xfff1f2f1, 0xfff2f1f1, - 0xfff2f2f1, 0xfff1f1f1, 0xfff1f2f2, 0xfff1f2f2, 0xfff1f1f2, 0xfff1f2f2, 0xfff1f2f1, 0xfff1f1f1, - 0xfff1f2f2, 0xfff2f1f1, 0xfff2f2f2, 0xfff1f2f2, 0xfff2f2f1, 0xfff2f1f2, 0xfff2f1f2, 0xfff1f2f1, - 0xfff1f2f2, 0xfff1f1f2, 0xfff2f2f2, 0xfff1f1f2, 0xfff2f2f1, 0xfff1f2f1, 0xfff2f2f1, 0xfff1f2f2, - 0xfff1f2f1, 0xfff2f2f2, 0xfff1f1f1, 0xfff1f1f2, 0xfff1f1f2, 0xfff2f1f2, 0xfff1f1f2, 0xfff2f1f1, - 0xfff1f2f1, 0xfff2f1f1, 0xfff1f2f1, 0xfff1f2f2, 0xfff2f1f2, 0xfff1f1f1, 0xfff2f1f1, 0xfff2f1f2, - 0xfff1f2f1, 0xfff2f2f1, 0xfff2f1f1, 0xfff1f2f2, 0xfff1f1f1, 0xfff1f1f1, 0xfff2f1f2, 0xfff2f1f2, - 0xfff1f2f2, 0xfff1f1f2, 0xfff2f2f2, 0xfff2f1f1, 0xfff2f2f1, 0xfff2f2f1, 0xfff2f1f1, 0xfff1f2f1, - 0xfff2f1f1, 0xfff1f2f1, 0xfff2f1f1, 0xfff2f2f1, 0xfff1f1f2, 0xfff2f1f1, 0xfff2f1f2, 0xfff1f1f1, - 0xfff1f2f1, 0xfff2f1f1, 0xfff1f2f2, 0xfff2f2f2, 0xfff1f1f1, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f1f1, - 0xfff1f1f2, 0xfff1f2f2, 0xfff1f2f1, 0xfff2f1f1, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f1f2, 0xfff1f1f2, - 0xfff2f1f1, 0xfff1f1f1, 0xfff1f2f2, 0xfff1f1f2, 0xfff2f1f1, 0xfff2f2f1, 0xfff2f2f2, 0xfff2f1f1, - 0xfff1f1f1, 0xfff1f1f2, 0xfff1f1f1, 0xfff2f1f2, 0xfff1f1f1, 0xfff1f1f2, 0xfff1f2f1, 0xfff2f1f1, - 0xfff1f2f2, 0xfff1f1f2, 0xfff2f1f2, 0xfff1f1f2, 0xfff2f1f1, 0xfff2f1f1, 0xfff2f2f1, 0xfff1f1f1, - 0xfff2f2f1, 0xfff1f1f1, 0xfff1f2f2, 0xfff2f1f2, 0xfff2f1f1, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f2f1, - 0xfff2f2f1, 0xfff1f1f1, 0xfff2f1f1, 0xfff1f2f2, 0xfff1f1f1, 0xfff1f2f2, 0xfff2f2f2, 0xfff2f1f2, - 0xfff2f1f1, 0xfff2f2f1, 0xfff1f1f2, 0xfff1f2f2, 0xfff2f2f1, 0xfff2f1f2, 0xfff2f1f1, 0xfff1f2f1, - 0xfff1f2f2, 0xfff2f2f1, 0xfff2f2f1, 0xfff2f1f2, 0xfff1f1f2, 0xfff2f2f2, 0xfff1f2f2, 0xfff2f1f2, - 0xfff1f2f1, 0xfff1f2f2, 0xfff1f2f2, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f2, 0xfff1f1f1, 0xfff2f2f2, - 0xfff1f1f2, 0xfff2f1f2, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f2f2, 0xfff2f1f1, - 0xfff2f1f1, 0xfff1f2f2, 0xfff1f2f2, 0xfff2f1f1, 0xfff2f1f2, 0xfff1f2f2, 0xfff2f1f1, 0xfff1f1f1, - 0xfff2f1f1, 0xfff2f1f2, 0xfff2f1f1, 0xfff1f1f2, 0xfff2f2f1, 0xfff1f1f1, 0xfff1f1f2, 0xfff2f1f1, - 0xfff2f1f2, 0xfff2f2f2, 0xfff1f2f2, 0xfff2f2f2, 0xfff1f2f1, 0xfff1f1f2, 0xfff2f2f2, 0xfff1f1f1, - 0xfff1f2f2, 0xfff2f1f1, 0xfff2f1f1, 0xfff2f1f2, 0xfff1f1f2, 0xfff2f1f2, 0xfff1f1f2, 0xfff1f1f1, - 0xfff2f1f2, 0xfff1f2f2, 0xfff1f1f2, 0xfff2f1f1, 0xfff2f1f1, 0xfff2f1f2, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff797c79, 0xffb5bab5, 0xffb5bab5, - 0xffdedbde, 0xfff1f0f0, 0xfff1f1f1, 0xfff1f0f0, 0xfff0f1f0, 0xfff0f0f1, 0xfff1f0f1, 0xfff0f0f1, - 0xfff0f1f1, 0xfff0f1f0, 0xfff1f1f1, 0xfff0f1f1, 0xfff1f1f1, 0xfff1f0f0, 0xfff1f0f0, 0xfff0f1f1, - 0xfff0f0f0, 0xfff0f1f0, 0xfff0f1f0, 0xfff1f1f0, 0xfff0f0f0, 0xfff1f0f0, 0xfff0f1f1, 0xfff1f1f0, - 0xfff0f1f0, 0xfff1f0f1, 0xfff0f1f1, 0xfff1f0f0, 0xfff1f1f1, 0xfff1f0f0, 0xfff1f0f0, 0xfff1f0f1, - 0xfff0f1f1, 0xfff1f1f1, 0xfff1f1f0, 0xfff1f0f1, 0xfff0f0f0, 0xfff1f1f1, 0xfff0f0f1, 0xfff0f1f0, - 0xfff1f1f0, 0xfff0f0f0, 0xfff0f1f1, 0xfff0f1f1, 0xfff1f1f0, 0xfff0f1f1, 0xfff1f1f1, 0xfff1f0f0, - 0xfff1f0f1, 0xfff1f0f1, 0xfff0f0f1, 0xfff1f1f0, 0xfff0f0f0, 0xfff0f1f0, 0xfff1f1f0, 0xfff0f0f1, - 0xfff1f0f0, 0xfff1f1f1, 0xfff1f1f1, 0xfff0f0f0, 0xfff0f0f0, 0xfff1f1f1, 0xfff1f0f0, 0xfff0f1f1, - 0xfff1f1f0, 0xfff1f0f0, 0xfff1f0f0, 0xfff1f0f1, 0xfff0f0f1, 0xfff0f0f1, 0xfff1f0f1, 0xfff1f0f1, - 0xfff1f1f1, 0xfff0f1f1, 0xfff0f0f1, 0xfff1f0f1, 0xfff0f1f1, 0xfff0f0f0, 0xfff1f1f1, 0xfff1f1f0, - 0xfff1f1f1, 0xfff1f0f0, 0xfff0f0f0, 0xfff1f0f1, 0xfff0f0f1, 0xfff0f0f0, 0xfff1f0f1, 0xfff1f1f0, - 0xfff1f0f0, 0xfff1f0f0, 0xfff0f0f0, 0xfff1f1f0, 0xfff0f0f1, 0xfff0f0f1, 0xfff1f0f0, 0xfff1f1f1, - 0xfff1f0f1, 0xfff0f0f1, 0xfff0f0f1, 0xfff0f0f0, 0xfff1f0f0, 0xfff0f0f0, 0xfff0f0f1, 0xfff1f1f1, - 0xfff0f0f0, 0xfff0f1f0, 0xfff0f0f0, 0xfff1f0f1, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f0, 0xfff0f1f0, - 0xfff1f1f0, 0xfff1f1f1, 0xfff0f1f1, 0xfff1f0f0, 0xfff0f0f0, 0xfff1f0f0, 0xfff0f0f0, 0xfff0f0f1, - 0xfff0f0f1, 0xfff1f1f1, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f0, 0xfff0f1f1, 0xfff1f0f0, 0xfff1f1f1, - 0xfff0f0f0, 0xfff0f1f0, 0xfff0f1f0, 0xfff1f0f0, 0xfff1f0f0, 0xfff0f1f1, 0xfff0f0f1, 0xfff1f0f0, - 0xfff0f0f1, 0xfff0f0f1, 0xfff0f0f1, 0xfff1f1f0, 0xfff1f0f0, 0xfff1f0f0, 0xfff0f1f0, 0xfff0f0f0, - 0xfff0f1f1, 0xfff0f0f0, 0xfff0f1f1, 0xfff0f0f1, 0xfff0f1f1, 0xfff1f1f0, 0xfff1f0f0, 0xfff1f1f0, - 0xfff0f0f0, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f0f1, 0xfff1f0f0, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f0, - 0xfff0f1f0, 0xfff0f0f1, 0xfff1f0f1, 0xfff0f1f1, 0xfff1f1f0, 0xfff1f1f1, 0xfff1f0f0, 0xfff0f0f0, - 0xfff0f0f1, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f0, 0xfff1f0f1, 0xfff0f1f0, 0xfff0f1f1, 0xfff0f0f0, - 0xfff0f0f0, 0xfff0f0f0, 0xfff1f0f0, 0xfff0f1f1, 0xfff1f1f0, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f0f1, - 0xfff0f0f1, 0xfff1f0f0, 0xfff0f1f1, 0xfff0f1f1, 0xfff1f1f0, 0xfff1f1f0, 0xfff0f1f0, 0xfff1f0f1, - 0xfff0f0f1, 0xfff1f1f0, 0xfff0f0f1, 0xfff0f1f0, 0xfff0f1f1, 0xfff1f0f0, 0xfff0f0f1, 0xfff1f1f0, - 0xfff0f1f0, 0xfff0f0f0, 0xfff0f0f1, 0xfff0f1f1, 0xfff0f0f1, 0xfff1f0f1, 0xfff1f1f0, 0xfff1f0f1, - 0xfff1f0f0, 0xfff0f0f1, 0xfff0f1f0, 0xfff0f0f1, 0xfff1f0f1, 0xfff1f0f0, 0xfff1f0f0, 0xfff0f0f1, - 0xfff0f0f0, 0xfff0f0f1, 0xfff1f0f0, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f1, 0xffe9e8e9, 0xffdedbde, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xfff0eff0, 0xffefeff0, 0xfff0f0ef, 0xfff0eff0, 0xfff0eff0, 0xffefefef, 0xffeff0f0, - 0xfff0efef, 0xffefefef, 0xffefefef, 0xfff0efef, 0xffefeff0, 0xfff0efef, 0xffeff0f0, 0xfff0efef, - 0xffefefef, 0xffefefef, 0xffeff0f0, 0xfff0efef, 0xffefefef, 0xffeff0f0, 0xffefeff0, 0xffefefef, - 0xfff0f0f0, 0xfff0eff0, 0xfff0efef, 0xfff0eff0, 0xfff0efef, 0xfff0f0ef, 0xfff0eff0, 0xfff0efef, - 0xffeff0f0, 0xffefeff0, 0xfff0efef, 0xfff0f0ef, 0xffefeff0, 0xffeff0f0, 0xfff0f0f0, 0xfff0efef, - 0xfff0f0ef, 0xffefefef, 0xffeff0f0, 0xfff0f0ef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff0eff0, - 0xffefefef, 0xffefefef, 0xfff0eff0, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff0efef, - 0xfff0efef, 0xfff0f0f0, 0xffeff0ef, 0xffeff0f0, 0xfff0f0f0, 0xffefefef, 0xffefefef, 0xfff0f0f0, - 0xffefefef, 0xffefefef, 0xffefefef, 0xfff0efef, 0xfff0f0f0, 0xfff0f0f0, 0xfff0efef, 0xffeff0f0, - 0xfff0efef, 0xffefeff0, 0xfff0eff0, 0xffeff0ef, 0xfff0eff0, 0xfff0eff0, 0xfff0eff0, 0xffeff0f0, - 0xffeff0ef, 0xfff0eff0, 0xffeff0f0, 0xfff0eff0, 0xffefefef, 0xfff0efef, 0xfff0f0ef, 0xffefefef, - 0xffeff0f0, 0xffeff0ef, 0xffefeff0, 0xffeff0ef, 0xffeff0ef, 0xffefeff0, 0xfff0f0f0, 0xffefefef, - 0xffefeff0, 0xfff0f0ef, 0xfff0efef, 0xfff0efef, 0xffefeff0, 0xfff0f0ef, 0xffeff0ef, 0xffefefef, - 0xfff0efef, 0xffefefef, 0xffefefef, 0xfff0f0f0, 0xfff0f0ef, 0xfff0f0ef, 0xffeff0f0, 0xfff0f0ef, - 0xffefefef, 0xfff0eff0, 0xfff0efef, 0xfff0efef, 0xffefeff0, 0xfff0efef, 0xffeff0f0, 0xfff0f0ef, - 0xffeff0f0, 0xffefefef, 0xffefeff0, 0xfff0eff0, 0xfff0efef, 0xfff0f0f0, 0xfff0efef, 0xfff0f0ef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffeff0f0, 0xfff0eff0, 0xffefeff0, 0xffeff0ef, 0xffefefef, - 0xffeff0f0, 0xffefeff0, 0xffefeff0, 0xffefeff0, 0xffeff0ef, 0xffefeff0, 0xffeff0ef, 0xfff0eff0, - 0xffeff0ef, 0xfff0eff0, 0xfff0efef, 0xfff0f0ef, 0xffeff0f0, 0xfff0efef, 0xffeff0f0, 0xfff0f0ef, - 0xfff0efef, 0xfff0efef, 0xffefefef, 0xffefeff0, 0xffefefef, 0xfff0efef, 0xffefefef, 0xfff0efef, - 0xfff0f0f0, 0xfff0f0ef, 0xfff0efef, 0xfff0eff0, 0xffefeff0, 0xffefefef, 0xffeff0ef, 0xffeff0ef, - 0xffefeff0, 0xffeff0ef, 0xfff0f0ef, 0xfff0efef, 0xffeff0ef, 0xfff0f0f0, 0xfff0f0ef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffeff0ef, 0xfff0f0ef, 0xffefeff0, 0xffefeff0, 0xffefefef, 0xffefefef, - 0xffefeff0, 0xfff0eff0, 0xffeff0f0, 0xffeff0ef, 0xffefefef, 0xffeff0ef, 0xffeff0ef, 0xfff0f0f0, - 0xfff0f0f0, 0xfff0eff0, 0xfff0efef, 0xffefefef, 0xfff0eff0, 0xffeff0f0, 0xffefeff0, 0xffefeff0, - 0xfff0f0ef, 0xfff0f0ef, 0xffefefef, 0xffefeff0, 0xfff0efef, 0xfff0f0f0, 0xfff0efef, 0xffefefef, - 0xfff0eff0, 0xffefefef, 0xffefeff0, 0xffeff0ef, 0xfff0efef, 0xffefefef, 0xffefeff0, 0xffeff0f0, - 0xffeff0ef, 0xfff0f0ef, 0xffeff0ef, 0xffefefef, 0xffefeff0, 0xffefefef, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffefeeee, 0xffeeeeee, 0xffeeefee, 0xffeeeeee, 0xffeeeeef, 0xffeeeeee, 0xffefefee, - 0xffeeefef, 0xffeeefee, 0xffefefee, 0xffefefee, 0xffefefee, 0xffeeefee, 0xffeeeeee, 0xffeeeeee, - 0xffefefef, 0xffeeeeee, 0xffeeeeee, 0xffeeeeef, 0xffefeeee, 0xffefefee, 0xffeeefee, 0xffeeeeee, - 0xffeeeeee, 0xffeeefef, 0xffeeeeee, 0xffeeefee, 0xffeeefef, 0xffefeeee, 0xffefeeee, 0xffeeeeef, - 0xffeeeeee, 0xffeeefee, 0xffeeeeef, 0xffeeeeee, 0xffeeeeef, 0xffeeefee, 0xffefeeef, 0xffefeeee, - 0xffeeefee, 0xffefeeef, 0xffefeeee, 0xffefefee, 0xffefefef, 0xffefeeef, 0xffefefef, 0xffeeeeee, - 0xffeeefee, 0xffeeefee, 0xffeeeeee, 0xffeeeeee, 0xffefeeef, 0xffeeefef, 0xffefeeee, 0xffeeefee, - 0xffeeeeee, 0xffeeefef, 0xffeeefee, 0xffefeeee, 0xffeeefef, 0xffeeeeef, 0xffeeefee, 0xffefeeef, - 0xffeeefee, 0xffefefee, 0xffeeefee, 0xffeeefee, 0xffeeefee, 0xffeeefef, 0xffefeeef, 0xffeeefee, - 0xffefefef, 0xffeeeeef, 0xffefefee, 0xffeeeeee, 0xffefefee, 0xffefeeef, 0xffefeeee, 0xffefefee, - 0xffeeefee, 0xffeeefee, 0xffeeeeef, 0xffeeeeee, 0xffefeeef, 0xffeeeeef, 0xffeeeeee, 0xffeeefee, - 0xffeeeeef, 0xffefeeef, 0xffeeeeef, 0xffeeefef, 0xffefefef, 0xffefefee, 0xffefeeef, 0xffeeeeef, - 0xffeeeeee, 0xffeeefee, 0xffefeeee, 0xffeeeeee, 0xffeeeeef, 0xffeeeeee, 0xffefefef, 0xffefeeee, - 0xffefeeee, 0xffeeefef, 0xffeeeeef, 0xffefeeee, 0xffefeeee, 0xffefeeef, 0xffeeeeee, 0xffeeeeee, - 0xffefefef, 0xffeeefef, 0xffefeeee, 0xffefefef, 0xffeeeeee, 0xffefeeee, 0xffeeeeee, 0xffeeeeee, - 0xffefeeef, 0xffeeefee, 0xffeeeeee, 0xffeeefef, 0xffeeeeee, 0xffeeefef, 0xffeeeeef, 0xffeeeeee, - 0xffefefef, 0xffeeefee, 0xffeeefef, 0xffeeeeef, 0xffeeeeef, 0xffefefee, 0xffefeeef, 0xffeeeeee, - 0xffeeeeee, 0xffefefef, 0xffeeeeef, 0xffefeeef, 0xffeeeeee, 0xffeeefee, 0xffefefef, 0xffefeeee, - 0xffeeefef, 0xffeeefef, 0xffefefef, 0xffeeeeef, 0xffeeeeee, 0xffefeeee, 0xffeeeeee, 0xffeeeeee, - 0xffeeeeee, 0xffeeefee, 0xffeeeeee, 0xffefeeee, 0xffefefef, 0xffeeefee, 0xffefeeee, 0xffeeefef, - 0xffefeeee, 0xffefeeee, 0xffeeeeee, 0xffeeeeee, 0xffefeeef, 0xffefeeee, 0xffefeeee, 0xffeeefef, - 0xffeeefee, 0xffeeefee, 0xffeeeeee, 0xffefefef, 0xffeeefee, 0xffefeeee, 0xffeeeeee, 0xffefefee, - 0xffefefee, 0xffeeeeee, 0xffeeeeee, 0xffeeeeee, 0xffeeefee, 0xffeeeeef, 0xffefeeef, 0xffefeeee, - 0xffeeeeee, 0xffefefee, 0xffefefee, 0xffeeefee, 0xffefefee, 0xffefeeee, 0xffeeefef, 0xffeeefee, - 0xffeeeeee, 0xffeeeeef, 0xffeeeeef, 0xffeeeeee, 0xffeeeeef, 0xffefeeef, 0xffefeeee, 0xffeeefef, - 0xffeeeeee, 0xffefefee, 0xffeeeeee, 0xffefeeef, 0xffeeefef, 0xffeeeeee, 0xffeeeeee, 0xffeeeeef, - 0xffefeeef, 0xffeeeeee, 0xffeeeeee, 0xffeeeeee, 0xffefeeef, 0xffefeeef, 0xffeeeeee, 0xffeeeeef, - 0xffefefee, 0xffeeeeee, 0xffefefef, 0xffeeefee, 0xffeeeeef, 0xffeeeeef, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffeeeded, 0xffeeedee, 0xffeeeded, 0xffeeeded, 0xffededed, 0xffedeeed, 0xffedeeed, - 0xffedeeee, 0xffeeeded, 0xffedeeee, 0xffedeeed, 0xffeeedee, 0xffeeeeed, 0xffededed, 0xffeeeded, - 0xffeeeded, 0xffededee, 0xffeeeded, 0xffededed, 0xffededed, 0xffedeeed, 0xffeeedee, 0xffeeeded, - 0xffededee, 0xffeeeded, 0xffededed, 0xffededee, 0xffeeeeed, 0xffededed, 0xffededed, 0xffeeedee, - 0xffeeeded, 0xffedeeed, 0xffedeeed, 0xffededed, 0xffededed, 0xffeeeded, 0xffededed, 0xffededed, - 0xffeeeeed, 0xffedeeed, 0xffededed, 0xffedeeed, 0xffededed, 0xffeeeeed, 0xffeeeded, 0xffeeeded, - 0xffeeeeed, 0xffeeedee, 0xffeeeded, 0xffeeeeee, 0xffedeeed, 0xffeeeded, 0xffedeeee, 0xffededee, - 0xffeeeded, 0xffeeedee, 0xffedeeee, 0xffededee, 0xffededed, 0xffedeeee, 0xffeeeded, 0xffeeedee, - 0xffededed, 0xffeeedee, 0xffedeeee, 0xffeeedee, 0xffeeeeee, 0xffededee, 0xffededee, 0xffeeedee, - 0xffedeeed, 0xffededed, 0xffeeeded, 0xffeeedee, 0xffededee, 0xffeeeded, 0xffededee, 0xffededed, - 0xffedeeed, 0xffedeeed, 0xffededed, 0xffededed, 0xffededed, 0xffededed, 0xffedeeee, 0xffededee, - 0xffeeeded, 0xffededed, 0xffeeeded, 0xffededed, 0xffedeeed, 0xffeeedee, 0xffededed, 0xffedeeed, - 0xffeeedee, 0xffededed, 0xffeeedee, 0xffededed, 0xffededed, 0xffeeedee, 0xffedeeed, 0xffeeeded, - 0xffedeeed, 0xffededee, 0xffeeedee, 0xffeeeeed, 0xffedeeed, 0xffeeeeed, 0xffededee, 0xffededee, - 0xffedeeed, 0xffeeeded, 0xffededed, 0xffedeeed, 0xffeeeeee, 0xffeeeded, 0xffeeeeed, 0xffeeeded, - 0xffeeedee, 0xffededed, 0xffeeeded, 0xffeeeeed, 0xffededee, 0xffeeeeee, 0xffededed, 0xffeeeeed, - 0xffeeeded, 0xffeeedee, 0xffededed, 0xffeeedee, 0xffeeeeed, 0xffedeeee, 0xffeeedee, 0xffededed, - 0xffeeeeed, 0xffededed, 0xffeeeded, 0xffededed, 0xffededee, 0xffedeeed, 0xffeeeeed, 0xffeeeeee, - 0xffedeeee, 0xffededed, 0xffeeeded, 0xffeeeeee, 0xffeeedee, 0xffededed, 0xffeeedee, 0xffedeeed, - 0xffeeeeed, 0xffededed, 0xffededed, 0xffedeeee, 0xffedeeed, 0xffedeeed, 0xffededee, 0xffeeeeee, - 0xffededed, 0xffeeeeee, 0xffedeeed, 0xffeeeded, 0xffeeeeed, 0xffeeeeee, 0xffedeeed, 0xffeeedee, - 0xffedeeee, 0xffededee, 0xffeeeded, 0xffedeeed, 0xffeeeded, 0xffedeeed, 0xffededee, 0xffededee, - 0xffeeeded, 0xffededee, 0xffededed, 0xffeeeded, 0xffedeeed, 0xffeeeeed, 0xffededee, 0xffeeedee, - 0xffededed, 0xffeeedee, 0xffeeedee, 0xffededed, 0xffedeeed, 0xffedeeee, 0xffeeeeee, 0xffededee, - 0xffededee, 0xffedeeed, 0xffeeeeed, 0xffedeeee, 0xffededed, 0xffeeeeed, 0xffedeeed, 0xffededed, - 0xffededee, 0xffeeedee, 0xffeeeeed, 0xffedeeee, 0xffeeedee, 0xffedeeee, 0xffededed, 0xffedeeed, - 0xffedeeed, 0xffededed, 0xffeeeded, 0xffedeeed, 0xffeeeded, 0xffedeeed, 0xffededed, 0xffeeeeed, - 0xffedeeed, 0xffeeeeee, 0xffedeeee, 0xffedeeed, 0xffedeeed, 0xffeeeded, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffecedec, 0xffedeced, 0xffededec, 0xffececec, 0xffedeced, 0xffeceded, 0xffedeced, - 0xffeceded, 0xffededed, 0xffedecec, 0xffecedec, 0xffececec, 0xffeceded, 0xffececec, 0xffededed, - 0xffeceded, 0xffeceded, 0xffededec, 0xffedeced, 0xffedeced, 0xffededec, 0xffedeced, 0xffedeced, - 0xffecedec, 0xffecedec, 0xffececec, 0xffecedec, 0xffededec, 0xffecedec, 0xffececec, 0xffecedec, - 0xffececed, 0xffececec, 0xffededec, 0xffececed, 0xffecedec, 0xffededec, 0xffececed, 0xffedecec, - 0xffececec, 0xffecedec, 0xffededec, 0xffecedec, 0xffeceded, 0xffedecec, 0xffedeced, 0xffececed, - 0xffecedec, 0xffedecec, 0xffeceded, 0xffececec, 0xffededed, 0xffececed, 0xffedecec, 0xffededec, - 0xffeceded, 0xffededed, 0xffededec, 0xffedecec, 0xffececec, 0xffececed, 0xffececed, 0xffeceded, - 0xffededec, 0xffececed, 0xffececec, 0xffecedec, 0xffededec, 0xffecedec, 0xffececed, 0xffededed, - 0xffececec, 0xffececed, 0xffedeced, 0xffececed, 0xffecedec, 0xffedeced, 0xffececed, 0xffecedec, - 0xffececec, 0xffececec, 0xffedecec, 0xffededed, 0xffededec, 0xffececed, 0xffececec, 0xffececed, - 0xffececec, 0xffedeced, 0xffececed, 0xffececed, 0xffececec, 0xffededed, 0xffededed, 0xffedecec, - 0xffedeced, 0xffedecec, 0xffececec, 0xffedecec, 0xffeceded, 0xffedecec, 0xffececed, 0xffeceded, - 0xffececec, 0xffececed, 0xffededec, 0xffeceded, 0xffececed, 0xffececed, 0xffeceded, 0xffededec, - 0xffececed, 0xffeceded, 0xffedecec, 0xffececed, 0xffededec, 0xffecedec, 0xffececec, 0xffedecec, - 0xffedeced, 0xffececec, 0xffedecec, 0xffececed, 0xffededec, 0xffeceded, 0xffededec, 0xffececec, - 0xffedecec, 0xffededec, 0xffededec, 0xffececec, 0xffececed, 0xffecedec, 0xffececec, 0xffecedec, - 0xffececec, 0xffededec, 0xffedeced, 0xffedecec, 0xffececec, 0xffededed, 0xffecedec, 0xffededec, - 0xffedeced, 0xffedeced, 0xffecedec, 0xffecedec, 0xffececec, 0xffececed, 0xffedecec, 0xffececec, - 0xffececec, 0xffedeced, 0xffeceded, 0xffececec, 0xffececec, 0xffececec, 0xffececec, 0xffececec, - 0xffedeced, 0xffececed, 0xffededed, 0xffedeced, 0xffededed, 0xffedecec, 0xffececed, 0xffededed, - 0xffedeced, 0xffececed, 0xffedecec, 0xffececed, 0xffededec, 0xffededed, 0xffededec, 0xffecedec, - 0xffececec, 0xffececed, 0xffececec, 0xffedeced, 0xffededec, 0xffedeced, 0xffedecec, 0xffedeced, - 0xffececed, 0xffededed, 0xffececec, 0xffedeced, 0xffececed, 0xffedeced, 0xffececec, 0xffececed, - 0xffececed, 0xffececec, 0xffededed, 0xffedecec, 0xffecedec, 0xffecedec, 0xffededec, 0xffededed, - 0xffececec, 0xffececec, 0xffedeced, 0xffededec, 0xffececed, 0xffeceded, 0xffeceded, 0xffecedec, - 0xffeceded, 0xffececec, 0xffececec, 0xffedecec, 0xffecedec, 0xffeceded, 0xffececec, 0xffedeced, - 0xffedeced, 0xffecedec, 0xffededed, 0xffededec, 0xffededed, 0xffededed, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffebebeb, 0xffebebec, 0xffecebeb, 0xffebecec, 0xffebecec, 0xffececeb, 0xffebebec, - 0xffebecec, 0xffebebeb, 0xffebecec, 0xffecebec, 0xffecebeb, 0xffebebeb, 0xffecebec, 0xffecebeb, - 0xffebeceb, 0xffebebec, 0xffecebeb, 0xffececeb, 0xffecebeb, 0xffebeceb, 0xffebebec, 0xffebecec, - 0xffebecec, 0xffecebec, 0xffecebec, 0xffecebec, 0xffecebec, 0xffecebeb, 0xffecebec, 0xffecebec, - 0xffecebeb, 0xffebebeb, 0xffebeceb, 0xffececec, 0xffecebeb, 0xffecebec, 0xffebecec, 0xffebeceb, - 0xffebebec, 0xffececec, 0xffecebeb, 0xffecebec, 0xffececeb, 0xffececeb, 0xffebeceb, 0xffebebec, - 0xffececeb, 0xffebebec, 0xffecebec, 0xffececec, 0xffececeb, 0xffebeceb, 0xffebecec, 0xffecebeb, - 0xffebecec, 0xffebecec, 0xffececec, 0xffecebeb, 0xffecebec, 0xffececec, 0xffebecec, 0xffebecec, - 0xffececec, 0xffebebeb, 0xffececeb, 0xffececeb, 0xffecebec, 0xffecebeb, 0xffececeb, 0xffebebec, - 0xffecebec, 0xffececeb, 0xffececec, 0xffebebec, 0xffebebeb, 0xffececec, 0xffebecec, 0xffebebec, - 0xffececec, 0xffebebec, 0xffebecec, 0xffecebec, 0xffebebeb, 0xffecebec, 0xffebebec, 0xffececeb, - 0xffecebeb, 0xffececec, 0xffececeb, 0xffebebeb, 0xffecebeb, 0xffebebec, 0xffebebec, 0xffececeb, - 0xffececeb, 0xffebeceb, 0xffececeb, 0xffececeb, 0xffebebeb, 0xffebebec, 0xffececeb, 0xffebebec, - 0xffececeb, 0xffecebeb, 0xffebebec, 0xffecebec, 0xffecebec, 0xffececec, 0xffebeceb, 0xffececec, - 0xffebebec, 0xffebecec, 0xffebebeb, 0xffecebeb, 0xffebebeb, 0xffececec, 0xffebecec, 0xffececeb, - 0xffececeb, 0xffebecec, 0xffecebec, 0xffececeb, 0xffebeceb, 0xffececeb, 0xffebecec, 0xffecebec, - 0xffebebec, 0xffebecec, 0xffebeceb, 0xffebebeb, 0xffebecec, 0xffecebec, 0xffecebeb, 0xffebeceb, - 0xffebeceb, 0xffecebec, 0xffececec, 0xffecebeb, 0xffececeb, 0xffececeb, 0xffecebec, 0xffecebec, - 0xffebebec, 0xffebecec, 0xffececec, 0xffebebeb, 0xffecebeb, 0xffececeb, 0xffebebec, 0xffebebec, - 0xffecebeb, 0xffebebec, 0xffebebeb, 0xffebebeb, 0xffebecec, 0xffebecec, 0xffebeceb, 0xffececec, - 0xffebeceb, 0xffecebeb, 0xffecebeb, 0xffececec, 0xffebecec, 0xffebecec, 0xffebeceb, 0xffebecec, - 0xffebecec, 0xffebecec, 0xffebebec, 0xffebeceb, 0xffebebeb, 0xffecebeb, 0xffebebec, 0xffebecec, - 0xffececeb, 0xffebebec, 0xffecebec, 0xffebebeb, 0xffececec, 0xffecebeb, 0xffebebec, 0xffebecec, - 0xffebebec, 0xffebebeb, 0xffecebec, 0xffecebeb, 0xffebebeb, 0xffecebec, 0xffebecec, 0xffebebeb, - 0xffebeceb, 0xffececec, 0xffececec, 0xffecebec, 0xffebebec, 0xffececec, 0xffecebeb, 0xffebeceb, - 0xffebebec, 0xffececeb, 0xffebebec, 0xffebecec, 0xffecebec, 0xffebeceb, 0xffebecec, 0xffecebeb, - 0xffecebec, 0xffebeceb, 0xffecebec, 0xffebecec, 0xffebeceb, 0xffebeceb, 0xffecebeb, 0xffececeb, - 0xffebebec, 0xffececec, 0xffececeb, 0xffecebec, 0xffebebeb, 0xffebebec, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffebebeb, 0xffeaebeb, 0xffeaeaea, 0xffebebeb, 0xffebeaeb, 0xffeaeaea, 0xffebeaeb, - 0xffeaebea, 0xffebebea, 0xffebeaea, 0xffeaebea, 0xffebebea, 0xffebeaeb, 0xffeaebea, 0xffebeaea, - 0xffeaebea, 0xffeaeaeb, 0xffebeaeb, 0xffeaeaea, 0xffebebea, 0xffeaebeb, 0xffebebeb, 0xffeaebeb, - 0xffebebeb, 0xffebebeb, 0xffeaebeb, 0xffebeaea, 0xffebebeb, 0xffebebeb, 0xffebebeb, 0xffeaebea, - 0xffeaeaeb, 0xffebebeb, 0xffebebea, 0xffebebeb, 0xffebeaeb, 0xffebebeb, 0xffebebea, 0xffebebeb, - 0xffebebeb, 0xffebebeb, 0xffebeaea, 0xffeaebeb, 0xffeaebea, 0xffeaeaeb, 0xffeaeaeb, 0xffebebeb, - 0xffebeaeb, 0xffebebea, 0xffeaeaeb, 0xffebebeb, 0xffebeaeb, 0xffeaebeb, 0xffebebeb, 0xffebebea, - 0xffeaeaea, 0xffeaeaeb, 0xffebeaeb, 0xffebebeb, 0xffebebea, 0xffebebea, 0xffebeaea, 0xffebebeb, - 0xffeaebeb, 0xffebebea, 0xffebebea, 0xffebeaeb, 0xffeaebea, 0xffebebea, 0xffeaeaea, 0xffeaebea, - 0xffeaebea, 0xffebebea, 0xffebeaeb, 0xffebebeb, 0xffeaebea, 0xffebebea, 0xffeaeaeb, 0xffeaebeb, - 0xffebebeb, 0xffebeaeb, 0xffebeaeb, 0xffeaebeb, 0xffebebea, 0xffeaebea, 0xffebebea, 0xffeaeaeb, - 0xffebebeb, 0xffebebeb, 0xffeaeaea, 0xffeaebeb, 0xffebeaeb, 0xffeaebeb, 0xffeaebeb, 0xffebebeb, - 0xffebebea, 0xffebebeb, 0xffeaebeb, 0xffeaebea, 0xffebebea, 0xffebebeb, 0xffebebeb, 0xffeaebeb, - 0xffebebeb, 0xffebeaeb, 0xffebeaeb, 0xffebebeb, 0xffebeaeb, 0xffeaebea, 0xffeaeaea, 0xffebebea, - 0xffeaeaea, 0xffebebeb, 0xffeaeaeb, 0xffebeaeb, 0xffebeaeb, 0xffebeaeb, 0xffeaebea, 0xffebeaea, - 0xffeaeaea, 0xffebebeb, 0xffebeaea, 0xffeaeaeb, 0xffeaebeb, 0xffeaebea, 0xffeaeaea, 0xffebebea, - 0xffeaebea, 0xffeaebea, 0xffebebeb, 0xffebeaeb, 0xffeaebeb, 0xffebebeb, 0xffebeaeb, 0xffebeaeb, - 0xffeaebeb, 0xffebebea, 0xffebebea, 0xffebebea, 0xffebebea, 0xffebebeb, 0xffeaebeb, 0xffeaebea, - 0xffebebeb, 0xffebebeb, 0xffebeaeb, 0xffeaebea, 0xffebeaeb, 0xffebebea, 0xffebebea, 0xffebebeb, - 0xffebebea, 0xffeaebeb, 0xffebeaeb, 0xffeaebeb, 0xffebeaea, 0xffeaebeb, 0xffeaebea, 0xffeaeaeb, - 0xffebebeb, 0xffebeaea, 0xffebebea, 0xffebeaeb, 0xffebebeb, 0xffebeaea, 0xffeaeaeb, 0xffebeaeb, - 0xffebebea, 0xffebebeb, 0xffebeaeb, 0xffebeaeb, 0xffebeaea, 0xffebeaea, 0xffebeaeb, 0xffebeaeb, - 0xffebeaeb, 0xffeaeaeb, 0xffebeaea, 0xffebeaeb, 0xffeaebeb, 0xffeaebeb, 0xffebebeb, 0xffebebea, - 0xffeaebea, 0xffebeaea, 0xffeaebea, 0xffebebeb, 0xffebebeb, 0xffeaebeb, 0xffebebeb, 0xffeaeaeb, - 0xffeaebeb, 0xffebebeb, 0xffebebeb, 0xffeaebea, 0xffeaebeb, 0xffeaebeb, 0xffebebeb, 0xffeaebeb, - 0xffebebea, 0xffebebeb, 0xffeaeaeb, 0xffebebeb, 0xffebebeb, 0xffebebea, 0xffeaebeb, 0xffeaebea, - 0xffeaeaeb, 0xffebebea, 0xffebeaea, 0xffebebea, 0xffebeaea, 0xffebebea, 0xffebebea, 0xffebebeb, - 0xffebebea, 0xffebebeb, 0xffebebea, 0xffebebeb, 0xffeaebeb, 0xffebebeb, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9eae9, 0xffeaeaea, 0xffe9eaea, - 0xffeae9ea, 0xffeaeae9, 0xffeaeae9, 0xffeae9e9, 0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeaeaea, - 0xffe9eae9, 0xffeaeaea, 0xffe9e9ea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, - 0xffeaeae9, 0xffe9e9e9, 0xffe9eaea, 0xffeae9ea, 0xffeaeaea, 0xffeae9e9, 0xffeae9ea, 0xffe9e9e9, - 0xffeaeaea, 0xffeaeaea, 0xffe9e9ea, 0xffe9eaea, 0xffeaeae9, 0xffeaeaea, 0xffeae9ea, 0xffe9eaea, - 0xffe9eaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9eae9, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, - 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeaeaea, 0xffeae9ea, 0xffeae9ea, 0xffe9eaea, - 0xffeaeaea, 0xffeaeaea, 0xffeae9e9, 0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeae9e9, 0xffe9eaea, - 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffeae9e9, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9e9ea, - 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffeae9ea, 0xffe9eaea, 0xffeaeae9, 0xffeaeae9, 0xffeaeaea, - 0xffeaeaea, 0xffe9eaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffe9eaea, 0xffeae9ea, - 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffe9eae9, 0xffeaeaea, 0xffe9eaea, 0xffeaeaea, 0xffeaeaea, - 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffeaeae9, 0xffe9eaea, 0xffe9eaea, 0xffeaeaea, - 0xffeaeaea, 0xffeae9e9, 0xffeaeaea, 0xffeaeae9, 0xffeaeae9, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, - 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, - 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffeaeaea, 0xffe9eaea, - 0xffeaeaea, 0xffe9eae9, 0xffeaeae9, 0xffeae9ea, 0xffeaeaea, 0xffe9eaea, 0xffe9eaea, 0xffeae9ea, - 0xffeaeae9, 0xffeaeaea, 0xffeae9e9, 0xffeaeaea, 0xffe9eaea, 0xffeae9ea, 0xffeaeaea, 0xffeaeaea, - 0xffe9eaea, 0xffeae9ea, 0xffeaeae9, 0xffeae9e9, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, - 0xffeaeaea, 0xffeaeaea, 0xffe9eaea, 0xffe9e9ea, 0xffe9eae9, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, - 0xffeaeae9, 0xffeae9ea, 0xffeaeae9, 0xffeaeae9, 0xffe9eaea, 0xffeaeaea, 0xffeaeae9, 0xffe9eaea, - 0xffeaeaea, 0xffeaeae9, 0xffeae9ea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9eaea, 0xffeae9ea, - 0xffeaeae9, 0xffeae9ea, 0xffe9eaea, 0xffeaeae9, 0xffeaeae9, 0xffeae9ea, 0xffeaeaea, 0xffe9eaea, - 0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffe9eaea, 0xffe9e9ea, - 0xffeaeaea, 0xffe9e9ea, 0xffe9eaea, 0xffeae9ea, 0xffe9e9e9, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, - 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeaeaea, 0xffeaeaea, 0xffe9e9ea, 0xffeaeaea, - 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9eaea, - 0xffeaeaea, 0xffe9eae9, 0xffeaeaea, 0xffeae9ea, 0xffeaeae9, 0xffeaeaea, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffeae9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, - 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffe8e8e8, 0xffe8e8e9, 0xffe9e9e9, 0xffe8e8e8, 0xffe9e8e9, 0xffe8e8e9, 0xffe8e8e9, - 0xffe8e8e9, 0xffe8e8e8, 0xffe8e8e9, 0xffe8e8e9, 0xffe8e9e9, 0xffe9e8e8, 0xffe9e8e8, 0xffe8e9e8, - 0xffe8e9e9, 0xffe8e8e8, 0xffe8e8e9, 0xffe9e8e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e9, - 0xffe9e8e8, 0xffe8e8e9, 0xffe9e8e9, 0xffe9e9e8, 0xffe9e8e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, - 0xffe8e9e8, 0xffe8e8e9, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e9, 0xffe8e9e8, 0xffe8e8e8, - 0xffe8e9e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e9e9, 0xffe8e8e8, 0xffe9e8e9, 0xffe8e8e8, - 0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe9e9e8, 0xffe8e8e8, 0xffe8e9e9, 0xffe8e8e9, 0xffe8e8e8, - 0xffe8e9e8, 0xffe9e9e8, 0xffe8e8e8, 0xffe9e9e9, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e9, - 0xffe8e9e8, 0xffe8e8e9, 0xffe8e9e9, 0xffe9e8e8, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe9e8e9, - 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe9e8e9, 0xffe8e8e8, 0xffe8e8e9, - 0xffe8e8e8, 0xffe9e9e8, 0xffe9e8e9, 0xffe8e8e9, 0xffe8e9e8, 0xffe9e8e9, 0xffe8e9e8, 0xffe8e9e9, - 0xffe8e8e8, 0xffe9e9e8, 0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e9, 0xffe8e9e9, 0xffe8e8e8, - 0xffe8e8e8, 0xffe8e8e9, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e9, - 0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, - 0xffe8e8e9, 0xffe8e8e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe9e9e8, 0xffe8e9e9, 0xffe8e8e8, 0xffe8e8e8, - 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe9e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e9e8, - 0xffe8e8e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e8, - 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e9, 0xffe9e9e8, - 0xffe8e8e8, 0xffe9e9e8, 0xffe8e9e9, 0xffe8e9e8, 0xffe9e8e9, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, - 0xffe8e8e8, 0xffe9e8e8, 0xffe9e8e8, 0xffe9e8e9, 0xffe8e8e9, 0xffe8e9e8, 0xffe9e8e8, 0xffe8e9e9, - 0xffe9e8e9, 0xffe9e8e8, 0xffe8e8e9, 0xffe9e8e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe9e9e8, - 0xffe8e8e8, 0xffe8e8e9, 0xffe8e9e9, 0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, - 0xffe8e8e8, 0xffe8e9e8, 0xffe8e9e9, 0xffe8e8e8, 0xffe8e8e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e9, - 0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, - 0xffe9e8e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e9, 0xffe9e8e8, 0xffe8e8e8, 0xffe9e8e8, - 0xffe9e8e8, 0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, - 0xffe8e8e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe9e8e9, 0xffe9e9e9, 0xffe8e8e8, 0xffe8e9e9, 0xffe9e8e8, - 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e7e8, 0xffe7e8e7, 0xffe8e7e8, 0xffe7e7e8, 0xffe7e8e8, - 0xffe7e7e8, 0xffe8e7e8, 0xffe8e8e8, 0xffe7e8e7, 0xffe8e8e8, 0xffe7e8e8, 0xffe8e7e7, 0xffe8e8e7, - 0xffe7e7e7, 0xffe8e8e8, 0xffe7e7e7, 0xffe7e8e7, 0xffe8e8e7, 0xffe8e8e8, 0xffe7e7e8, 0xffe8e8e7, - 0xffe8e8e8, 0xffe8e8e7, 0xffe7e7e7, 0xffe7e8e7, 0xffe8e8e7, 0xffe8e8e7, 0xffe8e7e8, 0xffe8e7e8, - 0xffe7e8e7, 0xffe7e7e8, 0xffe8e8e8, 0xffe7e7e7, 0xffe7e8e8, 0xffe7e7e7, 0xffe7e8e7, 0xffe7e8e8, - 0xffe8e7e8, 0xffe7e7e7, 0xffe8e8e7, 0xffe7e8e7, 0xffe7e8e8, 0xffe8e8e8, 0xffe8e8e7, 0xffe8e8e8, - 0xffe7e7e7, 0xffe7e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e7e8, 0xffe8e7e8, 0xffe8e8e8, 0xffe7e8e8, - 0xffe7e8e7, 0xffe7e7e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e7e7, 0xffe8e8e7, 0xffe8e8e8, - 0xffe8e8e7, 0xffe7e7e8, 0xffe7e7e8, 0xffe8e8e7, 0xffe8e7e8, 0xffe8e7e7, 0xffe8e8e7, 0xffe7e8e8, - 0xffe8e7e8, 0xffe8e7e8, 0xffe8e7e8, 0xffe7e7e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e7, 0xffe7e7e7, - 0xffe7e8e7, 0xffe7e7e8, 0xffe8e7e8, 0xffe8e8e7, 0xffe7e7e8, 0xffe8e8e8, 0xffe8e7e7, 0xffe8e7e8, - 0xffe7e7e7, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e8e7, 0xffe8e7e8, 0xffe8e7e7, 0xffe8e7e8, 0xffe8e8e7, - 0xffe7e8e8, 0xffe8e7e7, 0xffe8e7e7, 0xffe8e7e7, 0xffe8e7e7, 0xffe7e8e8, 0xffe7e7e8, 0xffe8e7e8, - 0xffe7e8e8, 0xffe7e8e8, 0xffe7e8e7, 0xffe8e7e8, 0xffe8e8e7, 0xffe8e8e7, 0xffe7e8e8, 0xffe8e7e8, - 0xffe8e8e8, 0xffe8e8e7, 0xffe7e7e7, 0xffe8e8e8, 0xffe7e7e8, 0xffe8e8e8, 0xffe7e7e8, 0xffe7e7e7, - 0xffe7e7e8, 0xffe7e7e8, 0xffe8e7e8, 0xffe8e7e7, 0xffe8e7e7, 0xffe8e7e8, 0xffe8e8e7, 0xffe7e7e8, - 0xffe8e8e8, 0xffe7e8e7, 0xffe7e8e7, 0xffe8e8e8, 0xffe8e7e8, 0xffe7e7e7, 0xffe8e8e8, 0xffe8e7e8, - 0xffe8e8e7, 0xffe7e7e8, 0xffe8e7e8, 0xffe7e7e8, 0xffe7e8e7, 0xffe7e8e7, 0xffe7e7e8, 0xffe8e7e7, - 0xffe8e7e7, 0xffe8e7e7, 0xffe7e8e7, 0xffe8e8e8, 0xffe7e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e7e7, - 0xffe7e8e7, 0xffe8e7e7, 0xffe7e8e8, 0xffe7e7e7, 0xffe8e7e8, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e8e8, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e8e7, 0xffe8e8e7, 0xffe8e7e8, 0xffe7e8e8, 0xffe7e7e7, 0xffe7e7e8, - 0xffe7e7e8, 0xffe7e8e8, 0xffe7e8e8, 0xffe7e8e8, 0xffe7e7e7, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e8e8, - 0xffe7e8e8, 0xffe8e7e8, 0xffe7e7e7, 0xffe8e7e8, 0xffe7e8e7, 0xffe8e7e7, 0xffe7e8e8, 0xffe7e8e8, - 0xffe7e8e8, 0xffe7e8e7, 0xffe7e8e8, 0xffe7e8e8, 0xffe8e8e8, 0xffe8e7e7, 0xffe8e7e7, 0xffe8e7e8, - 0xffe8e8e7, 0xffe8e8e7, 0xffe8e7e8, 0xffe7e7e8, 0xffe8e7e8, 0xffe8e7e7, 0xffe8e8e8, 0xffe8e7e8, - 0xffe7e7e8, 0xffe8e8e7, 0xffe7e8e7, 0xffe7e8e7, 0xffe8e8e8, 0xffe8e7e8, 0xffe7e8e7, 0xffe8e7e7, - 0xffe7e7e8, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e7e7, 0xffe7e7e8, 0xffe8e8e7, 0xffe7e7e8, 0xffe8e7e7, - 0xffe7e7e8, 0xffe7e7e8, 0xffe8e8e7, 0xffe7e8e8, 0xffe8e7e7, 0xffe8e8e8, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e6e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e6e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e6e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e6, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, - 0xffd6dbd6, 0xffe6e6e6, 0xffe6e7e7, 0xffe6e7e6, 0xffe7e6e7, 0xffe7e6e6, 0xffe7e6e6, 0xffe6e6e7, - 0xffe6e6e6, 0xffe6e6e6, 0xffe7e6e6, 0xffe7e6e6, 0xffe6e7e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe6e6e7, - 0xffe7e6e6, 0xffe6e7e7, 0xffe7e6e6, 0xffe7e7e7, 0xffe6e7e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe6e7e6, - 0xffe6e7e6, 0xffe7e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e6e6, 0xffe6e7e7, 0xffe6e7e7, 0xffe6e7e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e6, 0xffe6e6e6, 0xffe7e7e7, - 0xffe6e6e7, 0xffe7e7e7, 0xffe7e6e7, 0xffe6e6e7, 0xffe6e7e6, 0xffe6e6e6, 0xffe7e7e7, 0xffe7e6e6, - 0xffe7e6e7, 0xffe7e6e7, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e7e6, 0xffe7e7e6, 0xffe6e6e7, 0xffe6e7e6, - 0xffe6e6e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe7e6e6, 0xffe6e6e7, 0xffe6e7e7, 0xffe6e7e7, 0xffe6e7e6, - 0xffe6e6e7, 0xffe6e6e7, 0xffe6e6e7, 0xffe6e6e7, 0xffe6e6e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe6e7e6, - 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe6e6e6, 0xffe6e7e7, 0xffe7e7e7, - 0xffe6e7e7, 0xffe7e6e6, 0xffe6e6e7, 0xffe6e7e7, 0xffe7e6e7, 0xffe7e7e7, 0xffe6e6e7, 0xffe6e6e6, - 0xffe7e7e6, 0xffe6e6e6, 0xffe6e7e7, 0xffe6e6e6, 0xffe6e7e6, 0xffe7e7e6, 0xffe7e7e6, 0xffe6e7e7, - 0xffe6e6e6, 0xffe6e7e6, 0xffe6e7e7, 0xffe7e7e6, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e7e6, 0xffe6e6e6, - 0xffe7e7e6, 0xffe6e6e7, 0xffe6e7e7, 0xffe6e7e6, 0xffe7e6e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe7e6e7, - 0xffe6e7e7, 0xffe6e7e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e6e7, 0xffe6e6e7, - 0xffe6e6e6, 0xffe7e6e7, 0xffe6e6e6, 0xffe7e6e7, 0xffe6e6e7, 0xffe7e7e7, 0xffe6e6e7, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe7e6e6, 0xffe7e7e6, 0xffe7e7e7, 0xffe6e6e6, 0xffe7e7e7, 0xffe6e7e7, - 0xffe6e7e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe7e7e6, 0xffe6e6e7, 0xffe7e6e6, 0xffe7e6e7, 0xffe6e6e7, - 0xffe6e7e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e7e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe7e6e6, - 0xffe6e7e7, 0xffe6e7e7, 0xffe6e6e6, 0xffe7e7e6, 0xffe7e6e6, 0xffe7e6e6, 0xffe6e7e6, 0xffe7e6e6, - 0xffe7e7e6, 0xffe6e6e7, 0xffe6e6e6, 0xffe6e6e7, 0xffe6e7e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e7, 0xffe7e7e7, 0xffe6e6e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe6e6e7, 0xffe6e7e7, - 0xffe7e6e6, 0xffe7e6e7, 0xffe6e6e6, 0xffe7e7e6, 0xffe7e6e6, 0xffe6e7e7, 0xffe6e7e7, 0xffe7e7e7, - 0xffe6e6e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e6, 0xffe7e7e7, 0xffe6e6e7, 0xffe7e7e7, 0xffe6e6e7, - 0xffe6e7e6, 0xffe7e7e6, 0xffe7e6e7, 0xffe7e6e7, 0xffe7e6e6, 0xffe6e6e6, 0xffe7e7e6, 0xffe6e7e6, - 0xffe7e6e6, 0xffe7e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e6e7, 0xffe6e7e7, - 0xffe7e7e6, 0xffe7e6e7, 0xffe7e7e7, 0xffe6e6e6, 0xffe6e6e7, 0xffe7e6e6, 0xffe6e6e7, 0xffe7e7e6, - 0xffe7e7e7, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe6e7e7, 0xffe6e8e6, 0xffd6dbd6, - 0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797879, 0xffb5b2b5, 0xffb5b2b5, - 0xffd9dbd9, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, - 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6ebe6, 0xffd9dbd9, - 0xffbdbebd, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797879, 0xffb5b2b5, 0xffb5b2b5, - 0xffd9dbd9, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, - 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffd9dbd9, - 0xffbdbebd, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797879, 0xffb5b2b5, 0xffb5b2b5, - 0xffcbcacb, 0xffd9dbd9, 0xffe6ebe6, 0xffe6ebe6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, - 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6ebe6, 0xffe6ebe6, 0xffd9dbd9, 0xffcbcacb, - 0xffbdbebd, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0xff797879, 0xffb5b2b5, - 0xffbdbabd, 0xffcbcacb, 0xffd9dbd9, 0xffd9dbd9, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, - 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd9dbd9, 0xffd9dbd9, 0xffcbcacb, 0xffbdbabd, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff848284, - 0xff9c9f9c, 0xff9c9f9c, 0xff9c9f9c, 0xff9c9f9c, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, - 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xff9c9e9c, 0xff9c9e9c, 0xff9c9e9c, 0x00080408, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff848284, 0xffc5c2c5, 0xffc5c2c5, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffbdbebd, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff848284, 0xff848284, 0xffc5c2c5, 0xffe6ebe6, - 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, - 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffbdbebd, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffc5716b, - 0xffd07770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, - 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, - 0xffd6756b, 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffce7163, - 0xffce7163, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6c63, 0xffce6b63, 0xffce6963, 0xffce695a, 0xffce685a, 0xffce675a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5645a, 0xffc5645d, 0xffc56258, 0xffc56258, 0xffc56258, 0xffc56052, - 0xffc56052, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd5142, 0xffbd5142, 0xffba5042, 0xffba5042, 0xffba4d42, - 0xffb84d42, 0xffb84d42, 0xffb84d42, 0xffb54c3f, 0xffb54a3c, 0xffb54a3c, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5433a, 0xffb54237, - 0xffb54237, 0xffb54131, 0xffb54131, 0xffad4131, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, - 0xffad3e31, 0xffad3e31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, - 0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad392f, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392f, - 0xffad392c, 0xffad392f, 0xffad392f, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3e31, 0xffad3f31, 0xffad3f31, - 0xffad3f31, 0xffad3f31, 0xffad4131, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54a3c, - 0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb84e42, 0xffba5042, 0xffbd5045, - 0xffbd5142, 0xffbd5142, 0xffbd5142, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc35950, 0xffc35950, 0xffc35950, 0xffc55a52, - 0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc56052, 0xffc56052, 0xffc56152, 0xffc56258, - 0xffc56258, 0xffc56455, 0xffc56455, 0xffcb655a, 0xffcb655a, 0xffcb655a, 0xffcb655a, 0xffce675d, - 0xffce6860, 0xffce6860, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6d63, - 0xffce6f63, 0xffce6f63, 0xffce7063, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd37168, 0xffd6736b, - 0xffd6736b, 0xffd6746b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, - 0xffd6786b, 0xffd6796b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67973, - 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd07770, 0xffc5716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffc5716b, - 0xffd07770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, - 0xffd6796b, 0xffd6796b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6746b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffd6716b, 0xffce7063, - 0xffce7063, 0xffce7063, 0xffce7063, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6c63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce685a, 0xffce685a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56258, 0xffc56258, 0xffc56152, 0xffc56152, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd594a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb54d42, 0xffb84d42, - 0xffb84d42, 0xffb84d42, 0xffb84d42, 0xffb54c3f, 0xffb54a3c, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5423a, 0xffb54237, - 0xffb54237, 0xffb54131, 0xffb54131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3a2c, - 0xffad3b2f, 0xffad3a2c, 0xffad3929, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3f31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb5413a, 0xffb5413a, 0xffb54237, 0xffb54237, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5493a, - 0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb84e42, 0xffbd4e47, - 0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, - 0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56455, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce675d, - 0xffce6860, 0xffce6860, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6c63, 0xffce6d63, - 0xffce6f63, 0xffce6f63, 0xffce6f63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd6716b, - 0xffd6716b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, - 0xffd6776b, 0xffd6786b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67973, - 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd07770, 0xffc5716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffc5716b, - 0xffd07770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, - 0xffd6796b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffd6716b, 0xffce7063, - 0xffce7063, 0xffce7063, 0xffce7063, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce685a, 0xffce685a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56258, 0xffc56258, 0xffc56258, 0xffc56152, 0xffc55e52, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd594a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd514a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb84e42, 0xffb84d42, - 0xffb84d42, 0xffb84d42, 0xffb84d42, 0xffb54a3c, 0xffb54a3c, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5433a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb54237, - 0xffb54237, 0xffb54131, 0xffb54131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3a2c, - 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5493a, 0xffb54a3c, - 0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd4e47, - 0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55c52, - 0xffc55c52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56052, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56258, 0xffc8655a, 0xffcb655a, 0xffc8655a, 0xffcb655a, 0xffce675d, - 0xffce6860, 0xffce6963, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6d63, - 0xffce6f63, 0xffce6f63, 0xffce7063, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd6716b, - 0xffd6736b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67973, - 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd07770, 0xffc5716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffc5716b, - 0xffd07770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796b, - 0xffd6796b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6736b, 0xffd6716b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffce7063, - 0xffce7063, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce695a, 0xffce675a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5625a, 0xffc56258, 0xffc56258, 0xffc56152, 0xffc56152, 0xffc55e52, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb54d42, 0xffb84d42, - 0xffb84d42, 0xffb84d42, 0xffb84d42, 0xffb54c3f, 0xffb5493a, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5433a, 0xffb54237, - 0xffb54237, 0xffb54131, 0xffb54131, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3a2c, - 0xffad3a2c, 0xffad3a2c, 0xffad3929, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5493a, - 0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb84e42, 0xffbd4e47, - 0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd514a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc55c52, - 0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56152, 0xffc5615a, - 0xffc5615a, 0xffc56258, 0xffc56258, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce675d, - 0xffce6860, 0xffce6860, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6f63, - 0xffce6f63, 0xffce6f63, 0xffce7063, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd6716b, - 0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67973, - 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd07770, 0xffc5716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffce716b, - 0xffd37770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, - 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd67168, 0xffd67168, 0xffd67168, 0xffd67168, 0xffce7063, - 0xffce7063, 0xffce7063, 0xffce7063, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce685a, 0xffce675a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc55e52, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584a, 0xffbd584a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd514a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffb84e42, 0xffb84e42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5423a, 0xffb24137, - 0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, - 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54131, 0xffb54131, 0xffb54234, 0xffb54337, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5493a, - 0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd4e47, - 0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd524a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55c52, - 0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56152, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56258, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce685d, - 0xffce685d, 0xffce695a, 0xffce695a, 0xffce6b63, 0xffce6c63, 0xffce6c63, 0xffce6c63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd6716b, - 0xffd6716b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd6796e, 0xffd67970, - 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd37770, 0xffce716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffce716b, - 0xffd37770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, - 0xffd6796b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd67168, 0xffd67168, 0xffd67168, 0xffd67165, 0xffce7063, - 0xffce7063, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6c63, 0xffce6b63, 0xffce6963, 0xffce695a, 0xffce695a, 0xffce675a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5625a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc55e52, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffb84e42, 0xffb54d42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5433a, 0xffb24137, - 0xffb24137, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, - 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, - 0xffad3e31, 0xffad3f31, 0xffad3f31, 0xffb54131, 0xffb54234, 0xffb54234, 0xffb54337, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5493a, - 0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd4e47, - 0xffbd5045, 0xffbd5045, 0xffbd5045, 0xffbd514a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd554a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55c52, - 0xffc55c52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc5615a, - 0xffc5615a, 0xffc56258, 0xffc56258, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce685d, - 0xffce685d, 0xffce695a, 0xffce685d, 0xffce6b63, 0xffce6c63, 0xffce6c63, 0xffce6d63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd6716b, - 0xffd6736b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6786b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd6796e, - 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd37770, 0xffce716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffce716b, - 0xffd37770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796b, - 0xffd6796b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6756b, 0xffd6746b, 0xffd67168, 0xffd67168, 0xffd67168, 0xffd67168, 0xffce7163, - 0xffce7063, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce695a, 0xffce675a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc55e52, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb84e42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5433a, 0xffb24137, - 0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, - 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54131, 0xffb54234, 0xffb54234, 0xffb54337, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5493a, - 0xffb54a3c, 0xffb54a3c, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd5045, - 0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd514a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, - 0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56152, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56455, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce685d, - 0xffce685d, 0xffce695a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd6716b, - 0xffd6716b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, - 0xffd6756b, 0xffd6786b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd6796e, - 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd37770, 0xffce716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffce716b, - 0xffd37770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, - 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6786b, 0xffd6756b, 0xffd6776b, 0xffd6756b, 0xffd6756b, - 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd67168, 0xffd67168, 0xffd67168, 0xffd67168, 0xffce7063, - 0xffce7063, 0xffce7063, 0xffce7063, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, - 0xffce6b63, 0xffce6b63, 0xffce6963, 0xffce695a, 0xffce685a, 0xffce675a, 0xffce675a, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584a, 0xffbd584a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb54d42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5423a, 0xffb24137, - 0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad3a2c, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, 0xffad3b2f, - 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54131, 0xffb54131, 0xffb54234, 0xffb54234, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5493a, - 0xffb54a3c, 0xffb54a3c, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd4e47, - 0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd524a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc55a52, - 0xffc55c52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56152, 0xffc56258, - 0xffc56258, 0xffc56258, 0xffc56455, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce685d, - 0xffce685d, 0xffce695a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd6716b, - 0xffd6716b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6786b, 0xffd6776b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67970, - 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd37770, 0xffce716b, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, - 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd37168, 0xffd37168, 0xffd37168, 0xffd07165, 0xffce7063, - 0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 0xffce6960, - 0xffce6960, 0xffce6960, 0xffce695d, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5625a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffc55952, 0xffbd594a, - 0xffbd584a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd514a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, - 0xffb54c42, 0xffb54c42, 0xffb54a42, 0xffb5493f, 0xffb5493c, 0xffb5493c, 0xffb5493c, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24137, - 0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3a31, 0xffad3a31, 0xffad3931, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffaa3929, 0xffaa3929, 0xffa73929, 0xffaa3929, 0xffa73929, - 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad3a31, - 0xffad3a31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad4131, 0xffaf4234, 0xffaf4234, 0xffb24337, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, - 0xffb54a3c, 0xffb54a3c, 0xffb54a3c, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5045, - 0xffba5045, 0xffba5045, 0xffbd5142, 0xffbd514a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd554a, 0xffbd564a, 0xffbd584a, 0xffbd594d, 0xffbd594d, 0xffbd594d, 0xffbd5950, 0xffc55a52, - 0xffc55a52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56052, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56258, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffcb685a, - 0xffcb685a, 0xffcb685a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6f65, 0xffce6f65, 0xffce7068, 0xffce7068, 0xffd6716b, - 0xffd6716b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6786b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, - 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6736b, 0xffd37168, 0xffd37168, 0xffd37168, 0xffd37168, 0xffce7063, - 0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 0xffce6b63, 0xffce6960, - 0xffce6960, 0xffce6960, 0xffce695d, 0xffcb685a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd584a, 0xffbd584a, 0xffbd584a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, 0xffb54d42, - 0xffb54c42, 0xffb54c42, 0xffb54c42, 0xffb5493f, 0xffb5493c, 0xffb5493c, 0xffb5493c, 0xffb5483a, - 0xffb5463a, 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24137, - 0xffb24137, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3e31, 0xffad3f31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3a31, 0xffad3a31, 0xffad3931, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffa73929, - 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffad392c, 0xffad392c, 0xffad392f, 0xffad392c, 0xffad3a31, - 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffaf4234, 0xffaf4234, 0xffaf4234, 0xffb24337, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, - 0xffb54a3c, 0xffb54a3c, 0xffb54a3c, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb84e47, - 0xffba5045, 0xffba5045, 0xffbd5142, 0xffbd514a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffbd594d, 0xffbd594d, 0xffbd594d, 0xffbd5950, 0xffc55a52, - 0xffc55a52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56152, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56455, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffcb685a, - 0xffcb685a, 0xffcb685a, 0xffce695a, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6f65, 0xffce6f65, 0xffce7068, 0xffce7068, 0xffd6716b, - 0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, - 0xffd6776b, 0xffd6786b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd6796e, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6786b, - 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd37168, 0xffd37168, 0xffd37168, 0xffd37168, 0xffce7063, - 0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 0xffce6c63, 0xffce6960, - 0xffce6960, 0xffce6960, 0xffce695d, 0xffcb685a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5645a, 0xffc5625a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd584a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54e42, 0xffb54d42, - 0xffb54d42, 0xffb54c42, 0xffb54a42, 0xffb5493f, 0xffb5493c, 0xffb5493c, 0xffb5493c, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24137, - 0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3a31, 0xffad3a31, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, - 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffad392c, 0xffad392c, 0xffad392f, 0xffad392c, 0xffad3a31, - 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3f31, - 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad4131, 0xffaf4234, 0xffaf4234, 0xffb24337, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, - 0xffb54942, 0xffb54a3c, 0xffb54a3c, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb84e47, - 0xffba5045, 0xffba5045, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffbd594d, 0xffbd594d, 0xffbd594d, 0xffbd5950, 0xffc55a52, - 0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56052, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56455, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc8675a, - 0xffcb685a, 0xffcb685a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6f65, 0xffce7068, 0xffce7068, 0xffce7068, 0xffd6716b, - 0xffd6716b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, - 0xffd6756b, 0xffd6786b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd67970, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, - 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd37168, 0xffd37168, 0xffd37168, 0xffd37168, 0xffce7063, - 0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 0xffce6c63, 0xffce6960, - 0xffce6960, 0xffce6960, 0xffce695d, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55a52, 0xffc55a52, 0xffc55952, 0xffbd594a, - 0xffbd584a, 0xffbd584a, 0xffbd584a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54e42, 0xffb54d42, - 0xffb54c42, 0xffb54c42, 0xffb54c42, 0xffb5493f, 0xffb5493f, 0xffb5493c, 0xffb5493c, 0xffb5483a, - 0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24137, - 0xffb24137, 0xffb24137, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3a31, 0xffad3a31, 0xffad392f, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, - 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392f, 0xffad3a31, - 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, - 0xffad3f31, 0xffad3f31, 0xffad4131, 0xffaf4234, 0xffaf4234, 0xffaf4234, 0xffaf4234, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, - 0xffb54942, 0xffb54a3c, 0xffb54a3c, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5045, - 0xffba5045, 0xffba5045, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffbd594d, 0xffbd594d, 0xffbd594d, 0xffbd5950, 0xffc55a52, - 0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56152, 0xffc5615a, - 0xffc56258, 0xffc56258, 0xffc56258, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffcb685a, - 0xffcb685a, 0xffcb685a, 0xffce695a, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6f65, 0xffce7068, 0xffce7068, 0xffce7068, 0xffd6716b, - 0xffd6716b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6776b, 0xffd6776b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd6796e, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, - 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffce7063, - 0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c5d, - 0xffce6b60, 0xffce6963, 0xffce6963, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55a52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584d, 0xffbd584d, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffaf4234, - 0xffaf4234, 0xffaf4234, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3a31, 0xffad3a2c, - 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffad3931, 0xffad3931, 0xffad3a31, 0xffad3b31, 0xffad3a31, - 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3e37, - 0xffad3f34, 0xffad3f34, 0xffad3f34, 0xffad413a, 0xffad413a, 0xffaf423a, 0xffb2433a, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54a3f, - 0xffb54942, 0xffb54a3f, 0xffb54a3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5047, - 0xffba5047, 0xffbd5142, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, - 0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc5615a, - 0xffc5625a, 0xffc5625a, 0xffc5625a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffce685d, - 0xffce685d, 0xffce685d, 0xffce685d, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce7068, 0xffce7068, 0xffce7068, 0xffce7163, 0xffd6716b, - 0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd67970, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796b, - 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffd6716b, 0xffce7163, - 0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6b60, - 0xffce6b60, 0xffce6b60, 0xffce6963, 0xffcb685a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd584d, 0xffbd584d, 0xffbd584d, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24337, - 0xffaf4234, 0xffaf4234, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3a2c, - 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, - 0xffad392c, 0xffad392c, 0xffad392c, 0xffad3a31, 0xffad3a31, 0xffad3a31, 0xffad3b31, 0xffad3b31, - 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3e31, 0xffad3e31, 0xffad3e31, 0xffad3f34, - 0xffad3f34, 0xffad3f34, 0xffad4131, 0xffaf423a, 0xffaf423a, 0xffaf423a, 0xffb2433a, 0xffb5453a, - 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, - 0xffb54a3f, 0xffb54a3f, 0xffb54a3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5047, - 0xffba5047, 0xffba5047, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, - 0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, - 0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc5615a, - 0xffc5625a, 0xffc5625a, 0xffc5645a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffce685d, - 0xffce685d, 0xffce685d, 0xffce695a, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce7068, 0xffce7068, 0xffce7068, 0xffce7163, 0xffd6716b, - 0xffd6736b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd6796e, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, - 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6786b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6736b, 0xffd6746b, 0xffd6716b, 0xffd6716b, 0xffd6716b, 0xffce7163, - 0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6b60, - 0xffce6b60, 0xffce6b60, 0xffce6963, 0xffce695a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd584d, 0xffbd584d, 0xffbd584d, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd524a, 0xffbd524a, 0xffbd524a, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54e42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24337, - 0xffaf4234, 0xffaf4234, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3b2f, - 0xffad3b2f, 0xffad3a2c, 0xffad3a2c, 0xffad392c, 0xffad392f, 0xffad392c, 0xffad392c, 0xffad392f, - 0xffad392c, 0xffad392f, 0xffad392f, 0xffad3a31, 0xffad3a31, 0xffad3b31, 0xffad3b31, 0xffad3b31, - 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3e31, 0xffad3e31, 0xffad3e31, 0xffad3f34, - 0xffad3f34, 0xffad3f34, 0xffad4131, 0xffad413a, 0xffaf423a, 0xffaf423a, 0xffb2433a, 0xffb5453a, - 0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, - 0xffb54942, 0xffb54c3c, 0xffb54a3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5047, - 0xffba5047, 0xffba5047, 0xffba5047, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd564a, - 0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, - 0xffc55a52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56152, 0xffc5625a, - 0xffc5625a, 0xffc5645a, 0xffc5645a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffce685d, - 0xffce685d, 0xffce695a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce7068, 0xffce7068, 0xffce7068, 0xffce7068, 0xffd6716b, - 0xffd6736b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, - 0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796b, - 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, - 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffce7163, - 0xffce7063, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c5d, - 0xffce6b60, 0xffce6b60, 0xffce6963, 0xffcb685a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56052, - 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffbd594a, - 0xffbd594a, 0xffbd584d, 0xffbd584d, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, - 0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffb55142, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, - 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5483a, - 0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24337, - 0xffaf4234, 0xffaf4234, 0xffaf4234, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3d31, - 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3a2c, - 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad392f, 0xffad392f, 0xffad392f, 0xffad392f, 0xffad392f, - 0xffad392f, 0xffad392f, 0xffad392f, 0xffad3a31, 0xffad3a31, 0xffad3b31, 0xffad3b31, 0xffad3b31, - 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3f31, 0xffad3f34, - 0xffad3f34, 0xffad3f34, 0xffad4131, 0xffaf423a, 0xffb2433a, 0xffb2433a, 0xffb2433a, 0xffb5453a, - 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, - 0xffb54942, 0xffb54a3f, 0xffb54a3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5047, - 0xffba5047, 0xffbd5142, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 0xffbd564a, - 0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc35950, 0xffc55a52, - 0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56152, 0xffc5625a, - 0xffc5625a, 0xffc5625a, 0xffc5645a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffce685d, - 0xffce685d, 0xffce685d, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6c63, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce7068, 0xffce7068, 0xffce7068, 0xffce7068, 0xffd6716b, - 0xffd6716b, 0xffd6746b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, - 0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, - 0xffd67970, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00100400, 0xff473531, 0xff7e6563, 0xff7e6563, 0xffad655a, - 0xffad7b73, 0xffad7b73, 0xffad7b73, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb5756b, - 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5716b, - 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffad716b, - 0xffad716b, 0xffad716b, 0xffad716b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, - 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffb5655a, 0xffb5655a, 0xffb5655a, 0xffb5655a, 0xffb5615a, - 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, - 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad594a, - 0xffad594a, 0xffad594a, 0xffad594a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad514a, - 0xffad514a, 0xffad514a, 0xffad514a, 0xffa55142, 0xffa55142, 0xffa55142, 0xffa55142, 0xffa54d42, - 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54942, - 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xff9c453a, - 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c413a, - 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, - 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c3d3a, - 0xff9c3d3a, 0xff9c3d3a, 0xff9c3d3a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, - 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c453a, - 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xffa54942, - 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54d42, - 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffad514a, - 0xffad514a, 0xffad514a, 0xffad514a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, - 0xffad554a, 0xffad554a, 0xffad554a, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad5952, 0xffb55952, - 0xffb55952, 0xffb55952, 0xffb55952, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d5a, - 0xffb55d5a, 0xffb55d5a, 0xffb55d5a, 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffbd655a, - 0xffbd655a, 0xffbd655a, 0xffbd655a, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, - 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffb5716b, - 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5756b, - 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb57573, - 0xffb57573, 0xffb57573, 0xffb57573, 0xffad7b73, 0xffad7b73, 0xffad7b73, 0xffad655a, 0xff7e6463, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00100400, 0xff473531, 0xff7e6563, 0xff7e6563, 0xffad655a, - 0xffad7b73, 0xffad7b73, 0xffad7b73, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb5756b, - 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5716b, - 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffad716b, - 0xffad716b, 0xffad716b, 0xffad716b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, - 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffb5655a, 0xffb5655a, 0xffb5655a, 0xffb5655a, 0xffb5615a, - 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, - 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad594a, - 0xffad594a, 0xffad594a, 0xffad594a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad514a, - 0xffad514a, 0xffad514a, 0xffad514a, 0xffa55142, 0xffa55142, 0xffa55142, 0xffa55142, 0xffa54d42, - 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54942, - 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xff9c453a, - 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c413a, - 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, - 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c3d3a, - 0xff9c3d3a, 0xff9c3d3a, 0xff9c3d3a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, - 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c453a, - 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xffa54942, - 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54d42, - 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffad514a, - 0xffad514a, 0xffad514a, 0xffad514a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, - 0xffad554a, 0xffad554a, 0xffad554a, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad5952, 0xffb55952, - 0xffb55952, 0xffb55952, 0xffb55952, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d5a, - 0xffb55d5a, 0xffb55d5a, 0xffb55d5a, 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffbd655a, - 0xffbd655a, 0xffbd655a, 0xffbd655a, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, - 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffb5716b, - 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5756b, - 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb57573, - 0xffb57573, 0xffb57573, 0xffb57573, 0xffad7b73, 0xffad7b73, 0xffad7b73, 0xffad655a, 0xff7e6463, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00100400, 0xff7e6563, 0xff7e6563, 0xff7e6563, 0xffad655a, - 0xffad655a, 0xffad7b73, 0xffad7b73, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb5756b, - 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5716b, - 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffad716b, - 0xffad716b, 0xffad716b, 0xffad716b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, - 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad7c76, 0xffad7c76, 0xffad7c76, 0xffad7c76, 0xffad7976, - 0xffad7976, 0xffad7976, 0xffad7976, 0xffad7770, 0xffad7770, 0xffad7770, 0xffad7770, 0xffad7870, - 0xffad7870, 0xffad7870, 0xffad7870, 0xffa77570, 0xffa77570, 0xffa77570, 0xffa77570, 0xffa7756b, - 0xffa7756b, 0xffa7756b, 0xffa7756b, 0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa7706b, - 0xffa7706b, 0xffa7706b, 0xffa7706b, 0xffa27065, 0xffa27065, 0xffa27065, 0xffa27065, 0xffa26d65, - 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26b68, - 0xffa26b68, 0xffa26b68, 0xffa26b68, 0xffa26c68, 0xffa26c68, 0xffa26c68, 0xffa26c68, 0xff9c6963, - 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6763, - 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, - 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6463, - 0xff9c6463, 0xff9c6463, 0xff9c6463, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, - 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6963, - 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xffa26c68, - 0xffa26c68, 0xffa26c68, 0xffa26c68, 0xffa26b68, 0xffa26b68, 0xffa26b68, 0xffa26b68, 0xffa26d65, - 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa7706b, - 0xffa7706b, 0xffa7706b, 0xffa7706b, 0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa7736b, - 0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa77570, 0xffa77570, 0xffa77570, 0xffa77570, 0xffad7570, - 0xffad7570, 0xffad7570, 0xffad7570, 0xffad7870, 0xffad7870, 0xffad7870, 0xffad7870, 0xffad7776, - 0xffad7776, 0xffad7776, 0xffad7776, 0xffad7976, 0xffad7976, 0xffad7976, 0xffad7976, 0xffaf7c76, - 0xffaf7c76, 0xffaf7c76, 0xffaf7c76, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, - 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffb5716b, - 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5756b, - 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb57573, - 0xffb57573, 0xffb57573, 0xffb57573, 0xffad7b73, 0xffad7b73, 0xffad655a, 0xffad655a, 0xff7e6463, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00100400, 0xff7e6563, 0xffb59694, 0xffb59694, 0xffada6a5, - 0xffada6a5, 0xffada6a5, 0xffada6a5, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, - 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caeb5, - 0xff9caeb5, 0xff9caeb5, 0xff9caeb5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, - 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, - 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, - 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, - 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, - 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, - 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, - 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9caeb5, 0xff9caeb5, 0xff9caeb5, 0xff9caeb5, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, - 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caaad, - 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff94aaad, - 0xff94aaad, 0xff94aaad, 0xff94aaad, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, - 0xffadaead, 0xffadaead, 0xffadaead, 0xffada6a5, 0xffada6a5, 0xffada6a5, 0xffada6a5, 0xffbd9694, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff737473, 0xffadaead, 0xffadaead, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffb5b6b5, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, - 0x11000000, 0x22000000, 0x22000000, 0x33000000, 0x44000000, 0x55000000, 0x44000000, 0x33000000, - 0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x55000000, 0x88000000, 0xbb000000, - 0xdd0e0403, 0xdd0e0403, 0xee100503, 0xee100503, 0xff100503, 0xff100503, 0xff100503, 0xee100503, - 0xee100503, 0xee100503, 0xdd0e0403, 0xaa000000, 0x77000000, 0x44000000, 0x22000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff737573, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, - 0xffa5a6a5, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, - 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, - 0xffa5a6a5, 0xff737173, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x33000000, 0x880e0403, 0xcc0e0403, 0xee0e0403, 0xff1b0805, 0xff1b0805, 0xff1b0805, - 0xff1b0805, 0xff1b0805, 0xff210b05, 0xff210b05, 0xff210b05, 0xff210b05, 0xff210b05, 0xff210b05, - 0xff210b05, 0xff210b05, 0xff1b0805, 0xff1b0805, 0xff1b0805, 0xee1b0805, 0xdd0b0403, 0x880b0403, - 0x44000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffadaaad, 0xffdbbeb8, 0xffe9dfdb, 0xffe9dfdb, - 0xffe9dfdb, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, - 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6dbd6, 0xffe6dbd6, 0xffe6dbd6, - 0xffe6dbd6, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00080000, 0x11080000, - 0x11080000, 0x22210400, 0x22210400, 0x33210400, 0x33210400, 0x33210400, 0x33210400, 0x33210400, - 0x22210400, 0x11100400, 0x11100400, 0x00100400, 0x00100400, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x66080303, - 0xaa100505, 0xee190808, 0xff1b0805, 0xff1b0805, 0xff290c08, 0xff290c08, 0xff290c08, 0xff290c08, - 0xff290c08, 0xff290c08, 0xff311008, 0xff311008, 0xff311008, 0xff311008, 0xff311008, 0xff311008, - 0xff210b05, 0xff311008, 0xff290c08, 0xff290c08, 0xff290c08, 0xff290c08, 0xff210c08, 0xff210c08, - 0xee160805, 0xaa0b0403, 0x55000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11030303, 0x22030303, 0x22080808, 0x330b0b0b, 0x44101010, 0x33101010, 0x330b0b0b, 0x33080808, - 0x22050505, 0x11030303, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffadaaad, 0xffe9dfdb, 0xfff7ffff, 0xffce9e94, - 0xffce9e94, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffce9e94, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffce968c, 0xffce968c, 0xffce968c, 0xffce968c, 0xffc59284, 0xffc59284, 0xfff7ffff, - 0xffe6dbd6, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x11080000, 0x22080000, - 0x33080000, 0x66210400, 0x99210400, 0xaa210400, 0xbb210400, 0xbb210400, 0xbb210400, 0xaa210400, - 0x66210400, 0x33100400, 0x22100400, 0x11100400, 0x00100400, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x66190705, 0xcc210808, 0xff340f0e, - 0xff340f0e, 0xff340f0e, 0xff3a1010, 0xff3a1010, 0xff3a1010, 0xff3a1010, 0xff3a1010, 0xff4a1613, - 0xff4a1613, 0xff3a1010, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff3a1010, 0xff471613, - 0xff3a1010, 0xff3a1010, 0xff311010, 0xff311010, 0xff311010, 0xff311010, 0xff37100b, 0xff37100b, - 0xff290c08, 0xff290c08, 0xee160705, 0xaa160705, 0x33000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00080808, 0x00080808, 0x11080808, 0x55503a37, 0x886b494a, - 0xbb8c6160, 0xddad7976, 0xeead7976, 0xffa57479, 0xffa57479, 0xeea57479, 0xdd9c6163, 0xcc794542, - 0x99794542, 0x663c2421, 0x22000400, 0x11080400, 0x11080400, 0x00080400, 0x00080400, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffadaaad, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffce9e94, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffce968c, 0xffce968c, 0xffce968c, 0xffce968c, 0xffc59284, 0xffc59284, 0xffc59284, - 0xffe6dbd6, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x11080000, 0x22080000, 0x44080000, - 0xaa080000, 0xdd55241b, 0xee894537, 0xee894537, 0xee894537, 0xee9f584d, 0xee9f584d, 0xee9f584d, - 0xdd9f584d, 0xbb100400, 0x55100400, 0x22100400, 0x11100400, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x99190705, 0xee310d0b, 0xff340f0e, 0xff340f0e, - 0xff340f0e, 0xff471613, 0xff471613, 0xff471613, 0xff471613, 0xff471613, 0xff4a1613, 0xff5a1b16, - 0xff4a1613, 0xff5a1b16, 0xff501813, 0xff501813, 0xff501813, 0xff501813, 0xff551b16, 0xff471613, - 0xff471613, 0xff471613, 0xff421613, 0xff421613, 0xff421613, 0xff421613, 0xff37100b, 0xff37100b, - 0xff37100b, 0xff37100b, 0xff2c0d0b, 0xff2c0d0b, 0xcc160705, 0x44000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x33080808, 0x88503a37, 0xcc976c65, 0xffde9e94, 0xffce928c, - 0xffce928c, 0xffce928c, 0xffad7976, 0xffad878f, 0xffad878f, 0xffad878f, 0xffa57479, 0xffb56563, - 0xffb56563, 0xffb56563, 0xdd794542, 0x994a2019, 0x44080400, 0x11080400, 0x11080400, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffadaaad, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffce9e94, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffce968c, 0xffce968c, 0xffce968c, 0xffce968c, 0xffc59284, 0xffc59284, 0xffc59284, - 0xffe6dbd6, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x11080000, 0x33080000, 0xaa080000, - 0xee9c3d31, 0xee894537, 0xeebd6552, 0xeebd6552, 0xeebd6552, 0xee9f584d, 0xee9f584d, 0xee9f584d, - 0xeede8273, 0xeed6c2bd, 0xbb100400, 0x33100400, 0x11100400, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x66190705, 0xdd310d0b, 0xff4a1410, 0xff4a1410, 0xff471613, 0xff471613, - 0xff471613, 0xff471613, 0xff551b16, 0xff551b16, 0xff551b16, 0xff551b16, 0xff5a1b16, 0xff5a1b16, - 0xff6b2019, 0xff5a1b16, 0xff5d1c16, 0xff5d1c16, 0xff5d1c16, 0xff5d1c16, 0xff551b16, 0xff551b16, - 0xff551b16, 0xff551b16, 0xff521b16, 0xff421613, 0xff421613, 0xff421613, 0xff45140e, 0xff45140e, - 0xff45140e, 0xff45140e, 0xff421410, 0xff421410, 0xff2c0d0b, 0xdd160705, 0x77000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x22000000, 0x884d3634, 0xdd976c65, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffce928c, - 0xffce928c, 0xffad7976, 0xffad7976, 0xffad878f, 0xffb59aa5, 0xffad878f, 0xffad878f, 0xffb56563, - 0xffb56563, 0xffb56563, 0xffb56563, 0xffce594a, 0xdd8c3d31, 0x994a2019, 0x44080400, 0x11000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00080408, 0xff979697, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9e94, 0xffce9e94, 0xffce9a8f, 0xffce9a8f, 0xffce9a94, 0xffce9a94, 0xffce9a94, - 0xffce9a94, 0xffce968c, 0xffc88f84, 0xffc88f84, 0xffc88f84, 0xffbd8273, 0xffbd8273, 0xffbd8273, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x22210400, 0x66210400, 0xdd210400, - 0xee945a52, 0xeea5615a, 0xeeaa6d68, 0xeeaa6d68, 0xeeaa6d68, 0xeead6563, 0xeead6563, 0xeeaf6c68, - 0xeeb57973, 0xeea7938f, 0xeeefdbd6, 0x77190400, 0x22190400, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x77190808, 0xee4a1410, 0xff4a1410, 0xff4a1410, 0xff4a1410, 0xff5a1c19, 0xff5a1c19, - 0xff5a1c19, 0xff5a1c19, 0xff632019, 0xff632019, 0xff632019, 0xff632019, 0xff6b2019, 0xff6b2019, - 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff632019, 0xff632019, - 0xff632019, 0xff632019, 0xff632019, 0xff521b16, 0xff521b16, 0xff521b16, 0xff521810, 0xff521810, - 0xff521810, 0xff45140e, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xee290c08, 0x66000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x554d3634, 0xbb9a6c68, 0xffe6a29c, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffce928c, - 0xffce928c, 0xffad7976, 0xffad7976, 0xffad878f, 0xffb59aa5, 0xffb59aa5, 0xffad878f, 0xffb56563, - 0xffb56563, 0xffb56563, 0xffb56563, 0xffce594a, 0xffce594a, 0xffce594a, 0xcc8c3d31, 0x77311010, - 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00080408, 0xff979697, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9a8f, 0xffce9a8f, 0xffce9a8f, 0xffce9689, 0xffce9a94, 0xffdebab8, 0xffdebab8, - 0xffce9a94, 0xffc88f84, 0xffc88f84, 0xffc88f84, 0xffc3887b, 0xffbd8273, 0xffbd8273, 0xffbd8273, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x33210400, 0x99210400, 0xee945a52, - 0xee945a52, 0xeeaa6d68, 0xeeaf7976, 0xeeaf7976, 0xeeaf7976, 0xeeaf6c68, 0xeeaf6c68, 0xeeaf6c68, - 0xeeb2736e, 0xeea7938f, 0xeeefdbd6, 0xaa190400, 0x33190400, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00080000, - 0x662c0c08, 0xee501810, 0xff521819, 0xff521819, 0xff521819, 0xff631e1b, 0xff631c19, 0xff631c19, - 0xff6e221b, 0xff6e221b, 0xff6b2019, 0xff76241b, 0xff76241b, 0xff76241b, 0xff732421, 0xff732421, - 0xff732421, 0xff732421, 0xff732421, 0xff732421, 0xff732421, 0xff732421, 0xff76241b, 0xff6b2019, - 0xff6b2019, 0xff6b2019, 0xff65201b, 0xff65201b, 0xff65201b, 0xff5a1c19, 0xff581c16, 0xff581c16, - 0xff581c16, 0xff4a1810, 0xff4d1813, 0xff4d1813, 0xff4d1813, 0xff421410, 0xff34120b, 0xdd1e0b05, - 0x55080400, 0x11080400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x775a413a, - 0xddb27f76, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffdb9a91, 0xffd68e8c, - 0xffc07f7e, 0xffaa7070, 0xffaa7070, 0xffaa8e97, 0xffb8a2aa, 0xffb8a2aa, 0xffaa8e97, 0xff94696b, - 0xff9c5e5d, 0xff9c5e5d, 0xffa55450, 0xffbd5142, 0xffbd5142, 0xffbd493c, 0xffbd493c, 0xeeb53929, - 0x9942160e, 0x33080400, 0x11080400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00080408, 0xff979697, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9689, 0xffce9689, 0xffce9689, 0xffce9284, 0xffce9a94, 0xfffffbff, 0xfffffbff, - 0xffce9a94, 0xffc88f84, 0xffc3887b, 0xffc3887b, 0xffc3887b, 0xffbd8273, 0xffbd8273, 0xffbd8273, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x44210400, 0xbb210400, 0xee945a52, - 0xeece867b, 0xeeaf7976, 0xeeaf7976, 0xeeaf7976, 0xeeaf7976, 0xeeb2736e, 0xeeb2736e, 0xeeaf6c68, - 0xeeb2736e, 0xeea7938f, 0xeeefdbd6, 0xcc604c47, 0x44190400, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x55080000, - 0xee501810, 0xff501810, 0xff631e1b, 0xff631e1b, 0xff631e1b, 0xff73231e, 0xff6e221b, 0xff6e221b, - 0xff79271e, 0xff6e221b, 0xff76241b, 0xff76241b, 0xff76241b, 0xff81281e, 0xff792721, 0xff792721, - 0xff792721, 0xff792721, 0xff7b2721, 0xff7b2721, 0xff7b2721, 0xff7b2721, 0xff76241b, 0xff76241b, - 0xff76241b, 0xff76241b, 0xff70241e, 0xff70241e, 0xff70241e, 0xff65201b, 0xff65201b, 0xff65201b, - 0xff581c16, 0xff581c16, 0xff4d1813, 0xff4d1813, 0xff4d1813, 0xff4d1813, 0xff4a1810, 0xff34120b, - 0xcc1e0b05, 0x44080400, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7745312f, 0xeede9e94, - 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffdb9a91, 0xffd9968f, 0xffd68e8c, - 0xffc07f7e, 0xffaa7070, 0xffaa7070, 0xffaa8e97, 0xffb8a2aa, 0xffb8a2aa, 0xffaa8e97, 0xff9c5e5d, - 0xffa55450, 0xffa55450, 0xffa55450, 0xffbd5142, 0xffbd493c, 0xffbd493c, 0xffbd4137, 0xffb53929, - 0xeeb53929, 0x9942160e, 0x33080400, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00080408, 0xff979697, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9689, 0xffce9284, 0xffce9284, 0xffce9284, 0xffdebab8, 0xfffffbff, 0xfffffbff, - 0xffefdbdb, 0xffc3887b, 0xffc3887b, 0xffc3887b, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffbd8273, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x55210400, 0xcc210400, 0xeece867b, - 0xeece867b, 0xeeb58684, 0xeeb58684, 0xeeb58684, 0xeeaf7976, 0xeeb57973, 0xeeb57973, 0xeeb2736e, - 0xeeb57973, 0xeea7938f, 0xeea7938f, 0xdda7938f, 0x66190400, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33080000, 0xdd501810, - 0xff732419, 0xff732419, 0xff73231e, 0xff73231e, 0xff73231e, 0xff73231e, 0xff79271e, 0xff79271e, - 0xff79271e, 0xff79271e, 0xff81281e, 0xff81281e, 0xff81281e, 0xff81281e, 0xff7e2a21, 0xff7e2a21, - 0xff7e2a21, 0xff7e2a21, 0xff842a21, 0xff842a21, 0xff842a21, 0xff842a21, 0xff8c2d21, 0xff81281e, - 0xff81281e, 0xff81281e, 0xff7b2821, 0xff70241e, 0xff70241e, 0xff70241e, 0xff732421, 0xff65201b, - 0xff65201b, 0xff581c16, 0xff581c16, 0xff581c16, 0xff4d1813, 0xff4d1813, 0xff4a1810, 0xff4a1810, - 0xff34120b, 0x99080400, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7745312f, 0xeece928c, 0xffde9e94, - 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffdb9a91, 0xffdb9a91, 0xffd9968f, 0xffd68e8c, - 0xffc07f7e, 0xffaa7070, 0xff946163, 0xff9c7984, 0xffc5b6bd, 0xffc5b6bd, 0xff9c7984, 0xffa55450, - 0xffa55450, 0xffa55450, 0xffad4942, 0xffbd493c, 0xffbd493c, 0xffbd4137, 0xffbd3931, 0xffb53929, - 0xffb53929, 0xeeb53929, 0x9942160e, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9684, 0xffce9684, - 0xffce9684, 0xffce9284, 0xffce9284, 0xffce9284, 0xffce9284, 0xfffffbf7, 0xffffffff, 0xffffffff, - 0xfffffbf7, 0xffd3aaa2, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffad796b, 0xffad796b, 0xffad796b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x66190000, 0xdd523331, 0xeec59a94, - 0xeec59a94, 0xeeb88e84, 0xeeb88e84, 0xeeb5867b, 0xeeb5867b, 0xeeaf7c73, 0xeead756b, 0xeead756b, - 0xeead756b, 0xee947168, 0xeecea69c, 0xeecea69c, 0x77210800, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0xaa2c0c08, 0xff732419, - 0xff732419, 0xff732419, 0xff73231e, 0xff73231e, 0xff842821, 0xff842821, 0xff79271e, 0xff842d21, - 0xff842d21, 0xff842d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff842d21, 0xff842d21, - 0xff842d21, 0xff842d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, - 0xff8c2d21, 0xff81281e, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff732421, 0xff732421, - 0xff732421, 0xff65201b, 0xff632019, 0xff581c16, 0xff581c16, 0xff581c16, 0xff4a1810, 0xff4a1810, - 0xff34120b, 0xee1e0b05, 0x66000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5545312f, 0xddce928c, 0xffce928c, 0xffde9e94, - 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffdb9a91, 0xffdb9a91, 0xffd9968f, 0xffd6928c, 0xffd68e8c, - 0xffc07f7e, 0xffaa7070, 0xff946163, 0xff9c7984, 0xffc5b6bd, 0xffc5b6bd, 0xff9c7984, 0xffa55450, - 0xffad4942, 0xffad4942, 0xffad4942, 0xffbd493c, 0xffbd4137, 0xffbd3931, 0xffbd3931, 0xffb53929, - 0xffb53929, 0xffb53929, 0xee7b271b, 0x88290c08, 0x33000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9684, 0xffce9684, - 0xffce9684, 0xffce9284, 0xffce9284, 0xffce9284, 0xffefdbd6, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffe9d2d0, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffad796b, 0xffad796b, 0xffad796b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x77190000, 0xdd523331, 0xeec59a94, - 0xeec59a94, 0xeeba968c, 0xeeb88e84, 0xeeb88e84, 0xeeb5867b, 0xeeb2837b, 0xeeaf7c73, 0xeead756b, - 0xeead756b, 0xee947168, 0xeecea69c, 0xeecea69c, 0x77210800, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x44000000, 0xee6b2021, 0xff762421, - 0xff762421, 0xff762421, 0xff7b2421, 0xff862824, 0xff862824, 0xff912d26, 0xff943121, 0xff943121, - 0xff943121, 0xff943121, 0xff8c3129, 0xff8c3129, 0xff8c3129, 0xff8c3129, 0xff8c3529, 0xff8c3529, - 0xff8c3529, 0xff8c3529, 0xff8c3529, 0xff8c3529, 0xff8c3529, 0xff8c3529, 0xff8c3129, 0xff8c3129, - 0xff8c3129, 0xff8c3129, 0xff7b2d21, 0xff7b2d21, 0xff7b2d21, 0xff7b2d21, 0xff7b2d29, 0xff7b2d29, - 0xff7b2d29, 0xff7b2d29, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff581c16, 0xff4d1813, - 0xff4d1813, 0xff421410, 0xaa000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x22191419, 0xbb976865, 0xffd6928c, 0xffd6928c, 0xffde9694, - 0xffde9694, 0xffde9694, 0xffde9694, 0xffde9694, 0xffde9694, 0xffdb908c, 0xffdb908c, 0xffd68a7b, - 0xffbd776b, 0xffa5645a, 0xff8c514a, 0xff9a7484, 0xffd6cad6, 0xffd6cad6, 0xff9a7484, 0xffad4942, - 0xffa2423a, 0xffad4942, 0xffad4942, 0xffc54131, 0xffbd3d2f, 0xffb5392c, 0xffb5392c, 0xffaa352c, - 0xffaa352c, 0xffaa352c, 0xff9f3126, 0xdd652216, 0x55080400, 0x22080400, 0x11080400, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9684, 0xffce9684, - 0xffce9684, 0xffce9284, 0xffce9284, 0xffdeb6ad, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xfffffbff, 0xffd3aaa2, 0xffbd8273, 0xffbd8273, 0xffad796b, 0xffad796b, 0xffad796b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x77190000, 0xee8c6763, 0xeec59a94, - 0xeec59a94, 0xeebd9e94, 0xeeba968c, 0xeeb88e84, 0xeeb88e84, 0xeeb2837b, 0xeeb2837b, 0xeeaf7c73, - 0xeead756b, 0xee947168, 0xeecea69c, 0xeecea69c, 0x88210800, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0xaa31100e, 0xff812821, 0xff812821, - 0xff762421, 0xff812821, 0xff862824, 0xff862824, 0xff912d26, 0xff912d26, 0xff943121, 0xff9a746e, - 0xff9c9694, 0xff9c9694, 0xff978481, 0xff978481, 0xff978481, 0xff978481, 0xffa29391, 0xffa29391, - 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29291, 0xffa29291, - 0xffa29291, 0xffa29291, 0xffb2aeaa, 0xffb2aeaa, 0xffb2aeaa, 0xffb2aeaa, 0xffceb6b2, 0xfff7fbf7, - 0xfff7fbf7, 0xfff7fbf7, 0xffbd9694, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff581c16, 0xff581c16, - 0xff4d1813, 0xff4d1813, 0xee2c0d0b, 0x66000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x88583e3f, 0xffd6928c, 0xffd6928c, 0xffd6928c, 0xffdb928f, - 0xffdb928f, 0xffdb928f, 0xffdb928f, 0xffdb908c, 0xffdb908c, 0xffdb908c, 0xffdb908c, 0xffd68a7b, - 0xffbd776b, 0xffa5645a, 0xff8c514a, 0xff9a7484, 0xffd6cad6, 0xffd6cad6, 0xff9a7484, 0xff973b31, - 0xffa2423a, 0xffa2423a, 0xffa2423a, 0xffbd3d2f, 0xffb5392c, 0xffb5392c, 0xffad3529, 0xffaa352c, - 0xffaa352c, 0xff9f3126, 0xff9f3126, 0xff943121, 0xaa37130b, 0x44080400, 0x11080400, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9684, 0xffce9684, - 0xffce9684, 0xffce9284, 0xffce9284, 0xffefdbd6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xfffffbff, 0xfffffbff, 0xffbd8273, 0xffbd8273, 0xffad796b, 0xffad796b, 0xffad796b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x88190000, 0xee8c6763, 0xeec59a94, - 0xeec59a94, 0xeebd9e94, 0xeeba968c, 0xeeba968c, 0xeeb88e84, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, - 0xeead756b, 0xee947168, 0xeecea69c, 0xeecea69c, 0x99210800, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33000000, 0xee63201b, 0xff812821, 0xff812821, - 0xff812821, 0xff8c2d21, 0xff912d26, 0xff912d26, 0xff912d26, 0xff912d26, 0xff943121, 0xff943121, - 0xff9c9694, 0xff9c9694, 0xff978481, 0xff978481, 0xff978481, 0xff9caead, 0xffa29391, 0xffa29391, - 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29291, 0xffa29291, - 0xffa29291, 0xffa29291, 0xffb2aeaa, 0xffb2aeaa, 0xffb2aeaa, 0xffb2aeaa, 0xfff7fbf7, 0xfff7fbf7, - 0xfff7fbf7, 0xfff7fbf7, 0xff864842, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff581c16, 0xff581c16, - 0xff581c16, 0xff4d1813, 0xff421410, 0x99000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x33211413, 0xdd976865, 0xffd6928c, 0xffd6928c, 0xffd6928c, 0xffd98e89, - 0xffd98e89, 0xffd98e89, 0xffd98e89, 0xffdb908c, 0xffdb908c, 0xffd98b84, 0xffd98b84, 0xffd68a7b, - 0xffbd776b, 0xffa5645a, 0xff8c514a, 0xff7b495a, 0xffd6cad6, 0xffd6cad6, 0xff7b495a, 0xff8c3529, - 0xff973b31, 0xff973b31, 0xff973b31, 0xffb5392c, 0xffb5392c, 0xffad3529, 0xffad3529, 0xffaa352c, - 0xff9f3126, 0xff9f3126, 0xff9f3126, 0xff943121, 0xee652216, 0x77080400, 0x33080400, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffc58a7b, 0xffc58a7b, - 0xffc58a7b, 0xffbd8273, 0xffe9d0cb, 0xfffff7f7, 0xfffff7f7, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xfff7f3f7, 0xfff7f3f7, 0xffdec9c8, 0xffad756b, 0xffa57163, 0xffa57163, 0xffa57163, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x88190000, 0xee977779, 0xeed6b2b5, - 0xeed6b2b5, 0xeec3a39f, 0xeec09d9a, 0xeebd9694, 0xeebd9694, 0xeeb58b84, 0xeeb5847b, 0xeeb57d73, - 0xeeb57d73, 0xee9a6f68, 0xeecea29c, 0xeecea29c, 0x99310800, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0xff4a464a, 0xff8c888c, 0xff8c888c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff949294, 0xff949294, 0xff9c9a9c, 0xff9c9a9c, - 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, - 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, - 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, - 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949294, - 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, - 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff948e94, - 0xff948e94, 0xff948e94, 0xff948e94, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, - 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff949694, - 0xff949694, 0xff949694, 0xff737573, 0xff5d5c5d, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7731100e, 0xff943129, 0xff8c2d21, 0xff8c2d21, - 0xff8c2d21, 0xff8c2d21, 0xff912d26, 0xff9c3129, 0xff9c3129, 0xff9c3129, 0xff943121, 0xff943121, - 0xff9a746e, 0xff9c9694, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xffadc2c5, 0xffadc2c5, - 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, - 0xffadc2c5, 0xffadc2c5, 0xffb2aeaa, 0xffb2aeaa, 0xffceefef, 0xffceefef, 0xfff7fbf7, 0xfff7fbf7, - 0xfff7fbf7, 0xffa5716e, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff632019, 0xff581c16, - 0xff581c16, 0xff4d1813, 0xff421410, 0xcc160705, 0x44000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x88633d3a, 0xffd6928c, 0xffd6928c, 0xffd6928c, 0xffd6928c, 0xffd98e89, - 0xffd98e89, 0xffd98e89, 0xffd68a84, 0xffd98b84, 0xffd98b84, 0xffd6867b, 0xffd6867b, 0xffbd776b, - 0xffbd776b, 0xffa5645a, 0xff8c514a, 0xff7b495a, 0xffd6cad6, 0xffd6cad6, 0xff7b495a, 0xff8c3529, - 0xff8c3529, 0xff8c3529, 0xff973b31, 0xffb5392c, 0xffad3529, 0xffad3529, 0xffad3529, 0xff9f3126, - 0xff9f3126, 0xff942d21, 0xff942d21, 0xff943121, 0xff943121, 0xbb37130b, 0x44080400, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffc58a7b, 0xffc58a7b, - 0xffc58a7b, 0xffbd8273, 0xffe9d0cb, 0xfffff7f7, 0xfffff7f7, 0xffe6d2ce, 0xffe6d2ce, 0xffe6d2ce, - 0xffe6d2ce, 0xfff7f3f7, 0xfff7f3f7, 0xffdec9c8, 0xffad756b, 0xffa57163, 0xffa57163, 0xffa57163, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x88190000, 0xee977779, 0xeed6b2b5, - 0xeed6b2b5, 0xeec5aaa5, 0xeec3a39f, 0xeebd9694, 0xeebd9694, 0xeeb58b84, 0xeeb5847b, 0xeeb5847b, - 0xeeb57d73, 0xee9a6f68, 0xeecea29c, 0xeecea29c, 0x99310800, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0xff8c888c, 0xff8c888c, 0xffcecace, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, - 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, - 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffc0c0c0, 0xffc0c0c0, 0xffced0ce, 0xffcecdce, - 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, - 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcbc9cb, 0xffcbc9cb, 0xffcbc9cb, 0xffcbc9cb, 0xffc5c9c5, - 0xffc5c9c5, 0xffc5c9c5, 0xffc5c9c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c5c5, - 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, - 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc0c2c0, 0xffc0c2c0, 0xffc0c2c0, 0xffc0c2c0, 0xffc0bec0, - 0xffc0bec0, 0xffc0bec0, 0xffc0bec0, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, - 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffb5b6b5, - 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xff8c8a8c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x11000000, 0xaa31100e, 0xff943129, 0xff8c2d21, 0xff8c2d21, - 0xff912f24, 0xff912f24, 0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa23329, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffb59a9c, 0xffc8b5b5, 0xffc8b5b5, 0xffc8b5b5, 0xffc8b5b5, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffdee3de, 0xffe9ece9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffdbb9b5, 0xff942d21, 0xff812821, 0xff812821, 0xff762421, 0xff6b2021, 0xff682019, 0xff682019, - 0xff5d1c19, 0xff521819, 0xff4a1810, 0xdd190805, 0x66000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0xcc8f514d, 0xffd6867b, 0xffd6867b, 0xffd6867b, 0xffd6867b, 0xffd6827b, - 0xffd6827b, 0xffd6827b, 0xffd6827b, 0xffd6867b, 0xffd6867b, 0xffd6867b, 0xffd07970, 0xffce7573, - 0xffce7573, 0xffb25e5a, 0xff974842, 0xff632d3a, 0xffefefef, 0xffefefef, 0xff632d3a, 0xff862b1e, - 0xff9a3224, 0xff9a3224, 0xffad3929, 0xffad3529, 0xffad3529, 0xff9c3126, 0xff9c3126, 0xff943121, - 0xff892d21, 0xff892d21, 0xff892d21, 0xff7b2821, 0xff7b2821, 0xdd551b16, 0x66080000, 0x22000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffc58a7b, 0xffc58a7b, - 0xffc58a7b, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffb5796b, 0xffb5796b, 0xffb5796b, - 0xffb5796b, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xffa57163, 0xffa57163, 0xffa57163, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977779, 0xeed6b2b5, - 0xeed6b2b5, 0xeec5aaa5, 0xeec3a39f, 0xeec09d9a, 0xeebd9694, 0xeeb58b84, 0xeeb58b84, 0xeeb5847b, - 0xeeb57d73, 0xee9a6f68, 0xeecea29c, 0xeecea29c, 0xaa310800, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0xff8c888c, 0xffcecace, 0xffcecace, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffe6ebe6, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffdee3de, - 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffb5b6b5, 0xff8c8a8c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x22000000, 0xdd63201b, 0xff943129, 0xff912f24, 0xff912f24, - 0xff912f24, 0xff912f24, 0xffa23329, 0xffa23329, 0xffa23329, 0xffa73629, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffaf5950, 0xffc8b5b5, 0xffc8b5b5, 0xffd6dbde, 0xffd6dbde, 0xffe1dfe1, 0xffe1dfe1, - 0xffecebec, 0xffecebec, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, - 0xfff1f0f1, 0xfff1f0f1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffb8736b, 0xff942d21, 0xff8c2d21, 0xff812821, 0xff762421, 0xff762421, 0xff682019, 0xff682019, - 0xff5d1c19, 0xff521819, 0xff4a1810, 0xee31100b, 0x88000000, 0x22000000, 0x00000000, 0x00000000, - 0x00000000, 0x55472826, 0xffd67973, 0xffd37f76, 0xffd37f76, 0xffd37f76, 0xffd37f76, 0xffd6827b, - 0xffd6827b, 0xffd6827b, 0xffd6827b, 0xffd07970, 0xffd07970, 0xffd07970, 0xffd07970, 0xffce7573, - 0xffb25e5a, 0xff974842, 0xff974842, 0xff632d3a, 0xffefefef, 0xffefefef, 0xff632d3a, 0xff732419, - 0xff862b1e, 0xff9a3224, 0xff9a3224, 0xff9c3126, 0xff9c3126, 0xff9c3126, 0xff8c2d24, 0xff892d21, - 0xff892d21, 0xff7e2821, 0xff7e2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0x992f0d0b, 0x33000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffc58a7b, 0xffc58a7b, - 0xffc58a7b, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffb5796b, 0xffb5796b, 0xffb5796b, - 0xffb5796b, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xffa57163, 0xffa57163, 0xffa57163, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977779, 0xeed6b2b5, - 0xeed6b2b5, 0xeec5aaa5, 0xeec5aaa5, 0xeec09d9a, 0xeebd9694, 0xeeb5928c, 0xeeb58b84, 0xeeb5847b, - 0xeeb5847b, 0xee9a6f68, 0xeecea29c, 0xeecea29c, 0xaa310800, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00080408, 0xff8c888c, 0xffcecace, 0xffcecace, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffe6ebe6, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, - 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffdee3de, - 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, - 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffb5b6b5, 0xff8c8a8c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x5531100e, 0xff943129, 0xff943129, 0xff912f24, 0xff912f24, - 0xff973226, 0xff973226, 0xffa23329, 0xffa23329, 0xffa73629, 0xffa73629, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffba8f8c, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffecebec, 0xffecebec, - 0xfff7f7f7, 0xfff7f7f7, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdbb9b5, - 0xff942d21, 0xff942d21, 0xff8c2d21, 0xff812821, 0xff812821, 0xff762421, 0xff682019, 0xff682019, - 0xff682019, 0xff5d1c19, 0xff4a1810, 0xff4a1810, 0xaa000000, 0x33000000, 0x00000000, 0x00000000, - 0x00000000, 0x88472826, 0xffd67973, 0xffd07870, 0xffd07870, 0xffd07870, 0xffd07870, 0xffd37b73, - 0xffd37b73, 0xffd37b73, 0xffd0746b, 0xffd07970, 0xffcb6d65, 0xffcb6d65, 0xffcb6d65, 0xffb25e5a, - 0xffb25e5a, 0xff974842, 0xff7b3129, 0xff632d3a, 0xffefefef, 0xffefefef, 0xff632d3a, 0xff732419, - 0xff862b1e, 0xff9a3224, 0xff9a3224, 0xff9c3126, 0xff8c2d24, 0xff8c2d24, 0xff8c2d24, 0xff7e2821, - 0xff7e2821, 0xff7e2821, 0xff732421, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xbb2f0d0b, 0x44000000, - 0x22000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9d5d0, 0xffbd8273, 0xffbd8273, - 0xffbd8273, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, - 0xff9c6d63, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, - 0xffdececb, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee97827e, 0xeed6c2bd, - 0xeed6c2bd, 0xeec5b2b5, 0xeec3aaaa, 0xeec0a29f, 0xeebd9a94, 0xeeba8f86, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee976c6b, 0xeec59e9c, 0xeec59e9c, 0xaa3a0808, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0xff7e807e, 0xffbdbebd, 0xffbdbebd, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffd6d7d6, 0xffd6d7d6, - 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d2d6, - 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, - 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecace, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, - 0xffcecace, 0xffcecace, 0xffcecace, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, - 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffbdbebd, - 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xff848284, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x7731100e, 0xff943129, 0xff943129, 0xff973226, 0xff973226, - 0xff973226, 0xff973226, 0xffa23329, 0xffa73629, 0xffa73629, 0xffa73629, 0xffad3929, 0xffad3929, - 0xffad3929, 0xffad3929, 0xffad6963, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffecebec, 0xfff7f7f7, - 0xfff7f7f7, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff942d21, - 0xff942d21, 0xff942d21, 0xff8c2d21, 0xff8c2d21, 0xff812821, 0xff812821, 0xff732419, 0xff682019, - 0xff682019, 0xff5d1c19, 0xff4a1810, 0xff4a1810, 0xbb190805, 0x44000000, 0x11000000, 0x00000000, - 0x11000000, 0xaa8f514d, 0xffd67973, 0xffce716b, 0xffce716b, 0xffce716b, 0xffce716b, 0xffce6d63, - 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffcb6d65, 0xffcb6d65, 0xffc5615a, 0xffc5615a, 0xffb25e5a, - 0xff974842, 0xff974842, 0xff7b3129, 0xff632d3a, 0xffefefef, 0xffefefef, 0xff632d3a, 0xff732419, - 0xff732419, 0xff862b1e, 0xff862b1e, 0xff8c2d24, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff732421, - 0xff732421, 0xff732421, 0xff732421, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xdd551b16, 0x55000000, - 0x22000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9d5d0, 0xffbd8273, 0xffbd8273, - 0xffbd8273, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, - 0xff9c6d63, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, - 0xffdececb, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee97827e, 0xeed6c2bd, - 0xeed6c2bd, 0xeec5b2b5, 0xeec3aaaa, 0xeec0a29f, 0xeebd9a94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee976c6b, 0xeec59e9c, 0xeec59e9c, 0xaa3a0808, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0xff3f423f, 0xff7e807e, 0xff7e807e, 0xff848484, 0xff848484, 0xff848484, 0xff848484, - 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, - 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff8f8f8f, 0xff8f8f8f, - 0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8e8f, - 0xff8f8e8f, 0xff8f8e8f, 0xff8f8e8f, 0xff8f8c8f, 0xff8f8c8f, 0xff8f8c8f, 0xff8f8c8f, 0xff898a89, - 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, - 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898789, - 0xff898789, 0xff898789, 0xff898789, 0xff898789, 0xff898789, 0xff898789, 0xff898789, 0xff898789, - 0xff898789, 0xff898789, 0xff898789, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, - 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, - 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff7e7f7e, - 0xff7e7f7e, 0xff7e7f7e, 0xff7e7f7e, 0xff585658, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x8834120e, 0xff9c3529, 0xff9c3529, 0xff9f3229, 0xff9f3229, - 0xff9f3229, 0xffa53529, 0xffaa362f, 0xffaf372c, 0xffaf372c, 0xffaf372c, 0xffb53931, 0xffb53931, - 0xffb83a2f, 0xffb53931, 0xffb53d31, 0xffcba39f, 0xffd6d7d6, 0xffd6d7d6, 0xffe6e3e6, 0xffefefef, - 0xfff7fbf7, 0xfff7fbf7, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd69e9c, 0xff9c3529, - 0xff9c3529, 0xff9c3529, 0xff942e21, 0xff8c2b21, 0xff8c2b21, 0xff842821, 0xff7b2421, 0xff651f1b, - 0xff651f1b, 0xff5a1c19, 0xff521810, 0xff521810, 0xcc1b0805, 0x55000000, 0x11000000, 0x00000000, - 0x11000000, 0xcc8f4c42, 0xffd67163, 0xffce6963, 0xffce6963, 0xffce6963, 0xffce6963, 0xffc5655a, - 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc55952, 0xffc55952, 0xffc55952, 0xffc55952, 0xffbd493a, - 0xffbd493a, 0xff7e3126, 0xff7e3126, 0xff190808, 0xffffffff, 0xffffffff, 0xff190808, 0xff581b16, - 0xff842821, 0xff842821, 0xff842821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff6b2019, - 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xee471610, 0x55000000, - 0x22000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9d5d0, 0xffffffff, 0xffbd8273, - 0xffbd8273, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, - 0xff9c6d63, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6d63, 0xff9c6d63, 0xffffffff, - 0xffdececb, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee97827e, 0xeed6c2bd, - 0xeed6c2bd, 0xeec5b2b5, 0xeec3aaaa, 0xeec0a29f, 0xeebd9a94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee976c6b, 0xeec59e9c, 0xeec59e9c, 0xaa3a0808, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x9934120e, 0xff9c3529, 0xff9c3529, 0xff9f3229, 0xff9c3129, - 0xffa23329, 0xffa53529, 0xffaf372c, 0xffaf372c, 0xffb53929, 0xffb53929, 0xffb53931, 0xffb83a2f, - 0xffb53931, 0xffb83a2f, 0xffb53d31, 0xffb53d31, 0xffd6d7d6, 0xffd6d7d6, 0xffe6e3e6, 0xffefefef, - 0xffefefef, 0xfff7fbf7, 0xfffcfcfc, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff9c3529, 0xff9c3529, - 0xff9c3529, 0xff9c3529, 0xff942e21, 0xff942e21, 0xff8c2b21, 0xff842821, 0xff7b2421, 0xff70221e, - 0xff651f1b, 0xff5a1c19, 0xff521810, 0xff521810, 0xcc1b0805, 0x55000000, 0x11000000, 0x00000000, - 0x11000000, 0x22000000, 0x44000000, 0x66000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, - 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, - 0x88000000, 0x99000000, 0xaa000000, 0xcc190808, 0xffffffff, 0xffffffff, 0xbb190808, 0xaa000000, - 0x99000000, 0x88000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, - 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x66000000, 0x44000000, - 0x22000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9d5d0, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffdececb, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee97827e, 0xeed6c2bd, - 0xeed6c2bd, 0xeec5b2b5, 0xeec3aaaa, 0xeec0a29f, 0xeebd9a94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee976c6b, 0xeec59e9c, 0xeec59e9c, 0xaa3a0808, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, - 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xaa34120e, 0xff9c3529, 0xff9c3529, 0xff9f3229, 0xff9f3229, - 0xffa53529, 0xffa53529, 0xffaf372c, 0xffb53929, 0xffb53929, 0xffb53929, 0xffb83a2f, 0xffb83a2f, - 0xffb83a2f, 0xffb83a2f, 0xffb53d31, 0xffb53d31, 0xffc07068, 0xffd6d7d6, 0xffded7de, 0xffe6e3e6, - 0xffefefef, 0xffefefef, 0xfffafafa, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc87d76, 0xff9c3529, 0xff9c3529, - 0xff9c3529, 0xff9c3529, 0xff942e21, 0xff942e21, 0xff8c2b21, 0xff842821, 0xff7b2421, 0xff70221e, - 0xff651f1b, 0xff651f1b, 0xff521810, 0xff521810, 0xdd1b0805, 0x66000000, 0x11000000, 0x00000000, - 0x00000000, 0x11000000, 0x22000000, 0x33000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, - 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, - 0x55000000, 0x66000000, 0x88000000, 0xaa190808, 0xffffffff, 0xffffffff, 0xaa190808, 0x88000000, - 0x66000000, 0x55000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, - 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x33000000, 0x22000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee9c827e, 0xeedec2bd, - 0xeedec2bd, 0xeec5b6b5, 0xeec3aead, 0xeec0a6a5, 0xeebd9e9c, 0xeebd9694, 0xeeba8f8c, 0xeeb88884, - 0xeeb5827b, 0xee9c6d6b, 0xeece9e9c, 0xeece9e9c, 0xaa3a0c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0xbb68231b, 0xff9c3529, 0xff9c3529, 0xffa53529, 0xffa53529, - 0xffa53529, 0xffa53529, 0xffb53929, 0xffb53929, 0xffb53929, 0xffb53929, 0xffb83a2f, 0xffb83a2f, - 0xffba3b2c, 0xffb83a2f, 0xffb53d31, 0xffb53d31, 0xffb53d31, 0xffcba39f, 0xffded7de, 0xffe6e3e6, - 0xffe6e3e6, 0xffefefef, 0xfff7f7f7, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4beba, 0xffad3d31, 0xff9c3529, 0xff9c3529, - 0xff9c3529, 0xff9c3529, 0xff9c3121, 0xff942e21, 0xff8c2b21, 0xff842821, 0xff7b2421, 0xff70221e, - 0xff651f1b, 0xff651f1b, 0xff521810, 0xff521810, 0xdd1b0805, 0x66000000, 0x22000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x22000000, 0x44000000, 0x66000000, 0x99190808, 0xffffffff, 0xffffffff, 0x88190808, 0x66000000, - 0x44000000, 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee9c827e, 0xeedec2bd, - 0xeedec2bd, 0xeec5b6b5, 0xeec3aead, 0xeec0a6a5, 0xeebd9e9c, 0xeebd9694, 0xeeba8f8c, 0xeeb88884, - 0xeeb5827b, 0xee9c6d6b, 0xeece9e9c, 0xeece9e9c, 0xaa3a0c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x9937120e, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, - 0xffa53529, 0xffaa3729, 0xffb53929, 0xffb53a2c, 0xffb53b2f, 0xffb53b2f, 0xffbd3b31, 0xffbd3b31, - 0xffbd3b31, 0xffbd3b31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd6152, 0xffdedbde, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xfff7f7f7, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, 0xffc87970, 0xffad3929, 0xffa53529, 0xffa53529, - 0xffa53529, 0xff9c3129, 0xff943129, 0xff8f2e26, 0xff892b24, 0xff842821, 0xff732421, 0xff6b221e, - 0xff631f1b, 0xff631f1b, 0xff521c10, 0xff37130b, 0xdd1b0905, 0x66000000, 0x22000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x33000000, 0x55000000, 0x88190808, 0xfffffbff, 0xfffffbff, 0x88190808, 0x55000000, - 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee9c827e, 0xeedec2bd, - 0xeedec2bd, 0xeec5b6b5, 0xeec3aead, 0xeec0a6a5, 0xeebd9e9c, 0xeebd9694, 0xeeba8f8c, 0xeeb88884, - 0xeeb5827b, 0xee9c6d6b, 0xeece9e9c, 0xeece9e9c, 0xaa3a0c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x8837120e, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, - 0xffa73629, 0xffad3929, 0xffb53a2c, 0xffb53a2c, 0xffb53a2c, 0xffb53a2c, 0xffbd3b31, 0xffbd3b31, - 0xffbd3b31, 0xffbd3b31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffd3a9a7, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffefefef, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffbff, 0xffe4bab8, 0xffad3929, 0xffad3929, 0xffa53529, 0xffa53529, - 0xffa53529, 0xff9c3129, 0xff943129, 0xff8f2e26, 0xff892b24, 0xff842821, 0xff732421, 0xff6b221e, - 0xff631f1b, 0xff5a1c19, 0xff521c10, 0xff37130b, 0xcc1b0905, 0x66000000, 0x22000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x33000000, 0x55000000, 0x88190808, 0xfffffbff, 0xfffffbff, 0x88190808, 0x55000000, - 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee9c827e, 0xeedec2bd, - 0xeedec2bd, 0xeec5b6b5, 0xeec3aead, 0xeec0a6a5, 0xeebd9e9c, 0xeebd9694, 0xeeba8f8c, 0xeeb88884, - 0xeeb5827b, 0xee9c6d6b, 0xeece9e9c, 0xeece9e9c, 0xaa3a0c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x7737120e, 0xffa53529, 0xffa53529, 0xffa73629, 0xffa73629, - 0xffa53529, 0xffad3929, 0xffb53929, 0xffb53a2c, 0xffb53a2c, 0xffb53b2f, 0xffbd3a31, 0xffbd3b31, - 0xffbd3b31, 0xffbd3b31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd453a, 0xffdedbde, - 0xffdedbde, 0xffdedbde, 0xffefefef, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffffbff, 0xffad3929, 0xffad3929, 0xffad3929, 0xffa53529, 0xffa53529, - 0xffa53529, 0xff9f3229, 0xff943129, 0xff8f2e26, 0xff892b24, 0xff842821, 0xff732421, 0xff6b221e, - 0xff631f1b, 0xff5a1c19, 0xff521c10, 0xff37130b, 0xcc1b0905, 0x66000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x22000000, 0x44000000, 0x66000000, 0x99190808, 0xfffffbff, 0xfffffbff, 0x99190808, 0x66000000, - 0x44000000, 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977f79, 0xeed6beb5, - 0xeed6beb5, 0xeec5b2b5, 0xeec3abaa, 0xeec0a59f, 0xeebd9e94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee9a6d65, 0xeece9e94, 0xeece9e94, 0xaa310c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x6637120e, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, - 0xffa53529, 0xffaa3729, 0xffb53929, 0xffb53a2c, 0xffb53b2f, 0xffb53b2f, 0xffbd3b31, 0xffbd3b31, - 0xffbd3d31, 0xffbd3b31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd453a, 0xffc87770, - 0xffdedbde, 0xffdedbde, 0xffe6e7e6, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffc87970, 0xffad3929, 0xffad3929, 0xffad3929, 0xffa53529, 0xffa53529, - 0xffa53529, 0xff9f3229, 0xff943129, 0xff8f2e26, 0xff892b24, 0xff842821, 0xff732421, 0xff6b221e, - 0xff631f1b, 0xff5a1c19, 0xff521c10, 0xff37130b, 0xbb000000, 0x55000000, 0x11000000, 0x00000000, - 0x00000000, 0x7745221e, 0xffce655a, 0xffc56152, 0xffc56152, 0xffc56152, 0xffc56152, 0xffc5594a, - 0xffc5594a, 0xffc5594a, 0xffc5594a, 0xffbd5142, 0xffbd5142, 0xffbd5142, 0xffbd5142, 0xffce4531, - 0xff892e21, 0xff892e21, 0xff892e21, 0xff190808, 0xfffffbff, 0xfffffbff, 0xff190808, 0xff581b16, - 0xff581b16, 0xff842821, 0xff842821, 0xff732419, 0xff732419, 0xff732419, 0xff732419, 0xff632019, - 0xff632019, 0xff632019, 0xff632019, 0xff632019, 0xff632019, 0xff632019, 0x88210b08, 0x22000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977f79, 0xeed6beb5, - 0xeed6beb5, 0xeec5b2b5, 0xeec3abaa, 0xeec0a59f, 0xeebd9e94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee9a6d65, 0xeece9e94, 0xeece9e94, 0xaa310c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00080000, 0x33080000, 0xee9c3529, 0xff9c3529, 0xffa53529, 0xffa53529, - 0xffa73629, 0xffad3929, 0xffaf392c, 0xffb2392f, 0xffb2392f, 0xffb2392f, 0xffba3b2f, 0xffba3b2f, - 0xffba3b2f, 0xffba3b2f, 0xffba3b31, 0xffb83a31, 0xffba3b31, 0xffba3b31, 0xffb53931, 0xffb53931, - 0xffcba7a5, 0xffd6dfde, 0xffe6e3e6, 0xfff7f6f7, 0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, - 0xfffffbff, 0xfffffbff, 0xffb53d31, 0xffaf372c, 0xffaf372c, 0xffaf372c, 0xffa53529, 0xffa23329, - 0xff9f3229, 0xff9c3129, 0xff943121, 0xff8c2d21, 0xff8c2d21, 0xff842821, 0xff732421, 0xff68201b, - 0xff5d1c16, 0xff5d1c16, 0xff4a1810, 0xff31100b, 0xaa000000, 0x44000000, 0x11000000, 0x00000000, - 0x00000000, 0x55451f1b, 0xffce5d52, 0xffc5594a, 0xffc5594a, 0xffc5594a, 0xffc5594a, 0xffc5554a, - 0xffc5554a, 0xffc04c3f, 0xffc04c3f, 0xffc5453a, 0xffc5453a, 0xffba3e34, 0xffba3e34, 0xffad3529, - 0xffad3529, 0xff76271e, 0xff5a2019, 0xff5a2d3a, 0xffe6e7e6, 0xffe6e7e6, 0xff5a2d3a, 0xff4a1819, - 0xff652019, 0xff652019, 0xff732419, 0xff632019, 0xff632019, 0xff632019, 0xff632019, 0xff632019, - 0xff5d1e16, 0xff5d1e16, 0xff5d1e16, 0xff5a1c19, 0xff5a1c19, 0xff5a1c19, 0x88240908, 0x33000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977f79, 0xeed6beb5, - 0xeed6beb5, 0xeec5b2b5, 0xeec3abaa, 0xeec0a59f, 0xeebd9e94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee9a6d65, 0xeece9e94, 0xeece9e94, 0xaa310c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00080000, 0x11080000, 0xcc6b231b, 0xff9c3529, 0xffa53529, 0xffa53529, - 0xffa53529, 0xffaa3729, 0xffaf392c, 0xffb2392f, 0xffb2392f, 0xffb2392f, 0xffb83a2c, 0xffba3b2f, - 0xffba3b2f, 0xffba3b2f, 0xffb83a31, 0xffb83a31, 0xffba3b31, 0xffba3b31, 0xffb53931, 0xffb53931, - 0xffc0706b, 0xffd6dfde, 0xffe6e3e6, 0xfff7f6f7, 0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, - 0xfffffbff, 0xffc87770, 0xffaf372c, 0xffaf372c, 0xffaf372c, 0xffad3529, 0xffa53529, 0xffa23329, - 0xffa23329, 0xff9c3129, 0xff943121, 0xff8c2d21, 0xff8c2d21, 0xff842821, 0xff732421, 0xff68201b, - 0xff5d1c16, 0xff5d1c16, 0xff4a1810, 0xee31100b, 0x99000000, 0x33000000, 0x00000000, 0x00000000, - 0x00000000, 0x22000000, 0xcc893e37, 0xffbd5042, 0xffbd5042, 0xffbd5042, 0xffbd5042, 0xffc04c3f, - 0xffc04c3f, 0xffba4234, 0xffba4234, 0xffba3e34, 0xffba3e34, 0xffaf372f, 0xffaf372f, 0xffad3529, - 0xff912e24, 0xff76271e, 0xff5a2019, 0xff5a2d3a, 0xffe6e7e6, 0xffe6e7e6, 0xff5a2d3a, 0xff4a1819, - 0xff581c19, 0xff652019, 0xff652019, 0xff632019, 0xff632019, 0xff5a1e16, 0xff5a1e16, 0xff581b13, - 0xff581b13, 0xff581b13, 0xff581b13, 0xff5a1c19, 0xff5a1c19, 0xdd3f1310, 0x77080000, 0x44000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977f79, 0xeed6beb5, - 0xeed6beb5, 0xeec3abaa, 0xeec3abaa, 0xeec0a59f, 0xeebd9e94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, - 0xeeb5827b, 0xee9a6d65, 0xeece9e94, 0xeece9e94, 0xaa310c08, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00080000, 0x00080000, 0x993a120e, 0xff9c3529, 0xffa53529, 0xffa53529, - 0xffa53529, 0xffa73629, 0xffaf392c, 0xffaf392c, 0xffb2392f, 0xffb2392f, 0xffb83a2c, 0xffba3b2f, - 0xffb83a2c, 0xffba3b2f, 0xffb83a31, 0xffba3b31, 0xffb83a31, 0xffba3b31, 0xffb53931, 0xffb53931, - 0xffb53931, 0xffcba7a5, 0xffe6e3e6, 0xfff7f6f7, 0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, - 0xffe4b9b8, 0xffad3529, 0xffaf372c, 0xffaf372c, 0xffad3529, 0xffad3529, 0xffa53529, 0xffa23329, - 0xff9f3229, 0xff9c3129, 0xff8c2d21, 0xff8c2d21, 0xff842821, 0xff7b2421, 0xff732421, 0xff68201b, - 0xff5d1c16, 0xff521810, 0xff4a1810, 0xdd190805, 0x77000000, 0x22000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x99451f1b, 0xffbd5042, 0xffb5463a, 0xffb5463a, 0xffb5463a, 0xffba4234, - 0xffba4234, 0xffb53929, 0xffb53929, 0xffaf372f, 0xffaf372f, 0xffaf372f, 0xffaf372f, 0xffad3529, - 0xff912e24, 0xff76271e, 0xff5a2019, 0xff5a2d3a, 0xffe6e7e6, 0xffe6e7e6, 0xff5a2d3a, 0xff4a1819, - 0xff4a1819, 0xff581c19, 0xff652019, 0xff5a1e16, 0xff5a1e16, 0xff521b13, 0xff521b13, 0xff581b13, - 0xff581b13, 0xff581b13, 0xff581b13, 0xff5a1c19, 0xff5a1c19, 0xcc240908, 0x77080000, 0x33000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x88290400, 0xee977873, 0xeeceb2ad, - 0xeeceb2ad, 0xeec5aead, 0xeec3a6a2, 0xeec09e97, 0xeec09e97, 0xeebd928c, 0xeeba8b84, 0xeeb8847b, - 0xeeb8847b, 0xeeb58a84, 0xeeb58a84, 0xeeb58a84, 0xaa210400, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00080000, 0x00080000, 0x66080000, 0xff9c3529, 0xffa53529, 0xffa53529, - 0xffa53529, 0xffa53529, 0xffaf392c, 0xffaf392c, 0xffaf392c, 0xffb2392f, 0xffb83a2c, 0xffb83a2c, - 0xffb83a2c, 0xffb83a2c, 0xffb53931, 0xffb83a31, 0xffb83a31, 0xffb53931, 0xffb53931, 0xffb53931, - 0xffb53931, 0xffc0706b, 0xffe6e3e6, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, - 0xffc87770, 0xffad3529, 0xffaf372c, 0xffaf372c, 0xffad3529, 0xffad3529, 0xffa53529, 0xffa23329, - 0xff9c3129, 0xff9c3129, 0xff8c2d21, 0xff8c2d21, 0xff842821, 0xff7b2421, 0xff68201b, 0xff5d1c16, - 0xff521810, 0xff521810, 0xff31100b, 0xbb000000, 0x66000000, 0x22000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x44000000, 0xddad3d31, 0xffb5463a, 0xffad3d31, 0xffad3d31, 0xffb53929, - 0xffb53929, 0xffb53929, 0xffb53929, 0xffaf372f, 0xffaf372f, 0xffa53129, 0xffa53129, 0xff912e24, - 0xff912e24, 0xff5a2019, 0xff5a2019, 0xff5a2d3a, 0xffe6e7e6, 0xffe6e7e6, 0xff5a2d3a, 0xff4a1819, - 0xff4a1819, 0xff4a1819, 0xff581c19, 0xff521b13, 0xff521b13, 0xff521b13, 0xff4a1810, 0xff521810, - 0xff521810, 0xff521810, 0xff521810, 0xff5a1c19, 0xee3f1310, 0x99080000, 0x55080000, 0x22000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x88290400, 0xee977873, 0xeeceb2ad, - 0xeeceb2ad, 0xeec3a6a2, 0xeec3a6a2, 0xeec09e97, 0xeebd968c, 0xeebd928c, 0xeeba8b84, 0xeeb8847b, - 0xeeb8847b, 0xeeb58a84, 0xeeb58a84, 0xeeb58a84, 0x99210400, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x22000000, 0xdd6b2019, 0xff9c3129, 0xff9c3129, - 0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa73629, 0xffa73629, 0xffa73629, 0xffb53929, 0xffb53929, - 0xffb53929, 0xffb53929, 0xffaf3729, 0xffb53929, 0xffaf3729, 0xffb53929, 0xffaf3729, 0xffb53929, - 0xffaf3729, 0xffaf3729, 0xffdbb9b5, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfffff7f7, 0xffe1b7b2, - 0xffa53929, 0xffa53929, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, 0xff9c3129, 0xff9c3129, - 0xff9c3129, 0xff942e26, 0xff8c2d21, 0xff8c2d21, 0xff7e271e, 0xff70221b, 0xff632019, 0xff632019, - 0xff471710, 0xff471710, 0xee290c08, 0xaa000000, 0x44000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x99451710, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffad3929, - 0xffad3929, 0xffa73629, 0xffa73629, 0xffa53529, 0xffa53529, 0xff9a3126, 0xff9a3126, 0xff842d29, - 0xff762824, 0xff5a2019, 0xff5a2019, 0xff6b495a, 0xffd6cad6, 0xffd6cad6, 0xff6b495a, 0xff4d1c1e, - 0xff4a1410, 0xff4d1c1e, 0xff4d1c1e, 0xff4a1810, 0xff4a1810, 0xff4a1810, 0xff4a1810, 0xff4a1810, - 0xff4a1810, 0xff4a1810, 0xff4a1810, 0xff4a1810, 0xcc190805, 0x77000000, 0x44000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x88290400, 0xee603e3a, 0xeeceb2ad, - 0xeeceb2ad, 0xeec3a6a2, 0xeec09e97, 0xeec09e97, 0xeebd968c, 0xeebd928c, 0xeeba8b84, 0xeeb8847b, - 0xeeb57d73, 0xeeb58a84, 0xeeb58a84, 0xeeb58a84, 0x99210400, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x77240b08, 0xff9c3129, 0xff9c3129, - 0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa23329, 0xffa73629, 0xffa73629, 0xffb53929, 0xffad3629, - 0xffad3629, 0xffad3629, 0xffaf3729, 0xffaf3729, 0xffaf3729, 0xffaf3729, 0xffaf3729, 0xffaf3729, - 0xffaf3729, 0xffaf3729, 0xffa53d31, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfffff7f7, 0xffa53929, - 0xffa53929, 0xffa53929, 0xffa53529, 0xffa53529, 0xff9f3329, 0xff9f3329, 0xff9c3129, 0xff9c3129, - 0xff942e26, 0xff942e26, 0xff8c2d21, 0xff8c2d21, 0xff7e271e, 0xff70221b, 0xff632019, 0xff471710, - 0xff471710, 0xff471710, 0xcc0e0403, 0x88000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x44080400, 0xcc812a21, 0xffbd3d31, 0xffbd3d31, 0xffa73629, - 0xffa73629, 0xffa73629, 0xffa23329, 0xff9a3126, 0xff9a3126, 0xff9a3126, 0xff8f2d24, 0xff762824, - 0xff68241e, 0xff5a2019, 0xff5a2019, 0xff6b495a, 0xffd6cad6, 0xffd6cad6, 0xff6b495a, 0xff4d1c1e, - 0xff4a1410, 0xff4a1410, 0xff4d1c1e, 0xff4a1810, 0xff4a1810, 0xff471710, 0xff471710, 0xff4a1810, - 0xff4a1810, 0xff4a1810, 0xff4a1810, 0xee31100b, 0x99000000, 0x55000000, 0x33000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x77290400, 0xee603e3a, 0xeeceb2ad, - 0xeeceb2ad, 0xeec3a6a2, 0xeec09e97, 0xeebd968c, 0xeebd968c, 0xeeba8b84, 0xeeba8b84, 0xeeb8847b, - 0xeeb57d73, 0xeeb58a84, 0xeeb58a84, 0xeeb58a84, 0x99210400, 0x33000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0xcc6e221e, 0xff9c3129, - 0xff9c3129, 0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa23329, 0xffa73629, 0xffad3629, 0xffad3629, - 0xffad3629, 0xffad3629, 0xffaf3729, 0xffaa3629, 0xffa53529, 0xffaa3629, 0xffa53529, 0xffaf3729, - 0xffaa3629, 0xffa53529, 0xffa53d31, 0xffc07b73, 0xfff7f7f7, 0xfff7f7f7, 0xffc3786e, 0xffa53929, - 0xffa53929, 0xffa53929, 0xff9f3329, 0xff9f3329, 0xff9f3329, 0xff9a3229, 0xff9c3129, 0xff942e26, - 0xff942e26, 0xff942e26, 0xff7e271e, 0xff7e271e, 0xff70221b, 0xff70221b, 0xff632019, 0xff471710, - 0xff471710, 0xee2c0d08, 0xaa000000, 0x55000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11080400, 0x77451710, 0xee812a21, 0xffbd3d31, 0xffa73629, - 0xffa23329, 0xffa23329, 0xffa23329, 0xff9a3126, 0xff9a3126, 0xff8f2d24, 0xff8f2d24, 0xff762824, - 0xff68241e, 0xff5a2019, 0xff68241e, 0xff6b495a, 0xffb29fad, 0xffb29fad, 0xff8f7484, 0xff50242c, - 0xff4a1410, 0xff4a1410, 0xff4a1410, 0xff471710, 0xff471710, 0xff451610, 0xff451610, 0xff4a1810, - 0xff4a1810, 0xff4a1810, 0xee3c130e, 0xbb190805, 0x66000000, 0x44000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9dfdb, 0xfff7ffff, 0xffce9e94, - 0xffce9e94, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, - 0xffd39e91, 0xffce9e94, 0xffce9e94, 0xffce988c, 0xffce988c, 0xffc58e7b, 0xffc58e7b, 0xfff7ffff, - 0xffe6d9d3, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x77290400, 0xdd5d3731, 0xeec59e94, - 0xeec59e94, 0xeebd9e9c, 0xeebd9e9c, 0xeeba9794, 0xeeb8908c, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, - 0xeeaf7c73, 0xee9c7168, 0xeed6a69c, 0xee9c7168, 0x88290800, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x66100408, 0xee6e221e, - 0xff9c3129, 0xff9c3129, 0xff9c3129, 0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa53329, 0xffa53329, - 0xffa53329, 0xffa53329, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, - 0xffa53529, 0xffa53529, 0xffa53d31, 0xffa53d31, 0xfff7f7f7, 0xfff7f7f7, 0xffa53929, 0xffa53929, - 0xffa53929, 0xffa53929, 0xff9a3229, 0xff9a3229, 0xff943129, 0xff943129, 0xff942e26, 0xff942e26, - 0xff8c2b24, 0xff842821, 0xff7e271e, 0xff70221b, 0xff70221b, 0xff631c19, 0xff471710, 0xff471710, - 0xff471710, 0xdd100400, 0x88000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11080400, 0x22080400, 0x99451710, 0xee812a21, 0xffa23329, - 0xffa23329, 0xff9c3129, 0xff9c3129, 0xff8f2d24, 0xff8f2d24, 0xff8f2d24, 0xff842821, 0xff68241e, - 0xff68241e, 0xff5a2019, 0xff842d29, 0xff8f7484, 0xffb29fad, 0xffb29fad, 0xff8f7484, 0xff522d3a, - 0xff4d1c1e, 0xff4a1410, 0xff4a1410, 0xff451610, 0xff451610, 0xff451610, 0xff451610, 0xff3c130e, - 0xff3c130e, 0xff3c130e, 0xcc210808, 0x77000000, 0x44000000, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffd39f91, 0xffd39f91, 0xffd39f91, 0xffd39f91, 0xffd39e91, 0xffd39e91, 0xffd39e91, - 0xffd39e91, 0xffce988c, 0xffce988c, 0xffce988c, 0xffce9384, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, - 0xffe6d9d3, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x66290400, 0xdd5d3731, 0xeec59e94, - 0xeec59e94, 0xeebd9e9c, 0xeeba9794, 0xeeb8908c, 0xeeb58a84, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, - 0xeeaf7c73, 0xee9c7168, 0xeed6a69c, 0xee9c7168, 0x77290800, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0xaa2c0f0b, - 0xff842d21, 0xff842d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff9c3129, 0xff9c3129, - 0xff9c3129, 0xff9c3129, 0xff9a3126, 0xffa53529, 0xff9a3126, 0xff9a3126, 0xff9c3129, 0xff9c3129, - 0xff9c3129, 0xff9c3129, 0xff8c2d21, 0xff8c2d21, 0xffbd6d6b, 0xffbd6d6b, 0xff9c3129, 0xff9c3129, - 0xff9c3129, 0xff9c3129, 0xff9c3121, 0xff9c3121, 0xff912d21, 0xff9c3121, 0xff842d21, 0xff842d21, - 0xff76271e, 0xff76271e, 0xff732421, 0xff732421, 0xff5d1e19, 0xff5d1e19, 0xff421410, 0xff421410, - 0xee2c0d0b, 0xaa000000, 0x55000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x33000000, 0x994a1410, 0xee942d21, - 0xff942d21, 0xff942d21, 0xff942d21, 0xff8c2d21, 0xff8c2d21, 0xff812821, 0xff812821, 0xff632019, - 0xff632019, 0xff632019, 0xff633134, 0xff846573, 0xffa596a5, 0xffa596a5, 0xff846573, 0xff5a3d42, - 0xff4a2221, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, - 0xff421410, 0xcc160705, 0x77000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffd39f91, 0xffd09d8f, 0xffd09d8f, 0xffd09d8f, 0xffd09a8f, 0xffd09a8f, 0xffd09a8f, - 0xffd09a8f, 0xffce988c, 0xffce9384, 0xffce9384, 0xffce9384, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, - 0xffe6d9d3, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x55290400, 0xcc290400, 0xeec59e94, - 0xeec59e94, 0xeeba9794, 0xeeb8908c, 0xeeb8908c, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, 0xeeaf7c73, - 0xeead756b, 0xee9c7168, 0xeed6a69c, 0xdd633d34, 0x66290800, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, - 0xbb2c0f0b, 0xff842d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8f2d26, 0xff8f2d26, - 0xff8f2d26, 0xff9c3129, 0xff8f2d24, 0xff9a3126, 0xff9a3126, 0xff9a3126, 0xff942e26, 0xff9c3129, - 0xff942e26, 0xff9c3129, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff942e26, 0xff942e26, - 0xff942e26, 0xff942e26, 0xff9c3121, 0xff912d21, 0xff912d21, 0xff912d21, 0xff842d21, 0xff76271e, - 0xff76271e, 0xff76271e, 0xff732421, 0xff5d1e19, 0xff5d1e19, 0xff471710, 0xff421410, 0xee2c0d0b, - 0xbb000000, 0x77000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x33000000, 0x99370f0b, - 0xee942d21, 0xff942d21, 0xff942d21, 0xff8c2d21, 0xff812821, 0xff812821, 0xff762421, 0xff632019, - 0xff632019, 0xff632019, 0xff633942, 0xff846573, 0xffa596a5, 0xffa596a5, 0xff846573, 0xff5a3d42, - 0xff4a2221, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xee421410, - 0xcc160705, 0x77000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, - 0xffce9e94, 0xffd09d8f, 0xffd09d8f, 0xffd09d8f, 0xffce9a8c, 0xffd09a8f, 0xffce968c, 0xffce968c, - 0xffce968c, 0xffce9384, 0xffce9384, 0xffce8e7b, 0xffce8e7b, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, - 0xffe6d9d3, 0xffadaaad, 0x00000000, 0x00000000, 0x22000000, 0x44290400, 0xbb290400, 0xee916b63, - 0xeec59e94, 0xeeb8908c, 0xeeb8908c, 0xeeb58a84, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, 0xeead756b, - 0xeead756b, 0xee9c7168, 0xeed6a69c, 0xcc290800, 0x55290800, 0x22000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x33000000, 0xcc2c0f0b, 0xff76241b, 0xff76241b, 0xff76241b, 0xff76241b, 0xff812824, 0xff812824, - 0xff812824, 0xff812824, 0xff8f2d24, 0xff8f2d24, 0xff8f2d24, 0xff8f2d24, 0xff8c2b24, 0xff8c2b24, - 0xff8c2b24, 0xff8c2b24, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff942e26, 0xff942e26, - 0xff942e26, 0xff942e26, 0xff912d21, 0xff912d21, 0xff862821, 0xff862821, 0xff76271e, 0xff76271e, - 0xff68221b, 0xff68221b, 0xff5d1e19, 0xff5d1e19, 0xff471710, 0xff471710, 0xff2c0d0b, 0xcc000000, - 0x88000000, 0x44000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x33080000, - 0x88370f0b, 0xdd651e16, 0xff942d21, 0xff812821, 0xff812821, 0xff762421, 0xff762421, 0xff632019, - 0xff632019, 0xff632826, 0xff633942, 0xff846573, 0xff947d8c, 0xff947d8c, 0xff846573, 0xff5a3d42, - 0xff4a2221, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xee2f0d0b, 0xbb160705, - 0x77000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffc58a7b, 0xffc58a7b, 0xffc58a7b, 0xffc58a7b, 0xffb57d73, 0xffb57d73, 0xffb57d73, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x33190400, 0xaa190400, 0xee91584d, - 0xeece8273, 0xeeb5867b, 0xeeb5867b, 0xeeb5867b, 0xeeb5867b, 0xeead7973, 0xeead7973, 0xeeaa6d65, - 0xeeaa6d65, 0xeeaa7d73, 0xeeefbaad, 0xbb210400, 0x44210400, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x44000000, 0xcc4a1410, 0xff76241b, 0xff76241b, 0xff76241b, 0xff732421, 0xff732421, - 0xff732421, 0xff812824, 0xff842821, 0xff842821, 0xff842821, 0xff842821, 0xff842821, 0xff842821, - 0xff8c2b24, 0xff842821, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2b24, 0xff8c2b24, - 0xff8c2b24, 0xff842821, 0xff862821, 0xff862821, 0xff862821, 0xff7b2421, 0xff76271e, 0xff68221b, - 0xff68221b, 0xff5a1c19, 0xff5d1e19, 0xff471710, 0xff311008, 0xff311008, 0xdd160705, 0x99000000, - 0x55000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11080000, - 0x33080000, 0x55080000, 0xaa370f0b, 0xee6b2021, 0xff812821, 0xff762421, 0xff762421, 0xff632019, - 0xff632019, 0xff632019, 0xff633134, 0xff734d5a, 0xff846573, 0xff846573, 0xff734d5a, 0xff522f31, - 0xff4a2221, 0xff421410, 0xff421410, 0xff421410, 0xee2f0d0b, 0xcc1b0705, 0x99080000, 0x66000000, - 0x44000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9a8c, 0xffefdbd3, 0xfffffbf7, 0xfffffbf7, 0xffefddd9, 0xffefddd9, 0xffefddd9, - 0xffefddd9, 0xfffffbf7, 0xfffffbf7, 0xffecd5ce, 0xffc58a7b, 0xffb57d73, 0xffb57d73, 0xffb57d73, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x22190400, 0x77190400, 0xdd552e26, - 0xeece8273, 0xeeaf7165, 0xeeaf7165, 0xeeb5867b, 0xeeaf7165, 0xeead7973, 0xeeaa6d65, 0xeeaa6d65, - 0xeeaa6d65, 0xeeaa7d73, 0xeeaa7d73, 0x88210400, 0x22210400, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x33000000, 0x99210b08, 0xee421610, 0xff632019, 0xff632019, 0xff632019, - 0xff632019, 0xff632019, 0xff732419, 0xff732419, 0xff732419, 0xff732419, 0xff6b221b, 0xff7b2821, - 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, - 0xff7b2821, 0xff7b2821, 0xff7b2421, 0xff7b2421, 0xff7b2421, 0xff7b2421, 0xff6b2019, 0xff6b2019, - 0xff6b2019, 0xff4a1610, 0xff421410, 0xff421410, 0xee2c0d0b, 0xcc000000, 0x99000000, 0x55000000, - 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x22000000, 0x44000000, 0x771e0908, 0xbb3c1310, 0xdd5a1c19, 0xff5a1c19, 0xff55221b, - 0xff55221b, 0xff55221b, 0xff7b3129, 0xff58373c, 0xff7b4d52, 0xff7b4d52, 0xff58373c, 0xff5a2d29, - 0xff3f1f1b, 0xff24120e, 0xee24120e, 0xcc210808, 0x990b0303, 0x77000000, 0x55000000, 0x44000000, - 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9a8c, 0xffefdbd3, 0xfffffbf7, 0xfffffbf7, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xfffffbf7, 0xfffffbf7, 0xffd9afa5, 0xffc58a7b, 0xffb57d73, 0xffb57d73, 0xffb57d73, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x22190400, 0x44190400, 0xbb190400, - 0xee91584d, 0xeeaa5d50, 0xeeaf7165, 0xeeaf7165, 0xeeaf7165, 0xeeaa6d65, 0xeea76158, 0xeea76158, - 0xeeaa6d65, 0xeeaa7d73, 0xcc210400, 0x55210400, 0x22210400, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x66000000, 0xcc210b08, 0xff451610, 0xff632019, - 0xff451610, 0xff632019, 0xff5d1c13, 0xff5d1c13, 0xff5d1c13, 0xff5d1c13, 0xff6b221b, 0xff6b221b, - 0xff6b221b, 0xff6b221b, 0xff6e231b, 0xff6e231b, 0xff6e231b, 0xff6e231b, 0xff6e231b, 0xff6e231b, - 0xff6e231b, 0xff6e231b, 0xff651e1b, 0xff7b2421, 0xff651e1b, 0xff651e1b, 0xff6b2019, 0xff4a1610, - 0xff4a1610, 0xff4a1610, 0xff2c0d0b, 0xee160705, 0xbb000000, 0x88000000, 0x55000000, 0x22000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x11000000, 0x33000000, 0x44000000, 0x66000000, 0x991e0908, 0xbb2f130e, - 0xdd2f130e, 0xee55221b, 0xff55221b, 0xff58373c, 0xff58373c, 0xff58373c, 0xee342226, 0xdd3f1f1b, - 0xcc24120e, 0xaa080400, 0x88080400, 0x77000000, 0x55000000, 0x44000000, 0x33000000, 0x11000000, - 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, - 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xfffffbf7, 0xfffffbf7, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xfffffbf7, 0xffecd5ce, 0xffc58a7b, 0xffc58a7b, 0xffb57d73, 0xffb57d73, 0xffb57d73, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x11190400, 0x22190400, 0x77190400, - 0xcc190400, 0xeea5493a, 0xeeaa5d50, 0xeeaa5d50, 0xeeaa5d50, 0xeea76158, 0xeea76158, 0xeea76158, - 0xeea5554a, 0xcc210400, 0x77210400, 0x22210400, 0x11210400, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x44000000, 0x88080000, 0xdd260b08, - 0xee451610, 0xff451610, 0xff47140e, 0xff5d1c13, 0xff5d1c13, 0xff5d1c13, 0xff5a1b16, 0xff5a1b16, - 0xff5a1b16, 0xff5a1b16, 0xff601e16, 0xff601e16, 0xff6e231b, 0xff601e16, 0xff601e16, 0xff601e16, - 0xff601e16, 0xff601e16, 0xff651e1b, 0xff651e1b, 0xff501716, 0xff501716, 0xff4a1610, 0xff4a1610, - 0xff290b08, 0xee290b08, 0xdd000000, 0xaa000000, 0x77000000, 0x44000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, 0x33000000, 0x55080400, - 0x66080400, 0x77080400, 0x88080400, 0x88100c10, 0x99100c10, 0x99100c10, 0x88100c10, 0x8824120e, - 0x77080400, 0x66080400, 0x55080400, 0x44000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9284, 0xffce9284, - 0xffce9284, 0xffc58e7b, 0xffc58e7b, 0xffd9b3a7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffcea9a2, 0xffb57d73, 0xffb57d73, 0xffad756b, 0xffad756b, 0xffad756b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, - 0x66000000, 0x99210400, 0xaa420800, 0xbb420800, 0xbb630c00, 0xcc520c00, 0xbb520c00, 0xbb370800, - 0x991b0400, 0x66000000, 0x33000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x22080000, 0x44080000, - 0x77080000, 0xbb080000, 0xee310c08, 0xff47140e, 0xff47140e, 0xff47140e, 0xff4a1410, 0xff4a1410, - 0xff5a1b16, 0xff5a1b16, 0xff521810, 0xff521810, 0xff521810, 0xff521810, 0xff521810, 0xff521810, - 0xff521810, 0xff521810, 0xff501716, 0xff501716, 0xff501716, 0xff3a1010, 0xff290b08, 0xee290b08, - 0xcc080000, 0xaa080000, 0x88000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22080400, - 0x33080400, 0x33080400, 0x44080400, 0x44100c10, 0x55100c10, 0x55100c10, 0x44100c10, 0x44080400, - 0x33080400, 0x33080400, 0x22080400, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9284, 0xffce9284, - 0xffce9284, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 0xffecd9d3, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffe6d4d0, 0xffb57d73, 0xffb57d73, 0xffb57d73, 0xffad756b, 0xffad756b, 0xffad756b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, - 0x22000000, 0x22000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, - 0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, - 0x22000000, 0x44000000, 0x66000000, 0x99000000, 0xbb080303, 0xdd190808, 0xee260b0b, 0xff3a1010, - 0xff3a1010, 0xff3a1010, 0xff3a1410, 0xff3a1410, 0xff3a1410, 0xff3a1410, 0xff4a1410, 0xff4a1410, - 0xff4a1410, 0xff4a1410, 0xff311010, 0xee210b0b, 0xdd100505, 0xcc100505, 0xbb000000, 0x99000000, - 0x77000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9284, 0xffce9284, - 0xffce9284, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 0xffd9b3a7, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffcea9a2, 0xffb57d73, 0xffb57d73, 0xffb57d73, 0xffad756b, 0xffad756b, 0xffad756b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x11000000, 0x33000000, 0x44000000, 0x55000000, 0x77000000, 0x88000000, - 0xaa000000, 0xbb000000, 0xcc130705, 0xcc130705, 0xcc130705, 0xdd130705, 0xcc190705, 0xcc190705, - 0xcc000000, 0xbb000000, 0xbb000000, 0x99000000, 0x88000000, 0x66000000, 0x55000000, 0x44000000, - 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9284, 0xffce9284, - 0xffce9284, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 0xffe9d7d3, 0xffffffff, 0xffffffff, - 0xffdec2bd, 0xffb57d73, 0xffb57d73, 0xffb57d73, 0xffb57d73, 0xffad756b, 0xffad756b, 0xffad756b, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, 0x22000000, - 0x33000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, 0x66000000, 0x66000000, 0x66000000, - 0x55000000, 0x55000000, 0x44000000, 0x44000000, 0x33000000, 0x22000000, 0x11000000, 0x11000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffc5867b, 0xffc5867b, - 0xffc5867b, 0xffc58a7b, 0xffbd8376, 0xffbd8376, 0xffbd8376, 0xffc59b8f, 0xfff7e7e6, 0xfff7e7e6, - 0xffc59b8f, 0xffb5796b, 0xffb5796b, 0xffad7568, 0xffad7568, 0xffa56d63, 0xffa56d63, 0xffa56d63, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, - 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffc5867b, 0xffc5867b, - 0xffc5867b, 0xffbd8376, 0xffbd8376, 0xffb57c70, 0xffb57c70, 0xffad7563, 0xffdec1ba, 0xffdec1ba, - 0xffad7563, 0xffad7568, 0xffad7568, 0xffa57165, 0xffa57165, 0xffa56d63, 0xffa56d63, 0xffa56d63, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffc5867b, 0xffc5867b, - 0xffc5867b, 0xffbd8376, 0xffb57c70, 0xffb57c70, 0xffb57c70, 0xffad7563, 0xffad7563, 0xffad7563, - 0xffad7563, 0xffa57165, 0xffa57165, 0xffa57165, 0xff9c6d63, 0xffa56d63, 0xffa56d63, 0xffa56d63, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffc5867b, 0xffc5867b, - 0xffc5867b, 0xffb57c70, 0xffb57c70, 0xffad756b, 0xffad756b, 0xffad7563, 0xffad7563, 0xffad7563, - 0xffad7563, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, 0xffa56d63, 0xffa56d63, 0xffa56d63, - 0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff8f8f8f, 0xffded4d0, 0xffad7d73, 0xffad7d73, - 0xffad7d73, 0xffa57163, 0xffa57163, 0xffa57163, 0xffa57163, 0xff9c695a, 0xff9c695a, 0xff9c695a, - 0xff9c695a, 0xff94655a, 0xff94655a, 0xff94655a, 0xff94655a, 0xff946d63, 0xff946d63, 0xff946d63, - 0xffdbcecb, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff8f8f8f, 0xffded4d0, 0xfff7ffff, 0xffad7d73, - 0xffad7d73, 0xffa57163, 0xffa57163, 0xffa57163, 0xffa57163, 0xff9c695a, 0xff9c695a, 0xff9c695a, - 0xff9c695a, 0xff94655a, 0xff94655a, 0xff94655a, 0xff94655a, 0xff946d63, 0xff946d63, 0xffffffff, - 0xffdbcecb, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff8f8f8f, 0xffded4d0, 0xffded4d0, 0xffded4d0, - 0xffded4d0, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, - 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffdbcecb, 0xffdbcecb, 0xffdbcecb, - 0xffdbcecb, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff8f8f8f, 0xffc5a9a2, 0xffc5a9a2, 0xffc5a9a2, - 0xffc5a9a2, 0xffc5b7b5, 0xffc5b7b5, 0xffc5b7b5, 0xffc5b7b5, 0xffc3b5b2, 0xffc3b5b2, 0xffc3b5b2, - 0xffc3b5b2, 0xffc0b3b2, 0xffc0b3b2, 0xffc0b3b2, 0xffc0b3b2, 0xffb89e97, 0xffb89e97, 0xffb89e97, - 0xffb89e97, 0xff6e6f6e, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - -static const UINT g_DXUTGUITextureSrcDataSizeInBytes = 262272; - -static const DWORD g_DXUTArrowMeshSrcData[] = -{ - 0x20666f78, 0x33303330, 0x70697a62, 0x32333030, 0x000030d7, 0x087930c7, 0x59ed4b43, 0xd51c6c5d, - 0x71dbbe15, 0xacbbc1d6, 0xe125d493, 0xc1024e27, 0x7133f9c1, 0xec1098ec, 0x1b1daef1, 0xc6d24eb7, - 0xc713fa10, 0x64866f59, 0xd9aecd95, 0x694304dd, 0x4485686b, 0xad2fb6a5, 0x78df44a8, 0x6cca8828, - 0x20a2895a, 0x2aaf60ef, 0x905215b5, 0x4fa9515a, 0xa45b4d45, 0xa1e09548, 0x9e94d282, 0xcf5df333, - 0x8a3acdf1, 0xec0c5368, 0xbefec6ac, 0xf77ee733, 0xdef73bdc, 0x9d667739, 0x4a65a90a, 0xf27c81a9, - 0x7040d394, 0xba2785e0, 0x7e7e38ff, 0xd5bb0be5, 0xba1f17fa, 0x56a633b0, 0x1546bf79, 0x1d7cec51, - 0x164bef39, 0x8ec9e9f3, 0xb02e0ec9, 0x1fe77ed7, 0xbf399e4f, 0x550707f2, 0x1fceceef, 0x36a1db3e, - 0xdc985b93, 0x316e794e, 0xc415a965, 0x2413551a, 0xf77d749a, 0xc2d993e5, 0x29fcb983, 0xe2d5905f, - 0x61519a86, 0x7a942488, 0x36fb0b90, 0x1df5c9ad, 0x5cc55272, 0x188e559e, 0x4288e08d, 0x1aee41e4, - 0x47c0123e, 0xae72c8b5, 0x189c29ca, 0xbebca648, 0x5a643318, 0xf91567c9, 0x90e1d964, 0x933a2f93, - 0xe963d943, 0x52685394, 0xaeaf8a1d, 0x8bcce8e4, 0x058b45b1, 0xaa87527d, 0x2afedab9, 0x642f72d5, - 0x4daeacb9, 0xfc8fd936, 0x4cc6ae0c, 0x15a5ae77, 0x2018bc05, 0x8feb9b20, 0x2bdd0e02, 0x6172b81f, - 0x50440c73, 0xbadd3f70, 0x31c0a664, 0xadf719f7, 0xf859fa15, 0x3d721e5c, 0xc62ff55f, 0x701d670c, - 0x40b14754, 0x11d86164, 0x903fbd84, 0xbd058b32, 0x97d2ddcc, 0x07f2e4cb, 0x0e711307, 0x1ffd4ffb, - 0x09963e74, 0x6121e6c2, 0x39de5391, 0xee0f8fe6, 0xc779e395, 0x6f94fac9, 0xb4e678d3, 0x664c5c13, - 0xe5244e26, 0x2cfad200, 0xcdf678ff, 0x7e4e75df, 0x20317918, 0x9f274593, 0x6f58664e, 0x8c32319f, - 0x7b94f916, 0x550533c3, 0x761ee44c, 0x300c2e88, 0x5627aea4, 0xa7527098, 0x4a3cc933, 0x4e717354, - 0xf4850ba5, 0x8e6a2d19, 0x1fb81586, 0x74e1d03a, 0x26c1c8a1, 0x06890caa, 0xb1da35be, 0x9a65dc60, - 0x3064ce14, 0x859df497, 0xd5c55639, 0xfb0b9c1f, 0xd25ef2e9, 0x46f1ae81, 0xfebf4f1f, 0x749913d3, - 0xe74c592a, 0x1c8998b2, 0x6ffdd0f0, 0x3f9bfcbc, 0xa9e868fc, 0x3fcf23f3, 0xe7f1da57, 0x3f3c31f9, - 0xcf14f5c9, 0x8fa7c81e, 0x8cc9b3a7, 0x917c919c, 0x983a7507, 0x3fb4b2f5, 0xeb6ac50a, 0xca48c6f7, - 0x07633ac9, 0xb3ea3973, 0xf58d2d2b, 0x352b3f5e, 0x8ecbab65, 0x0119b7ab, 0xf3e78c30, 0xa6af87b9, - 0xfddef7ee, 0xe5551ece, 0xafc27690, 0x65c7aaa8, 0xfbe37375, 0x6f50c91e, 0x773bf939, 0x9bc6f87c, - 0xa35729f6, 0xaef0ae99, 0x256f73b6, 0x00957ff8, 0x7d46b8f8, 0x7e7fc53e, 0x5f343232, 0x75de5ead, - 0xc1ef61ad, 0xf59d3773, 0x3950da6a, 0x35c4aa5e, 0x8a503e1e, 0x3adebfd7, 0xb2c778cb, 0x7f9dfc62, - 0x97c3d8ff, 0x8ef74db6, 0x61ecbaff, 0xd5fa7db5, 0xb2fb7024, 0xd9f6ace2, 0xab34a077, 0xece692cb, - 0x9d93d74c, 0xfe5d9cd0, 0x4757ab7a, 0xe1efef9b, 0xbf4db7f7, 0x68719a4a, 0x498126f6, 0x7c36fe33, - 0x461e3348, 0x68ce20d9, 0x5a338825, 0x568ce209, 0x95a33882, 0x2568ce20, 0x095a3388, 0x82568ce2, - 0xc44d3d38, 0x7104ad19, 0x9c412b46, 0xf4e2269e, 0xa7a71134, 0x67c93889, 0x6bf4f0fe, 0xec3ffb7d, - 0x937ab0db, 0x4e8bbc62, 0x19fabd0b, 0x5b82433a, 0x075e69b0, 0x6132f9ac, 0x9b0c23e3, 0x69b0f5e6, - 0xcd361cbe, 0xf34d83af, 0x8f34d806, 0x1479a6c0, 0x87afcd36, 0x6c18f34d, 0x6360879a, 0x9fa74cde, - 0x1d7c06ca, 0x4af0166c, 0xcd87af83, 0xf0655e02, 0xc059b00d, 0xadf8359f, 0x4dc059b0, 0x360dbf06, - 0x0673f80b, 0x059b08df, 0x6fc1837c, 0x5e02cd87, 0xd816f06d, 0x0635e02c, 0x059b04df, 0xefc1a37c, - 0xbe02cd80, 0xb0ade0c9, 0x1b37c059, 0x166c337c, 0xdf062df0, 0xdc059b02, 0x7166f068, 0xb9d2d6bf, - 0x826dce95, 0x382ede33, 0x19c136e3, 0xe33829df, 0x6e33821d, 0x4ef19c17, 0x087719c1, 0x7053b8ce, - 0x6704bbc6, 0x977825dc, 0x816b5f98, 0x1bbe0b77, 0x9592aa6d, 0x5990fe2f, 0xd25cbcf0, 0xb7df7d78, - 0x9f46a7ec, 0xe17666e9, 0x7dced644, 0xf1995cfb, 0xf6eda1e0, 0x78f667b3, 0x2607facf, 0xf479ee9f, - 0xd5e045bb, 0x6fb686e5, 0xddffb878, 0x7a707746, 0x7f4fc3c4, 0xf4cdd47f, 0xa6930f2a, 0xd0339a4b, - 0x07b34974, 0xda692e9a, 0x26932cd0, 0xd21eeaf0, 0x9369a1b4, 0x9b4d0da6, 0x60448d34, 0x33cc45ca, - 0x6515c7c2, 0x8ae9a15d, 0x83115cba, 0x8b2b622b, 0x5b45bb98, 0x5b46d16c, 0x7d16ddb4, 0xb2be8b62, - 0x98f61f45, 0x5c652f31, 0x1ed4c87b, 0xcc87b532, 0x44c87852, 0x87eedd16, 0x084ce7bd, 0x87e93f65, - 0xdea666f9, 0xb3feed9b, 0x2da69e4b, 0x5f5e2238, 0x448df95e, 0xe783dd58, 0x2758b377, 0x87573af4, - 0xb58c2c35, 0xa4d6396a, 0x513dac06, 0x8c3131ac, 0x135815cd, 0x376e6156, 0x80de8e61, 0x7306b6b9, - 0xfd8c26e6, 0xffef705b, 0xf04675df, 0x0f57b05b, 0xb2a52f7b, 0x5179b5ce, 0xced6ede0, 0xe45895bd, - 0x7c35c54d, 0xeeaea051, 0xd7b8c145, 0x85a12ddf, 0x274a972a, 0x9ec71a13, 0xa10a254f, 0x1c69b7a2, - 0xb89c3b5d, 0xe1e8ba54, 0x24b5cfb3, 0xe3274e7e, 0x08ed917f, 0x413c635d, 0xf5065cbe, 0x4eb5a4bf, - 0xdab38a87, 0xe2e941fe, 0x49fc28ec, 0x742cee63, 0x7dee6348, 0x5cef93e8, 0xc692f516, 0xf57ecfdc, - 0x7db497d3, 0xcf10b492, 0xd17b3a9c, 0xf9d225c3, 0xff8c9d05, 0xc5acfa49, 0x36f924f8, 0xb7bc1952, - 0xc62d62e9, 0xf4e3f75f, 0xc5ece870, 0x93f861f8, 0x9d04a246, 0xbdf18a31, 0x1a4faf92, 0x57a81389, - 0x6fe7db1f, 0x862f0d6d, 0x36a9636b, 0x1c1bfe96, 0xead38f56, 0x9c13f474, 0x1c8a37a3, 0xba39195d, - 0x65727232, 0xc8cae0e4, 0x639195b9, 0x56a7232b, 0x8cad0e46, 0x3919599c, 0x740dceb2, 0xe46edc4e, - 0xd45f3ac0, 0x234eef39, 0xa3f9d607, 0x8c3b79ce, 0x93e7581c, 0x44ede73a, 0x2ef9206e, 0x66e02cd8, - 0x66c17783, 0xf833af01, 0xc059b05d, 0x1bbe0deb, 0x83780b36, 0xcd86efc1, 0xe0d5be02, 0x80b3607b, - 0x3df8336f, 0x1bc059b0, 0x9b0dde0d, 0xc1bb7c05, 0x80b3607b, 0xc36e0c5b, 0x326f0166, 0x166c2f78, - 0x8f061df0, 0xb70166c3, 0x9b013c1a, 0xe0d9bc05, 0xc059b07d, 0x0fde0c5b, 0xd5bc059b, 0xb3617be0, - 0x7c19b780, 0x0679ec40, 0x7c91c7b0, 0x0681ec50, 0xfc91e7b1, 0xba27b15e, 0xc9207b17, 0x691ec487, - 0xf25b6308, 0x79de3176, 0x3a79f4bf, 0xe33820bf, 0xef19c161, 0x7ef19c13, 0x101f19c1, 0x0517f19c, - 0xc125fc67, 0x9c141f19, 0x8ce088f1, 0xf19c13ef, 0x3e3382fd, 0x07e33824, 0x65fc6704, 0x457f19c1, - 0x155fc670, 0x04d7f19c, 0x70587c67, 0x3382a3c6, 0xe338223e, 0x1f19c131, 0x52719c15, 0x7cfa24f0, - 0xd59117d1, 0xfda5d892, 0xe02969e2, 0xb71fbffd, 0xdfebfe5f, 0xe5fede67, 0xbb807a5f, 0x46c64719, - 0x5f9b96ec, 0xf1dc61ec, 0xdafda744, 0xcc66c440, 0xae3399ff, 0xc7eceba3, 0x7971cb98, 0xc98d19e0, - 0xa87daca7, 0xd2cbabac, 0xd26b577f, 0x750eb775, 0xc7573951, 0x7c233c00, 0x2baca2ca, 0x97515d34, - 0x4570622b, 0xf16e1e6c, 0x5b457663, 0x5746d15c, 0x25d75db7, 0xa58f5337, 0xcb78798e, 0xe27adff0, - 0x6fb61ccf, 0x187a67cc, 0x5eedfe1f, 0x0ba97bfb, 0x9be57e1e, 0x193e6c1b, 0x31af8db3, 0xc32e5f66, - 0x5ec16b58, 0x2ff276d6, 0x70d27f6b, 0xdcd90eb5, 0x5f27d093, 0x1a4bd757, 0x84a72f7c, 0x59fdacbd, - 0x46bceb4b, 0x4577d0a7, 0xc788aebd, 0x22ba7115, 0xcbb4577e, 0x093dedd5, 0x8dfd8e7d, 0x3f7afc87, - 0x3ffe2f4e, 0x624b5c0a, 0x2d6c496b, 0xb125ad89, 0xd3f624b5, 0xe95ec49e, 0xd638c743, 0x829fa3a9, - 0x0fb51d0f, 0x9887fe31, 0xb4bfd863, 0x621f847f, 0xdec7c59a, 0xecc3e20d, 0x7511f146, 0xa9e0f893, - 0x156e5c3f, 0xc4db201f, 0x7b8fc5c7, 0xf7e2221b, 0x0000001f -}; - -static const UINT g_DXUTArrowMeshSrcDataSizeInBytes = 2193; - -//----------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateGUITextureFromInternalArray9( LPDIRECT3DDEVICE9 pd3dDevice, IDirect3DTexture9** ppTexture, D3DXIMAGE_INFO* pInfo ) -{ - return D3DXCreateTextureFromFileInMemoryEx( pd3dDevice, g_DXUTGUITextureSrcData, g_DXUTGUITextureSrcDataSizeInBytes, - D3DX_DEFAULT, D3DX_DEFAULT, 1, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, - D3DX_DEFAULT, D3DX_DEFAULT, 0, pInfo, NULL, ppTexture ); -} - -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateGUITextureFromInternalArray11(ID3D11Device* pd3dDevice, ID3D11Texture2D** ppTexture, D3DX11_IMAGE_INFO* pInfo) -{ - HRESULT hr; - - D3DX11_IMAGE_INFO SrcInfo; - if( !pInfo ) - { - D3DX11GetImageInfoFromMemory( g_DXUTGUITextureSrcData, g_DXUTGUITextureSrcDataSizeInBytes, NULL, &SrcInfo, NULL ); - pInfo = &SrcInfo; - } - - ID3D11Resource *pRes; - D3DX11_IMAGE_LOAD_INFO loadInfo; - loadInfo.Width = D3DX11_DEFAULT; - loadInfo.Height = D3DX11_DEFAULT; - loadInfo.Depth = D3DX11_DEFAULT; - loadInfo.FirstMipLevel = 0; - loadInfo.MipLevels = 1; - loadInfo.Usage = D3D11_USAGE_DEFAULT; - loadInfo.BindFlags = D3D11_BIND_SHADER_RESOURCE; - loadInfo.CpuAccessFlags = 0; - loadInfo.MiscFlags = 0; - //loadInfo.Format = MAKE_TYPELESS( pInfo->Format ); - loadInfo.Format = MAKE_SRGB( pInfo->Format ); - loadInfo.Filter = D3DX11_FILTER_NONE; - loadInfo.MipFilter = D3DX11_FILTER_NONE; - loadInfo.pSrcInfo = pInfo; - - hr = D3DX11CreateTextureFromMemory( pd3dDevice, g_DXUTGUITextureSrcData, g_DXUTGUITextureSrcDataSizeInBytes, &loadInfo, NULL, &pRes, NULL ); - if( FAILED( hr ) ) - return hr; - hr = pRes->QueryInterface( __uuidof( ID3D11Texture2D ), (LPVOID*)ppTexture ); - SAFE_RELEASE( pRes ); - - return S_OK; -} - -//----------------------------------------------------------------------------- -HRESULT WINAPI DXUTCreateArrowMeshFromInternalArray( LPDIRECT3DDEVICE9 pd3dDevice, ID3DXMesh** ppMesh ) -{ - return D3DXLoadMeshFromXInMemory( g_DXUTArrowMeshSrcData, g_DXUTArrowMeshSrcDataSizeInBytes, - D3DXMESH_MANAGED, pd3dDevice, NULL, NULL, NULL, NULL, ppMesh ); -} - diff --git a/sample/d3d11/common/DXUTres.h b/sample/d3d11/common/DXUTres.h deleted file mode 100644 index a3e851f..0000000 --- a/sample/d3d11/common/DXUTres.h +++ /dev/null @@ -1,18 +0,0 @@ -//---------------------------------------------------------------------------- -// File: dxutres.h -// -// Functions to create DXUT media from arrays in memory -// -// Copyright (c) Microsoft Corp. All rights reserved. -//----------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_RES_H -#define DXUT_RES_H - -HRESULT WINAPI DXUTCreateGUITextureFromInternalArray9( LPDIRECT3DDEVICE9 pd3dDevice, IDirect3DTexture9** ppTexture, - D3DXIMAGE_INFO* pInfo ); -HRESULT WINAPI DXUTCreateGUITextureFromInternalArray11( ID3D11Device* pd3dDevice, ID3D11Texture2D** ppTexture, - D3DX11_IMAGE_INFO* pInfo ); -HRESULT WINAPI DXUTCreateArrowMeshFromInternalArray( LPDIRECT3DDEVICE9 pd3dDevice, ID3DXMesh** ppMesh ); - -#endif diff --git a/sample/d3d11/common/DXUTsettingsdlg.cpp b/sample/d3d11/common/DXUTsettingsdlg.cpp deleted file mode 100644 index 6cf495b..0000000 --- a/sample/d3d11/common/DXUTsettingsdlg.cpp +++ /dev/null @@ -1,2853 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTSettingsDlg.cpp -// -// Dialog for selection of device settings -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#include "DXUTgui.h" -#include "DXUTsettingsDlg.h" -#undef min // use __min instead -#undef max // use __max instead - - -//-------------------------------------------------------------------------------------- -// Internal functions forward declarations -//-------------------------------------------------------------------------------------- -WCHAR* DXUTAPIVersionToString( DXUTDeviceVersion version ); -WCHAR* DXUTPresentIntervalToString( UINT pi ); -WCHAR* DXUTMultisampleTypeToString( D3DMULTISAMPLE_TYPE MultiSampleType ); -WCHAR* DXUTD3DDeviceTypeToString( D3DDEVTYPE devType ); -WCHAR* DXUTD3DX11DeviceTypeToString( D3D_DRIVER_TYPE devType ); -WCHAR* DXUTVertexProcessingTypeToString( DWORD vpt ); - - -HRESULT DXUTSnapDeviceSettingsToEnumDevice( DXUTDeviceSettings* pDeviceSettings, bool forceEnum, D3D_FEATURE_LEVEL forceFL = D3D_FEATURE_LEVEL(0) ); - -//-------------------------------------------------------------------------------------- -// Global state -//-------------------------------------------------------------------------------------- -DXUTDeviceSettings g_DeviceSettings; - -CD3DSettingsDlg* WINAPI DXUTGetD3DSettingsDialog() -{ - // Using an accessor function gives control of the construction order - static CD3DSettingsDlg dlg; - return &dlg; -} - - -//-------------------------------------------------------------------------------------- -CD3DSettingsDlg::CD3DSettingsDlg() -{ - m_pStateBlock = NULL; - m_bActive = false; - m_pActiveDialog = NULL; - - m_Levels[0] = D3D_FEATURE_LEVEL_9_1; - m_Levels[1] = D3D_FEATURE_LEVEL_9_2; - m_Levels[2] = D3D_FEATURE_LEVEL_9_3; - m_Levels[3] = D3D_FEATURE_LEVEL_10_0; - m_Levels[4] = D3D_FEATURE_LEVEL_10_1; - m_Levels[5] = D3D_FEATURE_LEVEL_11_0; - -} - - -//-------------------------------------------------------------------------------------- -CD3DSettingsDlg::~CD3DSettingsDlg() -{ - // Release the memory used to hold the D3D11 refresh data in the combo box - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - if( pComboBox ) - for( UINT i = 0; i < pComboBox->GetNumItems(); ++i ) - { - DXGI_RATIONAL* pRate = reinterpret_cast( pComboBox->GetItemData( i ) ); - delete pRate; - } -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager ) -{ - assert( pManager ); - m_Dialog.Init( pManager, false ); // Don't register this dialog. - m_RevertModeDialog.Init( pManager, false ); // Don't register this dialog. - m_pActiveDialog = &m_Dialog; - CreateControls(); -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager, LPCWSTR szControlTextureFileName ) -{ - assert( pManager ); - m_Dialog.Init( pManager, false, szControlTextureFileName ); // Don't register this dialog. - m_RevertModeDialog.Init( pManager, false, szControlTextureFileName ); // Don't register this dialog. - m_pActiveDialog = &m_Dialog; - CreateControls(); -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager, LPCWSTR pszControlTextureResourcename, - HMODULE hModule ) -{ - assert( pManager ); - m_Dialog.Init( pManager, false, pszControlTextureResourcename, hModule ); // Don't register this dialog. - m_RevertModeDialog.Init( pManager, false, pszControlTextureResourcename, hModule ); // Don't register this dialog - m_pActiveDialog = &m_Dialog; - CreateControls(); -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::CreateControls() -{ - // Set up main settings dialog - m_Dialog.EnableKeyboardInput( true ); - m_Dialog.SetFont( 0, L"Arial", 15, FW_NORMAL ); - m_Dialog.SetFont( 1, L"Arial", 28, FW_BOLD ); - - // Right-justify static controls - CDXUTElement* pElement = m_Dialog.GetDefaultElement( DXUT_CONTROL_STATIC, 0 ); - if( pElement ) - { - pElement->dwTextFormat = DT_VCENTER | DT_RIGHT; - - // Title - CDXUTStatic* pStatic = NULL; - m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Direct3D Settings", 10, 5, 400, 50, false, &pStatic ); - pElement = pStatic->GetElement( 0 ); - pElement->iFont = 1; - pElement->dwTextFormat = DT_TOP | DT_LEFT; - } - - // DXUTSETTINGSDLG_API_VERSION - m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"API Version", 10, 35, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_API_VERSION, 200, 35, 300, 23 ); - - - //DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL, L"Feature Level", 10, 60, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL, 200, 60, 300, 23 ); - m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL )->SetDropHeight( 106 ); - - - // DXUTSETTINGSDLG_ADAPTER - m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Display Adapter", 10, 85, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_ADAPTER, 200, 85, 300, 23 ); - - // DXUTSETTINGSDLG_DEVICE_TYPE - m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Render Device", 10, 110, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_DEVICE_TYPE, 200, 110, 300, 23 ); - - // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN - m_Dialog.AddCheckBox( DXUTSETTINGSDLG_DEVICECLIP, L"Clip to device when window spans across multiple monitors", - 250, 136, 500, 16 ); - m_Dialog.AddRadioButton( DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_WINDOWED_GROUP, L"Windowed", - 360, 157, 100, 16 ); - m_Dialog.AddRadioButton( DXUTSETTINGSDLG_FULLSCREEN, DXUTSETTINGSDLG_WINDOWED_GROUP, L"Full Screen", - 220, 157, 100, 16 ); - - // DXUTSETTINGSDLG_ADAPTER_FORMAT - m_Dialog.AddStatic( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL, L"Adapter Format", 10, 175, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT, 200, 175, 300, 23 ); - - // DXUTSETTINGSDLG_RESOLUTION - m_Dialog.AddStatic( DXUTSETTINGSDLG_RESOLUTION_LABEL, L"Resolution", 10, 200, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_RESOLUTION, 200, 200, 200, 23 ); - m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION )->SetDropHeight( 106 ); - - // DXUTSETTINGSDLG_RES_SHOW_ALL - m_Dialog.AddCheckBox( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL, L"Show All Aspect Ratios", 420, 200, 200, 23, false ); - - // DXUTSETTINGSDLG_REFRESH_RATE - m_Dialog.AddStatic( DXUTSETTINGSDLG_REFRESH_RATE_LABEL, L"Refresh Rate", 10, 225, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_REFRESH_RATE, 200, 225, 300, 23 ); - - // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT - m_Dialog.AddStatic( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL, L"Back Buffer Format", 10, 260, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT, 200, 260, 300, 23 ); - - // DXUTSETTINGSDLG_DEPTH_STENCIL - m_Dialog.AddStatic( DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL, L"Depth/Stencil Format", 10, 285, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL, 200, 285, 300, 23 ); - - // DXUTSETTINGSDLG_MULTISAMPLE_TYPE - m_Dialog.AddStatic( DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL, L"Multisample Type", 10, 310, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE, 200, 310, 300, 23 ); - - // DXUTSETTINGSDLG_MULTISAMPLE_QUALITY - m_Dialog.AddStatic( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL, L"Multisample Quality", 10, 335, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY, 200, 335, 300, 23 ); - - // DXUTSETTINGSDLG_VERTEX_PROCESSING - m_Dialog.AddStatic( DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL, L"Vertex Processing", 10, 360, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING, 200, 360, 300, 23 ); - - // DXUTSETTINGSDLG_PRESENT_INTERVAL - m_Dialog.AddStatic( DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL, L"Vertical Sync", 10, 385, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL, 200, 385, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL, L"Adapter Output", 10, 175, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT, 200, 175, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_RESOLUTION - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL, L"Resolution", 10, 200, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION, 200, 200, 200, 23 ); - m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION )->SetDropHeight( 106 ); - - // DXUTSETTINGSDLG_D3D11_REFRESH_RATE - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL, L"Refresh Rate", 10, 225, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE, 200, 225, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL, L"Back Buffer Format", 10, 260, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT, 200, 260, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL, L"Multisample Count", 10, 285, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT, 200, 285, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL, L"Multisample Quality", 10, 310, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY, 200, 310, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL, L"Vertical Sync", 10, 335, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL, 200, 335, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE - m_Dialog.AddCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE, L"Create Debug Device", 200, 365, 180, 23 ); - - // DXUTSETTINGSDLG_OK, DXUTSETTINGSDLG_CANCEL - m_Dialog.AddButton( DXUTSETTINGSDLG_OK, L"OK", 230, 440, 73, 31 ); - m_Dialog.AddButton( DXUTSETTINGSDLG_CANCEL, L"Cancel", 315, 440, 73, 31, 0, true ); - - // Set up mode change dialog - m_RevertModeDialog.EnableKeyboardInput( true ); - m_RevertModeDialog.EnableNonUserEvents( true ); - m_RevertModeDialog.SetFont( 0, L"Arial", 15, FW_NORMAL ); - m_RevertModeDialog.SetFont( 1, L"Arial", 28, FW_BOLD ); - - pElement = m_RevertModeDialog.GetDefaultElement( DXUT_CONTROL_STATIC, 0 ); - if( pElement ) - { - pElement->dwTextFormat = DT_VCENTER | DT_RIGHT; - - // Title - CDXUTStatic* pStatic = NULL; - m_RevertModeDialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Do you want to keep these display settings?", 10, 5, - 640, 50, false, &pStatic ); - pElement = pStatic->GetElement( 0 ); - pElement->iFont = 1; - pElement->dwTextFormat = DT_TOP | DT_LEFT; - - // Timeout static text control - m_RevertModeDialog.AddStatic( DXUTSETTINGSDLG_STATIC_MODE_CHANGE_TIMEOUT, L"", 10, 90, 640, 30, - false, &pStatic ); - pElement = pStatic->GetElement( 0 ); - pElement->iFont = 0; - pElement->dwTextFormat = DT_TOP | DT_LEFT; - } - - // DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT, DXUTSETTINGSDLG_MODE_CHANGE_REVERT - m_RevertModeDialog.AddButton( DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT, L"Yes", 230, 50, 73, 31 ); - m_RevertModeDialog.AddButton( DXUTSETTINGSDLG_MODE_CHANGE_REVERT, L"No", 315, 50, 73, 31, 0, true ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice ) -{ - if( pd3dDevice == NULL ) - return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", E_INVALIDARG ); - - // Create the fonts/textures - m_Dialog.SetCallback( StaticOnEvent, ( void* )this ); - m_RevertModeDialog.SetCallback( StaticOnEvent, ( void* )this ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Changes the UI defaults to the current device settings -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::Refresh() -{ - HRESULT hr = S_OK; - - g_DeviceSettings = DXUTGetDeviceSettings(); - - CDXUTComboBox* pAPIComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_API_VERSION ); - pAPIComboBox->RemoveAllItems(); - if( DXUTDoesAppSupportD3D9() ) - { - // Ensure that at least one adapter got enumerated. - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - if( pD3DEnum->GetAdapterInfoList()->GetSize() > 0 ) - AddAPIVersion( DXUT_D3D9_DEVICE ); - } - if( DXUTDoesAppSupportD3D11() && DXUTIsD3D11Available() ) - { - // Ensure that at least one adapter got enumerated. - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - if( pD3DEnum->GetAdapterInfoList()->GetSize() > 0 ) - AddAPIVersion( DXUT_D3D11_DEVICE ); - } - - // If no API has been added, something has gone wrong. Exit the dialog. - if( pAPIComboBox->GetNumItems() == 0 ) - { - SetActive( false ); - return S_OK; - } - - pAPIComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.ver ) ); - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - // Show all D3D9-specific controls and hide controls for all other D3D versions. - ShowControlSet( DXUT_D3D9_DEVICE ); - - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - - // Fill the UI with the current settings - AddDeviceType( g_DeviceSettings.d3d9.DeviceType ); - SetWindowed( FALSE != g_DeviceSettings.d3d9.pp.Windowed ); - SetDeviceClip( 0 != ( g_DeviceSettings.d3d9.pp.Flags & D3DPRESENTFLAG_DEVICECLIP ) ); - AddAdapterFormat( g_DeviceSettings.d3d9.AdapterFormat ); - AddResolution( g_DeviceSettings.d3d9.pp.BackBufferWidth, g_DeviceSettings.d3d9.pp.BackBufferHeight ); - AddRefreshRate( g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz ); - AddBackBufferFormat( g_DeviceSettings.d3d9.pp.BackBufferFormat ); - AddDepthStencilBufferFormat( g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat ); - AddMultisampleType( g_DeviceSettings.d3d9.pp.MultiSampleType ); - AddMultisampleQuality( g_DeviceSettings.d3d9.pp.MultiSampleQuality ); - - if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_PUREDEVICE ) - AddVertexProcessingType( D3DCREATE_PUREDEVICE ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING ) - AddVertexProcessingType( D3DCREATE_HARDWARE_VERTEXPROCESSING ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING ) - AddVertexProcessingType( D3DCREATE_SOFTWARE_VERTEXPROCESSING ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING ) - AddVertexProcessingType( D3DCREATE_MIXED_VERTEXPROCESSING ); - - CD3D9EnumDeviceSettingsCombo* pBestDeviceSettingsCombo = pD3DEnum->GetDeviceSettingsCombo( - g_DeviceSettings.d3d9.AdapterOrdinal, g_DeviceSettings.d3d9.DeviceType, - g_DeviceSettings.d3d9.AdapterFormat, g_DeviceSettings.d3d9.pp.BackBufferFormat, - ( g_DeviceSettings.d3d9.pp.Windowed != 0 ) ); - if( NULL == pBestDeviceSettingsCombo ) - return DXUT_ERR_MSGBOX( L"GetDeviceSettingsCombo", E_INVALIDARG ); - - // Get the adapters list from CD3D9Enumeration object - CGrowableArray * pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - if( pAdapterInfoList->GetSize() == 0 ) - return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", DXUTERR_NOCOMPATIBLEDEVICES ); - - CDXUTComboBox* pAdapterCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterCombo->RemoveAllItems(); - - // Add adapters - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); iAdapter++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.AdapterOrdinal ) ); - - hr = OnAPIVersionChanged( true ); - if( FAILED( hr ) ) - return hr; - - //m_Dialog.Refresh(); - CDXUTDialog::SetRefreshTime( ( float )DXUTGetTime() ); - break; - } - case DXUT_D3D11_DEVICE: - { - // Show all D3D11-specific controls and hide controls for all other D3D versions. - ShowControlSet( DXUT_D3D11_DEVICE ); - - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - - // Fill the UI with the current settings - AddD3D11DeviceType( g_DeviceSettings.d3d11.DriverType ); - SetWindowed( FALSE != g_DeviceSettings.d3d11.sd.Windowed ); - CD3D11EnumOutputInfo* pOutputInfo = GetCurrentD3D11OutputInfo(); - AddD3D11AdapterOutput( pOutputInfo->Desc.DeviceName, g_DeviceSettings.d3d11.Output ); - - - - AddD3D11Resolution( g_DeviceSettings.d3d11.sd.BufferDesc.Width, - g_DeviceSettings.d3d11.sd.BufferDesc.Height ); - AddD3D11RefreshRate( g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate ); - AddD3D11BackBufferFormat( g_DeviceSettings.d3d11.sd.BufferDesc.Format ); - AddD3D11MultisampleCount( g_DeviceSettings.d3d11.sd.SampleDesc.Count ); - AddD3D11MultisampleQuality( g_DeviceSettings.d3d11.sd.SampleDesc.Quality ); - - CD3D11EnumDeviceSettingsCombo* pBestDeviceSettingsCombo = pD3DEnum->GetDeviceSettingsCombo( - g_DeviceSettings.d3d11.AdapterOrdinal, g_DeviceSettings.d3d11.DriverType, - g_DeviceSettings.d3d11.Output, g_DeviceSettings.d3d11.sd.BufferDesc.Format, - ( g_DeviceSettings.d3d11.sd.Windowed != 0 ) ); - - if( NULL == pBestDeviceSettingsCombo ) - return DXUT_ERR_MSGBOX( L"GetDeviceSettingsCombo", E_INVALIDARG ); - - CDXUTComboBox *pFeatureLevelBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL ); - pFeatureLevelBox->RemoveAllItems(); - for (int fli = 0; fli < TOTAL_FEATURE_LEVLES; fli++) { - if (m_Levels[fli] >= g_DeviceSettings.MinimumFeatureLevel - && m_Levels[fli] <=pBestDeviceSettingsCombo->pDeviceInfo->MaxLevel) { - AddD3D11FeatureLevel( m_Levels[fli] ); - } - } - pFeatureLevelBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.DeviceFeatureLevel ) ); - - - // Get the adapters list from CD3D11Enumeration object - CGrowableArray * pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - if( pAdapterInfoList->GetSize() == 0 ) - return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", DXUTERR_NOCOMPATIBLEDEVICES ); - - CDXUTComboBox* pAdapterCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterCombo->RemoveAllItems(); - - // Add adapters - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); iAdapter++ ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.AdapterOrdinal ) ); - - hr = OnAPIVersionChanged( true ); - if( FAILED( hr ) ) - return hr; - - //m_Dialog.Refresh(); - CDXUTDialog::SetRefreshTime( ( float )DXUTGetTime() ); - break; - } - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnD3D9ResetDevice() -{ - const D3DSURFACE_DESC* pDesc = DXUTGetD3D9BackBufferSurfaceDesc(); - m_Dialog.SetLocation( 0, 0 ); - m_Dialog.SetSize( pDesc->Width, pDesc->Height ); - m_Dialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 10, 73, 179 ) ); - - m_RevertModeDialog.SetLocation( 0, 0 ); - m_RevertModeDialog.SetSize( pDesc->Width, pDesc->Height ); - m_RevertModeDialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 10, 73, 179 ) ); - - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - pd3dDevice->BeginStateBlock(); - pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID ); - pd3dDevice->EndStateBlock( &m_pStateBlock ); - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::SetSelectedD3D11RefreshRate( DXGI_RATIONAL RefreshRate ) -{ - CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - - for( UINT i = 0; i < pRefreshRateComboBox->GetNumItems(); ++i ) - { - DXGI_RATIONAL* pRate = ( DXGI_RATIONAL* )pRefreshRateComboBox->GetItemData( i ); - - if( pRate && pRate->Numerator == RefreshRate.Numerator && pRate->Denominator == RefreshRate.Denominator ) - { - pRefreshRateComboBox->SetSelectedByIndex( i ); - return; - } - } -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnRender( float fElapsedTime ) -{ - if( DXUTGetD3D11Device() ) - OnRender11( fElapsedTime ); - else - OnRender9( fElapsedTime ); -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnRender9( float fElapsedTime ) -{ - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - - // Clear the render target and the zbuffer - pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, 0x00003F3F, 1.0f, 0 ); - - // Render the scene - if( SUCCEEDED( pd3dDevice->BeginScene() ) ) - { - m_pStateBlock->Capture(); - pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID ); - m_pActiveDialog->OnRender( fElapsedTime ); - m_pStateBlock->Apply(); - pd3dDevice->EndScene(); - } -} - - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnRender11( float fElapsedTime ) -{ - // Render the scene - m_pActiveDialog->OnRender( fElapsedTime ); -} - - -//-------------------------------------------------------------------------------------- -LRESULT CD3DSettingsDlg::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - m_pActiveDialog->MsgProc( hWnd, uMsg, wParam, lParam ); - if( uMsg == WM_KEYDOWN && wParam == VK_F2 ) - SetActive( false ); - return 0; -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnD3D9LostDevice() -{ - SAFE_RELEASE( m_pStateBlock ); -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnD3D9DestroyDevice() -{ -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnD3D11CreateDevice( ID3D11Device* pd3dDevice ) -{ - //HRESULT hr; - - if( pd3dDevice == NULL ) - return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", E_INVALIDARG ); - - // Create the fonts/textures - m_Dialog.SetCallback( StaticOnEvent, ( void* )this ); - m_RevertModeDialog.SetCallback( StaticOnEvent, ( void* )this ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice, - const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc ) -{ - m_Dialog.SetLocation( 0, 0 ); - m_Dialog.SetSize( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height ); - m_Dialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 10, 73, 179 ) ); - - m_RevertModeDialog.SetLocation( 0, 0 ); - m_RevertModeDialog.SetSize( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height ); - m_RevertModeDialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 10, 73, 179 ) ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnD3D11DestroyDevice() -{ - - -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::ShowControlSet( DXUTDeviceVersion ver ) -{ - switch( ver ) - { - case DXUT_D3D9_DEVICE: - - m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEVICECLIP )->SetVisible( true ); - - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE )->SetVisible( false ); - - break; - - case DXUT_D3D11_DEVICE: - m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEVICECLIP )->SetVisible( false ); - - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE )->SetVisible( true ); - break; - } -} - - -//-------------------------------------------------------------------------------------- -void WINAPI CD3DSettingsDlg::StaticOnEvent( UINT nEvent, int nControlID, - CDXUTControl* pControl, void* pUserData ) -{ - CD3DSettingsDlg* pD3DSettings = ( CD3DSettingsDlg* )pUserData; - if( pD3DSettings ) - pD3DSettings->OnEvent( nEvent, nControlID, pControl ); -} - -//-------------------------------------------------------------------------------------- -// Name: CD3DSettingsDlg::StaticOnModeChangeTimer() -// Desc: Timer callback registered by a call to DXUTSetTimer. It is called each second -// until mode change timeout limit. -//-------------------------------------------------------------------------------------- -void WINAPI CD3DSettingsDlg::StaticOnModeChangeTimer( UINT nIDEvent, void* pUserContext ) -{ - CD3DSettingsDlg* pD3DSettings = ( CD3DSettingsDlg* )pUserContext; - assert( pD3DSettings ); - assert( pD3DSettings->m_pActiveDialog == &pD3DSettings->m_RevertModeDialog ); - assert( pD3DSettings->m_nIDEvent == nIDEvent ); - - if( 0 == --pD3DSettings->m_nRevertModeTimeout ) - { - CDXUTControl* pControl = pD3DSettings->m_RevertModeDialog.GetControl( DXUTSETTINGSDLG_MODE_CHANGE_REVERT ); - assert( pControl ); - pD3DSettings->m_RevertModeDialog.SendEvent( EVENT_BUTTON_CLICKED, false, pControl ); - } - pD3DSettings->UpdateModeChangeTimeoutText( pD3DSettings->m_nRevertModeTimeout ); -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnEvent( UINT nEvent, int nControlID, - CDXUTControl* pControl ) -{ - switch( nControlID ) - { - case DXUTSETTINGSDLG_ADAPTER: - OnAdapterChanged(); break; - case DXUTSETTINGSDLG_DEVICE_TYPE: - OnDeviceTypeChanged(); break; - case DXUTSETTINGSDLG_WINDOWED: - OnWindowedFullScreenChanged(); break; - case DXUTSETTINGSDLG_FULLSCREEN: - OnWindowedFullScreenChanged(); break; - case DXUTSETTINGSDLG_ADAPTER_FORMAT: - OnAdapterFormatChanged(); break; - case DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL: - { - if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE ) - { - OnAdapterFormatChanged(); - } - else - { - OnBackBufferFormatChanged(); - } - break; - } - case DXUTSETTINGSDLG_D3D11_RESOLUTION: - OnD3D11ResolutionChanged(); break; - case DXUTSETTINGSDLG_RESOLUTION: - OnResolutionChanged(); break; - case DXUTSETTINGSDLG_REFRESH_RATE: - OnRefreshRateChanged(); break; - case DXUTSETTINGSDLG_BACK_BUFFER_FORMAT: - OnBackBufferFormatChanged(); break; - case DXUTSETTINGSDLG_DEPTH_STENCIL: - OnDepthStencilBufferFormatChanged(); break; - case DXUTSETTINGSDLG_MULTISAMPLE_TYPE: - OnMultisampleTypeChanged(); break; - case DXUTSETTINGSDLG_MULTISAMPLE_QUALITY: - OnMultisampleQualityChanged(); break; - case DXUTSETTINGSDLG_VERTEX_PROCESSING: - OnVertexProcessingChanged(); break; - case DXUTSETTINGSDLG_PRESENT_INTERVAL: - OnPresentIntervalChanged(); break; - case DXUTSETTINGSDLG_DEVICECLIP: - OnDeviceClipChanged(); break; - case DXUTSETTINGSDLG_API_VERSION: - OnAPIVersionChanged(); break; - case DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL: - OnFeatureLevelChanged(); break; - case DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT: - OnAdapterOutputChanged(); break; - case DXUTSETTINGSDLG_D3D11_REFRESH_RATE: - OnRefreshRateChanged(); break; - case DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT: - OnBackBufferFormatChanged(); break; - case DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT: - OnMultisampleTypeChanged(); break; - case DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY: - OnMultisampleQualityChanged(); break; - case DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL: - OnPresentIntervalChanged(); break; - case DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE: - OnDebugDeviceChanged(); break; - - case DXUTSETTINGSDLG_OK: - { - bool bFullScreenModeChange = false; - DXUTDeviceSettings currentSettings = DXUTGetDeviceSettings(); - g_DeviceSettings.MinimumFeatureLevel = currentSettings.MinimumFeatureLevel; - if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE ) - { - if( g_DeviceSettings.d3d9.pp.Windowed ) - { - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = 0; - - RECT rcClient; - if( DXUTIsWindowed() ) - GetClientRect( DXUTGetHWND(), &rcClient ); - else - rcClient = DXUTGetWindowClientRectAtModeChange(); - DWORD dwWindowWidth = rcClient.right - rcClient.left; - DWORD dwWindowHeight = rcClient.bottom - rcClient.top; - - g_DeviceSettings.d3d9.pp.BackBufferWidth = dwWindowWidth; - g_DeviceSettings.d3d9.pp.BackBufferHeight = dwWindowHeight; - } - else - { - // Check for fullscreen mode change - bFullScreenModeChange = g_DeviceSettings.d3d9.pp.BackBufferWidth != - currentSettings.d3d9.pp.BackBufferWidth || - g_DeviceSettings.d3d9.pp.BackBufferHeight != currentSettings.d3d9.pp.BackBufferHeight || - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz != - currentSettings.d3d9.pp.FullScreen_RefreshRateInHz; - } - - if( g_DeviceSettings.d3d9.pp.MultiSampleType != D3DMULTISAMPLE_NONE ) - { - g_DeviceSettings.d3d9.pp.Flags &= ~D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; - } - } - else // D3D11 - { - if( g_DeviceSettings.d3d11.sd.Windowed ) - { - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator = - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator = 0; - - RECT rcClient; - if( DXUTIsWindowed() ) - GetClientRect( DXUTGetHWND(), &rcClient ); - else - rcClient = DXUTGetWindowClientRectAtModeChange(); - DWORD dwWindowWidth = rcClient.right - rcClient.left; - DWORD dwWindowHeight = rcClient.bottom - rcClient.top; - - g_DeviceSettings.d3d11.sd.BufferDesc.Width = dwWindowWidth; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = dwWindowHeight; - } - else - { - // Check for fullscreen mode change - bFullScreenModeChange = g_DeviceSettings.d3d11.sd.BufferDesc.Width != - currentSettings.d3d11.sd.BufferDesc.Width || - g_DeviceSettings.d3d11.sd.BufferDesc.Height != currentSettings.d3d11.sd.BufferDesc.Height || - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator != - currentSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator || - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator != - currentSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator; - } - } - - if( bFullScreenModeChange ) - { - // set appropriate global device settings to that of the current device - // settings. These will get set to the user-defined settings once the - // user accepts the mode change - DXUTDeviceSettings tSettings = g_DeviceSettings; - if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE ) - { - g_DeviceSettings.d3d9.pp.BackBufferWidth = - currentSettings.d3d9.pp.BackBufferWidth; - g_DeviceSettings.d3d9.pp.BackBufferHeight = - currentSettings.d3d9.pp.BackBufferHeight; - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = - currentSettings.d3d9.pp.FullScreen_RefreshRateInHz; - g_DeviceSettings.d3d9.pp.Windowed = - currentSettings.d3d9.pp.Windowed; - } - else - { - - g_DeviceSettings.d3d11.sd.BufferDesc.Width = - currentSettings.d3d11.sd.BufferDesc.Width; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = - currentSettings.d3d11.sd.BufferDesc.Height; - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator = - currentSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator; - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator = - currentSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator; - g_DeviceSettings.d3d11.sd.Windowed = currentSettings.d3d11.sd.Windowed; - - } - - // apply the user-defined settings - DXUTCreateDeviceFromSettings( &tSettings ); - // create the mode change timeout dialog - m_pActiveDialog = &m_RevertModeDialog; - m_nRevertModeTimeout = 15; - UpdateModeChangeTimeoutText( m_nRevertModeTimeout ); - // activate a timer for 1-second updates - DXUTSetTimer( StaticOnModeChangeTimer, 1.0f, &m_nIDEvent, ( void* )this ); - } - else - { - DXUTCreateDeviceFromSettings( &g_DeviceSettings ); - SetActive( false ); - } - break; - } - - case DXUTSETTINGSDLG_CANCEL: - { - SetActive( false ); - break; - } - - case DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT: - { - DXUTKillTimer( m_nIDEvent ); - g_DeviceSettings = DXUTGetDeviceSettings(); - m_pActiveDialog = &m_Dialog; - SetActive( false ); - break; - } - - case DXUTSETTINGSDLG_MODE_CHANGE_REVERT: - { - DXUTKillTimer( m_nIDEvent ); - m_pActiveDialog = &m_Dialog; - m_nIDEvent = 0; - m_nRevertModeTimeout = 0; - DXUTCreateDeviceFromSettings( &g_DeviceSettings ); - Refresh(); - break; - } - } -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::SetDeviceSettingsFromUI() -{ - CDXUTComboBox* pComboBox; - CDXUTRadioButton* pRadioButton; - - // DXUTSETTINGSDLG_DEVICE_TYPE - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - g_DeviceSettings.d3d9.DeviceType = ( D3DDEVTYPE )PtrToUlong( pComboBox->GetSelectedData() ); - - // DXUTSETTINGSDLG_WINDOWED - pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED ); - g_DeviceSettings.d3d9.pp.Windowed = pRadioButton->GetChecked(); - - // DXUTSETTINGSDLG_ADAPTER_FORMAT - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); - g_DeviceSettings.d3d9.AdapterFormat = ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); - - if( g_DeviceSettings.d3d9.pp.Windowed ) - { - g_DeviceSettings.d3d9.pp.BackBufferFormat = D3DFMT_UNKNOWN; - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = 0; - } - else - { - // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); - g_DeviceSettings.d3d9.pp.BackBufferFormat = ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); - - // DXUTSETTINGSDLG_RESOLUTION - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() ); - g_DeviceSettings.d3d9.pp.BackBufferWidth = HIWORD( dwResolution ); - g_DeviceSettings.d3d9.pp.BackBufferHeight = LOWORD( dwResolution ); - - // DXUTSETTINGSDLG_REFRESH_RATE - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = PtrToUlong( pComboBox->GetSelectedData() ); - } - - // DXUTSETTINGSDLG_DEPTH_STENCIL - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); - g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat = ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -CD3D9EnumAdapterInfo* CD3DSettingsDlg::GetCurrentAdapterInfo() -{ - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - return pD3DEnum->GetAdapterInfo( g_DeviceSettings.d3d9.AdapterOrdinal ); -} - - -//------------------------------------------------------------------------------------- -CD3D9EnumDeviceInfo* CD3DSettingsDlg::GetCurrentDeviceInfo() -{ - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - return pD3DEnum->GetDeviceInfo( g_DeviceSettings.d3d9.AdapterOrdinal, - g_DeviceSettings.d3d9.DeviceType ); -} - -//------------------------------------------------------------------------------------- -CD3D11EnumAdapterInfo* CD3DSettingsDlg::GetCurrentD3D11AdapterInfo() -{ - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - return pD3DEnum->GetAdapterInfo( g_DeviceSettings.d3d11.AdapterOrdinal ); -} - - -//------------------------------------------------------------------------------------- -CD3D11EnumDeviceInfo* CD3DSettingsDlg::GetCurrentD3D11DeviceInfo() -{ - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - return pD3DEnum->GetDeviceInfo( g_DeviceSettings.d3d11.AdapterOrdinal, - g_DeviceSettings.d3d11.DriverType ); -} - - -//------------------------------------------------------------------------------------- -CD3D11EnumOutputInfo* CD3DSettingsDlg::GetCurrentD3D11OutputInfo() -{ - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - return pD3DEnum->GetOutputInfo( g_DeviceSettings.d3d11.AdapterOrdinal, - g_DeviceSettings.d3d11.Output ); -} - - -//------------------------------------------------------------------------------------- -CD3D9EnumDeviceSettingsCombo* CD3DSettingsDlg::GetCurrentDeviceSettingsCombo() -{ - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - return pD3DEnum->GetDeviceSettingsCombo( g_DeviceSettings.d3d9.AdapterOrdinal, - g_DeviceSettings.d3d9.DeviceType, - g_DeviceSettings.d3d9.AdapterFormat, - g_DeviceSettings.d3d9.pp.BackBufferFormat, - ( g_DeviceSettings.d3d9.pp.Windowed == TRUE ) ); -} - -//------------------------------------------------------------------------------------- -CD3D11EnumDeviceSettingsCombo* CD3DSettingsDlg::GetCurrentD3D11DeviceSettingsCombo() -{ - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - return pD3DEnum->GetDeviceSettingsCombo( g_DeviceSettings.d3d11.AdapterOrdinal, - g_DeviceSettings.d3d11.DriverType, - g_DeviceSettings.d3d11.Output, - g_DeviceSettings.d3d11.sd.BufferDesc.Format, - ( g_DeviceSettings.d3d11.sd.Windowed == TRUE ) ); -} - -HRESULT CD3DSettingsDlg::OnD3D11ResolutionChanged () { - DWORD dwWidth, dwHeight; - GetSelectedD3D11Resolution( &dwWidth, &dwHeight ); - g_DeviceSettings.d3d11.sd.BufferDesc.Width= dwWidth; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = dwHeight; - - return S_OK; -} - -HRESULT CD3DSettingsDlg::OnFeatureLevelChanged () { - HRESULT hr = E_FAIL; - if (g_DeviceSettings.ver == DXUT_D3D11_DEVICE) { - if (g_DeviceSettings.d3d11.DeviceFeatureLevel == GetSelectedFeatureLevel()) return S_OK; - //if( !bRefresh ) - //{ - // Obtain a set of valid D3D10 device settings. - UINT CreateFlags = g_DeviceSettings.d3d11.CreateFlags; - ZeroMemory( &g_DeviceSettings, sizeof( g_DeviceSettings ) ); - - DXUTApplyDefaultDeviceSettings(&g_DeviceSettings); - g_DeviceSettings.d3d11.CreateFlags = CreateFlags; - g_DeviceSettings.ver = DXUT_D3D11_DEVICE; - //g_DeviceSettings.d3d11.fl = GetSelectedFeatureLevel(); - hr = DXUTSnapDeviceSettingsToEnumDevice(&g_DeviceSettings, true, GetSelectedFeatureLevel()); - - //} - - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - CGrowableArray * pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - CDXUTComboBox* pAdapterComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterComboBox->RemoveAllItems(); - - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); ++iAdapter ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.AdapterOrdinal ) ); - - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE ); - pCheckBox->SetChecked( 0 != ( g_DeviceSettings.d3d11.CreateFlags & D3D11_CREATE_DEVICE_DEBUG ) ); - - hr = OnAdapterChanged(); - if( FAILED( hr ) ) - return hr; - } - - return hr; -} - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnAPIVersionChanged( bool bRefresh ) -{ - HRESULT hr; - - // Store the API version - g_DeviceSettings.ver = GetSelectedAPIVersion(); - - // Show/hide appropriate dialog controls based on version. - ShowControlSet( g_DeviceSettings.ver ); - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - if( !bRefresh ) - { - // Obtain a set of valid D3D9 device settings. - UINT CreateFlags = g_DeviceSettings.d3d11.CreateFlags; - ZeroMemory( &g_DeviceSettings, sizeof( g_DeviceSettings ) ); - // We want a specific API version, so set up match option to preserve it. - DXUTApplyDefaultDeviceSettings(&g_DeviceSettings); - g_DeviceSettings.d3d11.CreateFlags = CreateFlags; - g_DeviceSettings.ver = DXUT_D3D9_DEVICE; - DXUTSnapDeviceSettingsToEnumDevice ( &g_DeviceSettings, true); - } - - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - CGrowableArray * pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - CDXUTComboBox* pAdapterComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterComboBox->RemoveAllItems(); - - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); ++iAdapter ) - { - CD3D9EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.AdapterOrdinal ) ); - - hr = OnAdapterChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - - case DXUT_D3D11_DEVICE: - { - if( !bRefresh ) - { - // Obtain a set of valid D3D10 device settings. - UINT CreateFlags = g_DeviceSettings.d3d11.CreateFlags; - ZeroMemory( &g_DeviceSettings, sizeof( g_DeviceSettings ) ); - // We want a specific API version, so set up match option to preserve it. - DXUTApplyDefaultDeviceSettings(&g_DeviceSettings); - g_DeviceSettings.d3d11.CreateFlags = CreateFlags; - g_DeviceSettings.ver = DXUT_D3D11_DEVICE; - DXUTSnapDeviceSettingsToEnumDevice(&g_DeviceSettings, true); - - } - - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - CGrowableArray * pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - CDXUTComboBox* pAdapterComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterComboBox->RemoveAllItems(); - - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); ++iAdapter ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.AdapterOrdinal ) ); - - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE ); - pCheckBox->SetChecked( 0 != ( g_DeviceSettings.d3d11.CreateFlags & D3D11_CREATE_DEVICE_DEBUG ) ); - - hr = OnAdapterChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnAdapterChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - // Store the adapter index - g_DeviceSettings.d3d9.AdapterOrdinal = GetSelectedAdapter(); - - // DXUTSETTINGSDLG_DEVICE_TYPE - CDXUTComboBox* pDeviceTypeComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - pDeviceTypeComboBox->RemoveAllItems(); - - CD3D9EnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - for( int iDeviceInfo = 0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ ) - { - CD3D9EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( iDeviceInfo ); - AddDeviceType( pDeviceInfo->DeviceType ); - } - - pDeviceTypeComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.DeviceType ) ); - - hr = OnDeviceTypeChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - - case DXUT_D3D11_DEVICE: - { - // Store the adapter index - g_DeviceSettings.d3d11.AdapterOrdinal = GetSelectedAdapter(); - - // DXUTSETTINGSDLG_DEVICE_TYPE - CDXUTComboBox* pDeviceTypeComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - pDeviceTypeComboBox->RemoveAllItems(); - - CD3D11EnumAdapterInfo* pAdapterInfo = GetCurrentD3D11AdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - for( int iDeviceInfo = 0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ ) - { - CD3D11EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( iDeviceInfo ); - AddD3D11DeviceType( pDeviceInfo->DeviceType ); - } - - pDeviceTypeComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.DriverType ) ); - - hr = OnDeviceTypeChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnDeviceTypeChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - g_DeviceSettings.d3d9.DeviceType = GetSelectedDeviceType(); - - // Update windowed/full screen radio buttons - bool bHasWindowedDeviceCombo = false; - bool bHasFullScreenDeviceCombo = false; - - CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); - if( pDeviceInfo == NULL ) - return E_FAIL; - - for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc ); - - if( pDeviceSettingsCombo->Windowed ) - bHasWindowedDeviceCombo = true; - else - bHasFullScreenDeviceCombo = true; - } - - // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, bHasWindowedDeviceCombo ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_FULLSCREEN, bHasFullScreenDeviceCombo ); - - SetWindowed( g_DeviceSettings.d3d9.pp.Windowed && bHasWindowedDeviceCombo ); - - hr = OnWindowedFullScreenChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - case DXUT_D3D11_DEVICE: - { - g_DeviceSettings.d3d11.DriverType = GetSelectedD3D11DeviceType(); - - // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, true ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_FULLSCREEN, true ); - - SetWindowed( g_DeviceSettings.d3d11.sd.Windowed != 0 ); - - hr = OnWindowedFullScreenChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnWindowedFullScreenChanged() -{ - HRESULT hr = S_OK; - bool bWindowed = IsWindowed(); - - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_REFRESH_RATE_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL, !bWindowed ); - - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_ADAPTER_FORMAT, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_REFRESH_RATE, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_DEVICECLIP, bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_RESOLUTION, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_REFRESH_RATE, !bWindowed ); - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - g_DeviceSettings.d3d9.pp.Windowed = bWindowed; - bool bDeviceClip = ( 0x0 != ( g_DeviceSettings.d3d9.pp.Flags & D3DPRESENTFLAG_DEVICECLIP ) ); - - // If windowed, get the appropriate adapter format from Direct3D - if( g_DeviceSettings.d3d9.pp.Windowed ) - { - IDirect3D9* pD3D = DXUTGetD3D9Object(); - if( pD3D == NULL ) - return DXTRACE_ERR( L"DXUTGetD3DObject", E_FAIL ); - - D3DDISPLAYMODE mode; - hr = pD3D->GetAdapterDisplayMode( g_DeviceSettings.d3d9.AdapterOrdinal, &mode ); - if( FAILED( hr ) ) - return DXTRACE_ERR( L"GetAdapterDisplayMode", hr ); - - // Default resolution to the fullscreen res that was last used - RECT rc = DXUTGetFullsceenClientRectAtModeChange(); - if( rc.right == 0 || rc.bottom == 0 ) - { - // If nothing last used, then default to the adapter desktop res - g_DeviceSettings.d3d9.pp.BackBufferWidth = mode.Width; - g_DeviceSettings.d3d9.pp.BackBufferHeight = mode.Height; - } - else - { - g_DeviceSettings.d3d9.pp.BackBufferWidth = rc.right; - g_DeviceSettings.d3d9.pp.BackBufferHeight = rc.bottom; - } - - g_DeviceSettings.d3d9.AdapterFormat = mode.Format; - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = mode.RefreshRate; - } - - const D3DFORMAT adapterFormat = g_DeviceSettings.d3d9.AdapterFormat; - const DWORD dwWidth = g_DeviceSettings.d3d9.pp.BackBufferWidth; - const DWORD dwHeight = g_DeviceSettings.d3d9.pp.BackBufferHeight; - const DWORD dwRefreshRate = g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz; - - // DXUTSETTINGSDLG_DEVICECLIP - SetDeviceClip( bDeviceClip ); - - // DXUTSETTINGSDLG_ADAPTER_FORMAT - CDXUTComboBox* pAdapterFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); - if( pAdapterFormatComboBox == NULL ) - return E_FAIL; - pAdapterFormatComboBox->RemoveAllItems(); - - CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); - if( pDeviceInfo == NULL ) - return E_FAIL; - - if( bWindowed ) - { - AddAdapterFormat( adapterFormat ); - } - else - { - for( int iSettingsCombo = 0; iSettingsCombo < pDeviceInfo->deviceSettingsComboList.GetSize(); - iSettingsCombo++ ) - { - CD3D9EnumDeviceSettingsCombo* pSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( - iSettingsCombo ); - AddAdapterFormat( pSettingsCombo->AdapterFormat ); - } - } - - pAdapterFormatComboBox->SetSelectedByData( ULongToPtr( adapterFormat ) ); - - hr = OnAdapterFormatChanged(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_RESOLUTION - CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - - if( bWindowed ) - { - pResolutionComboBox->RemoveAllItems(); - AddResolution( dwWidth, dwHeight ); - } - - pResolutionComboBox->SetSelectedByData( ULongToPtr( MAKELONG( dwWidth, dwHeight ) ) ); - - hr = OnResolutionChanged(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_REFRESH_RATE - CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - - if( bWindowed ) - { - pRefreshRateComboBox->RemoveAllItems(); - AddRefreshRate( dwRefreshRate ); - } - - pRefreshRateComboBox->SetSelectedByData( ULongToPtr( dwRefreshRate ) ); - - hr = OnRefreshRateChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - - case DXUT_D3D11_DEVICE: - { - g_DeviceSettings.d3d11.sd.Windowed = bWindowed; - - // Get available adapter output - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - - CDXUTComboBox* pOutputComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT ); - pOutputComboBox->RemoveAllItems(); - - CD3D11EnumAdapterInfo* pAdapterInfo = pD3DEnum->GetAdapterInfo( g_DeviceSettings.d3d11.AdapterOrdinal ); - for( int ioutput = 0; ioutput < pAdapterInfo->outputInfoList.GetSize(); ++ioutput ) - { - CD3D11EnumOutputInfo* pOutputInfo = pAdapterInfo->outputInfoList.GetAt( ioutput ); - AddD3D11AdapterOutput( pOutputInfo->Desc.DeviceName, pOutputInfo->Output ); - } - - pOutputComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.Output ) ); - - hr = OnAdapterOutputChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnAdapterOutputChanged() -{ - HRESULT hr; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D11_DEVICE: - { - bool bWindowed = IsWindowed(); - g_DeviceSettings.d3d11.sd.Windowed = bWindowed; - - // If windowed, get the appropriate adapter format from Direct3D - if( g_DeviceSettings.d3d11.sd.Windowed ) - { - DXGI_MODE_DESC mode; - hr = DXUTGetD3D11AdapterDisplayMode( g_DeviceSettings.d3d11.AdapterOrdinal, - g_DeviceSettings.d3d11.Output, &mode ); - if( FAILED( hr ) ) - return DXTRACE_ERR( L"GetD3D11AdapterDisplayMode", hr ); - - // Default resolution to the fullscreen res that was last used - RECT rc = DXUTGetFullsceenClientRectAtModeChange(); - if( rc.right == 0 || rc.bottom == 0 ) - { - // If nothing last used, then default to the adapter desktop res - g_DeviceSettings.d3d11.sd.BufferDesc.Width = mode.Width; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = mode.Height; - } - else - { - g_DeviceSettings.d3d11.sd.BufferDesc.Width = rc.right; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = rc.bottom; - } - - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate = mode.RefreshRate; - } - - const DXGI_RATIONAL RefreshRate = g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate; - - CD3D11EnumAdapterInfo* pAdapterInfo = GetCurrentD3D11AdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - // DXUTSETTINGSDLG_D3D11_RESOLUTION - hr = UpdateD3D11Resolutions(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT - CDXUTComboBox* pBackBufferFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT - ); - pBackBufferFormatComboBox->RemoveAllItems(); - - for( int idc = 0; idc < pAdapterInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D11EnumDeviceSettingsCombo* pDeviceCombo = pAdapterInfo->deviceSettingsComboList.GetAt( idc ); - if( ( pDeviceCombo->Windowed == TRUE ) == bWindowed ) - { - AddD3D11BackBufferFormat( pDeviceCombo->BackBufferFormat ); - } - } - - pBackBufferFormatComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.sd.BufferDesc.Format ) ); - - hr = OnBackBufferFormatChanged(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_D3D11_REFRESH_RATE - if( bWindowed ) - { - CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - for( UINT i = 0; i < pRefreshRateComboBox->GetNumItems(); ++i ) - { - DXGI_RATIONAL* pRefreshRate = reinterpret_cast( - pRefreshRateComboBox->GetItemData( i ) ); - delete pRefreshRate; - } - pRefreshRateComboBox->RemoveAllItems(); - AddD3D11RefreshRate( RefreshRate ); - } - - SetSelectedD3D11RefreshRate( RefreshRate ); - break; - } - }; - - hr = OnRefreshRateChanged(); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnAdapterFormatChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - // DXUTSETTINGSDLG_ADAPTER_FORMAT - D3DFORMAT adapterFormat = GetSelectedAdapterFormat(); - g_DeviceSettings.d3d9.AdapterFormat = adapterFormat; - - // DXUTSETTINGSDLG_RESOLUTION - CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - pResolutionComboBox->RemoveAllItems(); - - CD3D9EnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - bool bShowAll = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL )->GetChecked(); - - // Get the desktop aspect ratio - D3DDISPLAYMODE dmDesktop; - DXUTGetDesktopResolution( g_DeviceSettings.d3d9.AdapterOrdinal, &dmDesktop.Width, &dmDesktop.Height ); - float fDesktopAspectRatio = dmDesktop.Width / ( float )dmDesktop.Height; - - for( int idm = 0; idm < pAdapterInfo->displayModeList.GetSize(); idm++ ) - { - D3DDISPLAYMODE DisplayMode = pAdapterInfo->displayModeList.GetAt( idm ); - float fAspect = ( float )DisplayMode.Width / ( float )DisplayMode.Height; - - if( DisplayMode.Format == g_DeviceSettings.d3d9.AdapterFormat ) - { - // If "Show All" is not checked, then hide all resolutions - // that don't match the aspect ratio of the desktop resolution - if( bShowAll || ( !bShowAll && fabsf( fDesktopAspectRatio - fAspect ) < 0.05f ) ) - { - AddResolution( DisplayMode.Width, DisplayMode.Height ); - } - } - } - - const DWORD dwCurResolution = MAKELONG( g_DeviceSettings.d3d9.pp.BackBufferWidth, - g_DeviceSettings.d3d9.pp.BackBufferHeight ); - - pResolutionComboBox->SetSelectedByData( ULongToPtr( dwCurResolution ) ); - - hr = OnResolutionChanged(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT - CDXUTComboBox* pBackBufferFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); - pBackBufferFormatComboBox->RemoveAllItems(); - - CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); - if( pDeviceInfo == NULL ) - return E_FAIL; - - const BOOL bWindowed = IsWindowed(); - bool bHasWindowedBackBuffer = false; - - for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc ); - if( pDeviceCombo->Windowed == bWindowed && - pDeviceCombo->AdapterFormat == g_DeviceSettings.d3d9.AdapterFormat ) - { - AddBackBufferFormat( pDeviceCombo->BackBufferFormat ); - bHasWindowedBackBuffer = true; - } - } - - pBackBufferFormatComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.pp.BackBufferFormat ) ); - - hr = OnBackBufferFormatChanged(); - if( FAILED( hr ) ) - return hr; - - if( !bHasWindowedBackBuffer ) - { - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, false ); - - if( g_DeviceSettings.d3d9.pp.Windowed ) - { - SetWindowed( false ); - - hr = OnWindowedFullScreenChanged(); - if( FAILED( hr ) ) - return hr; - } - } - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnResolutionChanged() -{ - HRESULT hr = S_OK; - - CD3D9EnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - // Set resolution - DWORD dwWidth, dwHeight; - GetSelectedResolution( &dwWidth, &dwHeight ); - g_DeviceSettings.d3d9.pp.BackBufferWidth = dwWidth; - g_DeviceSettings.d3d9.pp.BackBufferHeight = dwHeight; - - DWORD dwRefreshRate = g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz; - - // Update the refresh rate list - CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - pRefreshRateComboBox->RemoveAllItems(); - - D3DFORMAT adapterFormat = g_DeviceSettings.d3d9.AdapterFormat; - for( int idm = 0; idm < pAdapterInfo->displayModeList.GetSize(); idm++ ) - { - D3DDISPLAYMODE displayMode = pAdapterInfo->displayModeList.GetAt( idm ); - - if( displayMode.Format == adapterFormat && - displayMode.Width == dwWidth && - displayMode.Height == dwHeight ) - { - AddRefreshRate( displayMode.RefreshRate ); - } - } - - pRefreshRateComboBox->SetSelectedByData( ULongToPtr( dwRefreshRate ) ); - - hr = OnRefreshRateChanged(); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnRefreshRateChanged() -{ - // Set refresh rate - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = GetSelectedRefreshRate(); - break; - - case DXUT_D3D11_DEVICE: - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate = GetSelectedD3D11RefreshRate(); - break; - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnBackBufferFormatChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - g_DeviceSettings.d3d9.pp.BackBufferFormat = GetSelectedBackBufferFormat(); - - D3DFORMAT adapterFormat = g_DeviceSettings.d3d9.AdapterFormat; - D3DFORMAT backBufferFormat = g_DeviceSettings.d3d9.pp.BackBufferFormat; - - CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); - if( pDeviceInfo == NULL ) - return E_FAIL; - - bool bAllowSoftwareVP, bAllowHardwareVP, bAllowPureHardwareVP, bAllowMixedVP; - DXUTGetD3D9Enumeration()->GetPossibleVertexProcessingList( &bAllowSoftwareVP, &bAllowHardwareVP, - &bAllowPureHardwareVP, &bAllowMixedVP ); - - for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc ); - - if( pDeviceCombo->Windowed == ( g_DeviceSettings.d3d9.pp.Windowed == TRUE ) && - pDeviceCombo->AdapterFormat == adapterFormat && - pDeviceCombo->BackBufferFormat == backBufferFormat ) - { - CDXUTComboBox* pDepthStencilComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); - pDepthStencilComboBox->RemoveAllItems(); - pDepthStencilComboBox->SetEnabled( ( g_DeviceSettings.d3d9.pp.EnableAutoDepthStencil == TRUE ) ); - - if( g_DeviceSettings.d3d9.pp.EnableAutoDepthStencil ) - { - for( int ifmt = 0; ifmt < pDeviceCombo->depthStencilFormatList.GetSize(); ifmt++ ) - { - D3DFORMAT fmt = pDeviceCombo->depthStencilFormatList.GetAt( ifmt ); - - AddDepthStencilBufferFormat( fmt ); - } - - pDepthStencilComboBox->SetSelectedByData( ULongToPtr( - g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat ) ); - } - else - { - if( !pDepthStencilComboBox->ContainsItem( L"(not used)" ) ) - pDepthStencilComboBox->AddItem( L"(not used)", NULL ); - } - - hr = OnDepthStencilBufferFormatChanged(); - if( FAILED( hr ) ) - return hr; - - CDXUTComboBox* pVertexProcessingComboBox = - m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING ); - pVertexProcessingComboBox->RemoveAllItems(); - - // Add valid vertex processing types - if( bAllowSoftwareVP ) - AddVertexProcessingType( D3DCREATE_SOFTWARE_VERTEXPROCESSING ); - - if( bAllowHardwareVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) - AddVertexProcessingType( D3DCREATE_HARDWARE_VERTEXPROCESSING ); - - if( bAllowPureHardwareVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_PUREDEVICE ) - AddVertexProcessingType( D3DCREATE_PUREDEVICE ); - - if( bAllowMixedVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) - AddVertexProcessingType( D3DCREATE_MIXED_VERTEXPROCESSING ); - - if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_PUREDEVICE ) - pVertexProcessingComboBox->SetSelectedByData( ULongToPtr( D3DCREATE_PUREDEVICE ) ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING ) - pVertexProcessingComboBox->SetSelectedByData( ULongToPtr( - D3DCREATE_SOFTWARE_VERTEXPROCESSING ) ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING ) - pVertexProcessingComboBox->SetSelectedByData( ULongToPtr( - D3DCREATE_HARDWARE_VERTEXPROCESSING ) ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING ) - pVertexProcessingComboBox->SetSelectedByData( ULongToPtr( D3DCREATE_MIXED_VERTEXPROCESSING ) ); - - hr = OnVertexProcessingChanged(); - if( FAILED( hr ) ) - return hr; - - CDXUTComboBox* pPresentIntervalComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL ); - pPresentIntervalComboBox->RemoveAllItems(); - pPresentIntervalComboBox->AddItem( L"On", ULongToPtr( D3DPRESENT_INTERVAL_DEFAULT ) ); - pPresentIntervalComboBox->AddItem( L"Off", ULongToPtr( D3DPRESENT_INTERVAL_IMMEDIATE ) ); - - pPresentIntervalComboBox->SetSelectedByData( ULongToPtr( - g_DeviceSettings.d3d9.pp.PresentationInterval ) ); - - hr = OnPresentIntervalChanged(); - if( FAILED( hr ) ) - return hr; - } - } - - break; - } - - case DXUT_D3D11_DEVICE: - { - g_DeviceSettings.d3d11.sd.BufferDesc.Format = GetSelectedD3D11BackBufferFormat(); - - DXGI_FORMAT backBufferFormat = g_DeviceSettings.d3d11.sd.BufferDesc.Format; - - CD3D11EnumAdapterInfo* pAdapterInfo = GetCurrentD3D11AdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - for( int idc = 0; idc < pAdapterInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D11EnumDeviceSettingsCombo* pDeviceCombo = pAdapterInfo->deviceSettingsComboList.GetAt( idc ); - - if( pDeviceCombo->Windowed == ( g_DeviceSettings.d3d11.sd.Windowed == TRUE ) && - pDeviceCombo->BackBufferFormat == backBufferFormat && - pDeviceCombo->DeviceType == g_DeviceSettings.d3d11.DriverType ) - { - CDXUTComboBox* pMultisampleCountCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT - ); - pMultisampleCountCombo->RemoveAllItems(); - for( int i = 0; i < pDeviceCombo->multiSampleCountList.GetSize(); ++i ) - AddD3D11MultisampleCount( pDeviceCombo->multiSampleCountList.GetAt( i ) ); - pMultisampleCountCombo->SetSelectedByData( ULongToPtr( - g_DeviceSettings.d3d11.sd.SampleDesc.Count ) ); - - hr = OnMultisampleTypeChanged(); - if( FAILED( hr ) ) - return hr; - - CDXUTComboBox* pPresentIntervalComboBox = - m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL ); - pPresentIntervalComboBox->RemoveAllItems(); - pPresentIntervalComboBox->AddItem( L"On", ULongToPtr( 1 ) ); - pPresentIntervalComboBox->AddItem( L"Off", ULongToPtr( 0 ) ); - - pPresentIntervalComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.SyncInterval ) ); - - hr = OnPresentIntervalChanged(); - if( FAILED( hr ) ) - return hr; - - hr = UpdateD3D11Resolutions(); - if( FAILED( hr ) ) - return hr; - } - } - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnDepthStencilBufferFormatChanged() -{ - HRESULT hr = S_OK; - - D3DFORMAT depthStencilBufferFormat = GetSelectedDepthStencilBufferFormat(); - - if( g_DeviceSettings.d3d9.pp.EnableAutoDepthStencil ) - g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat = depthStencilBufferFormat; - - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentDeviceSettingsCombo(); - if( pDeviceSettingsCombo == NULL ) - return E_FAIL; - - CDXUTComboBox* pMultisampleTypeCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); - pMultisampleTypeCombo->RemoveAllItems(); - - for( int ims = 0; ims < pDeviceSettingsCombo->multiSampleTypeList.GetSize(); ims++ ) - { - D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt( ims ); - - bool bConflictFound = false; - for( int iConf = 0; iConf < pDeviceSettingsCombo->DSMSConflictList.GetSize(); iConf++ ) - { - CD3D9EnumDSMSConflict DSMSConf = pDeviceSettingsCombo->DSMSConflictList.GetAt( iConf ); - if( DSMSConf.DSFormat == depthStencilBufferFormat && - DSMSConf.MSType == msType ) - { - bConflictFound = true; - break; - } - } - - if( !bConflictFound ) - AddMultisampleType( msType ); - } - - CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); - pMultisampleQualityCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.pp.MultiSampleType ) ); - - hr = OnMultisampleTypeChanged(); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnMultisampleTypeChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - D3DMULTISAMPLE_TYPE multisampleType = GetSelectedMultisampleType(); - g_DeviceSettings.d3d9.pp.MultiSampleType = multisampleType; - - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentDeviceSettingsCombo(); - if( pDeviceSettingsCombo == NULL ) - return E_FAIL; - - DWORD dwMaxQuality = 0; - for( int iType = 0; iType < pDeviceSettingsCombo->multiSampleTypeList.GetSize(); iType++ ) - { - D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt( iType ); - if( msType == multisampleType ) - { - dwMaxQuality = pDeviceSettingsCombo->multiSampleQualityList.GetAt( iType ); - break; - } - } - - // DXUTSETTINGSDLG_MULTISAMPLE_QUALITY - CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY ); - pMultisampleQualityCombo->RemoveAllItems(); - - for( UINT iQuality = 0; iQuality < dwMaxQuality; iQuality++ ) - { - AddMultisampleQuality( iQuality ); - } - - pMultisampleQualityCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.pp.MultiSampleQuality ) ); - - hr = OnMultisampleQualityChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - case DXUT_D3D11_DEVICE: - { - UINT multisampleCount = GetSelectedD3D11MultisampleCount(); - g_DeviceSettings.d3d11.sd.SampleDesc.Count = multisampleCount; - - CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentD3D11DeviceSettingsCombo(); - if( pDeviceSettingsCombo == NULL ) - return E_FAIL; - - UINT MaxQuality = 0; - for( int iCount = 0; iCount < pDeviceSettingsCombo->multiSampleCountList.GetSize(); iCount++ ) - { - UINT Count = pDeviceSettingsCombo->multiSampleCountList.GetAt( iCount ); - if( Count == multisampleCount ) - { - MaxQuality = pDeviceSettingsCombo->multiSampleQualityList.GetAt( iCount ); - break; - } - } - - // DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY - CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY - ); - pMultisampleQualityCombo->RemoveAllItems(); - - for( UINT iQuality = 0; iQuality < MaxQuality; iQuality++ ) - { - AddD3D11MultisampleQuality( iQuality ); - } - - pMultisampleQualityCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.sd.SampleDesc.Quality ) ); - - hr = OnMultisampleQualityChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnMultisampleQualityChanged() -{ - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - g_DeviceSettings.d3d9.pp.MultiSampleQuality = GetSelectedMultisampleQuality(); - break; - - case DXUT_D3D11_DEVICE: - g_DeviceSettings.d3d11.sd.SampleDesc.Quality = GetSelectedD3D11MultisampleQuality(); - break; - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnVertexProcessingChanged() -{ - DWORD dwBehavior = g_DeviceSettings.d3d9.BehaviorFlags; - - // Clear vertex processing flags - dwBehavior &= ~D3DCREATE_HARDWARE_VERTEXPROCESSING; - dwBehavior &= ~D3DCREATE_SOFTWARE_VERTEXPROCESSING; - dwBehavior &= ~D3DCREATE_MIXED_VERTEXPROCESSING; - dwBehavior &= ~D3DCREATE_PUREDEVICE; - - // Determine new flags - DWORD dwNewFlags = GetSelectedVertexProcessingType(); - if( dwNewFlags & D3DCREATE_PUREDEVICE ) - dwNewFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING; - - // Make changes - g_DeviceSettings.d3d9.BehaviorFlags = dwBehavior | dwNewFlags; - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnPresentIntervalChanged() -{ - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - g_DeviceSettings.d3d9.pp.PresentationInterval = GetSelectedPresentInterval(); - break; - - case DXUT_D3D11_DEVICE: - g_DeviceSettings.d3d11.SyncInterval = GetSelectedD3D11PresentInterval(); - break; - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnDebugDeviceChanged() -{ - bool bDebugDevice = GetSelectedDebugDeviceValue(); - - if( bDebugDevice ) - g_DeviceSettings.d3d11.CreateFlags |= D3D11_CREATE_DEVICE_DEBUG; - else - g_DeviceSettings.d3d11.CreateFlags &= ~D3D11_CREATE_DEVICE_DEBUG; - - return S_OK; -} - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnDeviceClipChanged() -{ - if( IsDeviceClip() ) - g_DeviceSettings.d3d9.pp.Flags |= D3DPRESENTFLAG_DEVICECLIP; - else - g_DeviceSettings.d3d9.pp.Flags &= ~D3DPRESENTFLAG_DEVICECLIP; - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddAPIVersion( DXUTDeviceVersion version ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_API_VERSION ); - - if( !pComboBox->ContainsItem( DXUTAPIVersionToString( version ) ) ) - pComboBox->AddItem( DXUTAPIVersionToString( version ), ULongToPtr( version ) ); -} - - -//------------------------------------------------------------------------------------- -DXUTDeviceVersion CD3DSettingsDlg::GetSelectedAPIVersion() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_API_VERSION ); - - return ( DXUTDeviceVersion )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddAdapter( const WCHAR* strDescription, UINT iAdapter ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - - if( !pComboBox->ContainsItem( strDescription ) ) - pComboBox->AddItem( strDescription, ULongToPtr( iAdapter ) ); -} - - -//------------------------------------------------------------------------------------- -UINT CD3DSettingsDlg::GetSelectedAdapter() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddDeviceType( D3DDEVTYPE devType ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - - if( !pComboBox->ContainsItem( DXUTD3DDeviceTypeToString( devType ) ) ) - pComboBox->AddItem( DXUTD3DDeviceTypeToString( devType ), ULongToPtr( devType ) ); -} - - -//------------------------------------------------------------------------------------- -D3DDEVTYPE CD3DSettingsDlg::GetSelectedDeviceType() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - - return ( D3DDEVTYPE )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::SetWindowed( bool bWindowed ) -{ - CDXUTRadioButton* pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED ); - pRadioButton->SetChecked( bWindowed ); - - pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_FULLSCREEN ); - pRadioButton->SetChecked( !bWindowed ); -} - - -//------------------------------------------------------------------------------------- -bool CD3DSettingsDlg::IsWindowed() -{ - CDXUTRadioButton* pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED ); - return pRadioButton->GetChecked(); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddAdapterFormat( D3DFORMAT format ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); - - if( !pComboBox->ContainsItem( DXUTD3DFormatToString( format, TRUE ) ) ) - pComboBox->AddItem( DXUTD3DFormatToString( format, TRUE ), ULongToPtr( format ) ); -} - - -//------------------------------------------------------------------------------------- -D3DFORMAT CD3DSettingsDlg::GetSelectedAdapterFormat() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); - - return ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11AdapterOutput( const WCHAR* strName, UINT Output ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT ); - - if( !pComboBox->ContainsItem( strName ) ) - pComboBox->AddItem( strName, ULongToPtr( Output ) ); -} - - -//------------------------------------------------------------------------------------- -UINT CD3DSettingsDlg::GetSelectedD3D11AdapterOutput() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddResolution( DWORD dwWidth, DWORD dwHeight ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - - DWORD dwResolutionData; - WCHAR strResolution[50]; - dwResolutionData = MAKELONG( dwWidth, dwHeight ); - swprintf_s( strResolution, 50, L"%d by %d", dwWidth, dwHeight ); - - if( !pComboBox->ContainsItem( strResolution ) ) - pComboBox->AddItem( strResolution, ULongToPtr( dwResolutionData ) ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::GetSelectedResolution( DWORD* pdwWidth, DWORD* pdwHeight ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - - DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() ); - - *pdwWidth = LOWORD( dwResolution ); - *pdwHeight = HIWORD( dwResolution ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11Resolution( DWORD dwWidth, DWORD dwHeight ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION ); - - DWORD dwResolutionData; - WCHAR strResolution[50]; - dwResolutionData = MAKELONG( dwWidth, dwHeight ); - swprintf_s( strResolution, 50, L"%d by %d", dwWidth, dwHeight ); - - if( !pComboBox->ContainsItem( strResolution ) ) - pComboBox->AddItem( strResolution, ULongToPtr( dwResolutionData ) ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::GetSelectedD3D11Resolution( DWORD* pdwWidth, DWORD* pdwHeight ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION ); - - DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() ); - - *pdwWidth = LOWORD( dwResolution ); - *pdwHeight = HIWORD( dwResolution ); -} - -void CD3DSettingsDlg::AddD3D11FeatureLevel(D3D_FEATURE_LEVEL fl) { - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL ); - switch( fl ) - { - case D3D_FEATURE_LEVEL_9_1: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_9_1" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_9_1", ULongToPtr( D3D_FEATURE_LEVEL_9_1 ) ); - } - break; - case D3D_FEATURE_LEVEL_9_2: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_9_2" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_9_2", ULongToPtr( D3D_FEATURE_LEVEL_9_2 ) ); - } - break; - case D3D_FEATURE_LEVEL_9_3: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_9_3" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_9_3", ULongToPtr( D3D_FEATURE_LEVEL_9_3 ) ); - } - break; - case D3D_FEATURE_LEVEL_10_0: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_10_0" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_10_0", ULongToPtr( D3D_FEATURE_LEVEL_10_0 ) ); - } - break; - case D3D_FEATURE_LEVEL_10_1: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_10_1" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_10_1", ULongToPtr( D3D_FEATURE_LEVEL_10_1 ) ); - } - break; - case D3D_FEATURE_LEVEL_11_0: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_11_0" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_11_0", ULongToPtr( D3D_FEATURE_LEVEL_11_0 ) ); - } - break; - } - -} - -D3D_FEATURE_LEVEL CD3DSettingsDlg::GetSelectedFeatureLevel() { - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL ); - - return (D3D_FEATURE_LEVEL)PtrToUlong( pComboBox->GetSelectedData() ); -} -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddRefreshRate( DWORD dwRate ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - - WCHAR strRefreshRate[50]; - - if( dwRate == 0 ) - wcscpy_s( strRefreshRate, 50, L"Default Rate" ); - else - swprintf_s( strRefreshRate, 50, L"%d Hz", dwRate ); - - if( !pComboBox->ContainsItem( strRefreshRate ) ) - pComboBox->AddItem( strRefreshRate, ULongToPtr( dwRate ) ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedRefreshRate() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11RefreshRate( DXGI_RATIONAL RefreshRate ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - - WCHAR strRefreshRate[50]; - - if( RefreshRate.Numerator == 0 && RefreshRate.Denominator == 0 ) - wcscpy_s( strRefreshRate, 50, L"Default Rate" ); - else - swprintf_s( strRefreshRate, 50, L"%d Hz", RefreshRate.Numerator / RefreshRate.Denominator ); - - if( !pComboBox->ContainsItem( strRefreshRate ) ) - { - DXGI_RATIONAL* pNewRate = new DXGI_RATIONAL; - if( pNewRate ) - { - *pNewRate = RefreshRate; - pComboBox->AddItem( strRefreshRate, pNewRate ); - } - } -} - - -//------------------------------------------------------------------------------------- -DXGI_RATIONAL CD3DSettingsDlg::GetSelectedD3D11RefreshRate() -{ - DXGI_RATIONAL dxgiR; - dxgiR.Numerator = 0; - dxgiR.Denominator = 1; - - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - - return *reinterpret_cast( pComboBox->GetSelectedData() ); - -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddBackBufferFormat( D3DFORMAT format ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); - - if( !pComboBox->ContainsItem( DXUTD3DFormatToString( format, TRUE ) ) ) - pComboBox->AddItem( DXUTD3DFormatToString( format, TRUE ), ULongToPtr( format ) ); -} - - -//------------------------------------------------------------------------------------- -D3DFORMAT CD3DSettingsDlg::GetSelectedBackBufferFormat() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); - - return ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11BackBufferFormat( DXGI_FORMAT format ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT ); - - if( !pComboBox->ContainsItem( DXUTDXGIFormatToString( format, TRUE ) ) ) - pComboBox->AddItem( DXUTDXGIFormatToString( format, TRUE ), ULongToPtr( format ) ); -} - - -//------------------------------------------------------------------------------------- -DXGI_FORMAT CD3DSettingsDlg::GetSelectedD3D11BackBufferFormat() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT ); - - return ( DXGI_FORMAT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddDepthStencilBufferFormat( D3DFORMAT format ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); - - if( !pComboBox->ContainsItem( DXUTD3DFormatToString( format, TRUE ) ) ) - pComboBox->AddItem( DXUTD3DFormatToString( format, TRUE ), ULongToPtr( format ) ); -} - - -//------------------------------------------------------------------------------------- -D3DFORMAT CD3DSettingsDlg::GetSelectedDepthStencilBufferFormat() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); - - return ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddMultisampleType( D3DMULTISAMPLE_TYPE type ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); - - if( !pComboBox->ContainsItem( DXUTMultisampleTypeToString( type ) ) ) - pComboBox->AddItem( DXUTMultisampleTypeToString( type ), ULongToPtr( type ) ); -} - - -//------------------------------------------------------------------------------------- -D3DMULTISAMPLE_TYPE CD3DSettingsDlg::GetSelectedMultisampleType() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); - - return ( D3DMULTISAMPLE_TYPE )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddMultisampleQuality( DWORD dwQuality ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY ); - - WCHAR strQuality[50]; - swprintf_s( strQuality, 50, L"%d", dwQuality ); - - if( !pComboBox->ContainsItem( strQuality ) ) - pComboBox->AddItem( strQuality, ULongToPtr( dwQuality ) ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedMultisampleQuality() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11MultisampleCount( UINT Count ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT ); - - WCHAR str[50]; - swprintf_s( str, 50, L"%u", Count ); - - if( !pComboBox->ContainsItem( str ) ) - pComboBox->AddItem( str, ULongToPtr( Count ) ); -} - - -//------------------------------------------------------------------------------------- -UINT CD3DSettingsDlg::GetSelectedD3D11MultisampleCount() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT ); - - return ( UINT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11MultisampleQuality( UINT Quality ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY ); - - WCHAR strQuality[50]; - swprintf_s( strQuality, 50, L"%d", Quality ); - - if( !pComboBox->ContainsItem( strQuality ) ) - pComboBox->AddItem( strQuality, ULongToPtr( Quality ) ); -} - - -//------------------------------------------------------------------------------------- -UINT CD3DSettingsDlg::GetSelectedD3D11MultisampleQuality() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY ); - - return ( UINT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddVertexProcessingType( DWORD dwType ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING ); - - if( !pComboBox->ContainsItem( DXUTVertexProcessingTypeToString( dwType ) ) ) - pComboBox->AddItem( DXUTVertexProcessingTypeToString( dwType ), ULongToPtr( dwType ) ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedVertexProcessingType() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedPresentInterval() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedD3D11PresentInterval() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - -//------------------------------------------------------------------------------------- -bool CD3DSettingsDlg::GetSelectedDebugDeviceValue() -{ - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE ); - - return pCheckBox->GetChecked(); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::SetDeviceClip( bool bDeviceClip ) -{ - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_DEVICECLIP ); - pCheckBox->SetChecked( bDeviceClip ); -} - - -//------------------------------------------------------------------------------------- -bool CD3DSettingsDlg::IsDeviceClip() -{ - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_DEVICECLIP ); - return pCheckBox->GetChecked(); -} - -//-------------------------------------------------------------------------------------- -// Updates the resolution list for D3D11 -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::UpdateD3D11Resolutions() -{ - - const DWORD dwWidth = g_DeviceSettings.d3d11.sd.BufferDesc.Width; - const DWORD dwHeight = g_DeviceSettings.d3d11.sd.BufferDesc.Height; - - // DXUTSETTINGSDLG_D3D11_RESOLUTION - CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION ); - pResolutionComboBox->RemoveAllItems(); - - CD3D11EnumOutputInfo* pOutputInfo = GetCurrentD3D11OutputInfo(); - if( pOutputInfo == NULL ) - return E_FAIL; - - bool bShowAll = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL )->GetChecked(); - - // Get the desktop aspect ratio - DXGI_MODE_DESC dmDesktop; - DXUTGetDesktopResolution( g_DeviceSettings.d3d11.AdapterOrdinal, &dmDesktop.Width, &dmDesktop.Height ); - float fDesktopAspectRatio = dmDesktop.Width / ( float )dmDesktop.Height; - - for( int idm = 0; idm < pOutputInfo->displayModeList.GetSize(); idm++ ) - { - DXGI_MODE_DESC DisplayMode = pOutputInfo->displayModeList.GetAt( idm ); - float fAspect = ( float )DisplayMode.Width / ( float )DisplayMode.Height; - - if( DisplayMode.Format == g_DeviceSettings.d3d11.sd.BufferDesc.Format ) - { - // If "Show All" is not checked, then hide all resolutions - // that don't match the aspect ratio of the desktop resolution - if( bShowAll || ( !bShowAll && fabsf( fDesktopAspectRatio - fAspect ) < 0.05f ) ) - { - AddD3D11Resolution( DisplayMode.Width, DisplayMode.Height ); - } - } - } - - const DWORD dwCurResolution = MAKELONG( g_DeviceSettings.d3d11.sd.BufferDesc.Width, - g_DeviceSettings.d3d11.sd.BufferDesc.Height ); - - pResolutionComboBox->SetSelectedByData( ULongToPtr( dwCurResolution ) ); - - - bool bWindowed = IsWindowed(); - if( bWindowed ) - { - pResolutionComboBox->RemoveAllItems(); - AddD3D11Resolution( dwWidth, dwHeight ); - - pResolutionComboBox->SetSelectedByData( ULongToPtr( MAKELONG( dwWidth, dwHeight ) ) ); - - - } - - return S_OK; -} - - -// -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11DeviceType( D3D_DRIVER_TYPE devType ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - - if( !pComboBox->ContainsItem( DXUTD3DX11DeviceTypeToString( devType ) ) ) - pComboBox->AddItem( DXUTD3DX11DeviceTypeToString( devType ), ULongToPtr( devType ) ); -} - - -//------------------------------------------------------------------------------------- -D3D_DRIVER_TYPE CD3DSettingsDlg::GetSelectedD3D11DeviceType() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - - return ( D3D_DRIVER_TYPE )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -void CD3DSettingsDlg::UpdateModeChangeTimeoutText( int nSecRemaining ) -{ - const WCHAR StrTimeout[] = L"Reverting to previous display settings in %d seconds"; - const DWORD CchBuf = sizeof( StrTimeout ) / sizeof( WCHAR ) + 16; - WCHAR buf[CchBuf]; - - swprintf_s( buf, CchBuf, StrTimeout, nSecRemaining ); - - CDXUTStatic* pStatic = m_RevertModeDialog.GetStatic( DXUTSETTINGSDLG_STATIC_MODE_CHANGE_TIMEOUT ); - pStatic->SetText( buf ); -} - -//-------------------------------------------------------------------------------------- -// Returns the string for the given DXUTDeviceVersion. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTAPIVersionToString( DXUTDeviceVersion version ) -{ - switch( version ) - { - case DXUT_D3D9_DEVICE: - return L"Direct3D 9"; - case DXUT_D3D11_DEVICE: - return L"Direct3D 11"; - default: - return L"Unknown version"; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given D3DDEVTYPE. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTD3DDeviceTypeToString( D3DDEVTYPE devType ) -{ - switch( devType ) - { - case D3DDEVTYPE_HAL: - return L"D3DDEVTYPE_HAL"; - case D3DDEVTYPE_SW: - return L"D3DDEVTYPE_SW"; - case D3DDEVTYPE_REF: - return L"D3DDEVTYPE_REF"; - default: - return L"Unknown devType"; - } -} - - - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given D3D_DRIVER_TYPE. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTD3DX11DeviceTypeToString( D3D_DRIVER_TYPE devType ) -{ - switch( devType ) - { - case D3D_DRIVER_TYPE_HARDWARE: - return L"D3D_DRIVER_TYPE_HARDWARE"; - case D3D_DRIVER_TYPE_REFERENCE: - return L"D3D_DRIVER_TYPE_REFERENCE"; - case D3D_DRIVER_TYPE_NULL: - return L"D3D_DRIVER_TYPE_NULL"; - case D3D_DRIVER_TYPE_WARP: - return L"D3D_DRIVER_TYPE_WARP"; - default: - return L"Unknown devType"; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given D3DMULTISAMPLE_TYPE. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTMultisampleTypeToString( D3DMULTISAMPLE_TYPE MultiSampleType ) -{ - switch( MultiSampleType ) - { - case D3DMULTISAMPLE_NONE: - return L"D3DMULTISAMPLE_NONE"; - case D3DMULTISAMPLE_NONMASKABLE: - return L"D3DMULTISAMPLE_NONMASKABLE"; - case D3DMULTISAMPLE_2_SAMPLES: - return L"D3DMULTISAMPLE_2_SAMPLES"; - case D3DMULTISAMPLE_3_SAMPLES: - return L"D3DMULTISAMPLE_3_SAMPLES"; - case D3DMULTISAMPLE_4_SAMPLES: - return L"D3DMULTISAMPLE_4_SAMPLES"; - case D3DMULTISAMPLE_5_SAMPLES: - return L"D3DMULTISAMPLE_5_SAMPLES"; - case D3DMULTISAMPLE_6_SAMPLES: - return L"D3DMULTISAMPLE_6_SAMPLES"; - case D3DMULTISAMPLE_7_SAMPLES: - return L"D3DMULTISAMPLE_7_SAMPLES"; - case D3DMULTISAMPLE_8_SAMPLES: - return L"D3DMULTISAMPLE_8_SAMPLES"; - case D3DMULTISAMPLE_9_SAMPLES: - return L"D3DMULTISAMPLE_9_SAMPLES"; - case D3DMULTISAMPLE_10_SAMPLES: - return L"D3DMULTISAMPLE_10_SAMPLES"; - case D3DMULTISAMPLE_11_SAMPLES: - return L"D3DMULTISAMPLE_11_SAMPLES"; - case D3DMULTISAMPLE_12_SAMPLES: - return L"D3DMULTISAMPLE_12_SAMPLES"; - case D3DMULTISAMPLE_13_SAMPLES: - return L"D3DMULTISAMPLE_13_SAMPLES"; - case D3DMULTISAMPLE_14_SAMPLES: - return L"D3DMULTISAMPLE_14_SAMPLES"; - case D3DMULTISAMPLE_15_SAMPLES: - return L"D3DMULTISAMPLE_15_SAMPLES"; - case D3DMULTISAMPLE_16_SAMPLES: - return L"D3DMULTISAMPLE_16_SAMPLES"; - default: - return L"Unknown Multisample Type"; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given vertex processing type -//-------------------------------------------------------------------------------------- -WCHAR* DXUTVertexProcessingTypeToString( DWORD vpt ) -{ - switch( vpt ) - { - case D3DCREATE_SOFTWARE_VERTEXPROCESSING: - return L"Software vertex processing"; - case D3DCREATE_MIXED_VERTEXPROCESSING: - return L"Mixed vertex processing"; - case D3DCREATE_HARDWARE_VERTEXPROCESSING: - return L"Hardware vertex processing"; - case D3DCREATE_PUREDEVICE: - return L"Pure hardware vertex processing"; - default: - return L"Unknown vertex processing type"; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given present interval. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTPresentIntervalToString( UINT pi ) -{ - switch( pi ) - { - case D3DPRESENT_INTERVAL_IMMEDIATE: - return L"D3DPRESENT_INTERVAL_IMMEDIATE"; - case D3DPRESENT_INTERVAL_DEFAULT: - return L"D3DPRESENT_INTERVAL_DEFAULT"; - case D3DPRESENT_INTERVAL_ONE: - return L"D3DPRESENT_INTERVAL_ONE"; - case D3DPRESENT_INTERVAL_TWO: - return L"D3DPRESENT_INTERVAL_TWO"; - case D3DPRESENT_INTERVAL_THREE: - return L"D3DPRESENT_INTERVAL_THREE"; - case D3DPRESENT_INTERVAL_FOUR: - return L"D3DPRESENT_INTERVAL_FOUR"; - default: - return L"Unknown PresentInterval"; - } -} - - diff --git a/sample/d3d11/common/DXUTsettingsdlg.h b/sample/d3d11/common/DXUTsettingsdlg.h deleted file mode 100644 index 5d4db4f..0000000 --- a/sample/d3d11/common/DXUTsettingsdlg.h +++ /dev/null @@ -1,248 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTSettingsDlg.cpp -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef DXUT_SETTINGS_H -#define DXUT_SETTINGS_H - -//-------------------------------------------------------------------------------------- -// Header Includes -//-------------------------------------------------------------------------------------- -#include "DXUTgui.h" -//-------------------------------------------------------------------------------------- -// Control IDs -//-------------------------------------------------------------------------------------- -#define DXUTSETTINGSDLG_STATIC -1 -#define DXUTSETTINGSDLG_OK 1 -#define DXUTSETTINGSDLG_CANCEL 2 -#define DXUTSETTINGSDLG_ADAPTER 3 -#define DXUTSETTINGSDLG_DEVICE_TYPE 4 -#define DXUTSETTINGSDLG_WINDOWED 5 -#define DXUTSETTINGSDLG_FULLSCREEN 6 -#define DXUTSETTINGSDLG_ADAPTER_FORMAT 7 -#define DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL 8 -#define DXUTSETTINGSDLG_RESOLUTION 9 -#define DXUTSETTINGSDLG_RESOLUTION_LABEL 10 -#define DXUTSETTINGSDLG_REFRESH_RATE 11 -#define DXUTSETTINGSDLG_REFRESH_RATE_LABEL 12 -#define DXUTSETTINGSDLG_BACK_BUFFER_FORMAT 13 -#define DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL 14 -#define DXUTSETTINGSDLG_DEPTH_STENCIL 15 -#define DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL 16 -#define DXUTSETTINGSDLG_MULTISAMPLE_TYPE 17 -#define DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL 18 -#define DXUTSETTINGSDLG_MULTISAMPLE_QUALITY 19 -#define DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL 20 -#define DXUTSETTINGSDLG_VERTEX_PROCESSING 21 -#define DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL 22 -#define DXUTSETTINGSDLG_PRESENT_INTERVAL 23 -#define DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL 24 -#define DXUTSETTINGSDLG_DEVICECLIP 25 -#define DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL 26 -#define DXUTSETTINGSDLG_API_VERSION 27 -#define DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT 28 -#define DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL 29 -#define DXUTSETTINGSDLG_D3D11_RESOLUTION 30 -#define DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL 31 -#define DXUTSETTINGSDLG_D3D11_REFRESH_RATE 32 -#define DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL 33 -#define DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT 34 -#define DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL 35 -#define DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT 36 -#define DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL 37 -#define DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY 38 -#define DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL 39 -#define DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL 40 -#define DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL 41 -#define DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE 42 -#define DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL 43 -#define DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL 44 - -#define DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT 58 -#define DXUTSETTINGSDLG_MODE_CHANGE_REVERT 59 -#define DXUTSETTINGSDLG_STATIC_MODE_CHANGE_TIMEOUT 60 -#define DXUTSETTINGSDLG_WINDOWED_GROUP 0x0100 - -#define TOTAL_FEATURE_LEVLES 6 -//-------------------------------------------------------------------------------------- -// Dialog for selection of device settings -// Use DXUTGetD3DSettingsDialog() to access global instance -// To control the contents of the dialog, use the CD3D9Enumeration class. -//-------------------------------------------------------------------------------------- -class CD3DSettingsDlg -{ -public: - CD3DSettingsDlg(); - ~CD3DSettingsDlg(); - - void Init( CDXUTDialogResourceManager* pManager ); - void Init( CDXUTDialogResourceManager* pManager, LPCWSTR szControlTextureFileName ); - void Init( CDXUTDialogResourceManager* pManager, LPCWSTR pszControlTextureResourcename, - HMODULE hModule ); - - HRESULT Refresh(); - void OnRender( float fElapsedTime ); - void OnRender9( float fElapsedTime ); - void OnRender10( float fElapsedTime ); - void OnRender11( float fElapsedTime ); - - HRESULT OnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice ); - HRESULT OnD3D9ResetDevice(); - void OnD3D9LostDevice(); - void OnD3D9DestroyDevice(); - - HRESULT OnD3D11CreateDevice( ID3D11Device* pd3dDevice ); - HRESULT OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice, - const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc ); - void OnD3D11DestroyDevice(); - - CDXUTDialog* GetDialogControl() - { - return &m_Dialog; - } - bool IsActive() - { - return m_bActive; - } - void SetActive( bool bActive ) - { - m_bActive = bActive; if( bActive ) Refresh(); - } - void ShowControlSet( DXUTDeviceVersion ver ); - - LRESULT MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); - -protected: - friend CD3DSettingsDlg* WINAPI DXUTGetD3DSettingsDialog(); - - void CreateControls(); - HRESULT SetDeviceSettingsFromUI(); - void SetSelectedD3D11RefreshRate( DXGI_RATIONAL RefreshRate ); - HRESULT UpdateD3D11Resolutions(); - - void OnEvent( UINT nEvent, int nControlID, CDXUTControl* pControl ); - static void WINAPI StaticOnEvent( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserData ); - static void WINAPI StaticOnModeChangeTimer( UINT nIDEvent, void* pUserContext ); - - CD3D9EnumAdapterInfo* GetCurrentAdapterInfo(); - CD3D9EnumDeviceInfo* GetCurrentDeviceInfo(); - CD3D9EnumDeviceSettingsCombo* GetCurrentDeviceSettingsCombo(); - - CD3D11EnumAdapterInfo* GetCurrentD3D11AdapterInfo(); - CD3D11EnumDeviceInfo* GetCurrentD3D11DeviceInfo(); - CD3D11EnumOutputInfo* GetCurrentD3D11OutputInfo(); - CD3D11EnumDeviceSettingsCombo* GetCurrentD3D11DeviceSettingsCombo(); - - void AddAPIVersion( DXUTDeviceVersion version ); - DXUTDeviceVersion GetSelectedAPIVersion(); - - void AddAdapter( const WCHAR* strDescription, UINT iAdapter ); - UINT GetSelectedAdapter(); - - void AddDeviceType( D3DDEVTYPE devType ); - D3DDEVTYPE GetSelectedDeviceType(); - - void SetWindowed( bool bWindowed ); - bool IsWindowed(); - - void AddAdapterFormat( D3DFORMAT format ); - D3DFORMAT GetSelectedAdapterFormat(); - - void AddResolution( DWORD dwWidth, DWORD dwHeight ); - void GetSelectedResolution( DWORD* pdwWidth, DWORD* pdwHeight ); - - void AddRefreshRate( DWORD dwRate ); - DWORD GetSelectedRefreshRate(); - - void AddBackBufferFormat( D3DFORMAT format ); - D3DFORMAT GetSelectedBackBufferFormat(); - - void AddDepthStencilBufferFormat( D3DFORMAT format ); - D3DFORMAT GetSelectedDepthStencilBufferFormat(); - - void AddMultisampleType( D3DMULTISAMPLE_TYPE type ); - D3DMULTISAMPLE_TYPE GetSelectedMultisampleType(); - - void AddMultisampleQuality( DWORD dwQuality ); - DWORD GetSelectedMultisampleQuality(); - - void AddVertexProcessingType( DWORD dwType ); - DWORD GetSelectedVertexProcessingType(); - - DWORD GetSelectedPresentInterval(); - - void SetDeviceClip( bool bDeviceClip ); - bool IsDeviceClip(); - - // D3D11 - void AddD3D11DeviceType( D3D_DRIVER_TYPE devType ); - D3D_DRIVER_TYPE GetSelectedD3D11DeviceType(); - - void AddD3D11AdapterOutput( const WCHAR* strName, UINT nOutput ); - UINT GetSelectedD3D11AdapterOutput(); - - void AddD3D11Resolution( DWORD dwWidth, DWORD dwHeight ); - void GetSelectedD3D11Resolution( DWORD* pdwWidth, DWORD* pdwHeight ); - - void AddD3D11FeatureLevel(D3D_FEATURE_LEVEL); - D3D_FEATURE_LEVEL GetSelectedFeatureLevel(); - - void AddD3D11RefreshRate( DXGI_RATIONAL RefreshRate ); - DXGI_RATIONAL GetSelectedD3D11RefreshRate(); - - void AddD3D11BackBufferFormat( DXGI_FORMAT format ); - DXGI_FORMAT GetSelectedD3D11BackBufferFormat(); - - void AddD3D11MultisampleCount( UINT count ); - UINT GetSelectedD3D11MultisampleCount(); - - void AddD3D11MultisampleQuality( UINT Quality ); - UINT GetSelectedD3D11MultisampleQuality(); - - DWORD GetSelectedD3D11PresentInterval(); - bool GetSelectedDebugDeviceValue(); - - - - HRESULT OnD3D11ResolutionChanged (); - HRESULT OnAPIVersionChanged( bool bRefresh=false ); - HRESULT OnFeatureLevelChanged(); - HRESULT OnAdapterChanged(); - HRESULT OnDeviceTypeChanged(); - HRESULT OnWindowedFullScreenChanged(); - HRESULT OnAdapterOutputChanged(); - HRESULT OnAdapterFormatChanged(); - HRESULT OnResolutionChanged(); - HRESULT OnRefreshRateChanged(); - HRESULT OnBackBufferFormatChanged(); - HRESULT OnDepthStencilBufferFormatChanged(); - HRESULT OnMultisampleTypeChanged(); - HRESULT OnMultisampleQualityChanged(); - HRESULT OnVertexProcessingChanged(); - HRESULT OnPresentIntervalChanged(); - HRESULT OnDebugDeviceChanged(); - HRESULT OnDeviceClipChanged(); - - void UpdateModeChangeTimeoutText( int nSecRemaining ); - - IDirect3DStateBlock9* m_pStateBlock; - CDXUTDialog* m_pActiveDialog; - CDXUTDialog m_Dialog; - CDXUTDialog m_RevertModeDialog; - int m_nRevertModeTimeout; - UINT m_nIDEvent; - bool m_bActive; - - D3D_FEATURE_LEVEL m_Levels[TOTAL_FEATURE_LEVLES]; - -}; - - -CD3DSettingsDlg* WINAPI DXUTGetD3DSettingsDialog(); - - - -#endif - diff --git a/sample/d3d11/common/SDKmisc.cpp b/sample/d3d11/common/SDKmisc.cpp deleted file mode 100644 index f8446bd..0000000 --- a/sample/d3d11/common/SDKmisc.cpp +++ /dev/null @@ -1,1684 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: SDKmisc.cpp -// -// Various helper functionality that is shared between SDK samples -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#include "dxut.h" -#include "SDKmisc.h" -#include "DXUTres.h" -#undef min // use __min instead -#undef max // use __max instead - -#include "DXUTGui.h" - -//-------------------------------------------------------------------------------------- -// Global/Static Members -//-------------------------------------------------------------------------------------- -CDXUTResourceCache& WINAPI DXUTGetGlobalResourceCache() -{ - // Using an accessor function gives control of the construction order - static CDXUTResourceCache cache; - return cache; -} - - -//-------------------------------------------------------------------------------------- -// Internal functions forward declarations -//-------------------------------------------------------------------------------------- -bool DXUTFindMediaSearchTypicalDirs( __in_ecount(cchSearch) WCHAR* strSearchPath, - int cchSearch, - __in LPCWSTR strLeaf, - __in WCHAR* strExePath, - __in WCHAR* strExeName ); -bool DXUTFindMediaSearchParentDirs( __in_ecount(cchSearch) WCHAR* strSearchPath, - int cchSearch, - __in WCHAR* strStartAt, - __in WCHAR* strLeafName ); -INT_PTR CALLBACK DisplaySwitchToREFWarningProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ); - - -//-------------------------------------------------------------------------------------- -// Shared code for samples to ask user if they want to use a REF device or quit -//-------------------------------------------------------------------------------------- -void WINAPI DXUTDisplaySwitchingToREFWarning( DXUTDeviceVersion ver ) -{ - if( DXUTGetShowMsgBoxOnError() ) - { - DWORD dwSkipWarning = 0, dwRead = 0, dwWritten = 0; - HANDLE hFile = NULL; - - // Read previous user settings - WCHAR strPath[MAX_PATH]; - SHGetFolderPath( DXUTGetHWND(), CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, strPath ); - wcscat_s( strPath, MAX_PATH, L"\\DXUT\\SkipRefWarning.dat" ); - if( ( hFile = CreateFile( strPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, - NULL ) ) != INVALID_HANDLE_VALUE ) - { - ReadFile( hFile, &dwSkipWarning, sizeof( DWORD ), &dwRead, NULL ); - CloseHandle( hFile ); - } - - if( dwSkipWarning == 0 ) - { - // Compact code to create a custom dialog box without using a template in a resource file. - // If this dialog were in a .rc file, this would be a lot simpler but every sample calling this function would - // need a copy of the dialog in its own .rc file. Also MessageBox API could be used here instead, but - // the MessageBox API is simpler to call but it can't provide a "Don't show again" checkbox - typedef struct - { - DLGITEMTEMPLATE a; - WORD b; - WORD c; - WORD d; - WORD e; - WORD f; - } DXUT_DLG_ITEM; - typedef struct - { - DLGTEMPLATE a; - WORD b; - WORD c; - WCHAR d[2]; - WORD e; - WCHAR f[16]; - DXUT_DLG_ITEM i1; - DXUT_DLG_ITEM i2; - DXUT_DLG_ITEM i3; - DXUT_DLG_ITEM i4; - DXUT_DLG_ITEM i5; - } DXUT_DLG_DATA; - - DXUT_DLG_DATA dtp = - { - {WS_CAPTION | WS_POPUP | WS_VISIBLE | WS_SYSMENU | DS_ABSALIGN | DS_3DLOOK | DS_SETFONT | - DS_MODALFRAME | DS_CENTER,0,5,0,0,269,82},0,0,L" ",8,L"MS Shell Dlg 2", - { {WS_CHILD | WS_VISIBLE | SS_ICON | SS_CENTERIMAGE,0,7,7,24,24,0x100},0xFFFF,0x0082,0,0,0}, // icon - { {WS_CHILD | WS_VISIBLE,0,40,7,230,25,0x101},0xFFFF,0x0082,0,0,0}, // static text - { {WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_DEFPUSHBUTTON,0,80,39,50,14,IDYES},0xFFFF,0x0080,0,0,0}, // Yes button - { {WS_CHILD | WS_VISIBLE | WS_TABSTOP,0,133,39,50,14,IDNO},0xFFFF,0x0080,0,0,0}, // No button - { {WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_CHECKBOX,0,7,59,70,16,IDIGNORE},0xFFFF,0x0080,0,0,0}, // checkbox - }; - - LPARAM lParam; - if( ver == DXUT_D3D9_DEVICE ) - lParam = 9; - else - lParam = 11; - int nResult = ( int )DialogBoxIndirectParam( DXUTGetHINSTANCE(), ( DLGTEMPLATE* )&dtp, DXUTGetHWND(), - DisplaySwitchToREFWarningProc, lParam ); - - if( ( nResult & 0x80 ) == 0x80 ) // "Don't show again" checkbox was checked - { - // Save user settings - dwSkipWarning = 1; - SHGetFolderPath( DXUTGetHWND(), CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, strPath ); - wcscat_s( strPath, MAX_PATH, L"\\DXUT" ); - CreateDirectory( strPath, NULL ); - wcscat_s( strPath, MAX_PATH, L"\\SkipRefWarning.dat" ); - if( ( hFile = CreateFile( strPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, - NULL ) ) != INVALID_HANDLE_VALUE ) - { - WriteFile( hFile, &dwSkipWarning, sizeof( DWORD ), &dwWritten, NULL ); - CloseHandle( hFile ); - } - } - - // User choose not to continue - if( ( nResult & 0x0F ) == IDNO ) - DXUTShutdown( 1 ); - } - } -} - - -//-------------------------------------------------------------------------------------- -// MsgProc for DXUTDisplaySwitchingToREFWarning() dialog box -//-------------------------------------------------------------------------------------- -INT_PTR CALLBACK DisplaySwitchToREFWarningProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) -{ - switch( message ) - { - case WM_INITDIALOG: - // Easier to set text here than in the DLGITEMTEMPLATE - SetWindowText( hDlg, DXUTGetWindowTitle() ); - SendMessage( GetDlgItem( hDlg, 0x100 ), STM_SETIMAGE, IMAGE_ICON, ( LPARAM )LoadIcon( 0, IDI_QUESTION ) ); - WCHAR sz[512]; - swprintf_s( sz, 512, - L"This program needs to use the Direct3D %d reference device. This device implements the entire Direct3D %d feature set, but runs very slowly. Do you wish to continue?", lParam, lParam ); - SetDlgItemText( hDlg, 0x101, sz ); - SetDlgItemText( hDlg, IDYES, L"&Yes" ); - SetDlgItemText( hDlg, IDNO, L"&No" ); - SetDlgItemText( hDlg, IDIGNORE, L"&Don't show again" ); - break; - - case WM_COMMAND: - switch( LOWORD( wParam ) ) - { - case IDIGNORE: - CheckDlgButton( hDlg, IDIGNORE, ( IsDlgButtonChecked( hDlg, - IDIGNORE ) == BST_CHECKED ) ? BST_UNCHECKED : - BST_CHECKED ); - EnableWindow( GetDlgItem( hDlg, IDNO ), ( IsDlgButtonChecked( hDlg, IDIGNORE ) != BST_CHECKED ) ); - break; - case IDNO: - EndDialog( hDlg, ( IsDlgButtonChecked( hDlg, IDIGNORE ) == BST_CHECKED ) ? IDNO | 0x80 : IDNO | - 0x00 ); return TRUE; - case IDCANCEL: - case IDYES: - EndDialog( hDlg, ( IsDlgButtonChecked( hDlg, IDIGNORE ) == BST_CHECKED ) ? IDYES | 0x80 : IDYES | - 0x00 ); return TRUE; - } - break; - } - return FALSE; -} - - -//-------------------------------------------------------------------------------------- -// Returns pointer to static media search buffer -//-------------------------------------------------------------------------------------- -WCHAR* DXUTMediaSearchPath() -{ - static WCHAR s_strMediaSearchPath[MAX_PATH] = - { - 0 - }; - return s_strMediaSearchPath; - -} - -//-------------------------------------------------------------------------------------- -LPCWSTR WINAPI DXUTGetMediaSearchPath() -{ - return DXUTMediaSearchPath(); -} - - -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTSetMediaSearchPath( LPCWSTR strPath ) -{ - HRESULT hr; - - WCHAR* s_strSearchPath = DXUTMediaSearchPath(); - - hr = wcscpy_s( s_strSearchPath, MAX_PATH, strPath ); - if( SUCCEEDED( hr ) ) - { - // append slash if needed - size_t ch = 0; - ch = wcsnlen( s_strSearchPath, MAX_PATH); - if( SUCCEEDED( hr ) && s_strSearchPath[ch - 1] != L'\\' ) - { - hr = wcscat_s( s_strSearchPath, MAX_PATH, L"\\" ); - } - } - - return hr; -} - - -//-------------------------------------------------------------------------------------- -// Tries to find the location of a SDK media file -// cchDest is the size in WCHARs of strDestPath. Be careful not to -// pass in sizeof(strDest) on UNICODE builds. -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTFindDXSDKMediaFileCch(__in_ecount(cchDest) WCHAR* strDestPath, - int cchDest, - __in LPCWSTR strFilename ) -{ - bool bFound; - WCHAR strSearchFor[MAX_PATH]; - - if( NULL == strFilename || strFilename[0] == 0 || NULL == strDestPath || cchDest < 10 ) - return E_INVALIDARG; - - // Get the exe name, and exe path - WCHAR strExePath[MAX_PATH] = - { - 0 - }; - WCHAR strExeName[MAX_PATH] = - { - 0 - }; - WCHAR* strLastSlash = NULL; - GetModuleFileName( NULL, strExePath, MAX_PATH ); - strExePath[MAX_PATH - 1] = 0; - strLastSlash = wcsrchr( strExePath, TEXT( '\\' ) ); - if( strLastSlash ) - { - wcscpy_s( strExeName, MAX_PATH, &strLastSlash[1] ); - - // Chop the exe name from the exe path - *strLastSlash = 0; - - // Chop the .exe from the exe name - strLastSlash = wcsrchr( strExeName, TEXT( '.' ) ); - if( strLastSlash ) - *strLastSlash = 0; - } - - // Typical directories: - // .\ - // ..\ - // ..\..\ - // %EXE_DIR%\ - // %EXE_DIR%\..\ - // %EXE_DIR%\..\..\ - // %EXE_DIR%\..\%EXE_NAME% - // %EXE_DIR%\..\..\%EXE_NAME% - - // Typical directory search - bFound = DXUTFindMediaSearchTypicalDirs( strDestPath, cchDest, strFilename, strExePath, strExeName ); - if( bFound ) - return S_OK; - - // Typical directory search again, but also look in a subdir called "\media\" - swprintf_s( strSearchFor, MAX_PATH, L"media\\%s", strFilename ); - bFound = DXUTFindMediaSearchTypicalDirs( strDestPath, cchDest, strSearchFor, strExePath, strExeName ); - if( bFound ) - return S_OK; - - WCHAR strLeafName[MAX_PATH] = - { - 0 - }; - - // Search all parent directories starting at .\ and using strFilename as the leaf name - wcscpy_s( strLeafName, MAX_PATH, strFilename ); - bFound = DXUTFindMediaSearchParentDirs( strDestPath, cchDest, L".", strLeafName ); - if( bFound ) - return S_OK; - - // Search all parent directories starting at the exe's dir and using strFilename as the leaf name - bFound = DXUTFindMediaSearchParentDirs( strDestPath, cchDest, strExePath, strLeafName ); - if( bFound ) - return S_OK; - - // Search all parent directories starting at .\ and using "media\strFilename" as the leaf name - swprintf_s( strLeafName, MAX_PATH, L"media\\%s", strFilename ); - bFound = DXUTFindMediaSearchParentDirs( strDestPath, cchDest, L".", strLeafName ); - if( bFound ) - return S_OK; - - // Search all parent directories starting at the exe's dir and using "media\strFilename" as the leaf name - bFound = DXUTFindMediaSearchParentDirs( strDestPath, cchDest, strExePath, strLeafName ); - if( bFound ) - return S_OK; - - // On failure, return the file as the path but also return an error code - wcscpy_s( strDestPath, cchDest, strFilename ); - - return DXUTERR_MEDIANOTFOUND; -} - - -//-------------------------------------------------------------------------------------- -// Search a set of typical directories -//-------------------------------------------------------------------------------------- -bool DXUTFindMediaSearchTypicalDirs( __in_ecount(cchSearch) WCHAR* strSearchPath, - int cchSearch, - __in LPCWSTR strLeaf, - __in WCHAR* strExePath, - __in WCHAR* strExeName ) -{ - // Typical directories: - // .\ - // ..\ - // ..\..\ - // %EXE_DIR%\ - // %EXE_DIR%\..\ - // %EXE_DIR%\..\..\ - // %EXE_DIR%\..\%EXE_NAME% - // %EXE_DIR%\..\..\%EXE_NAME% - // DXSDK media path - - // Search in .\ - wcscpy_s( strSearchPath, cchSearch, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in ..\ - swprintf_s( strSearchPath, cchSearch, L"..\\%s", strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in ..\..\ - swprintf_s( strSearchPath, cchSearch, L"..\\..\\%s", strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in ..\..\ - swprintf_s( strSearchPath, cchSearch, L"..\\..\\%s", strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in the %EXE_DIR%\ - swprintf_s( strSearchPath, cchSearch, L"%s\\%s", strExePath, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in the %EXE_DIR%\..\ - swprintf_s( strSearchPath, cchSearch, L"%s\\..\\%s", strExePath, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in the %EXE_DIR%\..\..\ - swprintf_s( strSearchPath, cchSearch, L"%s\\..\\..\\%s", strExePath, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in "%EXE_DIR%\..\%EXE_NAME%\". This matches the DirectX SDK layout - swprintf_s( strSearchPath, cchSearch, L"%s\\..\\%s\\%s", strExePath, strExeName, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in "%EXE_DIR%\..\..\%EXE_NAME%\". This matches the DirectX SDK layout - swprintf_s( strSearchPath, cchSearch, L"%s\\..\\..\\%s\\%s", strExePath, strExeName, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - - // Search in media search dir - WCHAR* s_strSearchPath = DXUTMediaSearchPath(); - if( s_strSearchPath[0] != 0 ) - { - swprintf_s( strSearchPath, cchSearch, L"%s%s", s_strSearchPath, strLeaf ); - if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF ) - return true; - } - - return false; -} - - - -//-------------------------------------------------------------------------------------- -// Search parent directories starting at strStartAt, and appending strLeafName -// at each parent directory. It stops at the root directory. -//-------------------------------------------------------------------------------------- -bool DXUTFindMediaSearchParentDirs( __in_ecount(cchSearch) WCHAR* strSearchPath, - int cchSearch, - __in WCHAR* strStartAt, - __in WCHAR* strLeafName ) -{ - WCHAR strFullPath[MAX_PATH] = - { - 0 - }; - WCHAR strFullFileName[MAX_PATH] = - { - 0 - }; - WCHAR strSearch[MAX_PATH] = - { - 0 - }; - WCHAR* strFilePart = NULL; - - GetFullPathName( strStartAt, MAX_PATH, strFullPath, &strFilePart ); - if( strFilePart == NULL ) - return false; - - while( strFilePart != NULL && *strFilePart != '\0' ) - { - swprintf_s( strFullFileName, MAX_PATH, L"%s\\%s", strFullPath, strLeafName ); - if( GetFileAttributes( strFullFileName ) != 0xFFFFFFFF ) - { - wcscpy_s( strSearchPath, cchSearch, strFullFileName ); - return true; - } - - swprintf_s( strSearch, MAX_PATH, L"%s\\..", strFullPath ); - GetFullPathName( strSearch, MAX_PATH, strFullPath, &strFilePart ); - } - - return false; -} - - -//-------------------------------------------------------------------------------------- -// CDXUTResourceCache -//-------------------------------------------------------------------------------------- - -//-------------------------------------------------------------------------------------- -CDXUTResourceCache::~CDXUTResourceCache() -{ - OnDestroyDevice(); - - m_TextureCache.RemoveAll(); - m_EffectCache.RemoveAll(); - m_FontCache.RemoveAll(); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - LPDIRECT3DTEXTURE9* ppTexture ) -{ - return CreateTextureFromFileEx( pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, - 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, - 0, NULL, NULL, ppTexture ); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCSTR pSrcFile, - LPDIRECT3DTEXTURE9* ppTexture ) -{ - WCHAR szSrcFile[MAX_PATH]; - MultiByteToWideChar( CP_ACP, 0, pSrcFile, -1, szSrcFile, MAX_PATH ); - szSrcFile[MAX_PATH - 1] = 0; - - return CreateTextureFromFile( pDevice, szSrcFile, ppTexture ); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromFile( ID3D11Device* pDevice, ID3D11DeviceContext *pContext, LPCTSTR pSrcFile, - ID3D11ShaderResourceView** ppOutputRV, bool bSRGB ) -{ - return CreateTextureFromFileEx( pDevice, pContext, pSrcFile, NULL, NULL, ppOutputRV, bSRGB ); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromFile( ID3D11Device* pDevice, ID3D11DeviceContext *pContext, LPCSTR pSrcFile, - ID3D11ShaderResourceView** ppOutputRV, bool bSRGB ) -{ - WCHAR szSrcFile[MAX_PATH]; - MultiByteToWideChar( CP_ACP, 0, pSrcFile, -1, szSrcFile, MAX_PATH ); - szSrcFile[MAX_PATH - 1] = 0; - - return CreateTextureFromFile( pDevice, pContext, szSrcFile, ppOutputRV, bSRGB ); -} - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, - UINT Height, UINT MipLevels, DWORD Usage, D3DFORMAT Format, - D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DTEXTURE9* ppTexture ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_TextureCache.GetSize(); ++i ) - { - DXUTCache_Texture& Entry = m_TextureCache[i]; - if( Entry.Location == DXUTCACHE_LOCATION_FILE && - !lstrcmpW( Entry.wszSource, pSrcFile ) && - Entry.Width == Width && - Entry.Height == Height && - Entry.MipLevels == MipLevels && - Entry.Usage9 == Usage && - Entry.Format9 == Format && - Entry.Pool9 == Pool && - Entry.Type9 == D3DRTYPE_TEXTURE ) - { - // A match is found. Obtain the IDirect3DTexture9 interface and return that. - return Entry.pTexture9->QueryInterface( IID_IDirect3DTexture9, ( LPVOID* )ppTexture ); - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateTextureFromFileEx( pDevice, pSrcFile, Width, Height, MipLevels, Usage, Format, - Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, ppTexture ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Texture NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_FILE; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcFile ); - NewEntry.Width = Width; - NewEntry.Height = Height; - NewEntry.MipLevels = MipLevels; - NewEntry.Usage9 = Usage; - NewEntry.Format9 = Format; - NewEntry.Pool9 = Pool; - NewEntry.Type9 = D3DRTYPE_TEXTURE; - ( *ppTexture )->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&NewEntry.pTexture9 ); - - m_TextureCache.Add( NewEntry ); - return S_OK; -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromFileEx( ID3D11Device* pDevice, ID3D11DeviceContext* pContext, LPCTSTR pSrcFile, - D3DX11_IMAGE_LOAD_INFO* pLoadInfo, ID3DX11ThreadPump* pPump, - ID3D11ShaderResourceView** ppOutputRV, bool bSRGB ) -{ - - bool is10L9 = DXUTGetDeviceSettings().d3d11.DeviceFeatureLevel < D3D_FEATURE_LEVEL_10_0; - HRESULT hr = S_OK; - D3DX11_IMAGE_LOAD_INFO ZeroInfo; //D3DX11_IMAGE_LOAD_INFO has a default constructor - D3DX11_IMAGE_INFO SrcInfo; - - if( !pLoadInfo ) - { - pLoadInfo = &ZeroInfo; - } - - if( !pLoadInfo->pSrcInfo ) - { - D3DX11GetImageInfoFromFile( pSrcFile, NULL, &SrcInfo, NULL ); - pLoadInfo->pSrcInfo = &SrcInfo; - - pLoadInfo->Format = pLoadInfo->pSrcInfo->Format; - } - - // Search the cache for a matching entry. - for( int i = 0; i < m_TextureCache.GetSize(); ++i ) - { - DXUTCache_Texture& Entry = m_TextureCache[i]; - if( Entry.Location == DXUTCACHE_LOCATION_FILE && - !lstrcmpW( Entry.wszSource, pSrcFile ) && - Entry.Width == pLoadInfo->Width && - Entry.Height == pLoadInfo->Height && - Entry.MipLevels == pLoadInfo->MipLevels && - Entry.Usage11 == pLoadInfo->Usage && - Entry.Format == pLoadInfo->Format && - Entry.CpuAccessFlags == pLoadInfo->CpuAccessFlags && - Entry.BindFlags == pLoadInfo->BindFlags && - Entry.MiscFlags == pLoadInfo->MiscFlags ) - { - // A match is found. Obtain the IDirect3DTexture9 interface and return that. - return Entry.pSRV11->QueryInterface( __uuidof( ID3D11ShaderResourceView ), ( LPVOID* )ppOutputRV ); - } - } - - //Ready a new entry to the texture cache - //Do this before creating the texture since pLoadInfo may be volatile - DXUTCache_Texture NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_FILE; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcFile ); - NewEntry.Width = pLoadInfo->Width; - NewEntry.Height = pLoadInfo->Height; - NewEntry.MipLevels = pLoadInfo->MipLevels; - NewEntry.Usage11 = pLoadInfo->Usage; - // 10L9 can't handle typesless, so we cant make a typesless format - if (is10L9 && bSRGB) { - NewEntry.Format = MAKE_SRGB(pLoadInfo->Format); - }else { - NewEntry.Format = pLoadInfo->Format; - } - NewEntry.CpuAccessFlags = pLoadInfo->CpuAccessFlags; - NewEntry.BindFlags = pLoadInfo->BindFlags; - NewEntry.MiscFlags = pLoadInfo->MiscFlags; - - //Create the rexture - ID3D11Texture2D* pRes = NULL; - hr = D3DX11CreateTextureFromFile( pDevice, pSrcFile, pLoadInfo, pPump, ( ID3D11Resource** )&pRes, NULL ); - - if( FAILED( hr ) ) - return hr; - D3D11_TEXTURE2D_DESC tex_dsc; - pRes->GetDesc(&tex_dsc); - - - - if (bSRGB ) { - // This is a workaround so that we can load linearly, but sample in SRGB. Right now, we can't load - // as linear since D3DX will try to do conversion on load. Loading as TYPELESS doesn't work either, and - // loading as typed _UNORM doesn't allow us to create an SRGB view. - - // on d3d11 featuer levels this is just a copy, but on 10L9 we must use a cpu side copy with 2 staging resources. - ID3D11Texture2D* unormStaging = NULL; - ID3D11Texture2D* srgbStaging = NULL; - - D3D11_TEXTURE2D_DESC CopyDesc; - pRes->GetDesc( &CopyDesc ); - - pLoadInfo->BindFlags = 0; - pLoadInfo->CpuAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ; - pLoadInfo->Depth = 0; - pLoadInfo->Filter = D3DX11_FILTER_POINT; - pLoadInfo->FirstMipLevel = 0; - pLoadInfo->Format = CopyDesc.Format; - pLoadInfo->Height = CopyDesc.Height; - pLoadInfo->MipFilter = D3DX11_FILTER_POINT; - pLoadInfo->MiscFlags = CopyDesc.MiscFlags; - pLoadInfo->Usage = D3D11_USAGE_STAGING; - pLoadInfo->Width = CopyDesc.Width; - - CopyDesc.BindFlags = 0; - CopyDesc.Usage = D3D11_USAGE_STAGING; - CopyDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ; - CopyDesc.Format = MAKE_SRGB(CopyDesc.Format); - - hr = D3DX11CreateTextureFromFile( pDevice, pSrcFile, pLoadInfo, pPump, ( ID3D11Resource** )&unormStaging, NULL ); - - hr = pDevice->CreateTexture2D(&CopyDesc, NULL, &srgbStaging); - pContext->CopyResource( srgbStaging, unormStaging ); - ID3D11Texture2D* srgbGPU; - - pRes->GetDesc( &CopyDesc ); - CopyDesc.Format = MAKE_SRGB(CopyDesc.Format); - hr = pDevice->CreateTexture2D(&CopyDesc, NULL, &srgbGPU); - pContext->CopyResource( srgbGPU, srgbStaging ); - - SAFE_RELEASE(pRes); - SAFE_RELEASE(srgbStaging); - SAFE_RELEASE(unormStaging); - pRes = srgbGPU; - - } - - D3D11_SHADER_RESOURCE_VIEW_DESC SRVDesc; - if( bSRGB ) - SRVDesc.Format = MAKE_SRGB( ZeroInfo.Format ); - else - SRVDesc.Format = ZeroInfo.Format; - if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE1D ) - { - SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE1D; - SRVDesc.Texture1D.MostDetailedMip = 0; - SRVDesc.Texture1D.MipLevels = pLoadInfo->pSrcInfo->MipLevels; - } - else if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE2D ) - { - SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; - SRVDesc.Texture2D.MostDetailedMip = 0; - SRVDesc.Texture2D.MipLevels = pLoadInfo->pSrcInfo->MipLevels; - - if( pLoadInfo->pSrcInfo->MiscFlags & D3D11_RESOURCE_MISC_TEXTURECUBE ) - { - SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE; - SRVDesc.TextureCube.MostDetailedMip = 0; - SRVDesc.TextureCube.MipLevels = pLoadInfo->pSrcInfo->MipLevels; - } - } - else if( pLoadInfo->pSrcInfo->ResourceDimension == D3D11_RESOURCE_DIMENSION_TEXTURE3D ) - { - SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D; - SRVDesc.Texture3D.MostDetailedMip = 0; - SRVDesc.Texture3D.MipLevels = pLoadInfo->pSrcInfo->MipLevels; - } - if (bSRGB) { - SRVDesc.Format = MAKE_SRGB(tex_dsc.Format); - }else { - SRVDesc.Format = tex_dsc.Format; - } - SRVDesc.Texture2D.MipLevels = tex_dsc.MipLevels; - SRVDesc.Texture2D.MostDetailedMip = 0; - hr = pDevice->CreateShaderResourceView( pRes, &SRVDesc, ppOutputRV ); - pRes->Release(); - if( FAILED( hr ) ) - return hr; - - ( *ppOutputRV )->QueryInterface( __uuidof( ID3D11ShaderResourceView ), ( LPVOID* )&NewEntry.pSRV11 ); - - m_TextureCache.Add( NewEntry ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, LPDIRECT3DTEXTURE9* ppTexture ) -{ - return CreateTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, D3DX_DEFAULT, D3DX_DEFAULT, - D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, - D3DX_DEFAULT, 0, NULL, NULL, ppTexture ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, UINT Width, UINT Height, UINT MipLevels, - DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO* pSrcInfo, - PALETTEENTRY* pPalette, LPDIRECT3DTEXTURE9* ppTexture ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_TextureCache.GetSize(); ++i ) - { - DXUTCache_Texture& Entry = m_TextureCache[i]; - if( Entry.Location == DXUTCACHE_LOCATION_RESOURCE && - Entry.hSrcModule == hSrcModule && - !lstrcmpW( Entry.wszSource, pSrcResource ) && - Entry.Width == Width && - Entry.Height == Height && - Entry.MipLevels == MipLevels && - Entry.Usage9 == Usage && - Entry.Format9 == Format && - Entry.Pool9 == Pool && - Entry.Type9 == D3DRTYPE_TEXTURE ) - { - // A match is found. Obtain the IDirect3DTexture9 interface and return that. - return Entry.pTexture9->QueryInterface( IID_IDirect3DTexture9, ( LPVOID* )ppTexture ); - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, Width, Height, MipLevels, Usage, - Format, Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, ppTexture ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Texture NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_RESOURCE; - NewEntry.hSrcModule = hSrcModule; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcResource ); - NewEntry.Width = Width; - NewEntry.Height = Height; - NewEntry.MipLevels = MipLevels; - NewEntry.Usage9 = Usage; - NewEntry.Format9 = Format; - NewEntry.Pool9 = Pool; - NewEntry.Type9 = D3DRTYPE_TEXTURE; - ( *ppTexture )->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&NewEntry.pTexture9 ); - - m_TextureCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateCubeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ) -{ - return CreateCubeTextureFromFileEx( pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, 0, - D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, - 0, NULL, NULL, ppCubeTexture ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateCubeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Size, - UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, - DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_TextureCache.GetSize(); ++i ) - { - DXUTCache_Texture& Entry = m_TextureCache[i]; - if( Entry.Location == DXUTCACHE_LOCATION_FILE && - !lstrcmpW( Entry.wszSource, pSrcFile ) && - Entry.Width == Size && - Entry.MipLevels == MipLevels && - Entry.Usage9 == Usage && - Entry.Format9 == Format && - Entry.Pool9 == Pool && - Entry.Type9 == D3DRTYPE_CUBETEXTURE ) - { - // A match is found. Obtain the IDirect3DCubeTexture9 interface and return that. - return Entry.pTexture9->QueryInterface( IID_IDirect3DCubeTexture9, ( LPVOID* )ppCubeTexture ); - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateCubeTextureFromFileEx( pDevice, pSrcFile, Size, MipLevels, Usage, Format, Pool, Filter, - MipFilter, ColorKey, pSrcInfo, pPalette, ppCubeTexture ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Texture NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_FILE; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcFile ); - NewEntry.Width = Size; - NewEntry.MipLevels = MipLevels; - NewEntry.Usage9 = Usage; - NewEntry.Format9 = Format; - NewEntry.Pool9 = Pool; - NewEntry.Type9 = D3DRTYPE_CUBETEXTURE; - ( *ppCubeTexture )->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&NewEntry.pTexture9 ); - - m_TextureCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateCubeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ) -{ - return CreateCubeTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, D3DX_DEFAULT, D3DX_DEFAULT, - 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, - 0, NULL, NULL, ppCubeTexture ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateCubeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, UINT Size, UINT MipLevels, - DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_TextureCache.GetSize(); ++i ) - { - DXUTCache_Texture& Entry = m_TextureCache[i]; - if( Entry.Location == DXUTCACHE_LOCATION_RESOURCE && - Entry.hSrcModule == hSrcModule && - !lstrcmpW( Entry.wszSource, pSrcResource ) && - Entry.Width == Size && - Entry.MipLevels == MipLevels && - Entry.Usage9 == Usage && - Entry.Format9 == Format && - Entry.Pool9 == Pool && - Entry.Type9 == D3DRTYPE_CUBETEXTURE ) - { - // A match is found. Obtain the IDirect3DCubeTexture9 interface and return that. - return Entry.pTexture9->QueryInterface( IID_IDirect3DCubeTexture9, ( LPVOID* )ppCubeTexture ); - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateCubeTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, Size, MipLevels, Usage, Format, - Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, ppCubeTexture ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Texture NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_RESOURCE; - NewEntry.hSrcModule = hSrcModule; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcResource ); - NewEntry.Width = Size; - NewEntry.MipLevels = MipLevels; - NewEntry.Usage9 = Usage; - NewEntry.Format9 = Format; - NewEntry.Pool9 = Pool; - NewEntry.Type9 = D3DRTYPE_CUBETEXTURE; - ( *ppCubeTexture )->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&NewEntry.pTexture9 ); - - m_TextureCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateVolumeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture ) -{ - return CreateVolumeTextureFromFileEx( pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, - 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, - 0, NULL, NULL, ppVolumeTexture ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateVolumeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, - UINT Height, UINT Depth, UINT MipLevels, DWORD Usage, - D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DVOLUMETEXTURE9* ppTexture ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_TextureCache.GetSize(); ++i ) - { - DXUTCache_Texture& Entry = m_TextureCache[i]; - if( Entry.Location == DXUTCACHE_LOCATION_FILE && - !lstrcmpW( Entry.wszSource, pSrcFile ) && - Entry.Width == Width && - Entry.Height == Height && - Entry.Depth == Depth && - Entry.MipLevels == MipLevels && - Entry.Usage9 == Usage && - Entry.Format9 == Format && - Entry.Pool9 == Pool && - Entry.Type9 == D3DRTYPE_VOLUMETEXTURE ) - { - // A match is found. Obtain the IDirect3DVolumeTexture9 interface and return that. - return Entry.pTexture9->QueryInterface( IID_IDirect3DVolumeTexture9, ( LPVOID* )ppTexture ); - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateVolumeTextureFromFileEx( pDevice, pSrcFile, Width, Height, Depth, MipLevels, Usage, Format, - Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, ppTexture ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Texture NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_FILE; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcFile ); - NewEntry.Width = Width; - NewEntry.Height = Height; - NewEntry.Depth = Depth; - NewEntry.MipLevels = MipLevels; - NewEntry.Usage9 = Usage; - NewEntry.Format9 = Format; - NewEntry.Pool9 = Pool; - NewEntry.Type9 = D3DRTYPE_VOLUMETEXTURE; - ( *ppTexture )->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&NewEntry.pTexture9 ); - - m_TextureCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateVolumeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, - LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture ) -{ - return CreateVolumeTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, D3DX_DEFAULT, D3DX_DEFAULT, - D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, - D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, ppVolumeTexture ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateVolumeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, UINT Width, UINT Height, - UINT Depth, UINT MipLevels, DWORD Usage, - D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_TextureCache.GetSize(); ++i ) - { - DXUTCache_Texture& Entry = m_TextureCache[i]; - if( Entry.Location == DXUTCACHE_LOCATION_RESOURCE && - Entry.hSrcModule == hSrcModule && - !lstrcmpW( Entry.wszSource, pSrcResource ) && - Entry.Width == Width && - Entry.Height == Height && - Entry.Depth == Depth && - Entry.MipLevels == MipLevels && - Entry.Usage9 == Usage && - Entry.Format9 == Format && - Entry.Pool9 == Pool && - Entry.Type9 == D3DRTYPE_VOLUMETEXTURE ) - { - // A match is found. Obtain the IDirect3DVolumeTexture9 interface and return that. - return Entry.pTexture9->QueryInterface( IID_IDirect3DVolumeTexture9, ( LPVOID* )ppVolumeTexture ); - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateVolumeTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, Width, Height, Depth, MipLevels, - Usage, - Format, Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, - ppVolumeTexture ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Texture NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_RESOURCE; - NewEntry.hSrcModule = hSrcModule; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcResource ); - NewEntry.Width = Width; - NewEntry.Height = Height; - NewEntry.Depth = Depth; - NewEntry.MipLevels = MipLevels; - NewEntry.Usage9 = Usage; - NewEntry.Format9 = Format; - NewEntry.Pool9 = Pool; - NewEntry.Type9 = D3DRTYPE_VOLUMETEXTURE; - ( *ppVolumeTexture )->QueryInterface( IID_IDirect3DBaseTexture9, ( LPVOID* )&NewEntry.pTexture9 ); - - m_TextureCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateFont( LPDIRECT3DDEVICE9 pDevice, UINT Height, UINT Width, UINT Weight, - UINT MipLevels, BOOL Italic, DWORD CharSet, DWORD OutputPrecision, - DWORD Quality, DWORD PitchAndFamily, LPCTSTR pFacename, LPD3DXFONT* ppFont ) -{ - D3DXFONT_DESCW Desc; - - Desc.Height = Height; - Desc.Width = Width; - Desc.Weight = Weight; - Desc.MipLevels = MipLevels; - Desc.Italic = Italic; - Desc.CharSet = ( BYTE )CharSet; - Desc.OutputPrecision = ( BYTE )OutputPrecision; - Desc.Quality = ( BYTE )Quality; - Desc.PitchAndFamily = ( BYTE )PitchAndFamily; - wcscpy_s( Desc.FaceName, LF_FACESIZE, pFacename ); - - return CreateFontIndirect( pDevice, &Desc, ppFont ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateFontIndirect( LPDIRECT3DDEVICE9 pDevice, CONST D3DXFONT_DESC *pDesc, LPD3DXFONT *ppFont ) - { - // Search the cache for a matching entry. - for( int i = 0; i < m_FontCache.GetSize(); ++i ) - { - DXUTCache_Font &Entry = m_FontCache[i]; - - if( Entry.Width == pDesc->Width && - Entry.Height == pDesc->Height && - Entry.Weight == pDesc->Weight && - Entry.MipLevels == pDesc->MipLevels && - Entry.Italic == pDesc->Italic && - Entry.CharSet == pDesc->CharSet && - Entry.OutputPrecision == pDesc->OutputPrecision && - Entry.Quality == pDesc->Quality && - Entry.PitchAndFamily == pDesc->PitchAndFamily && - CompareString( LOCALE_USER_DEFAULT, NORM_IGNORECASE, - Entry.FaceName, -1, - pDesc->FaceName, -1 ) == CSTR_EQUAL ) - { - // A match is found. Increment the reference and return the ID3DXFont object. - Entry.pFont->AddRef(); - *ppFont = Entry.pFont; - return S_OK; - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateFontIndirect( pDevice, pDesc, ppFont ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Font NewEntry; - ( D3DXFONT_DESC & )NewEntry = *pDesc; - NewEntry.pFont = *ppFont; - NewEntry.pFont->AddRef(); - - m_FontCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateEffectFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - const D3DXMACRO* pDefines, LPD3DXINCLUDE pInclude, DWORD Flags, - LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT* ppEffect, - LPD3DXBUFFER* ppCompilationErrors ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_EffectCache.GetSize(); ++i ) - { - DXUTCache_Effect& Entry = m_EffectCache[i]; - - if( Entry.Location == DXUTCACHE_LOCATION_FILE && - !lstrcmpW( Entry.wszSource, pSrcFile ) && - Entry.dwFlags == Flags ) - { - // A match is found. Increment the ref coutn and return the ID3DXEffect object. - *ppEffect = Entry.pEffect; - ( *ppEffect )->AddRef(); - return S_OK; - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateEffectFromFile( pDevice, pSrcFile, pDefines, pInclude, Flags, pPool, ppEffect, - ppCompilationErrors ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Effect NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_FILE; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcFile ); - NewEntry.dwFlags = Flags; - NewEntry.pEffect = *ppEffect; - NewEntry.pEffect->AddRef(); - - m_EffectCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::CreateEffectFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, const D3DXMACRO* pDefines, - LPD3DXINCLUDE pInclude, DWORD Flags, LPD3DXEFFECTPOOL pPool, - LPD3DXEFFECT* ppEffect, LPD3DXBUFFER* ppCompilationErrors ) -{ - // Search the cache for a matching entry. - for( int i = 0; i < m_EffectCache.GetSize(); ++i ) - { - DXUTCache_Effect& Entry = m_EffectCache[i]; - - if( Entry.Location == DXUTCACHE_LOCATION_RESOURCE && - Entry.hSrcModule == hSrcModule && - !lstrcmpW( Entry.wszSource, pSrcResource ) && - Entry.dwFlags == Flags ) - { - // A match is found. Increment the ref coutn and return the ID3DXEffect object. - *ppEffect = Entry.pEffect; - ( *ppEffect )->AddRef(); - return S_OK; - } - } - - HRESULT hr; - - // No matching entry. Load the resource and create a new entry. - hr = D3DXCreateEffectFromResource( pDevice, hSrcModule, pSrcResource, pDefines, pInclude, Flags, - pPool, ppEffect, ppCompilationErrors ); - if( FAILED( hr ) ) - return hr; - - DXUTCache_Effect NewEntry; - NewEntry.Location = DXUTCACHE_LOCATION_RESOURCE; - NewEntry.hSrcModule = hSrcModule; - wcscpy_s( NewEntry.wszSource, MAX_PATH, pSrcResource ); - NewEntry.dwFlags = Flags; - NewEntry.pEffect = *ppEffect; - NewEntry.pEffect->AddRef(); - - m_EffectCache.Add( NewEntry ); - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Device event callbacks -//-------------------------------------------------------------------------------------- - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::OnCreateDevice( IDirect3DDevice9* pd3dDevice ) -{ - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::OnResetDevice( IDirect3DDevice9* pd3dDevice ) -{ - // Call OnResetDevice on all effect and font objects - for( int i = 0; i < m_EffectCache.GetSize(); ++i ) - m_EffectCache[i].pEffect->OnResetDevice(); - for( int i = 0; i < m_FontCache.GetSize(); ++i ) - m_FontCache[i].pFont->OnResetDevice(); - - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::OnLostDevice() -{ - // Call OnLostDevice on all effect and font objects - for( int i = 0; i < m_EffectCache.GetSize(); ++i ) - m_EffectCache[i].pEffect->OnLostDevice(); - for( int i = 0; i < m_FontCache.GetSize(); ++i ) - m_FontCache[i].pFont->OnLostDevice(); - - // Release all the default pool textures - for( int i = m_TextureCache.GetSize() - 1; i >= 0; --i ) - if( m_TextureCache[i].Pool9 == D3DPOOL_DEFAULT ) - { - SAFE_RELEASE( m_TextureCache[i].pTexture9 ); - m_TextureCache.Remove( i ); // Remove the entry - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTResourceCache::OnDestroyDevice() -{ - // Release all resources - for( int i = m_EffectCache.GetSize() - 1; i >= 0; --i ) - { - SAFE_RELEASE( m_EffectCache[i].pEffect ); - m_EffectCache.Remove( i ); - } - for( int i = m_FontCache.GetSize() - 1; i >= 0; --i ) - { - SAFE_RELEASE( m_FontCache[i].pFont ); - m_FontCache.Remove( i ); - } - for( int i = m_TextureCache.GetSize() - 1; i >= 0; --i ) - { - SAFE_RELEASE( m_TextureCache[i].pTexture9 ); - SAFE_RELEASE( m_TextureCache[i].pSRV11 ); - m_TextureCache.Remove( i ); - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Desc: Returns a view matrix for rendering to a face of a cubemap. -//-------------------------------------------------------------------------------------- -D3DXMATRIX WINAPI DXUTGetCubeMapViewMatrix( DWORD dwFace ) -{ - D3DXVECTOR3 vEyePt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); - D3DXVECTOR3 vLookDir; - D3DXVECTOR3 vUpDir; - - switch( dwFace ) - { - case D3DCUBEMAP_FACE_POSITIVE_X: - vLookDir = D3DXVECTOR3( 1.0f, 0.0f, 0.0f ); - vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); - break; - case D3DCUBEMAP_FACE_NEGATIVE_X: - vLookDir = D3DXVECTOR3( -1.0f, 0.0f, 0.0f ); - vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); - break; - case D3DCUBEMAP_FACE_POSITIVE_Y: - vLookDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); - vUpDir = D3DXVECTOR3( 0.0f, 0.0f, -1.0f ); - break; - case D3DCUBEMAP_FACE_NEGATIVE_Y: - vLookDir = D3DXVECTOR3( 0.0f, -1.0f, 0.0f ); - vUpDir = D3DXVECTOR3( 0.0f, 0.0f, 1.0f ); - break; - case D3DCUBEMAP_FACE_POSITIVE_Z: - vLookDir = D3DXVECTOR3( 0.0f, 0.0f, 1.0f ); - vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); - break; - case D3DCUBEMAP_FACE_NEGATIVE_Z: - vLookDir = D3DXVECTOR3( 0.0f, 0.0f, -1.0f ); - vUpDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); - break; - } - - // Set the view transform for this cubemap surface - D3DXMATRIXA16 mView; - D3DXMatrixLookAtLH( &mView, &vEyePt, &vLookDir, &vUpDir ); - return mView; -} - - -//-------------------------------------------------------------------------------------- -CDXUTLineManager::CDXUTLineManager() -{ - m_pd3dDevice = NULL; - m_pD3DXLine = NULL; -} - - -//-------------------------------------------------------------------------------------- -CDXUTLineManager::~CDXUTLineManager() -{ - OnDeletedDevice(); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::OnCreatedDevice( IDirect3DDevice9* pd3dDevice ) -{ - m_pd3dDevice = pd3dDevice; - - HRESULT hr; - hr = D3DXCreateLine( m_pd3dDevice, &m_pD3DXLine ); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::OnResetDevice() -{ - if( m_pD3DXLine ) - m_pD3DXLine->OnResetDevice(); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::OnRender() -{ - HRESULT hr; - if( NULL == m_pD3DXLine ) - return E_INVALIDARG; - - bool bDrawingHasBegun = false; - float fLastWidth = 0.0f; - bool bLastAntiAlias = false; - - for( int i = 0; i < m_LinesList.GetSize(); i++ ) - { - LINE_NODE* pLineNode = m_LinesList.GetAt( i ); - if( pLineNode ) - { - if( !bDrawingHasBegun || - fLastWidth != pLineNode->fWidth || - bLastAntiAlias != pLineNode->bAntiAlias ) - { - if( bDrawingHasBegun ) - { - hr = m_pD3DXLine->End(); - if( FAILED( hr ) ) - return hr; - } - - m_pD3DXLine->SetWidth( pLineNode->fWidth ); - m_pD3DXLine->SetAntialias( pLineNode->bAntiAlias ); - - fLastWidth = pLineNode->fWidth; - bLastAntiAlias = pLineNode->bAntiAlias; - - hr = m_pD3DXLine->Begin(); - if( FAILED( hr ) ) - return hr; - bDrawingHasBegun = true; - } - - hr = m_pD3DXLine->Draw( pLineNode->pVertexList, pLineNode->dwVertexListCount, pLineNode->Color ); - if( FAILED( hr ) ) - return hr; - } - } - - if( bDrawingHasBegun ) - { - hr = m_pD3DXLine->End(); - if( FAILED( hr ) ) - return hr; - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::OnLostDevice() -{ - if( m_pD3DXLine ) - m_pD3DXLine->OnLostDevice(); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::OnDeletedDevice() -{ - RemoveAllLines(); - SAFE_RELEASE( m_pD3DXLine ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::AddLine( int* pnLineID, D3DXVECTOR2* pVertexList, DWORD dwVertexListCount, D3DCOLOR Color, - float fWidth, float fScaleRatio, bool bAntiAlias ) -{ - if( pVertexList == NULL || dwVertexListCount == 0 ) - return E_INVALIDARG; - - LINE_NODE* pLineNode = new LINE_NODE; - if( pLineNode == NULL ) - return E_OUTOFMEMORY; - ZeroMemory( pLineNode, sizeof( LINE_NODE ) ); - - pLineNode->nLineID = m_LinesList.GetSize(); - pLineNode->Color = Color; - pLineNode->fWidth = fWidth; - pLineNode->bAntiAlias = bAntiAlias; - pLineNode->dwVertexListCount = dwVertexListCount; - - if( pnLineID ) - *pnLineID = pLineNode->nLineID; - - pLineNode->pVertexList = new D3DXVECTOR2[dwVertexListCount]; - if( pLineNode->pVertexList == NULL ) - { - delete pLineNode; - return E_OUTOFMEMORY; - } - for( DWORD i = 0; i < dwVertexListCount; i++ ) - { - pLineNode->pVertexList[i] = pVertexList[i] * fScaleRatio; - } - - m_LinesList.Add( pLineNode ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::AddRect( int* pnLineID, RECT rc, D3DCOLOR Color, float fWidth, float fScaleRatio, - bool bAntiAlias ) -{ - if( fWidth > 2.0f ) - { - D3DXVECTOR2 vertexList[8]; - - vertexList[0].x = ( float )rc.left; - vertexList[0].y = ( float )rc.top - ( fWidth / 2.0f ); - - vertexList[1].x = ( float )rc.left; - vertexList[1].y = ( float )rc.bottom + ( fWidth / 2.0f ); - - vertexList[2].x = ( float )rc.left; - vertexList[2].y = ( float )rc.bottom - 0.5f; - - vertexList[3].x = ( float )rc.right; - vertexList[3].y = ( float )rc.bottom - 0.5f; - - vertexList[4].x = ( float )rc.right; - vertexList[4].y = ( float )rc.bottom + ( fWidth / 2.0f ); - - vertexList[5].x = ( float )rc.right; - vertexList[5].y = ( float )rc.top - ( fWidth / 2.0f ); - - vertexList[6].x = ( float )rc.right; - vertexList[6].y = ( float )rc.top; - - vertexList[7].x = ( float )rc.left; - vertexList[7].y = ( float )rc.top; - - return AddLine( pnLineID, vertexList, 8, Color, fWidth, fScaleRatio, bAntiAlias ); - } - else - { - D3DXVECTOR2 vertexList[5]; - vertexList[0].x = ( float )rc.left; - vertexList[0].y = ( float )rc.top; - - vertexList[1].x = ( float )rc.left; - vertexList[1].y = ( float )rc.bottom; - - vertexList[2].x = ( float )rc.right; - vertexList[2].y = ( float )rc.bottom; - - vertexList[3].x = ( float )rc.right; - vertexList[3].y = ( float )rc.top; - - vertexList[4].x = ( float )rc.left; - vertexList[4].y = ( float )rc.top; - - return AddLine( pnLineID, vertexList, 5, Color, fWidth, fScaleRatio, bAntiAlias ); - } -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::RemoveLine( int nLineID ) -{ - for( int i = 0; i < m_LinesList.GetSize(); i++ ) - { - LINE_NODE* pLineNode = m_LinesList.GetAt( i ); - if( pLineNode && pLineNode->nLineID == nLineID ) - { - SAFE_DELETE_ARRAY( pLineNode->pVertexList ); - delete pLineNode; - m_LinesList.SetAt( i, NULL ); - } - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTLineManager::RemoveAllLines() -{ - for( int i = 0; i < m_LinesList.GetSize(); i++ ) - { - LINE_NODE* pLineNode = m_LinesList.GetAt( i ); - if( pLineNode ) - { - SAFE_DELETE_ARRAY( pLineNode->pVertexList ); - delete pLineNode; - } - } - m_LinesList.RemoveAll(); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -CDXUTTextHelper::CDXUTTextHelper( ID3DXFont* pFont9, ID3DXSprite* pSprite9, int nLineHeight ) -{ - Init( pFont9, pSprite9, nLineHeight ); -} - -CDXUTTextHelper::CDXUTTextHelper( ID3D11Device* pd3d11Device, ID3D11DeviceContext* pd3d11DeviceContext, CDXUTDialogResourceManager* pManager, int nLineHeight ) -{ - Init( NULL, NULL, nLineHeight ); - m_pd3d11Device = pd3d11Device; - m_pd3d11DeviceContext = pd3d11DeviceContext; - m_pManager = pManager; -} -CDXUTTextHelper::~CDXUTTextHelper() -{ - -} - -//-------------------------------------------------------------------------------------- -void CDXUTTextHelper::Init( ID3DXFont* pFont9, ID3DXSprite* pSprite9, - int nLineHeight ) -{ - m_pFont9 = pFont9; - m_pSprite9 = pSprite9; - m_clr = D3DXCOLOR( 1, 1, 1, 1 ); - m_pt.x = 0; - m_pt.y = 0; - m_nLineHeight = nLineHeight; - m_pd3d11Device = NULL; - m_pd3d11DeviceContext = NULL; - m_pManager = NULL; - - // Create a blend state if a sprite is passed in -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTTextHelper::DrawFormattedTextLine( const WCHAR* strMsg, ... ) -{ - WCHAR strBuffer[512]; - - va_list args; - va_start( args, strMsg ); - vswprintf_s( strBuffer, 512, strMsg, args ); - strBuffer[511] = L'\0'; - va_end( args ); - - return DrawTextLine( strBuffer ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CDXUTTextHelper::DrawTextLine( const WCHAR* strMsg ) -{ - if( NULL == m_pFont9 && NULL == m_pd3d11DeviceContext ) - return DXUT_ERR_MSGBOX( L"DrawTextLine", E_INVALIDARG ); - - HRESULT hr = S_OK; - RECT rc; - SetRect( &rc, m_pt.x, m_pt.y, 0, 0 ); - if( m_pFont9 ) - hr = m_pFont9->DrawText( m_pSprite9, strMsg, -1, &rc, DT_NOCLIP, m_clr ); - else if( m_pd3d11DeviceContext ) - DrawText11DXUT( m_pd3d11Device, m_pd3d11DeviceContext, strMsg, rc, m_clr, - (float)m_pManager->m_nBackBufferWidth, (float)m_pManager->m_nBackBufferHeight, false ); - - if( FAILED( hr ) ) - return DXTRACE_ERR_MSGBOX( L"DrawText", hr ); - - m_pt.y += m_nLineHeight; - - return S_OK; -} - - -HRESULT CDXUTTextHelper::DrawFormattedTextLine( RECT& rc, DWORD dwFlags, const WCHAR* strMsg, ... ) -{ - WCHAR strBuffer[512]; - - va_list args; - va_start( args, strMsg ); - vswprintf_s( strBuffer, 512, strMsg, args ); - strBuffer[511] = L'\0'; - va_end( args ); - - return DrawTextLine( rc, dwFlags, strBuffer ); -} - - -HRESULT CDXUTTextHelper::DrawTextLine( RECT& rc, DWORD dwFlags, const WCHAR* strMsg ) -{ - if( NULL == m_pFont9 && NULL == m_pd3d11DeviceContext ) - return DXUT_ERR_MSGBOX( L"DrawTextLine", E_INVALIDARG ); - - HRESULT hr = S_OK; - if( m_pFont9 ) - hr = m_pFont9->DrawText( m_pSprite9, strMsg, -1, &rc, dwFlags, m_clr ); - else if( m_pd3d11DeviceContext ) - DrawText11DXUT( m_pd3d11Device, m_pd3d11DeviceContext, strMsg, rc, m_clr, - (float)m_pManager->m_nBackBufferWidth, (float)m_pManager->m_nBackBufferHeight, false ); - - if( FAILED( hr ) ) - return DXTRACE_ERR_MSGBOX( L"DrawText", hr ); - - m_pt.y += m_nLineHeight; - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CDXUTTextHelper::Begin() -{ - if( m_pSprite9 ) - m_pSprite9->Begin( D3DXSPRITE_ALPHABLEND | D3DXSPRITE_SORT_TEXTURE ); - - if( m_pd3d11DeviceContext ) - { - m_pManager->StoreD3D11State( m_pd3d11DeviceContext ); - m_pManager->ApplyRenderUI11( m_pd3d11DeviceContext ); - } - - -} -void CDXUTTextHelper::End() -{ - if( m_pSprite9 ) - m_pSprite9->End(); - - if( m_pd3d11DeviceContext ) - { - m_pManager->RestoreD3D11State( m_pd3d11DeviceContext ); - } -} diff --git a/sample/d3d11/common/SDKmisc.h b/sample/d3d11/common/SDKmisc.h deleted file mode 100644 index 3c6bb0b..0000000 --- a/sample/d3d11/common/SDKmisc.h +++ /dev/null @@ -1,368 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: SDKMisc.h -// -// Various helper functionality that is shared between SDK samples -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#pragma once -#ifndef SDKMISC_H -#define SDKMISC_H - - -//----------------------------------------------------------------------------- -// Resource cache for textures, fonts, meshs, and effects. -// Use DXUTGetGlobalResourceCache() to access the global cache -//----------------------------------------------------------------------------- - -enum DXUTCACHE_SOURCELOCATION -{ - DXUTCACHE_LOCATION_FILE, - DXUTCACHE_LOCATION_RESOURCE -}; - -struct DXUTCache_Texture -{ - DXUTCACHE_SOURCELOCATION Location; - WCHAR wszSource[MAX_PATH]; - HMODULE hSrcModule; - UINT Width; - UINT Height; - UINT Depth; - UINT MipLevels; - UINT MiscFlags; - union - { - DWORD Usage9; - D3D11_USAGE Usage11; - }; - union - { - D3DFORMAT Format9; - DXGI_FORMAT Format; - }; - union - { - D3DPOOL Pool9; - UINT CpuAccessFlags; - }; - union - { - D3DRESOURCETYPE Type9; - UINT BindFlags; - }; - IDirect3DBaseTexture9* pTexture9; - ID3D11ShaderResourceView* pSRV11; - - DXUTCache_Texture() - { - pTexture9 = NULL; - pSRV11 = NULL; - } -}; - -struct DXUTCache_Font : public D3DXFONT_DESC -{ - ID3DXFont* pFont; -}; - -struct DXUTCache_Effect -{ - DXUTCACHE_SOURCELOCATION Location; - WCHAR wszSource[MAX_PATH]; - HMODULE hSrcModule; - DWORD dwFlags; - ID3DXEffect* pEffect; -}; - - -class CDXUTResourceCache -{ -public: - ~CDXUTResourceCache(); - - HRESULT CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - LPDIRECT3DTEXTURE9* ppTexture ); - HRESULT CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCSTR pSrcFile, - LPDIRECT3DTEXTURE9* ppTexture ); - HRESULT CreateTextureFromFile( ID3D11Device* pDevice, ID3D11DeviceContext *pContext, LPCTSTR pSrcFile, - ID3D11ShaderResourceView** ppOutputRV, bool bSRGB=false ); - HRESULT CreateTextureFromFile( ID3D11Device* pDevice, ID3D11DeviceContext *pContext, LPCSTR pSrcFile, - ID3D11ShaderResourceView** ppOutputRV, bool bSRGB=false ); - HRESULT CreateTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, - UINT Height, UINT MipLevels, DWORD Usage, D3DFORMAT Format, - D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DTEXTURE9* ppTexture ); - HRESULT CreateTextureFromFileEx( ID3D11Device* pDevice, ID3D11DeviceContext* pContext, LPCTSTR pSrcFile, - D3DX11_IMAGE_LOAD_INFO* pLoadInfo, ID3DX11ThreadPump* pPump, - ID3D11ShaderResourceView** ppOutputRV, bool bSRGB ); - HRESULT CreateTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, LPDIRECT3DTEXTURE9* ppTexture ); - HRESULT CreateTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, UINT Width, UINT Height, UINT MipLevels, - DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO* pSrcInfo, - PALETTEENTRY* pPalette, LPDIRECT3DTEXTURE9* ppTexture ); - HRESULT CreateCubeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ); - HRESULT CreateCubeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Size, - UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, - DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ); - HRESULT CreateCubeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ); - HRESULT CreateCubeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, UINT Size, UINT MipLevels, - DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DCUBETEXTURE9* ppCubeTexture ); - HRESULT CreateVolumeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture ); - HRESULT CreateVolumeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, - UINT Height, UINT Depth, UINT MipLevels, DWORD Usage, - D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DVOLUMETEXTURE9* ppTexture ); - HRESULT CreateVolumeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, - LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture ); - HRESULT CreateVolumeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, UINT Width, UINT Height, - UINT Depth, UINT MipLevels, DWORD Usage, - D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, - DWORD MipFilter, D3DCOLOR ColorKey, - D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette, - LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture ); - HRESULT CreateFont( LPDIRECT3DDEVICE9 pDevice, UINT Height, UINT Width, UINT Weight, - UINT MipLevels, BOOL Italic, DWORD CharSet, DWORD OutputPrecision, - DWORD Quality, DWORD PitchAndFamily, LPCTSTR pFacename, LPD3DXFONT* ppFont ); - HRESULT CreateFontIndirect( LPDIRECT3DDEVICE9 pDevice, CONST D3DXFONT_DESC *pDesc, LPD3DXFONT *ppFont ); - HRESULT CreateEffectFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, - const D3DXMACRO* pDefines, LPD3DXINCLUDE pInclude, DWORD Flags, - LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT* ppEffect, - LPD3DXBUFFER* ppCompilationErrors ); - HRESULT CreateEffectFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, - LPCTSTR pSrcResource, const D3DXMACRO* pDefines, - LPD3DXINCLUDE pInclude, DWORD Flags, LPD3DXEFFECTPOOL pPool, - LPD3DXEFFECT* ppEffect, LPD3DXBUFFER* ppCompilationErrors ); - -public: - HRESULT OnCreateDevice( IDirect3DDevice9* pd3dDevice ); - HRESULT OnResetDevice( IDirect3DDevice9* pd3dDevice ); - HRESULT OnLostDevice(); - HRESULT OnDestroyDevice(); - -protected: - friend CDXUTResourceCache& WINAPI DXUTGetGlobalResourceCache(); - friend HRESULT WINAPI DXUTInitialize3DEnvironment(); - friend HRESULT WINAPI DXUTReset3DEnvironment(); - friend void WINAPI DXUTCleanup3DEnvironment( bool bReleaseSettings ); - - CDXUTResourceCache() - { - } - - CGrowableArray m_TextureCache; - CGrowableArray m_EffectCache; - CGrowableArray m_FontCache; -}; - -CDXUTResourceCache& WINAPI DXUTGetGlobalResourceCache(); - - -//-------------------------------------------------------------------------------------- -// Manages the insertion point when drawing text -//-------------------------------------------------------------------------------------- -class CDXUTDialogResourceManager; -class CDXUTTextHelper -{ -public: - CDXUTTextHelper( ID3DXFont* pFont9 = NULL, ID3DXSprite* pSprite9 = NULL, - int nLineHeight = 15 ); - CDXUTTextHelper( ID3D11Device* pd3d11Device, ID3D11DeviceContext* pd3dDeviceContext, CDXUTDialogResourceManager* pManager, int nLineHeight ); - ~CDXUTTextHelper(); - - void Init( ID3DXFont* pFont9 = NULL, ID3DXSprite* pSprite9 = NULL, - int nLineHeight = 15 ); - - void SetInsertionPos( int x, int y ) - { - m_pt.x = x; m_pt.y = y; - } - void SetForegroundColor( D3DXCOLOR clr ) - { - m_clr = clr; - } - - void Begin(); - HRESULT DrawFormattedTextLine( const WCHAR* strMsg, ... ); - HRESULT DrawTextLine( const WCHAR* strMsg ); - HRESULT DrawFormattedTextLine( RECT& rc, DWORD dwFlags, const WCHAR* strMsg, ... ); - HRESULT DrawTextLine( RECT& rc, DWORD dwFlags, const WCHAR* strMsg ); - void End(); - -protected: - ID3DXFont* m_pFont9; - ID3DXSprite* m_pSprite9; - D3DXCOLOR m_clr; - POINT m_pt; - int m_nLineHeight; - - // D3D11 font - ID3D11Device* m_pd3d11Device; - ID3D11DeviceContext* m_pd3d11DeviceContext; - CDXUTDialogResourceManager* m_pManager; -}; - - -//-------------------------------------------------------------------------------------- -// Manages a persistent list of lines and draws them using ID3DXLine -//-------------------------------------------------------------------------------------- -class CDXUTLineManager -{ -public: - CDXUTLineManager(); - ~CDXUTLineManager(); - - HRESULT OnCreatedDevice( IDirect3DDevice9* pd3dDevice ); - HRESULT OnResetDevice(); - HRESULT OnRender(); - HRESULT OnLostDevice(); - HRESULT OnDeletedDevice(); - - HRESULT AddLine( int* pnLineID, D3DXVECTOR2* pVertexList, DWORD dwVertexListCount, D3DCOLOR Color, float fWidth, - float fScaleRatio, bool bAntiAlias ); - HRESULT AddRect( int* pnLineID, RECT rc, D3DCOLOR Color, float fWidth, float fScaleRatio, bool bAntiAlias ); - HRESULT RemoveLine( int nLineID ); - HRESULT RemoveAllLines(); - -protected: - struct LINE_NODE - { - int nLineID; - D3DCOLOR Color; - float fWidth; - bool bAntiAlias; - float fScaleRatio; - D3DXVECTOR2* pVertexList; - DWORD dwVertexListCount; - }; - - CGrowableArray m_LinesList; - IDirect3DDevice9* m_pd3dDevice; - ID3DXLine* m_pD3DXLine; -}; - - -//-------------------------------------------------------------------------------------- -// Shared code for samples to ask user if they want to use a REF device or quit -//-------------------------------------------------------------------------------------- -void WINAPI DXUTDisplaySwitchingToREFWarning( DXUTDeviceVersion ver ); - -//-------------------------------------------------------------------------------------- -// Tries to finds a media file by searching in common locations -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXUTFindDXSDKMediaFileCch( __in_ecount(cchDest) WCHAR* strDestPath, - int cchDest, - __in LPCWSTR strFilename ); -HRESULT WINAPI DXUTSetMediaSearchPath( LPCWSTR strPath ); -LPCWSTR WINAPI DXUTGetMediaSearchPath(); - - -//-------------------------------------------------------------------------------------- -// Returns a view matrix for rendering to a face of a cubemap. -//-------------------------------------------------------------------------------------- -D3DXMATRIX WINAPI DXUTGetCubeMapViewMatrix( DWORD dwFace ); - - -//-------------------------------------------------------------------------------------- -// Simple helper stack class -//-------------------------------------------------------------------------------------- -template class CDXUTStack -{ -private: - UINT m_MemorySize; - UINT m_NumElements; - T* m_pData; - - bool EnsureStackSize( UINT64 iElements ) - { - if( m_MemorySize > iElements ) - return true; - - T* pTemp = new T[ ( size_t )( iElements * 2 + 256 ) ]; - if( !pTemp ) - return false; - - if( m_NumElements ) - { - CopyMemory( pTemp, m_pData, ( size_t )( m_NumElements * sizeof( T ) ) ); - } - - if( m_pData ) delete []m_pData; - m_pData = pTemp; - return true; - } - -public: - CDXUTStack() - { - m_pData = NULL; m_NumElements = 0; m_MemorySize = 0; - } - ~CDXUTStack() - { - if( m_pData ) delete []m_pData; - } - - UINT GetCount() - { - return m_NumElements; - } - T GetAt( UINT i ) - { - return m_pData[i]; - } - T GetTop() - { - if( m_NumElements < 1 ) - return NULL; - - return m_pData[ m_NumElements - 1 ]; - } - - T GetRelative( INT i ) - { - INT64 iVal = m_NumElements - 1 + i; - if( iVal < 0 ) - return NULL; - return m_pData[ iVal ]; - } - - bool Push( T pElem ) - { - if( !EnsureStackSize( m_NumElements + 1 ) ) - return false; - - m_pData[m_NumElements] = pElem; - m_NumElements++; - - return true; - } - - T Pop() - { - if( m_NumElements < 1 ) - return NULL; - - m_NumElements --; - return m_pData[m_NumElements]; - } -}; - - -#endif diff --git a/sample/d3d11/common/directx.ico b/sample/d3d11/common/directx.ico deleted file mode 100644 index bc43c1b..0000000 Binary files a/sample/d3d11/common/directx.ico and /dev/null differ diff --git a/sample/d3d11/common/dxerr.cpp b/sample/d3d11/common/dxerr.cpp deleted file mode 100644 index 7d6723d..0000000 --- a/sample/d3d11/common/dxerr.cpp +++ /dev/null @@ -1,3657 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXErr.cpp -// -// DirectX Error Library -// -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- -#include "dxut.h" - -// This version only supports UNICODE. - -#include "dxerr.h" - -#include - -#include -#include -#include -#include -#include -#include - -#define XAUDIO2_E_INVALID_CALL 0x88960001 -#define XAUDIO2_E_XMA_DECODER_ERROR 0x88960002 -#define XAUDIO2_E_XAPO_CREATION_FAILED 0x88960003 -#define XAUDIO2_E_DEVICE_INVALIDATED 0x88960004 - -#define XAPO_E_FORMAT_UNSUPPORTED MAKE_HRESULT(SEVERITY_ERROR, 0x897, 0x01) - -#define DXUTERR_NODIRECT3D MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0901) -#define DXUTERR_NOCOMPATIBLEDEVICES MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0902) -#define DXUTERR_MEDIANOTFOUND MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0903) -#define DXUTERR_NONZEROREFCOUNT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0904) -#define DXUTERR_CREATINGDEVICE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0905) -#define DXUTERR_RESETTINGDEVICE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0906) -#define DXUTERR_CREATINGDEVICEOBJECTS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0907) -#define DXUTERR_RESETTINGDEVICEOBJECTS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0908) -#define DXUTERR_INCORRECTVERSION MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0909) -#define DXUTERR_DEVICEREMOVED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x090A) - -//----------------------------------------------------------------------------- -#define BUFFER_SIZE 3000 - -#pragma warning( disable : 6001 6221 ) - -//-------------------------------------------------------------------------------------- -#define CHK_ERR(hrchk, strOut) \ - case hrchk: \ - return L##strOut; - -#define CHK_ERRA(hrchk) \ - case hrchk: \ - return L#hrchk; - -#define HRESULT_FROM_WIN32b(x) ((HRESULT)(x) <= 0 ? ((HRESULT)(x)) : ((HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000))) - -#define CHK_ERR_WIN32A(hrchk) \ - case HRESULT_FROM_WIN32b(hrchk): \ - case hrchk: \ - return L#hrchk; - -#define CHK_ERR_WIN32_ONLY(hrchk, strOut) \ - case HRESULT_FROM_WIN32b(hrchk): \ - return L##strOut; - -//----------------------------------------------------- -const WCHAR* WINAPI DXGetErrorStringW( _In_ HRESULT hr ) -{ - switch(hr) - { -// Commmented out codes are actually alises for other codes - -// ------------------------------------------------------------- -// Common Win32 error codes -// ------------------------------------------------------------- - CHK_ERRA(S_OK) - CHK_ERRA(S_FALSE) - - CHK_ERRA(E_UNEXPECTED) - CHK_ERRA(E_NOTIMPL) - CHK_ERRA(E_OUTOFMEMORY) - CHK_ERRA(E_INVALIDARG) - CHK_ERRA(E_NOINTERFACE) - CHK_ERRA(E_POINTER) - CHK_ERRA(E_HANDLE) - CHK_ERRA(E_ABORT) - CHK_ERRA(E_FAIL) - CHK_ERRA(E_ACCESSDENIED) - CHK_ERRA(E_PENDING) - CHK_ERRA(CO_E_INIT_TLS) - CHK_ERRA(CO_E_INIT_SHARED_ALLOCATOR) - CHK_ERRA(CO_E_INIT_MEMORY_ALLOCATOR) - CHK_ERRA(CO_E_INIT_CLASS_CACHE) - CHK_ERRA(CO_E_INIT_RPC_CHANNEL) - CHK_ERRA(CO_E_INIT_TLS_SET_CHANNEL_CONTROL) - CHK_ERRA(CO_E_INIT_TLS_CHANNEL_CONTROL) - CHK_ERRA(CO_E_INIT_UNACCEPTED_USER_ALLOCATOR) - CHK_ERRA(CO_E_INIT_SCM_MUTEX_EXISTS) - CHK_ERRA(CO_E_INIT_SCM_FILE_MAPPING_EXISTS) - CHK_ERRA(CO_E_INIT_SCM_MAP_VIEW_OF_FILE) - CHK_ERRA(CO_E_INIT_SCM_EXEC_FAILURE) - CHK_ERRA(CO_E_INIT_ONLY_SINGLE_THREADED) - CHK_ERRA(CO_E_CANT_REMOTE) - CHK_ERRA(CO_E_BAD_SERVER_NAME) - CHK_ERRA(CO_E_WRONG_SERVER_IDENTITY) - CHK_ERRA(CO_E_OLE1DDE_DISABLED) - CHK_ERRA(CO_E_RUNAS_SYNTAX) - CHK_ERRA(CO_E_CREATEPROCESS_FAILURE) - CHK_ERRA(CO_E_RUNAS_CREATEPROCESS_FAILURE) - CHK_ERRA(CO_E_RUNAS_LOGON_FAILURE) - CHK_ERRA(CO_E_LAUNCH_PERMSSION_DENIED) - CHK_ERRA(CO_E_START_SERVICE_FAILURE) - CHK_ERRA(CO_E_REMOTE_COMMUNICATION_FAILURE) - CHK_ERRA(CO_E_SERVER_START_TIMEOUT) - CHK_ERRA(CO_E_CLSREG_INCONSISTENT) - CHK_ERRA(CO_E_IIDREG_INCONSISTENT) - CHK_ERRA(CO_E_NOT_SUPPORTED) - CHK_ERRA(CO_E_RELOAD_DLL) - CHK_ERRA(CO_E_MSI_ERROR) - CHK_ERRA(OLE_E_FIRST) - CHK_ERRA(OLE_E_LAST) - CHK_ERRA(OLE_S_FIRST) - CHK_ERRA(OLE_S_LAST) -// CHK_ERRA(OLE_E_OLEVERB) - CHK_ERRA(OLE_E_ADVF) - CHK_ERRA(OLE_E_ENUM_NOMORE) - CHK_ERRA(OLE_E_ADVISENOTSUPPORTED) - CHK_ERRA(OLE_E_NOCONNECTION) - CHK_ERRA(OLE_E_NOTRUNNING) - CHK_ERRA(OLE_E_NOCACHE) - CHK_ERRA(OLE_E_BLANK) - CHK_ERRA(OLE_E_CLASSDIFF) - CHK_ERRA(OLE_E_CANT_GETMONIKER) - CHK_ERRA(OLE_E_CANT_BINDTOSOURCE) - CHK_ERRA(OLE_E_STATIC) - CHK_ERRA(OLE_E_PROMPTSAVECANCELLED) - CHK_ERRA(OLE_E_INVALIDRECT) - CHK_ERRA(OLE_E_WRONGCOMPOBJ) - CHK_ERRA(OLE_E_INVALIDHWND) - CHK_ERRA(OLE_E_NOT_INPLACEACTIVE) - CHK_ERRA(OLE_E_CANTCONVERT) - CHK_ERRA(OLE_E_NOSTORAGE) - CHK_ERRA(DV_E_FORMATETC) - CHK_ERRA(DV_E_DVTARGETDEVICE) - CHK_ERRA(DV_E_STGMEDIUM) - CHK_ERRA(DV_E_STATDATA) - CHK_ERRA(DV_E_LINDEX) - CHK_ERRA(DV_E_TYMED) - CHK_ERRA(DV_E_CLIPFORMAT) - CHK_ERRA(DV_E_DVASPECT) - CHK_ERRA(DV_E_DVTARGETDEVICE_SIZE) - CHK_ERRA(DV_E_NOIVIEWOBJECT) - CHK_ERRA(DRAGDROP_E_FIRST) - CHK_ERRA(DRAGDROP_E_LAST) - CHK_ERRA(DRAGDROP_S_FIRST) - CHK_ERRA(DRAGDROP_S_LAST) -// CHK_ERRA(DRAGDROP_E_NOTREGISTERED) - CHK_ERRA(DRAGDROP_E_ALREADYREGISTERED) - CHK_ERRA(DRAGDROP_E_INVALIDHWND) - CHK_ERRA(CLASSFACTORY_E_FIRST) - CHK_ERRA(CLASSFACTORY_E_LAST) - CHK_ERRA(CLASSFACTORY_S_FIRST) - CHK_ERRA(CLASSFACTORY_S_LAST) -// CHK_ERRA(CLASS_E_NOAGGREGATION) - CHK_ERRA(CLASS_E_CLASSNOTAVAILABLE) - CHK_ERRA(CLASS_E_NOTLICENSED) - CHK_ERRA(MARSHAL_E_FIRST) - CHK_ERRA(MARSHAL_E_LAST) - CHK_ERRA(MARSHAL_S_FIRST) - CHK_ERRA(MARSHAL_S_LAST) - CHK_ERRA(DATA_E_FIRST) - CHK_ERRA(DATA_E_LAST) - CHK_ERRA(DATA_S_FIRST) - CHK_ERRA(DATA_S_LAST) - CHK_ERRA(VIEW_E_FIRST) - CHK_ERRA(VIEW_E_LAST) - CHK_ERRA(VIEW_S_FIRST) - CHK_ERRA(VIEW_S_LAST) -// CHK_ERRA(VIEW_E_DRAW) - CHK_ERRA(REGDB_E_FIRST) - CHK_ERRA(REGDB_E_LAST) - CHK_ERRA(REGDB_S_FIRST) - CHK_ERRA(REGDB_S_LAST) -// CHK_ERRA(REGDB_E_READREGDB) - CHK_ERRA(REGDB_E_WRITEREGDB) - CHK_ERRA(REGDB_E_KEYMISSING) - CHK_ERRA(REGDB_E_INVALIDVALUE) - CHK_ERRA(REGDB_E_CLASSNOTREG) - CHK_ERRA(REGDB_E_IIDNOTREG) - CHK_ERRA(CAT_E_FIRST) - CHK_ERRA(CAT_E_LAST) -// CHK_ERRA(CAT_E_CATIDNOEXIST) -// CHK_ERRA(CAT_E_NODESCRIPTION) - CHK_ERRA(CS_E_FIRST) - CHK_ERRA(CS_E_LAST) -// CHK_ERRA(CS_E_PACKAGE_NOTFOUND) - CHK_ERRA(CS_E_NOT_DELETABLE) - CHK_ERRA(CS_E_CLASS_NOTFOUND) - CHK_ERRA(CS_E_INVALID_VERSION) - CHK_ERRA(CS_E_NO_CLASSSTORE) - CHK_ERRA(CS_E_OBJECT_NOTFOUND) - CHK_ERRA(CS_E_OBJECT_ALREADY_EXISTS) - CHK_ERRA(CS_E_INVALID_PATH) - CHK_ERRA(CS_E_NETWORK_ERROR) - CHK_ERRA(CS_E_ADMIN_LIMIT_EXCEEDED) - CHK_ERRA(CS_E_SCHEMA_MISMATCH) -// CHK_ERRA(CS_E_INTERNAL_ERROR) - CHK_ERRA(CACHE_E_FIRST) - CHK_ERRA(CACHE_E_LAST) - CHK_ERRA(CACHE_S_FIRST) - CHK_ERRA(CACHE_S_LAST) -// CHK_ERRA(CACHE_E_NOCACHE_UPDATED) - CHK_ERRA(OLEOBJ_E_FIRST) - CHK_ERRA(OLEOBJ_E_LAST) - CHK_ERRA(OLEOBJ_S_FIRST) - CHK_ERRA(OLEOBJ_S_LAST) -// CHK_ERRA(OLEOBJ_E_NOVERBS) - CHK_ERRA(OLEOBJ_E_INVALIDVERB) - CHK_ERRA(CLIENTSITE_E_FIRST) - CHK_ERRA(CLIENTSITE_E_LAST) - CHK_ERRA(CLIENTSITE_S_FIRST) - CHK_ERRA(CLIENTSITE_S_LAST) - CHK_ERRA(INPLACE_E_NOTUNDOABLE) - CHK_ERRA(INPLACE_E_NOTOOLSPACE) -// CHK_ERRA(INPLACE_E_FIRST) - CHK_ERRA(INPLACE_E_LAST) - CHK_ERRA(INPLACE_S_FIRST) - CHK_ERRA(INPLACE_S_LAST) - CHK_ERRA(ENUM_E_FIRST) - CHK_ERRA(ENUM_E_LAST) - CHK_ERRA(ENUM_S_FIRST) - CHK_ERRA(ENUM_S_LAST) - CHK_ERRA(CONVERT10_E_FIRST) - CHK_ERRA(CONVERT10_E_LAST) - CHK_ERRA(CONVERT10_S_FIRST) - CHK_ERRA(CONVERT10_S_LAST) -// CHK_ERRA(CONVERT10_E_OLESTREAM_GET) - CHK_ERRA(CONVERT10_E_OLESTREAM_PUT) - CHK_ERRA(CONVERT10_E_OLESTREAM_FMT) - CHK_ERRA(CONVERT10_E_OLESTREAM_BITMAP_TO_DIB) - CHK_ERRA(CONVERT10_E_STG_FMT) - CHK_ERRA(CONVERT10_E_STG_NO_STD_STREAM) - CHK_ERRA(CONVERT10_E_STG_DIB_TO_BITMAP) - CHK_ERRA(CLIPBRD_E_FIRST) - CHK_ERRA(CLIPBRD_E_LAST) - CHK_ERRA(CLIPBRD_S_FIRST) - CHK_ERRA(CLIPBRD_S_LAST) -// CHK_ERRA(CLIPBRD_E_CANT_OPEN) - CHK_ERRA(CLIPBRD_E_CANT_EMPTY) - CHK_ERRA(CLIPBRD_E_CANT_SET) - CHK_ERRA(CLIPBRD_E_BAD_DATA) - CHK_ERRA(CLIPBRD_E_CANT_CLOSE) - CHK_ERRA(MK_E_FIRST) - CHK_ERRA(MK_E_LAST) - CHK_ERRA(MK_S_FIRST) - CHK_ERRA(MK_S_LAST) -// CHK_ERRA(MK_E_CONNECTMANUALLY) - CHK_ERRA(MK_E_EXCEEDEDDEADLINE) - CHK_ERRA(MK_E_NEEDGENERIC) - CHK_ERRA(MK_E_UNAVAILABLE) - CHK_ERRA(MK_E_SYNTAX) - CHK_ERRA(MK_E_NOOBJECT) - CHK_ERRA(MK_E_INVALIDEXTENSION) - CHK_ERRA(MK_E_INTERMEDIATEINTERFACENOTSUPPORTED) - CHK_ERRA(MK_E_NOTBINDABLE) - CHK_ERRA(MK_E_NOTBOUND) - CHK_ERRA(MK_E_CANTOPENFILE) - CHK_ERRA(MK_E_MUSTBOTHERUSER) - CHK_ERRA(MK_E_NOINVERSE) - CHK_ERRA(MK_E_NOSTORAGE) - CHK_ERRA(MK_E_NOPREFIX) -// CHK_ERRA(MK_E_ENUMERATION_FAILED) - CHK_ERRA(CO_E_NOTINITIALIZED) - CHK_ERRA(CO_E_ALREADYINITIALIZED) - CHK_ERRA(CO_E_CANTDETERMINECLASS) - CHK_ERRA(CO_E_CLASSSTRING) - CHK_ERRA(CO_E_IIDSTRING) - CHK_ERRA(CO_E_APPNOTFOUND) - CHK_ERRA(CO_E_APPSINGLEUSE) - CHK_ERRA(CO_E_ERRORINAPP) - CHK_ERRA(CO_E_DLLNOTFOUND) - CHK_ERRA(CO_E_ERRORINDLL) - CHK_ERRA(CO_E_WRONGOSFORAPP) - CHK_ERRA(CO_E_OBJNOTREG) - CHK_ERRA(CO_E_OBJISREG) - CHK_ERRA(CO_E_OBJNOTCONNECTED) - CHK_ERRA(CO_E_APPDIDNTREG) - CHK_ERRA(CO_E_RELEASED) -// CHK_ERRA(OLE_S_USEREG) - CHK_ERRA(OLE_S_STATIC) - CHK_ERRA(OLE_S_MAC_CLIPFORMAT) -// CHK_ERRA(DRAGDROP_S_DROP) - CHK_ERRA(DRAGDROP_S_CANCEL) - CHK_ERRA(DRAGDROP_S_USEDEFAULTCURSORS) -// CHK_ERRA(DATA_S_SAMEFORMATETC) -// CHK_ERRA(VIEW_S_ALREADY_FROZEN) -// CHK_ERRA(CACHE_S_FORMATETC_NOTSUPPORTED) - CHK_ERRA(CACHE_S_SAMECACHE) - CHK_ERRA(CACHE_S_SOMECACHES_NOTUPDATED) -// CHK_ERRA(OLEOBJ_S_INVALIDVERB) - CHK_ERRA(OLEOBJ_S_CANNOT_DOVERB_NOW) - CHK_ERRA(OLEOBJ_S_INVALIDHWND) -// CHK_ERRA(INPLACE_S_TRUNCATED) -// CHK_ERRA(CONVERT10_S_NO_PRESENTATION) - CHK_ERRA(MK_S_REDUCED_TO_SELF) - CHK_ERRA(MK_S_ME) - CHK_ERRA(MK_S_HIM) - CHK_ERRA(MK_S_US) - CHK_ERRA(MK_S_MONIKERALREADYREGISTERED) - CHK_ERRA(CO_E_CLASS_CREATE_FAILED) - CHK_ERRA(CO_E_SCM_ERROR) - CHK_ERRA(CO_E_SCM_RPC_FAILURE) - CHK_ERRA(CO_E_BAD_PATH) - CHK_ERRA(CO_E_SERVER_EXEC_FAILURE) - CHK_ERRA(CO_E_OBJSRV_RPC_FAILURE) - CHK_ERRA(MK_E_NO_NORMALIZED) - CHK_ERRA(CO_E_SERVER_STOPPING) - CHK_ERRA(MEM_E_INVALID_ROOT) - CHK_ERRA(MEM_E_INVALID_LINK) - CHK_ERRA(MEM_E_INVALID_SIZE) - CHK_ERRA(CO_S_NOTALLINTERFACES) - CHK_ERRA(DISP_E_UNKNOWNINTERFACE) - CHK_ERRA(DISP_E_MEMBERNOTFOUND) - CHK_ERRA(DISP_E_PARAMNOTFOUND) - CHK_ERRA(DISP_E_TYPEMISMATCH) - CHK_ERRA(DISP_E_UNKNOWNNAME) - CHK_ERRA(DISP_E_NONAMEDARGS) - CHK_ERRA(DISP_E_BADVARTYPE) - CHK_ERRA(DISP_E_EXCEPTION) - CHK_ERRA(DISP_E_OVERFLOW) - CHK_ERRA(DISP_E_BADINDEX) - CHK_ERRA(DISP_E_UNKNOWNLCID) - CHK_ERRA(DISP_E_ARRAYISLOCKED) - CHK_ERRA(DISP_E_BADPARAMCOUNT) - CHK_ERRA(DISP_E_PARAMNOTOPTIONAL) - CHK_ERRA(DISP_E_BADCALLEE) - CHK_ERRA(DISP_E_NOTACOLLECTION) - CHK_ERRA(DISP_E_DIVBYZERO) - CHK_ERRA(DISP_E_BUFFERTOOSMALL) - CHK_ERRA(TYPE_E_BUFFERTOOSMALL) - CHK_ERRA(TYPE_E_FIELDNOTFOUND) - CHK_ERRA(TYPE_E_INVDATAREAD) - CHK_ERRA(TYPE_E_UNSUPFORMAT) - CHK_ERRA(TYPE_E_REGISTRYACCESS) - CHK_ERRA(TYPE_E_LIBNOTREGISTERED) - CHK_ERRA(TYPE_E_UNDEFINEDTYPE) - CHK_ERRA(TYPE_E_QUALIFIEDNAMEDISALLOWED) - CHK_ERRA(TYPE_E_INVALIDSTATE) - CHK_ERRA(TYPE_E_WRONGTYPEKIND) - CHK_ERRA(TYPE_E_ELEMENTNOTFOUND) - CHK_ERRA(TYPE_E_AMBIGUOUSNAME) - CHK_ERRA(TYPE_E_NAMECONFLICT) - CHK_ERRA(TYPE_E_UNKNOWNLCID) - CHK_ERRA(TYPE_E_DLLFUNCTIONNOTFOUND) - CHK_ERRA(TYPE_E_BADMODULEKIND) - CHK_ERRA(TYPE_E_SIZETOOBIG) - CHK_ERRA(TYPE_E_DUPLICATEID) - CHK_ERRA(TYPE_E_INVALIDID) - CHK_ERRA(TYPE_E_TYPEMISMATCH) - CHK_ERRA(TYPE_E_OUTOFBOUNDS) - CHK_ERRA(TYPE_E_IOERROR) - CHK_ERRA(TYPE_E_CANTCREATETMPFILE) - CHK_ERRA(TYPE_E_CANTLOADLIBRARY) - CHK_ERRA(TYPE_E_INCONSISTENTPROPFUNCS) - CHK_ERRA(TYPE_E_CIRCULARTYPE) - CHK_ERRA(STG_E_INVALIDFUNCTION) - CHK_ERRA(STG_E_FILENOTFOUND) - CHK_ERRA(STG_E_PATHNOTFOUND) - CHK_ERRA(STG_E_TOOMANYOPENFILES) - CHK_ERRA(STG_E_ACCESSDENIED) - CHK_ERRA(STG_E_INVALIDHANDLE) - CHK_ERRA(STG_E_INSUFFICIENTMEMORY) - CHK_ERRA(STG_E_INVALIDPOINTER) - CHK_ERRA(STG_E_NOMOREFILES) - CHK_ERRA(STG_E_DISKISWRITEPROTECTED) - CHK_ERRA(STG_E_SEEKERROR) - CHK_ERRA(STG_E_WRITEFAULT) - CHK_ERRA(STG_E_READFAULT) - CHK_ERRA(STG_E_SHAREVIOLATION) - CHK_ERRA(STG_E_LOCKVIOLATION) - CHK_ERRA(STG_E_FILEALREADYEXISTS) - CHK_ERRA(STG_E_INVALIDPARAMETER) - CHK_ERRA(STG_E_MEDIUMFULL) - CHK_ERRA(STG_E_PROPSETMISMATCHED) - CHK_ERRA(STG_E_ABNORMALAPIEXIT) - CHK_ERRA(STG_E_INVALIDHEADER) - CHK_ERRA(STG_E_INVALIDNAME) - CHK_ERRA(STG_E_UNKNOWN) - CHK_ERRA(STG_E_UNIMPLEMENTEDFUNCTION) - CHK_ERRA(STG_E_INVALIDFLAG) - CHK_ERRA(STG_E_INUSE) - CHK_ERRA(STG_E_NOTCURRENT) - CHK_ERRA(STG_E_REVERTED) - CHK_ERRA(STG_E_CANTSAVE) - CHK_ERRA(STG_E_OLDFORMAT) - CHK_ERRA(STG_E_OLDDLL) - CHK_ERRA(STG_E_SHAREREQUIRED) - CHK_ERRA(STG_E_NOTFILEBASEDSTORAGE) - CHK_ERRA(STG_E_EXTANTMARSHALLINGS) - CHK_ERRA(STG_E_DOCFILECORRUPT) - CHK_ERRA(STG_E_BADBASEADDRESS) - CHK_ERRA(STG_E_DOCFILETOOLARGE) - CHK_ERRA(STG_E_NOTSIMPLEFORMAT) - CHK_ERRA(STG_E_INCOMPLETE) - CHK_ERRA(STG_E_TERMINATED) - CHK_ERRA(STG_S_CONVERTED) - CHK_ERRA(STG_S_BLOCK) - CHK_ERRA(STG_S_RETRYNOW) - CHK_ERRA(STG_S_MONITORING) - CHK_ERRA(STG_S_MULTIPLEOPENS) - CHK_ERRA(STG_S_CONSOLIDATIONFAILED) - CHK_ERRA(STG_S_CANNOTCONSOLIDATE) - CHK_ERRA(RPC_E_CALL_REJECTED) - CHK_ERRA(RPC_E_CALL_CANCELED) - CHK_ERRA(RPC_E_CANTPOST_INSENDCALL) - CHK_ERRA(RPC_E_CANTCALLOUT_INASYNCCALL) - CHK_ERRA(RPC_E_CANTCALLOUT_INEXTERNALCALL) - CHK_ERRA(RPC_E_CONNECTION_TERMINATED) - CHK_ERRA(RPC_E_SERVER_DIED) - CHK_ERRA(RPC_E_CLIENT_DIED) - CHK_ERRA(RPC_E_INVALID_DATAPACKET) - CHK_ERRA(RPC_E_CANTTRANSMIT_CALL) - CHK_ERRA(RPC_E_CLIENT_CANTMARSHAL_DATA) - CHK_ERRA(RPC_E_CLIENT_CANTUNMARSHAL_DATA) - CHK_ERRA(RPC_E_SERVER_CANTMARSHAL_DATA) - CHK_ERRA(RPC_E_SERVER_CANTUNMARSHAL_DATA) - CHK_ERRA(RPC_E_INVALID_DATA) - CHK_ERRA(RPC_E_INVALID_PARAMETER) - CHK_ERRA(RPC_E_CANTCALLOUT_AGAIN) - CHK_ERRA(RPC_E_SERVER_DIED_DNE) - CHK_ERRA(RPC_E_SYS_CALL_FAILED) - CHK_ERRA(RPC_E_OUT_OF_RESOURCES) - CHK_ERRA(RPC_E_ATTEMPTED_MULTITHREAD) - CHK_ERRA(RPC_E_NOT_REGISTERED) - CHK_ERRA(RPC_E_FAULT) - CHK_ERRA(RPC_E_SERVERFAULT) - CHK_ERRA(RPC_E_CHANGED_MODE) - CHK_ERRA(RPC_E_INVALIDMETHOD) - CHK_ERRA(RPC_E_DISCONNECTED) - CHK_ERRA(RPC_E_RETRY) - CHK_ERRA(RPC_E_SERVERCALL_RETRYLATER) - CHK_ERRA(RPC_E_SERVERCALL_REJECTED) - CHK_ERRA(RPC_E_INVALID_CALLDATA) - CHK_ERRA(RPC_E_CANTCALLOUT_ININPUTSYNCCALL) - CHK_ERRA(RPC_E_WRONG_THREAD) - CHK_ERRA(RPC_E_THREAD_NOT_INIT) - CHK_ERRA(RPC_E_VERSION_MISMATCH) - CHK_ERRA(RPC_E_INVALID_HEADER) - CHK_ERRA(RPC_E_INVALID_EXTENSION) - CHK_ERRA(RPC_E_INVALID_IPID) - CHK_ERRA(RPC_E_INVALID_OBJECT) - CHK_ERRA(RPC_S_CALLPENDING) - CHK_ERRA(RPC_S_WAITONTIMER) - CHK_ERRA(RPC_E_CALL_COMPLETE) - CHK_ERRA(RPC_E_UNSECURE_CALL) - CHK_ERRA(RPC_E_TOO_LATE) - CHK_ERRA(RPC_E_NO_GOOD_SECURITY_PACKAGES) - CHK_ERRA(RPC_E_ACCESS_DENIED) - CHK_ERRA(RPC_E_REMOTE_DISABLED) - CHK_ERRA(RPC_E_INVALID_OBJREF) - CHK_ERRA(RPC_E_NO_CONTEXT) - CHK_ERRA(RPC_E_TIMEOUT) - CHK_ERRA(RPC_E_NO_SYNC) - CHK_ERRA(RPC_E_FULLSIC_REQUIRED) - CHK_ERRA(RPC_E_INVALID_STD_NAME) - CHK_ERRA(CO_E_FAILEDTOIMPERSONATE) - CHK_ERRA(CO_E_FAILEDTOGETSECCTX) - CHK_ERRA(CO_E_FAILEDTOOPENTHREADTOKEN) - CHK_ERRA(CO_E_FAILEDTOGETTOKENINFO) - CHK_ERRA(CO_E_TRUSTEEDOESNTMATCHCLIENT) - CHK_ERRA(CO_E_FAILEDTOQUERYCLIENTBLANKET) - CHK_ERRA(CO_E_FAILEDTOSETDACL) - CHK_ERRA(CO_E_ACCESSCHECKFAILED) - CHK_ERRA(CO_E_NETACCESSAPIFAILED) - CHK_ERRA(CO_E_WRONGTRUSTEENAMESYNTAX) - CHK_ERRA(CO_E_INVALIDSID) - CHK_ERRA(CO_E_CONVERSIONFAILED) - CHK_ERRA(CO_E_NOMATCHINGSIDFOUND) - CHK_ERRA(CO_E_LOOKUPACCSIDFAILED) - CHK_ERRA(CO_E_NOMATCHINGNAMEFOUND) - CHK_ERRA(CO_E_LOOKUPACCNAMEFAILED) - CHK_ERRA(CO_E_SETSERLHNDLFAILED) - CHK_ERRA(CO_E_FAILEDTOGETWINDIR) - CHK_ERRA(CO_E_PATHTOOLONG) - CHK_ERRA(CO_E_FAILEDTOGENUUID) - CHK_ERRA(CO_E_FAILEDTOCREATEFILE) - CHK_ERRA(CO_E_FAILEDTOCLOSEHANDLE) - CHK_ERRA(CO_E_EXCEEDSYSACLLIMIT) - CHK_ERRA(CO_E_ACESINWRONGORDER) - CHK_ERRA(CO_E_INCOMPATIBLESTREAMVERSION) - CHK_ERRA(CO_E_FAILEDTOOPENPROCESSTOKEN) - CHK_ERRA(CO_E_DECODEFAILED) - CHK_ERRA(CO_E_ACNOTINITIALIZED) - CHK_ERRA(RPC_E_UNEXPECTED) - CHK_ERRA(NTE_BAD_UID) - CHK_ERRA(NTE_BAD_HASH) - CHK_ERRA(NTE_BAD_KEY) - CHK_ERRA(NTE_BAD_LEN) - CHK_ERRA(NTE_BAD_DATA) - CHK_ERRA(NTE_BAD_SIGNATURE) - CHK_ERRA(NTE_BAD_VER) - CHK_ERRA(NTE_BAD_ALGID) - CHK_ERRA(NTE_BAD_FLAGS) - CHK_ERRA(NTE_BAD_TYPE) - CHK_ERRA(NTE_BAD_KEY_STATE) - CHK_ERRA(NTE_BAD_HASH_STATE) - CHK_ERRA(NTE_NO_KEY) - CHK_ERRA(NTE_NO_MEMORY) - CHK_ERRA(NTE_EXISTS) - CHK_ERRA(NTE_PERM) - CHK_ERRA(NTE_NOT_FOUND) - CHK_ERRA(NTE_DOUBLE_ENCRYPT) - CHK_ERRA(NTE_BAD_PROVIDER) - CHK_ERRA(NTE_BAD_PROV_TYPE) - CHK_ERRA(NTE_BAD_PUBLIC_KEY) - CHK_ERRA(NTE_BAD_KEYSET) - CHK_ERRA(NTE_PROV_TYPE_NOT_DEF) - CHK_ERRA(NTE_PROV_TYPE_ENTRY_BAD) - CHK_ERRA(NTE_KEYSET_NOT_DEF) - CHK_ERRA(NTE_KEYSET_ENTRY_BAD) - CHK_ERRA(NTE_PROV_TYPE_NO_MATCH) - CHK_ERRA(NTE_SIGNATURE_FILE_BAD) - CHK_ERRA(NTE_PROVIDER_DLL_FAIL) - CHK_ERRA(NTE_PROV_DLL_NOT_FOUND) - CHK_ERRA(NTE_BAD_KEYSET_PARAM) - CHK_ERRA(NTE_FAIL) - CHK_ERRA(NTE_SYS_ERR) - CHK_ERRA(NTE_SILENT_CONTEXT) - CHK_ERRA(NTE_TOKEN_KEYSET_STORAGE_FULL) - CHK_ERRA(CRYPT_E_MSG_ERROR) - CHK_ERRA(CRYPT_E_UNKNOWN_ALGO) - CHK_ERRA(CRYPT_E_OID_FORMAT) - CHK_ERRA(CRYPT_E_INVALID_MSG_TYPE) - CHK_ERRA(CRYPT_E_UNEXPECTED_ENCODING) - CHK_ERRA(CRYPT_E_AUTH_ATTR_MISSING) - CHK_ERRA(CRYPT_E_HASH_VALUE) - CHK_ERRA(CRYPT_E_INVALID_INDEX) - CHK_ERRA(CRYPT_E_ALREADY_DECRYPTED) - CHK_ERRA(CRYPT_E_NOT_DECRYPTED) - CHK_ERRA(CRYPT_E_RECIPIENT_NOT_FOUND) - CHK_ERRA(CRYPT_E_CONTROL_TYPE) - CHK_ERRA(CRYPT_E_ISSUER_SERIALNUMBER) - CHK_ERRA(CRYPT_E_SIGNER_NOT_FOUND) - CHK_ERRA(CRYPT_E_ATTRIBUTES_MISSING) - CHK_ERRA(CRYPT_E_STREAM_MSG_NOT_READY) - CHK_ERRA(CRYPT_E_STREAM_INSUFFICIENT_DATA) - CHK_ERRA(CRYPT_E_BAD_LEN) - CHK_ERRA(CRYPT_E_BAD_ENCODE) - CHK_ERRA(CRYPT_E_FILE_ERROR) - CHK_ERRA(CRYPT_E_NOT_FOUND) - CHK_ERRA(CRYPT_E_EXISTS) - CHK_ERRA(CRYPT_E_NO_PROVIDER) - CHK_ERRA(CRYPT_E_SELF_SIGNED) - CHK_ERRA(CRYPT_E_DELETED_PREV) - CHK_ERRA(CRYPT_E_NO_MATCH) - CHK_ERRA(CRYPT_E_UNEXPECTED_MSG_TYPE) - CHK_ERRA(CRYPT_E_NO_KEY_PROPERTY) - CHK_ERRA(CRYPT_E_NO_DECRYPT_CERT) - CHK_ERRA(CRYPT_E_BAD_MSG) - CHK_ERRA(CRYPT_E_NO_SIGNER) - CHK_ERRA(CRYPT_E_PENDING_CLOSE) - CHK_ERRA(CRYPT_E_REVOKED) - CHK_ERRA(CRYPT_E_NO_REVOCATION_DLL) - CHK_ERRA(CRYPT_E_NO_REVOCATION_CHECK) - CHK_ERRA(CRYPT_E_REVOCATION_OFFLINE) - CHK_ERRA(CRYPT_E_NOT_IN_REVOCATION_DATABASE) - CHK_ERRA(CRYPT_E_INVALID_NUMERIC_STRING) - CHK_ERRA(CRYPT_E_INVALID_PRINTABLE_STRING) - CHK_ERRA(CRYPT_E_INVALID_IA5_STRING) - CHK_ERRA(CRYPT_E_INVALID_X500_STRING) - CHK_ERRA(CRYPT_E_NOT_CHAR_STRING) - CHK_ERRA(CRYPT_E_FILERESIZED) - CHK_ERRA(CRYPT_E_SECURITY_SETTINGS) - CHK_ERRA(CRYPT_E_NO_VERIFY_USAGE_DLL) - CHK_ERRA(CRYPT_E_NO_VERIFY_USAGE_CHECK) - CHK_ERRA(CRYPT_E_VERIFY_USAGE_OFFLINE) - CHK_ERRA(CRYPT_E_NOT_IN_CTL) - CHK_ERRA(CRYPT_E_NO_TRUSTED_SIGNER) - CHK_ERRA(CRYPT_E_OSS_ERROR) - CHK_ERRA(OSS_MORE_BUF) - CHK_ERRA(OSS_NEGATIVE_UINTEGER) - CHK_ERRA(OSS_PDU_RANGE) - CHK_ERRA(OSS_MORE_INPUT) - CHK_ERRA(OSS_DATA_ERROR) - CHK_ERRA(OSS_BAD_ARG) - CHK_ERRA(OSS_BAD_VERSION) - CHK_ERRA(OSS_OUT_MEMORY) - CHK_ERRA(OSS_PDU_MISMATCH) - CHK_ERRA(OSS_LIMITED) - CHK_ERRA(OSS_BAD_PTR) - CHK_ERRA(OSS_BAD_TIME) - CHK_ERRA(OSS_INDEFINITE_NOT_SUPPORTED) - CHK_ERRA(OSS_MEM_ERROR) - CHK_ERRA(OSS_BAD_TABLE) - CHK_ERRA(OSS_TOO_LONG) - CHK_ERRA(OSS_CONSTRAINT_VIOLATED) - CHK_ERRA(OSS_FATAL_ERROR) - CHK_ERRA(OSS_ACCESS_SERIALIZATION_ERROR) - CHK_ERRA(OSS_NULL_TBL) - CHK_ERRA(OSS_NULL_FCN) - CHK_ERRA(OSS_BAD_ENCRULES) - CHK_ERRA(OSS_UNAVAIL_ENCRULES) - CHK_ERRA(OSS_CANT_OPEN_TRACE_WINDOW) - CHK_ERRA(OSS_UNIMPLEMENTED) - CHK_ERRA(OSS_OID_DLL_NOT_LINKED) - CHK_ERRA(OSS_CANT_OPEN_TRACE_FILE) - CHK_ERRA(OSS_TRACE_FILE_ALREADY_OPEN) - CHK_ERRA(OSS_TABLE_MISMATCH) - CHK_ERRA(OSS_TYPE_NOT_SUPPORTED) - CHK_ERRA(OSS_REAL_DLL_NOT_LINKED) - CHK_ERRA(OSS_REAL_CODE_NOT_LINKED) - CHK_ERRA(OSS_OUT_OF_RANGE) - CHK_ERRA(OSS_COPIER_DLL_NOT_LINKED) - CHK_ERRA(OSS_CONSTRAINT_DLL_NOT_LINKED) - CHK_ERRA(OSS_COMPARATOR_DLL_NOT_LINKED) - CHK_ERRA(OSS_COMPARATOR_CODE_NOT_LINKED) - CHK_ERRA(OSS_MEM_MGR_DLL_NOT_LINKED) - CHK_ERRA(OSS_PDV_DLL_NOT_LINKED) - CHK_ERRA(OSS_PDV_CODE_NOT_LINKED) - CHK_ERRA(OSS_API_DLL_NOT_LINKED) - CHK_ERRA(OSS_BERDER_DLL_NOT_LINKED) - CHK_ERRA(OSS_PER_DLL_NOT_LINKED) - CHK_ERRA(OSS_OPEN_TYPE_ERROR) - CHK_ERRA(OSS_MUTEX_NOT_CREATED) - CHK_ERRA(OSS_CANT_CLOSE_TRACE_FILE) - CHK_ERRA(CERTSRV_E_BAD_REQUESTSUBJECT) - CHK_ERRA(CERTSRV_E_NO_REQUEST) - CHK_ERRA(CERTSRV_E_BAD_REQUESTSTATUS) - CHK_ERRA(CERTSRV_E_PROPERTY_EMPTY) - CHK_ERRA(CERTSRV_E_INVALID_CA_CERTIFICATE) - CHK_ERRA(CERTSRV_E_UNSUPPORTED_CERT_TYPE) - CHK_ERRA(CERTSRV_E_NO_CERT_TYPE) - CHK_ERRA(TRUST_E_SYSTEM_ERROR) - CHK_ERRA(TRUST_E_NO_SIGNER_CERT) - CHK_ERRA(TRUST_E_COUNTER_SIGNER) - CHK_ERRA(TRUST_E_CERT_SIGNATURE) - CHK_ERRA(TRUST_E_TIME_STAMP) - CHK_ERRA(TRUST_E_BAD_DIGEST) - CHK_ERRA(TRUST_E_BASIC_CONSTRAINTS) - CHK_ERRA(TRUST_E_FINANCIAL_CRITERIA) -// CHK_ERRA(NTE_OP_OK) - CHK_ERRA(TRUST_E_PROVIDER_UNKNOWN) - CHK_ERRA(TRUST_E_ACTION_UNKNOWN) - CHK_ERRA(TRUST_E_SUBJECT_FORM_UNKNOWN) - CHK_ERRA(TRUST_E_SUBJECT_NOT_TRUSTED) - CHK_ERRA(DIGSIG_E_ENCODE) - CHK_ERRA(DIGSIG_E_DECODE) - CHK_ERRA(DIGSIG_E_EXTENSIBILITY) - CHK_ERRA(DIGSIG_E_CRYPTO) - CHK_ERRA(PERSIST_E_SIZEDEFINITE) - CHK_ERRA(PERSIST_E_SIZEINDEFINITE) - CHK_ERRA(PERSIST_E_NOTSELFSIZING) - CHK_ERRA(TRUST_E_NOSIGNATURE) - CHK_ERRA(CERT_E_EXPIRED) - CHK_ERRA(CERT_E_VALIDITYPERIODNESTING) - CHK_ERRA(CERT_E_ROLE) - CHK_ERRA(CERT_E_PATHLENCONST) - CHK_ERRA(CERT_E_CRITICAL) - CHK_ERRA(CERT_E_PURPOSE) - CHK_ERRA(CERT_E_ISSUERCHAINING) - CHK_ERRA(CERT_E_MALFORMED) - CHK_ERRA(CERT_E_UNTRUSTEDROOT) - CHK_ERRA(CERT_E_CHAINING) - CHK_ERRA(TRUST_E_FAIL) - CHK_ERRA(CERT_E_REVOKED) - CHK_ERRA(CERT_E_UNTRUSTEDTESTROOT) - CHK_ERRA(CERT_E_REVOCATION_FAILURE) - CHK_ERRA(CERT_E_CN_NO_MATCH) - CHK_ERRA(CERT_E_WRONG_USAGE) - CHK_ERRA(SPAPI_E_EXPECTED_SECTION_NAME) - CHK_ERRA(SPAPI_E_BAD_SECTION_NAME_LINE) - CHK_ERRA(SPAPI_E_SECTION_NAME_TOO_LONG) - CHK_ERRA(SPAPI_E_GENERAL_SYNTAX) - CHK_ERRA(SPAPI_E_WRONG_INF_STYLE) - CHK_ERRA(SPAPI_E_SECTION_NOT_FOUND) - CHK_ERRA(SPAPI_E_LINE_NOT_FOUND) - CHK_ERRA(SPAPI_E_NO_BACKUP) - CHK_ERRA(SPAPI_E_NO_ASSOCIATED_CLASS) - CHK_ERRA(SPAPI_E_CLASS_MISMATCH) - CHK_ERRA(SPAPI_E_DUPLICATE_FOUND) - CHK_ERRA(SPAPI_E_NO_DRIVER_SELECTED) - CHK_ERRA(SPAPI_E_KEY_DOES_NOT_EXIST) - CHK_ERRA(SPAPI_E_INVALID_DEVINST_NAME) - CHK_ERRA(SPAPI_E_INVALID_CLASS) - CHK_ERRA(SPAPI_E_DEVINST_ALREADY_EXISTS) - CHK_ERRA(SPAPI_E_DEVINFO_NOT_REGISTERED) - CHK_ERRA(SPAPI_E_INVALID_REG_PROPERTY) - CHK_ERRA(SPAPI_E_NO_INF) - CHK_ERRA(SPAPI_E_NO_SUCH_DEVINST) - CHK_ERRA(SPAPI_E_CANT_LOAD_CLASS_ICON) - CHK_ERRA(SPAPI_E_INVALID_CLASS_INSTALLER) - CHK_ERRA(SPAPI_E_DI_DO_DEFAULT) - CHK_ERRA(SPAPI_E_DI_NOFILECOPY) - CHK_ERRA(SPAPI_E_INVALID_HWPROFILE) - CHK_ERRA(SPAPI_E_NO_DEVICE_SELECTED) - CHK_ERRA(SPAPI_E_DEVINFO_LIST_LOCKED) - CHK_ERRA(SPAPI_E_DEVINFO_DATA_LOCKED) - CHK_ERRA(SPAPI_E_DI_BAD_PATH) - CHK_ERRA(SPAPI_E_NO_CLASSINSTALL_PARAMS) - CHK_ERRA(SPAPI_E_FILEQUEUE_LOCKED) - CHK_ERRA(SPAPI_E_BAD_SERVICE_INSTALLSECT) - CHK_ERRA(SPAPI_E_NO_CLASS_DRIVER_LIST) - CHK_ERRA(SPAPI_E_NO_ASSOCIATED_SERVICE) - CHK_ERRA(SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE) - CHK_ERRA(SPAPI_E_DEVICE_INTERFACE_ACTIVE) - CHK_ERRA(SPAPI_E_DEVICE_INTERFACE_REMOVED) - CHK_ERRA(SPAPI_E_BAD_INTERFACE_INSTALLSECT) - CHK_ERRA(SPAPI_E_NO_SUCH_INTERFACE_CLASS) - CHK_ERRA(SPAPI_E_INVALID_REFERENCE_STRING) - CHK_ERRA(SPAPI_E_INVALID_MACHINENAME) - CHK_ERRA(SPAPI_E_REMOTE_COMM_FAILURE) - CHK_ERRA(SPAPI_E_MACHINE_UNAVAILABLE) - CHK_ERRA(SPAPI_E_NO_CONFIGMGR_SERVICES) - CHK_ERRA(SPAPI_E_INVALID_PROPPAGE_PROVIDER) - CHK_ERRA(SPAPI_E_NO_SUCH_DEVICE_INTERFACE) - CHK_ERRA(SPAPI_E_DI_POSTPROCESSING_REQUIRED) - CHK_ERRA(SPAPI_E_INVALID_COINSTALLER) - CHK_ERRA(SPAPI_E_NO_COMPAT_DRIVERS) - CHK_ERRA(SPAPI_E_NO_DEVICE_ICON) - CHK_ERRA(SPAPI_E_INVALID_INF_LOGCONFIG) - CHK_ERRA(SPAPI_E_DI_DONT_INSTALL) - CHK_ERRA(SPAPI_E_INVALID_FILTER_DRIVER) - CHK_ERRA(SPAPI_E_NON_WINDOWS_NT_DRIVER) - CHK_ERRA(SPAPI_E_NON_WINDOWS_DRIVER) - CHK_ERRA(SPAPI_E_NO_CATALOG_FOR_OEM_INF) - CHK_ERRA(SPAPI_E_DEVINSTALL_QUEUE_NONNATIVE) - CHK_ERRA(SPAPI_E_ERROR_NOT_INSTALLED) -// CHK_ERRA(SCARD_S_SUCCESS) - CHK_ERRA(SCARD_F_INTERNAL_ERROR) - CHK_ERRA(SCARD_E_CANCELLED) - CHK_ERRA(SCARD_E_INVALID_HANDLE) - CHK_ERRA(SCARD_E_INVALID_PARAMETER) - CHK_ERRA(SCARD_E_INVALID_TARGET) - CHK_ERRA(SCARD_E_NO_MEMORY) - CHK_ERRA(SCARD_F_WAITED_TOO_LONG) - CHK_ERRA(SCARD_E_INSUFFICIENT_BUFFER) - CHK_ERRA(SCARD_E_UNKNOWN_READER) - CHK_ERRA(SCARD_E_TIMEOUT) - CHK_ERRA(SCARD_E_SHARING_VIOLATION) - CHK_ERRA(SCARD_E_NO_SMARTCARD) - CHK_ERRA(SCARD_E_UNKNOWN_CARD) - CHK_ERRA(SCARD_E_CANT_DISPOSE) - CHK_ERRA(SCARD_E_PROTO_MISMATCH) - CHK_ERRA(SCARD_E_NOT_READY) - CHK_ERRA(SCARD_E_INVALID_VALUE) - CHK_ERRA(SCARD_E_SYSTEM_CANCELLED) - CHK_ERRA(SCARD_F_COMM_ERROR) - CHK_ERRA(SCARD_F_UNKNOWN_ERROR) - CHK_ERRA(SCARD_E_INVALID_ATR) - CHK_ERRA(SCARD_E_NOT_TRANSACTED) - CHK_ERRA(SCARD_E_READER_UNAVAILABLE) - CHK_ERRA(SCARD_P_SHUTDOWN) - CHK_ERRA(SCARD_E_PCI_TOO_SMALL) - CHK_ERRA(SCARD_E_READER_UNSUPPORTED) - CHK_ERRA(SCARD_E_DUPLICATE_READER) - CHK_ERRA(SCARD_E_CARD_UNSUPPORTED) - CHK_ERRA(SCARD_E_NO_SERVICE) - CHK_ERRA(SCARD_E_SERVICE_STOPPED) - CHK_ERRA(SCARD_E_UNEXPECTED) - CHK_ERRA(SCARD_E_ICC_INSTALLATION) - CHK_ERRA(SCARD_E_ICC_CREATEORDER) - CHK_ERRA(SCARD_E_UNSUPPORTED_FEATURE) - CHK_ERRA(SCARD_E_DIR_NOT_FOUND) - CHK_ERRA(SCARD_E_FILE_NOT_FOUND) - CHK_ERRA(SCARD_E_NO_DIR) - CHK_ERRA(SCARD_E_NO_FILE) - CHK_ERRA(SCARD_E_NO_ACCESS) - CHK_ERRA(SCARD_E_WRITE_TOO_MANY) - CHK_ERRA(SCARD_E_BAD_SEEK) - CHK_ERRA(SCARD_E_INVALID_CHV) - CHK_ERRA(SCARD_E_UNKNOWN_RES_MNG) - CHK_ERRA(SCARD_E_NO_SUCH_CERTIFICATE) - CHK_ERRA(SCARD_E_CERTIFICATE_UNAVAILABLE) - CHK_ERRA(SCARD_E_NO_READERS_AVAILABLE) - CHK_ERRA(SCARD_E_COMM_DATA_LOST) - CHK_ERRA(SCARD_W_UNSUPPORTED_CARD) - CHK_ERRA(SCARD_W_UNRESPONSIVE_CARD) - CHK_ERRA(SCARD_W_UNPOWERED_CARD) - CHK_ERRA(SCARD_W_RESET_CARD) - CHK_ERRA(SCARD_W_REMOVED_CARD) - CHK_ERRA(SCARD_W_SECURITY_VIOLATION) - CHK_ERRA(SCARD_W_WRONG_CHV) - CHK_ERRA(SCARD_W_CHV_BLOCKED) - CHK_ERRA(SCARD_W_EOF) - CHK_ERRA(SCARD_W_CANCELLED_BY_USER) - CHK_ERR_WIN32_ONLY(ERROR_INVALID_FUNCTION, "ERROR_INVALID_FUNCTION") - CHK_ERR_WIN32A(ERROR_FILE_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_PATH_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_TOO_MANY_OPEN_FILES) - CHK_ERRA(ERROR_ACCESS_DENIED) - CHK_ERRA(ERROR_INVALID_HANDLE) - CHK_ERR_WIN32A(ERROR_ARENA_TRASHED) - CHK_ERR_WIN32A(ERROR_NOT_ENOUGH_MEMORY) - CHK_ERR_WIN32A(ERROR_INVALID_BLOCK) - CHK_ERR_WIN32A(ERROR_BAD_ENVIRONMENT) - CHK_ERR_WIN32A(ERROR_BAD_FORMAT) - CHK_ERR_WIN32A(ERROR_INVALID_ACCESS) - CHK_ERR_WIN32A(ERROR_INVALID_DATA) - CHK_ERRA(ERROR_OUTOFMEMORY) - CHK_ERR_WIN32A(ERROR_INVALID_DRIVE) - CHK_ERR_WIN32A(ERROR_CURRENT_DIRECTORY) - CHK_ERR_WIN32A(ERROR_NOT_SAME_DEVICE) - CHK_ERR_WIN32A(ERROR_NO_MORE_FILES) - CHK_ERR_WIN32A(ERROR_WRITE_PROTECT) - CHK_ERR_WIN32A(ERROR_BAD_UNIT) - CHK_ERR_WIN32A(ERROR_NOT_READY) - CHK_ERR_WIN32A(ERROR_BAD_COMMAND) - CHK_ERR_WIN32A(ERROR_CRC) - CHK_ERR_WIN32A(ERROR_BAD_LENGTH) - CHK_ERR_WIN32A(ERROR_SEEK) - CHK_ERR_WIN32A(ERROR_NOT_DOS_DISK) - CHK_ERR_WIN32A(ERROR_SECTOR_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_OUT_OF_PAPER) - CHK_ERR_WIN32A(ERROR_WRITE_FAULT) - CHK_ERR_WIN32A(ERROR_READ_FAULT) - CHK_ERR_WIN32A(ERROR_GEN_FAILURE) - CHK_ERR_WIN32A(ERROR_SHARING_VIOLATION) - CHK_ERR_WIN32A(ERROR_LOCK_VIOLATION) - CHK_ERR_WIN32A(ERROR_WRONG_DISK) - CHK_ERR_WIN32A(ERROR_SHARING_BUFFER_EXCEEDED) - CHK_ERR_WIN32A(ERROR_HANDLE_EOF) - CHK_ERR_WIN32A(ERROR_HANDLE_DISK_FULL) - CHK_ERR_WIN32A(ERROR_NOT_SUPPORTED) - CHK_ERR_WIN32A(ERROR_REM_NOT_LIST) - CHK_ERR_WIN32A(ERROR_DUP_NAME) - CHK_ERR_WIN32A(ERROR_BAD_NETPATH) - CHK_ERR_WIN32A(ERROR_NETWORK_BUSY) - CHK_ERR_WIN32A(ERROR_DEV_NOT_EXIST) - CHK_ERR_WIN32A(ERROR_TOO_MANY_CMDS) - CHK_ERR_WIN32A(ERROR_ADAP_HDW_ERR) - CHK_ERR_WIN32A(ERROR_BAD_NET_RESP) - CHK_ERR_WIN32A(ERROR_UNEXP_NET_ERR) - CHK_ERR_WIN32A(ERROR_BAD_REM_ADAP) - CHK_ERR_WIN32A(ERROR_PRINTQ_FULL) - CHK_ERR_WIN32A(ERROR_NO_SPOOL_SPACE) - CHK_ERR_WIN32A(ERROR_PRINT_CANCELLED) - CHK_ERR_WIN32A(ERROR_NETNAME_DELETED) - CHK_ERR_WIN32A(ERROR_NETWORK_ACCESS_DENIED) - CHK_ERR_WIN32A(ERROR_BAD_DEV_TYPE) - CHK_ERR_WIN32A(ERROR_BAD_NET_NAME) - CHK_ERR_WIN32A(ERROR_TOO_MANY_NAMES) - CHK_ERR_WIN32A(ERROR_TOO_MANY_SESS) - CHK_ERR_WIN32A(ERROR_SHARING_PAUSED) - CHK_ERR_WIN32A(ERROR_REQ_NOT_ACCEP) - CHK_ERR_WIN32A(ERROR_REDIR_PAUSED) - CHK_ERR_WIN32A(ERROR_FILE_EXISTS) - CHK_ERR_WIN32A(ERROR_CANNOT_MAKE) - CHK_ERR_WIN32A(ERROR_FAIL_I24) - CHK_ERR_WIN32A(ERROR_OUT_OF_STRUCTURES) - CHK_ERR_WIN32A(ERROR_ALREADY_ASSIGNED) - CHK_ERR_WIN32A(ERROR_INVALID_PASSWORD) - CHK_ERRA(ERROR_INVALID_PARAMETER) - CHK_ERR_WIN32A(ERROR_NET_WRITE_FAULT) - CHK_ERR_WIN32A(ERROR_NO_PROC_SLOTS) - CHK_ERR_WIN32A(ERROR_TOO_MANY_SEMAPHORES) - CHK_ERR_WIN32A(ERROR_EXCL_SEM_ALREADY_OWNED) - CHK_ERR_WIN32A(ERROR_SEM_IS_SET) - CHK_ERR_WIN32A(ERROR_TOO_MANY_SEM_REQUESTS) - CHK_ERR_WIN32A(ERROR_INVALID_AT_INTERRUPT_TIME) - CHK_ERR_WIN32A(ERROR_SEM_OWNER_DIED) - CHK_ERR_WIN32A(ERROR_SEM_USER_LIMIT) - CHK_ERR_WIN32A(ERROR_DISK_CHANGE) - CHK_ERR_WIN32A(ERROR_DRIVE_LOCKED) - CHK_ERR_WIN32A(ERROR_BROKEN_PIPE) - CHK_ERR_WIN32A(ERROR_OPEN_FAILED) - CHK_ERR_WIN32A(ERROR_BUFFER_OVERFLOW) - CHK_ERR_WIN32A(ERROR_DISK_FULL) - CHK_ERR_WIN32A(ERROR_NO_MORE_SEARCH_HANDLES) - CHK_ERR_WIN32A(ERROR_INVALID_TARGET_HANDLE) - CHK_ERR_WIN32A(ERROR_INVALID_CATEGORY) - CHK_ERR_WIN32A(ERROR_INVALID_VERIFY_SWITCH) - CHK_ERR_WIN32A(ERROR_BAD_DRIVER_LEVEL) - CHK_ERR_WIN32A(ERROR_CALL_NOT_IMPLEMENTED) - CHK_ERR_WIN32A(ERROR_SEM_TIMEOUT) - CHK_ERR_WIN32A(ERROR_INSUFFICIENT_BUFFER) - CHK_ERR_WIN32A(ERROR_INVALID_NAME) - CHK_ERR_WIN32A(ERROR_INVALID_LEVEL) - CHK_ERR_WIN32A(ERROR_NO_VOLUME_LABEL) - CHK_ERR_WIN32A(ERROR_MOD_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_PROC_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_WAIT_NO_CHILDREN) - CHK_ERR_WIN32A(ERROR_CHILD_NOT_COMPLETE) - CHK_ERR_WIN32A(ERROR_DIRECT_ACCESS_HANDLE) - CHK_ERR_WIN32A(ERROR_NEGATIVE_SEEK) - CHK_ERR_WIN32A(ERROR_SEEK_ON_DEVICE) - CHK_ERR_WIN32A(ERROR_IS_JOIN_TARGET) - CHK_ERR_WIN32A(ERROR_IS_JOINED) - CHK_ERR_WIN32A(ERROR_IS_SUBSTED) - CHK_ERR_WIN32A(ERROR_NOT_JOINED) - CHK_ERR_WIN32A(ERROR_NOT_SUBSTED) - CHK_ERR_WIN32A(ERROR_JOIN_TO_JOIN) - CHK_ERR_WIN32A(ERROR_SUBST_TO_SUBST) - CHK_ERR_WIN32A(ERROR_JOIN_TO_SUBST) - CHK_ERR_WIN32A(ERROR_SUBST_TO_JOIN) - CHK_ERR_WIN32A(ERROR_BUSY_DRIVE) - CHK_ERR_WIN32A(ERROR_SAME_DRIVE) - CHK_ERR_WIN32A(ERROR_DIR_NOT_ROOT) - CHK_ERR_WIN32A(ERROR_DIR_NOT_EMPTY) - CHK_ERR_WIN32A(ERROR_IS_SUBST_PATH) - CHK_ERR_WIN32A(ERROR_IS_JOIN_PATH) - CHK_ERR_WIN32A(ERROR_PATH_BUSY) - CHK_ERR_WIN32A(ERROR_IS_SUBST_TARGET) - CHK_ERR_WIN32A(ERROR_SYSTEM_TRACE) - CHK_ERR_WIN32A(ERROR_INVALID_EVENT_COUNT) - CHK_ERR_WIN32A(ERROR_TOO_MANY_MUXWAITERS) - CHK_ERR_WIN32A(ERROR_INVALID_LIST_FORMAT) - CHK_ERR_WIN32A(ERROR_LABEL_TOO_LONG) - CHK_ERR_WIN32A(ERROR_TOO_MANY_TCBS) - CHK_ERR_WIN32A(ERROR_SIGNAL_REFUSED) - CHK_ERR_WIN32A(ERROR_DISCARDED) - CHK_ERR_WIN32A(ERROR_NOT_LOCKED) - CHK_ERR_WIN32A(ERROR_BAD_THREADID_ADDR) - CHK_ERR_WIN32A(ERROR_BAD_ARGUMENTS) - CHK_ERR_WIN32A(ERROR_BAD_PATHNAME) - CHK_ERR_WIN32A(ERROR_SIGNAL_PENDING) - CHK_ERR_WIN32A(ERROR_MAX_THRDS_REACHED) - CHK_ERR_WIN32A(ERROR_LOCK_FAILED) - CHK_ERR_WIN32A(ERROR_BUSY) - CHK_ERR_WIN32A(ERROR_CANCEL_VIOLATION) - CHK_ERR_WIN32A(ERROR_ATOMIC_LOCKS_NOT_SUPPORTED) - CHK_ERR_WIN32A(ERROR_INVALID_SEGMENT_NUMBER) - CHK_ERR_WIN32A(ERROR_INVALID_ORDINAL) - CHK_ERR_WIN32A(ERROR_ALREADY_EXISTS) - CHK_ERR_WIN32A(ERROR_INVALID_FLAG_NUMBER) - CHK_ERR_WIN32A(ERROR_SEM_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_INVALID_STARTING_CODESEG) - CHK_ERR_WIN32A(ERROR_INVALID_STACKSEG) - CHK_ERR_WIN32A(ERROR_INVALID_MODULETYPE) - CHK_ERR_WIN32A(ERROR_INVALID_EXE_SIGNATURE) - CHK_ERR_WIN32A(ERROR_EXE_MARKED_INVALID) - CHK_ERR_WIN32A(ERROR_BAD_EXE_FORMAT) - CHK_ERR_WIN32A(ERROR_ITERATED_DATA_EXCEEDS_64k) - CHK_ERR_WIN32A(ERROR_INVALID_MINALLOCSIZE) - CHK_ERR_WIN32A(ERROR_DYNLINK_FROM_INVALID_RING) - CHK_ERR_WIN32A(ERROR_IOPL_NOT_ENABLED) - CHK_ERR_WIN32A(ERROR_INVALID_SEGDPL) - CHK_ERR_WIN32A(ERROR_AUTODATASEG_EXCEEDS_64k) - CHK_ERRA(ERROR_RING2SEG_MUST_BE_MOVABLE) - CHK_ERRA(ERROR_RELOC_CHAIN_XEEDS_SEGLIM) - CHK_ERR_WIN32A(ERROR_INFLOOP_IN_RELOC_CHAIN) - CHK_ERR_WIN32A(ERROR_ENVVAR_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_NO_SIGNAL_SENT) - CHK_ERR_WIN32A(ERROR_FILENAME_EXCED_RANGE) - CHK_ERR_WIN32A(ERROR_RING2_STACK_IN_USE) - CHK_ERR_WIN32A(ERROR_META_EXPANSION_TOO_LONG) - CHK_ERR_WIN32A(ERROR_INVALID_SIGNAL_NUMBER) - CHK_ERR_WIN32A(ERROR_THREAD_1_INACTIVE) - CHK_ERR_WIN32A(ERROR_LOCKED) - CHK_ERR_WIN32A(ERROR_TOO_MANY_MODULES) - CHK_ERR_WIN32A(ERROR_NESTING_NOT_ALLOWED) - CHK_ERR_WIN32A(ERROR_EXE_MACHINE_TYPE_MISMATCH) - CHK_ERR_WIN32A(ERROR_BAD_PIPE) - CHK_ERR_WIN32A(ERROR_PIPE_BUSY) - CHK_ERR_WIN32A(ERROR_NO_DATA) - CHK_ERR_WIN32A(ERROR_PIPE_NOT_CONNECTED) - CHK_ERR_WIN32A(ERROR_MORE_DATA) - CHK_ERR_WIN32A(ERROR_VC_DISCONNECTED) - CHK_ERR_WIN32A(ERROR_INVALID_EA_NAME) - CHK_ERR_WIN32A(ERROR_EA_LIST_INCONSISTENT) - CHK_ERR_WIN32A(WAIT_TIMEOUT) - CHK_ERR_WIN32A(ERROR_NO_MORE_ITEMS) - CHK_ERR_WIN32A(ERROR_CANNOT_COPY) - CHK_ERR_WIN32A(ERROR_DIRECTORY) - CHK_ERR_WIN32A(ERROR_EAS_DIDNT_FIT) - CHK_ERR_WIN32A(ERROR_EA_FILE_CORRUPT) - CHK_ERR_WIN32A(ERROR_EA_TABLE_FULL) - CHK_ERR_WIN32A(ERROR_INVALID_EA_HANDLE) - CHK_ERR_WIN32A(ERROR_EAS_NOT_SUPPORTED) - CHK_ERR_WIN32A(ERROR_NOT_OWNER) - CHK_ERR_WIN32A(ERROR_TOO_MANY_POSTS) - CHK_ERR_WIN32A(ERROR_PARTIAL_COPY) - CHK_ERR_WIN32A(ERROR_OPLOCK_NOT_GRANTED) - CHK_ERR_WIN32A(ERROR_INVALID_OPLOCK_PROTOCOL) - CHK_ERR_WIN32A(ERROR_MR_MID_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_INVALID_ADDRESS) - CHK_ERR_WIN32A(ERROR_ARITHMETIC_OVERFLOW) - CHK_ERR_WIN32A(ERROR_PIPE_CONNECTED) - CHK_ERR_WIN32A(ERROR_PIPE_LISTENING) - CHK_ERR_WIN32A(ERROR_EA_ACCESS_DENIED) - CHK_ERR_WIN32A(ERROR_OPERATION_ABORTED) - CHK_ERR_WIN32A(ERROR_IO_INCOMPLETE) - CHK_ERR_WIN32A(ERROR_IO_PENDING) - CHK_ERR_WIN32A(ERROR_NOACCESS) - CHK_ERR_WIN32A(ERROR_SWAPERROR) - CHK_ERR_WIN32A(ERROR_STACK_OVERFLOW) - CHK_ERR_WIN32A(ERROR_INVALID_MESSAGE) - CHK_ERR_WIN32A(ERROR_CAN_NOT_COMPLETE) - CHK_ERR_WIN32A(ERROR_INVALID_FLAGS) - CHK_ERR_WIN32A(ERROR_UNRECOGNIZED_VOLUME) - CHK_ERR_WIN32A(ERROR_FILE_INVALID) - CHK_ERR_WIN32A(ERROR_FULLSCREEN_MODE) - CHK_ERR_WIN32A(ERROR_NO_TOKEN) - CHK_ERR_WIN32A(ERROR_BADDB) - CHK_ERR_WIN32A(ERROR_BADKEY) - CHK_ERR_WIN32A(ERROR_CANTOPEN) - CHK_ERR_WIN32A(ERROR_CANTREAD) - CHK_ERR_WIN32A(ERROR_CANTWRITE) - CHK_ERR_WIN32A(ERROR_REGISTRY_RECOVERED) - CHK_ERR_WIN32A(ERROR_REGISTRY_CORRUPT) - CHK_ERR_WIN32A(ERROR_REGISTRY_IO_FAILED) - CHK_ERR_WIN32A(ERROR_NOT_REGISTRY_FILE) - CHK_ERR_WIN32A(ERROR_KEY_DELETED) - CHK_ERR_WIN32A(ERROR_NO_LOG_SPACE) - CHK_ERR_WIN32A(ERROR_KEY_HAS_CHILDREN) - CHK_ERR_WIN32A(ERROR_CHILD_MUST_BE_VOLATILE) - CHK_ERR_WIN32A(ERROR_NOTIFY_ENUM_DIR) - CHK_ERR_WIN32A(ERROR_DEPENDENT_SERVICES_RUNNING) - CHK_ERR_WIN32A(ERROR_INVALID_SERVICE_CONTROL) - CHK_ERR_WIN32A(ERROR_SERVICE_REQUEST_TIMEOUT) - CHK_ERR_WIN32A(ERROR_SERVICE_NO_THREAD) - CHK_ERR_WIN32A(ERROR_SERVICE_DATABASE_LOCKED) - CHK_ERR_WIN32A(ERROR_SERVICE_ALREADY_RUNNING) - CHK_ERR_WIN32A(ERROR_INVALID_SERVICE_ACCOUNT) - CHK_ERR_WIN32A(ERROR_SERVICE_DISABLED) - CHK_ERR_WIN32A(ERROR_CIRCULAR_DEPENDENCY) - CHK_ERR_WIN32A(ERROR_SERVICE_DOES_NOT_EXIST) - CHK_ERR_WIN32A(ERROR_SERVICE_CANNOT_ACCEPT_CTRL) - CHK_ERR_WIN32A(ERROR_SERVICE_NOT_ACTIVE) - CHK_ERR_WIN32A(ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) - CHK_ERR_WIN32A(ERROR_EXCEPTION_IN_SERVICE) - CHK_ERR_WIN32A(ERROR_DATABASE_DOES_NOT_EXIST) - CHK_ERR_WIN32A(ERROR_SERVICE_SPECIFIC_ERROR) - CHK_ERR_WIN32A(ERROR_PROCESS_ABORTED) - CHK_ERR_WIN32A(ERROR_SERVICE_DEPENDENCY_FAIL) - CHK_ERR_WIN32A(ERROR_SERVICE_LOGON_FAILED) - CHK_ERR_WIN32A(ERROR_SERVICE_START_HANG) - CHK_ERR_WIN32A(ERROR_INVALID_SERVICE_LOCK) - CHK_ERR_WIN32A(ERROR_SERVICE_MARKED_FOR_DELETE) - CHK_ERR_WIN32A(ERROR_SERVICE_EXISTS) - CHK_ERR_WIN32A(ERROR_ALREADY_RUNNING_LKG) - CHK_ERR_WIN32A(ERROR_SERVICE_DEPENDENCY_DELETED) - CHK_ERR_WIN32A(ERROR_BOOT_ALREADY_ACCEPTED) - CHK_ERR_WIN32A(ERROR_SERVICE_NEVER_STARTED) - CHK_ERR_WIN32A(ERROR_DUPLICATE_SERVICE_NAME) - CHK_ERR_WIN32A(ERROR_DIFFERENT_SERVICE_ACCOUNT) - CHK_ERR_WIN32A(ERROR_CANNOT_DETECT_DRIVER_FAILURE) - CHK_ERR_WIN32A(ERROR_CANNOT_DETECT_PROCESS_ABORT) - CHK_ERR_WIN32A(ERROR_NO_RECOVERY_PROGRAM) - CHK_ERR_WIN32A(ERROR_SERVICE_NOT_IN_EXE) - CHK_ERR_WIN32A(ERROR_END_OF_MEDIA) - CHK_ERR_WIN32A(ERROR_FILEMARK_DETECTED) - CHK_ERR_WIN32A(ERROR_BEGINNING_OF_MEDIA) - CHK_ERR_WIN32A(ERROR_SETMARK_DETECTED) - CHK_ERR_WIN32A(ERROR_NO_DATA_DETECTED) - CHK_ERR_WIN32A(ERROR_PARTITION_FAILURE) - CHK_ERR_WIN32A(ERROR_INVALID_BLOCK_LENGTH) - CHK_ERR_WIN32A(ERROR_DEVICE_NOT_PARTITIONED) - CHK_ERR_WIN32A(ERROR_UNABLE_TO_LOCK_MEDIA) - CHK_ERR_WIN32A(ERROR_UNABLE_TO_UNLOAD_MEDIA) - CHK_ERR_WIN32A(ERROR_MEDIA_CHANGED) - CHK_ERR_WIN32A(ERROR_BUS_RESET) - CHK_ERR_WIN32A(ERROR_NO_MEDIA_IN_DRIVE) - CHK_ERR_WIN32A(ERROR_NO_UNICODE_TRANSLATION) - CHK_ERR_WIN32A(ERROR_DLL_INIT_FAILED) - CHK_ERR_WIN32A(ERROR_SHUTDOWN_IN_PROGRESS) - CHK_ERR_WIN32A(ERROR_NO_SHUTDOWN_IN_PROGRESS) - CHK_ERR_WIN32A(ERROR_IO_DEVICE) - CHK_ERR_WIN32A(ERROR_SERIAL_NO_DEVICE) - CHK_ERR_WIN32A(ERROR_IRQ_BUSY) - CHK_ERR_WIN32A(ERROR_MORE_WRITES) - CHK_ERR_WIN32A(ERROR_COUNTER_TIMEOUT) - CHK_ERR_WIN32A(ERROR_FLOPPY_ID_MARK_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_FLOPPY_WRONG_CYLINDER) - CHK_ERR_WIN32A(ERROR_FLOPPY_UNKNOWN_ERROR) - CHK_ERR_WIN32A(ERROR_FLOPPY_BAD_REGISTERS) - CHK_ERR_WIN32A(ERROR_DISK_RECALIBRATE_FAILED) - CHK_ERR_WIN32A(ERROR_DISK_OPERATION_FAILED) - CHK_ERR_WIN32A(ERROR_DISK_RESET_FAILED) - CHK_ERR_WIN32A(ERROR_EOM_OVERFLOW) - CHK_ERR_WIN32A(ERROR_NOT_ENOUGH_SERVER_MEMORY) - CHK_ERR_WIN32A(ERROR_POSSIBLE_DEADLOCK) - CHK_ERR_WIN32A(ERROR_MAPPED_ALIGNMENT) - CHK_ERR_WIN32A(ERROR_SET_POWER_STATE_VETOED) - CHK_ERR_WIN32A(ERROR_SET_POWER_STATE_FAILED) - CHK_ERR_WIN32A(ERROR_TOO_MANY_LINKS) - CHK_ERR_WIN32A(ERROR_OLD_WIN_VERSION) - CHK_ERR_WIN32A(ERROR_APP_WRONG_OS) - CHK_ERR_WIN32A(ERROR_SINGLE_INSTANCE_APP) - CHK_ERR_WIN32A(ERROR_RMODE_APP) - CHK_ERR_WIN32A(ERROR_INVALID_DLL) - CHK_ERR_WIN32A(ERROR_NO_ASSOCIATION) - CHK_ERR_WIN32A(ERROR_DDE_FAIL) - CHK_ERR_WIN32A(ERROR_DLL_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_NO_MORE_USER_HANDLES) - CHK_ERR_WIN32A(ERROR_MESSAGE_SYNC_ONLY) - CHK_ERR_WIN32A(ERROR_SOURCE_ELEMENT_EMPTY) - CHK_ERR_WIN32A(ERROR_DESTINATION_ELEMENT_FULL) - CHK_ERR_WIN32A(ERROR_ILLEGAL_ELEMENT_ADDRESS) - CHK_ERR_WIN32A(ERROR_MAGAZINE_NOT_PRESENT) - CHK_ERR_WIN32A(ERROR_DEVICE_REINITIALIZATION_NEEDED) - CHK_ERR_WIN32A(ERROR_DEVICE_REQUIRES_CLEANING) - CHK_ERR_WIN32A(ERROR_DEVICE_DOOR_OPEN) - CHK_ERR_WIN32A(ERROR_DEVICE_NOT_CONNECTED) - CHK_ERR_WIN32A(ERROR_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_NO_MATCH) - CHK_ERR_WIN32A(ERROR_SET_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_POINT_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_NO_TRACKING_SERVICE) - CHK_ERR_WIN32A(ERROR_NO_VOLUME_ID) - CHK_ERR_WIN32A(ERROR_UNABLE_TO_REMOVE_REPLACED) - CHK_ERR_WIN32A(ERROR_UNABLE_TO_MOVE_REPLACEMENT) - CHK_ERR_WIN32A(ERROR_UNABLE_TO_MOVE_REPLACEMENT_2) - CHK_ERR_WIN32A(ERROR_JOURNAL_DELETE_IN_PROGRESS) - CHK_ERR_WIN32A(ERROR_JOURNAL_NOT_ACTIVE) - CHK_ERR_WIN32A(ERROR_POTENTIAL_FILE_FOUND) - CHK_ERR_WIN32A(ERROR_BAD_DEVICE) - CHK_ERR_WIN32A(ERROR_CONNECTION_UNAVAIL) - CHK_ERR_WIN32A(ERROR_DEVICE_ALREADY_REMEMBERED) - CHK_ERR_WIN32A(ERROR_NO_NET_OR_BAD_PATH) - CHK_ERR_WIN32A(ERROR_BAD_PROVIDER) - CHK_ERR_WIN32A(ERROR_CANNOT_OPEN_PROFILE) - CHK_ERR_WIN32A(ERROR_BAD_PROFILE) - CHK_ERR_WIN32A(ERROR_NOT_CONTAINER) - CHK_ERR_WIN32A(ERROR_EXTENDED_ERROR) - CHK_ERR_WIN32A(ERROR_INVALID_GROUPNAME) - CHK_ERR_WIN32A(ERROR_INVALID_COMPUTERNAME) - CHK_ERR_WIN32A(ERROR_INVALID_EVENTNAME) - CHK_ERR_WIN32A(ERROR_INVALID_DOMAINNAME) - CHK_ERR_WIN32A(ERROR_INVALID_SERVICENAME) - CHK_ERR_WIN32A(ERROR_INVALID_NETNAME) - CHK_ERR_WIN32A(ERROR_INVALID_SHARENAME) - CHK_ERR_WIN32A(ERROR_INVALID_PASSWORDNAME) - CHK_ERR_WIN32A(ERROR_INVALID_MESSAGENAME) - CHK_ERR_WIN32A(ERROR_INVALID_MESSAGEDEST) - CHK_ERR_WIN32A(ERROR_SESSION_CREDENTIAL_CONFLICT) - CHK_ERR_WIN32A(ERROR_REMOTE_SESSION_LIMIT_EXCEEDED) - CHK_ERR_WIN32A(ERROR_DUP_DOMAINNAME) - CHK_ERR_WIN32A(ERROR_NO_NETWORK) - CHK_ERR_WIN32A(ERROR_CANCELLED) - CHK_ERR_WIN32A(ERROR_USER_MAPPED_FILE) - CHK_ERR_WIN32A(ERROR_CONNECTION_REFUSED) - CHK_ERR_WIN32A(ERROR_GRACEFUL_DISCONNECT) - CHK_ERR_WIN32A(ERROR_ADDRESS_ALREADY_ASSOCIATED) - CHK_ERR_WIN32A(ERROR_ADDRESS_NOT_ASSOCIATED) - CHK_ERR_WIN32A(ERROR_CONNECTION_INVALID) - CHK_ERR_WIN32A(ERROR_CONNECTION_ACTIVE) - CHK_ERR_WIN32A(ERROR_NETWORK_UNREACHABLE) - CHK_ERR_WIN32A(ERROR_HOST_UNREACHABLE) - CHK_ERR_WIN32A(ERROR_PROTOCOL_UNREACHABLE) - CHK_ERR_WIN32A(ERROR_PORT_UNREACHABLE) - CHK_ERR_WIN32A(ERROR_REQUEST_ABORTED) - CHK_ERR_WIN32A(ERROR_CONNECTION_ABORTED) - CHK_ERR_WIN32A(ERROR_RETRY) - CHK_ERR_WIN32A(ERROR_CONNECTION_COUNT_LIMIT) - CHK_ERR_WIN32A(ERROR_LOGIN_TIME_RESTRICTION) - CHK_ERR_WIN32A(ERROR_LOGIN_WKSTA_RESTRICTION) - CHK_ERR_WIN32A(ERROR_INCORRECT_ADDRESS) - CHK_ERR_WIN32A(ERROR_ALREADY_REGISTERED) - CHK_ERR_WIN32A(ERROR_SERVICE_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_NOT_AUTHENTICATED) - CHK_ERR_WIN32A(ERROR_NOT_LOGGED_ON) - CHK_ERR_WIN32A(ERROR_CONTINUE) - CHK_ERR_WIN32A(ERROR_ALREADY_INITIALIZED) - CHK_ERR_WIN32A(ERROR_NO_MORE_DEVICES) - CHK_ERR_WIN32A(ERROR_NO_SUCH_SITE) - CHK_ERR_WIN32A(ERROR_DOMAIN_CONTROLLER_EXISTS) - CHK_ERR_WIN32A(ERROR_NOT_ALL_ASSIGNED) - CHK_ERR_WIN32A(ERROR_SOME_NOT_MAPPED) - CHK_ERR_WIN32A(ERROR_NO_QUOTAS_FOR_ACCOUNT) - CHK_ERR_WIN32A(ERROR_LOCAL_USER_SESSION_KEY) - CHK_ERR_WIN32A(ERROR_NULL_LM_PASSWORD) - CHK_ERR_WIN32A(ERROR_UNKNOWN_REVISION) - CHK_ERR_WIN32A(ERROR_REVISION_MISMATCH) - CHK_ERR_WIN32A(ERROR_INVALID_OWNER) - CHK_ERR_WIN32A(ERROR_INVALID_PRIMARY_GROUP) - CHK_ERR_WIN32A(ERROR_NO_IMPERSONATION_TOKEN) - CHK_ERR_WIN32A(ERROR_CANT_DISABLE_MANDATORY) - CHK_ERR_WIN32A(ERROR_NO_LOGON_SERVERS) - CHK_ERR_WIN32A(ERROR_NO_SUCH_LOGON_SESSION) - CHK_ERR_WIN32A(ERROR_NO_SUCH_PRIVILEGE) - CHK_ERR_WIN32A(ERROR_PRIVILEGE_NOT_HELD) - CHK_ERR_WIN32A(ERROR_INVALID_ACCOUNT_NAME) - CHK_ERR_WIN32A(ERROR_USER_EXISTS) - CHK_ERR_WIN32A(ERROR_NO_SUCH_USER) - CHK_ERR_WIN32A(ERROR_GROUP_EXISTS) - CHK_ERR_WIN32A(ERROR_NO_SUCH_GROUP) - CHK_ERR_WIN32A(ERROR_MEMBER_IN_GROUP) - CHK_ERR_WIN32A(ERROR_MEMBER_NOT_IN_GROUP) - CHK_ERR_WIN32A(ERROR_LAST_ADMIN) - CHK_ERR_WIN32A(ERROR_WRONG_PASSWORD) - CHK_ERR_WIN32A(ERROR_ILL_FORMED_PASSWORD) - CHK_ERR_WIN32A(ERROR_PASSWORD_RESTRICTION) - CHK_ERR_WIN32A(ERROR_LOGON_FAILURE) - CHK_ERR_WIN32A(ERROR_ACCOUNT_RESTRICTION) - CHK_ERR_WIN32A(ERROR_INVALID_LOGON_HOURS) - CHK_ERR_WIN32A(ERROR_INVALID_WORKSTATION) - CHK_ERR_WIN32A(ERROR_PASSWORD_EXPIRED) - CHK_ERR_WIN32A(ERROR_ACCOUNT_DISABLED) - CHK_ERR_WIN32A(ERROR_NONE_MAPPED) - CHK_ERR_WIN32A(ERROR_TOO_MANY_LUIDS_REQUESTED) - CHK_ERR_WIN32A(ERROR_LUIDS_EXHAUSTED) - CHK_ERR_WIN32A(ERROR_INVALID_SUB_AUTHORITY) - CHK_ERR_WIN32A(ERROR_INVALID_ACL) - CHK_ERR_WIN32A(ERROR_INVALID_SID) - CHK_ERR_WIN32A(ERROR_INVALID_SECURITY_DESCR) - CHK_ERR_WIN32A(ERROR_BAD_INHERITANCE_ACL) - CHK_ERR_WIN32A(ERROR_SERVER_DISABLED) - CHK_ERR_WIN32A(ERROR_SERVER_NOT_DISABLED) - CHK_ERR_WIN32A(ERROR_INVALID_ID_AUTHORITY) - CHK_ERR_WIN32A(ERROR_ALLOTTED_SPACE_EXCEEDED) - CHK_ERR_WIN32A(ERROR_INVALID_GROUP_ATTRIBUTES) - CHK_ERR_WIN32A(ERROR_BAD_IMPERSONATION_LEVEL) - CHK_ERR_WIN32A(ERROR_CANT_OPEN_ANONYMOUS) - CHK_ERR_WIN32A(ERROR_BAD_VALIDATION_CLASS) - CHK_ERR_WIN32A(ERROR_BAD_TOKEN_TYPE) - CHK_ERR_WIN32A(ERROR_NO_SECURITY_ON_OBJECT) - CHK_ERR_WIN32A(ERROR_CANT_ACCESS_DOMAIN_INFO) - CHK_ERR_WIN32A(ERROR_INVALID_SERVER_STATE) - CHK_ERR_WIN32A(ERROR_INVALID_DOMAIN_STATE) - CHK_ERR_WIN32A(ERROR_INVALID_DOMAIN_ROLE) - CHK_ERR_WIN32A(ERROR_NO_SUCH_DOMAIN) - CHK_ERR_WIN32A(ERROR_DOMAIN_EXISTS) - CHK_ERR_WIN32A(ERROR_DOMAIN_LIMIT_EXCEEDED) - CHK_ERR_WIN32A(ERROR_INTERNAL_DB_CORRUPTION) - CHK_ERR_WIN32A(ERROR_INTERNAL_ERROR) - CHK_ERR_WIN32A(ERROR_GENERIC_NOT_MAPPED) - CHK_ERR_WIN32A(ERROR_BAD_DESCRIPTOR_FORMAT) - CHK_ERR_WIN32A(ERROR_NOT_LOGON_PROCESS) - CHK_ERR_WIN32A(ERROR_LOGON_SESSION_EXISTS) - CHK_ERR_WIN32A(ERROR_NO_SUCH_PACKAGE) - CHK_ERR_WIN32A(ERROR_BAD_LOGON_SESSION_STATE) - CHK_ERR_WIN32A(ERROR_LOGON_SESSION_COLLISION) - CHK_ERR_WIN32A(ERROR_INVALID_LOGON_TYPE) - CHK_ERR_WIN32A(ERROR_CANNOT_IMPERSONATE) - CHK_ERR_WIN32A(ERROR_RXACT_INVALID_STATE) - CHK_ERR_WIN32A(ERROR_RXACT_COMMIT_FAILURE) - CHK_ERR_WIN32A(ERROR_SPECIAL_ACCOUNT) - CHK_ERR_WIN32A(ERROR_SPECIAL_GROUP) - CHK_ERR_WIN32A(ERROR_SPECIAL_USER) - CHK_ERR_WIN32A(ERROR_MEMBERS_PRIMARY_GROUP) - CHK_ERR_WIN32A(ERROR_TOKEN_ALREADY_IN_USE) - CHK_ERR_WIN32A(ERROR_NO_SUCH_ALIAS) - CHK_ERR_WIN32A(ERROR_MEMBER_NOT_IN_ALIAS) - CHK_ERR_WIN32A(ERROR_MEMBER_IN_ALIAS) - CHK_ERR_WIN32A(ERROR_ALIAS_EXISTS) - CHK_ERR_WIN32A(ERROR_LOGON_NOT_GRANTED) - CHK_ERR_WIN32A(ERROR_TOO_MANY_SECRETS) - CHK_ERR_WIN32A(ERROR_SECRET_TOO_LONG) - CHK_ERR_WIN32A(ERROR_INTERNAL_DB_ERROR) - CHK_ERR_WIN32A(ERROR_TOO_MANY_CONTEXT_IDS) - CHK_ERR_WIN32A(ERROR_LOGON_TYPE_NOT_GRANTED) - CHK_ERR_WIN32A(ERROR_NT_CROSS_ENCRYPTION_REQUIRED) - CHK_ERR_WIN32A(ERROR_NO_SUCH_MEMBER) - CHK_ERR_WIN32A(ERROR_INVALID_MEMBER) - CHK_ERR_WIN32A(ERROR_TOO_MANY_SIDS) - CHK_ERR_WIN32A(ERROR_LM_CROSS_ENCRYPTION_REQUIRED) - CHK_ERR_WIN32A(ERROR_NO_INHERITANCE) - CHK_ERR_WIN32A(ERROR_FILE_CORRUPT) - CHK_ERR_WIN32A(ERROR_DISK_CORRUPT) - CHK_ERR_WIN32A(ERROR_NO_USER_SESSION_KEY) - CHK_ERR_WIN32A(ERROR_LICENSE_QUOTA_EXCEEDED) - CHK_ERR_WIN32A(ERROR_WRONG_TARGET_NAME) - CHK_ERR_WIN32A(ERROR_MUTUAL_AUTH_FAILED) - CHK_ERR_WIN32A(ERROR_TIME_SKEW) - CHK_ERR_WIN32A(ERROR_INVALID_WINDOW_HANDLE) - CHK_ERR_WIN32A(ERROR_INVALID_MENU_HANDLE) - CHK_ERR_WIN32A(ERROR_INVALID_CURSOR_HANDLE) - CHK_ERR_WIN32A(ERROR_INVALID_ACCEL_HANDLE) - CHK_ERR_WIN32A(ERROR_INVALID_HOOK_HANDLE) - CHK_ERR_WIN32A(ERROR_INVALID_DWP_HANDLE) - CHK_ERR_WIN32A(ERROR_TLW_WITH_WSCHILD) - CHK_ERR_WIN32A(ERROR_CANNOT_FIND_WND_CLASS) - CHK_ERR_WIN32A(ERROR_WINDOW_OF_OTHER_THREAD) - CHK_ERR_WIN32A(ERROR_HOTKEY_ALREADY_REGISTERED) - CHK_ERR_WIN32A(ERROR_CLASS_ALREADY_EXISTS) - CHK_ERR_WIN32A(ERROR_CLASS_DOES_NOT_EXIST) - CHK_ERR_WIN32A(ERROR_CLASS_HAS_WINDOWS) - CHK_ERR_WIN32A(ERROR_INVALID_INDEX) - CHK_ERR_WIN32A(ERROR_INVALID_ICON_HANDLE) - CHK_ERR_WIN32A(ERROR_PRIVATE_DIALOG_INDEX) - CHK_ERR_WIN32A(ERROR_LISTBOX_ID_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_NO_WILDCARD_CHARACTERS) - CHK_ERR_WIN32A(ERROR_CLIPBOARD_NOT_OPEN) - CHK_ERR_WIN32A(ERROR_HOTKEY_NOT_REGISTERED) - CHK_ERR_WIN32A(ERROR_WINDOW_NOT_DIALOG) - CHK_ERR_WIN32A(ERROR_CONTROL_ID_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_INVALID_COMBOBOX_MESSAGE) - CHK_ERR_WIN32A(ERROR_WINDOW_NOT_COMBOBOX) - CHK_ERR_WIN32A(ERROR_INVALID_EDIT_HEIGHT) - CHK_ERR_WIN32A(ERROR_DC_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_INVALID_HOOK_FILTER) - CHK_ERR_WIN32A(ERROR_INVALID_FILTER_PROC) - CHK_ERR_WIN32A(ERROR_HOOK_NEEDS_HMOD) - CHK_ERR_WIN32A(ERROR_GLOBAL_ONLY_HOOK) - CHK_ERR_WIN32A(ERROR_JOURNAL_HOOK_SET) - CHK_ERR_WIN32A(ERROR_HOOK_NOT_INSTALLED) - CHK_ERR_WIN32A(ERROR_INVALID_LB_MESSAGE) - CHK_ERR_WIN32A(ERROR_SETCOUNT_ON_BAD_LB) - CHK_ERR_WIN32A(ERROR_LB_WITHOUT_TABSTOPS) - CHK_ERR_WIN32A(ERROR_DESTROY_OBJECT_OF_OTHER_THREAD) - CHK_ERR_WIN32A(ERROR_CHILD_WINDOW_MENU) - CHK_ERR_WIN32A(ERROR_NO_SYSTEM_MENU) - CHK_ERR_WIN32A(ERROR_INVALID_MSGBOX_STYLE) - CHK_ERR_WIN32A(ERROR_INVALID_SPI_VALUE) - CHK_ERR_WIN32A(ERROR_SCREEN_ALREADY_LOCKED) - CHK_ERR_WIN32A(ERROR_HWNDS_HAVE_DIFF_PARENT) - CHK_ERR_WIN32A(ERROR_NOT_CHILD_WINDOW) - CHK_ERR_WIN32A(ERROR_INVALID_GW_COMMAND) - CHK_ERR_WIN32A(ERROR_INVALID_THREAD_ID) - CHK_ERR_WIN32A(ERROR_NON_MDICHILD_WINDOW) - CHK_ERR_WIN32A(ERROR_POPUP_ALREADY_ACTIVE) - CHK_ERR_WIN32A(ERROR_NO_SCROLLBARS) - CHK_ERR_WIN32A(ERROR_INVALID_SCROLLBAR_RANGE) - CHK_ERR_WIN32A(ERROR_INVALID_SHOWWIN_COMMAND) - CHK_ERR_WIN32A(ERROR_NO_SYSTEM_RESOURCES) - CHK_ERR_WIN32A(ERROR_NONPAGED_SYSTEM_RESOURCES) - CHK_ERR_WIN32A(ERROR_PAGED_SYSTEM_RESOURCES) - CHK_ERR_WIN32A(ERROR_WORKING_SET_QUOTA) - CHK_ERR_WIN32A(ERROR_PAGEFILE_QUOTA) - CHK_ERR_WIN32A(ERROR_COMMITMENT_LIMIT) - CHK_ERR_WIN32A(ERROR_MENU_ITEM_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_INVALID_KEYBOARD_HANDLE) - CHK_ERR_WIN32A(ERROR_HOOK_TYPE_NOT_ALLOWED) - CHK_ERR_WIN32A(ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION) - CHK_ERR_WIN32A(ERROR_TIMEOUT) - CHK_ERR_WIN32A(ERROR_INVALID_MONITOR_HANDLE) - CHK_ERR_WIN32A(ERROR_EVENTLOG_FILE_CORRUPT) - CHK_ERR_WIN32A(ERROR_EVENTLOG_CANT_START) - CHK_ERR_WIN32A(ERROR_LOG_FILE_FULL) - CHK_ERR_WIN32A(ERROR_EVENTLOG_FILE_CHANGED) - CHK_ERR_WIN32A(ERROR_INSTALL_USEREXIT) - CHK_ERR_WIN32A(ERROR_INSTALL_FAILURE) - CHK_ERR_WIN32A(ERROR_INSTALL_SUSPEND) - CHK_ERR_WIN32A(ERROR_UNKNOWN_PRODUCT) - CHK_ERR_WIN32A(ERROR_UNKNOWN_FEATURE) - CHK_ERR_WIN32A(ERROR_UNKNOWN_COMPONENT) - CHK_ERR_WIN32A(ERROR_UNKNOWN_PROPERTY) - CHK_ERR_WIN32A(ERROR_INVALID_HANDLE_STATE) - CHK_ERR_WIN32A(ERROR_BAD_CONFIGURATION) - CHK_ERR_WIN32A(ERROR_INDEX_ABSENT) - CHK_ERR_WIN32A(ERROR_INSTALL_SOURCE_ABSENT) - CHK_ERR_WIN32A(ERROR_PRODUCT_UNINSTALLED) - CHK_ERR_WIN32A(ERROR_BAD_QUERY_SYNTAX) - CHK_ERR_WIN32A(ERROR_INVALID_FIELD) - CHK_ERR_WIN32A(ERROR_DEVICE_REMOVED) - CHK_ERR_WIN32A(RPC_S_INVALID_STRING_BINDING) - CHK_ERR_WIN32A(RPC_S_WRONG_KIND_OF_BINDING) - CHK_ERR_WIN32A(RPC_S_INVALID_BINDING) - CHK_ERR_WIN32A(RPC_S_PROTSEQ_NOT_SUPPORTED) - CHK_ERR_WIN32A(RPC_S_INVALID_RPC_PROTSEQ) - CHK_ERR_WIN32A(RPC_S_INVALID_STRING_UUID) - CHK_ERR_WIN32A(RPC_S_INVALID_ENDPOINT_FORMAT) - CHK_ERR_WIN32A(RPC_S_INVALID_NET_ADDR) - CHK_ERR_WIN32A(RPC_S_NO_ENDPOINT_FOUND) - CHK_ERR_WIN32A(RPC_S_INVALID_TIMEOUT) - CHK_ERR_WIN32A(RPC_S_OBJECT_NOT_FOUND) - CHK_ERR_WIN32A(RPC_S_ALREADY_REGISTERED) - CHK_ERR_WIN32A(RPC_S_TYPE_ALREADY_REGISTERED) - CHK_ERR_WIN32A(RPC_S_ALREADY_LISTENING) - CHK_ERR_WIN32A(RPC_S_NO_PROTSEQS_REGISTERED) - CHK_ERR_WIN32A(RPC_S_NOT_LISTENING) - CHK_ERR_WIN32A(RPC_S_UNKNOWN_MGR_TYPE) - CHK_ERR_WIN32A(RPC_S_UNKNOWN_IF) - CHK_ERR_WIN32A(RPC_S_NO_BINDINGS) - CHK_ERR_WIN32A(RPC_S_NO_PROTSEQS) - CHK_ERR_WIN32A(RPC_S_CANT_CREATE_ENDPOINT) - CHK_ERR_WIN32A(RPC_S_OUT_OF_RESOURCES) - CHK_ERR_WIN32A(RPC_S_SERVER_UNAVAILABLE) - CHK_ERR_WIN32A(RPC_S_SERVER_TOO_BUSY) - CHK_ERR_WIN32A(RPC_S_INVALID_NETWORK_OPTIONS) - CHK_ERR_WIN32A(RPC_S_NO_CALL_ACTIVE) - CHK_ERR_WIN32A(RPC_S_CALL_FAILED) - CHK_ERR_WIN32A(RPC_S_CALL_FAILED_DNE) - CHK_ERR_WIN32A(RPC_S_PROTOCOL_ERROR) - CHK_ERR_WIN32A(RPC_S_UNSUPPORTED_TRANS_SYN) - CHK_ERR_WIN32A(RPC_S_UNSUPPORTED_TYPE) - CHK_ERR_WIN32A(RPC_S_INVALID_TAG) - CHK_ERR_WIN32A(RPC_S_INVALID_BOUND) - CHK_ERR_WIN32A(RPC_S_NO_ENTRY_NAME) - CHK_ERR_WIN32A(RPC_S_INVALID_NAME_SYNTAX) - CHK_ERR_WIN32A(RPC_S_UNSUPPORTED_NAME_SYNTAX) - CHK_ERR_WIN32A(RPC_S_UUID_NO_ADDRESS) - CHK_ERR_WIN32A(RPC_S_DUPLICATE_ENDPOINT) - CHK_ERR_WIN32A(RPC_S_UNKNOWN_AUTHN_TYPE) - CHK_ERR_WIN32A(RPC_S_MAX_CALLS_TOO_SMALL) - CHK_ERR_WIN32A(RPC_S_STRING_TOO_LONG) - CHK_ERR_WIN32A(RPC_S_PROTSEQ_NOT_FOUND) - CHK_ERR_WIN32A(RPC_S_PROCNUM_OUT_OF_RANGE) - CHK_ERR_WIN32A(RPC_S_BINDING_HAS_NO_AUTH) - CHK_ERR_WIN32A(RPC_S_UNKNOWN_AUTHN_SERVICE) - CHK_ERR_WIN32A(RPC_S_UNKNOWN_AUTHN_LEVEL) - CHK_ERR_WIN32A(RPC_S_INVALID_AUTH_IDENTITY) - CHK_ERR_WIN32A(RPC_S_UNKNOWN_AUTHZ_SERVICE) - CHK_ERR_WIN32A(EPT_S_INVALID_ENTRY) - CHK_ERR_WIN32A(EPT_S_CANT_PERFORM_OP) - CHK_ERR_WIN32A(EPT_S_NOT_REGISTERED) - CHK_ERR_WIN32A(RPC_S_NOTHING_TO_EXPORT) - CHK_ERR_WIN32A(RPC_S_INCOMPLETE_NAME) - CHK_ERR_WIN32A(RPC_S_INVALID_VERS_OPTION) - CHK_ERR_WIN32A(RPC_S_NO_MORE_MEMBERS) - CHK_ERR_WIN32A(RPC_S_NOT_ALL_OBJS_UNEXPORTED) - CHK_ERR_WIN32A(RPC_S_INTERFACE_NOT_FOUND) - CHK_ERR_WIN32A(RPC_S_ENTRY_ALREADY_EXISTS) - CHK_ERR_WIN32A(RPC_S_ENTRY_NOT_FOUND) - CHK_ERR_WIN32A(RPC_S_NAME_SERVICE_UNAVAILABLE) - CHK_ERR_WIN32A(RPC_S_INVALID_NAF_ID) - CHK_ERR_WIN32A(RPC_S_CANNOT_SUPPORT) - CHK_ERR_WIN32A(RPC_S_NO_CONTEXT_AVAILABLE) - CHK_ERR_WIN32A(RPC_S_INTERNAL_ERROR) - CHK_ERR_WIN32A(RPC_S_ZERO_DIVIDE) - CHK_ERR_WIN32A(RPC_S_ADDRESS_ERROR) - CHK_ERR_WIN32A(RPC_S_FP_DIV_ZERO) - CHK_ERR_WIN32A(RPC_S_FP_UNDERFLOW) - CHK_ERR_WIN32A(RPC_S_FP_OVERFLOW) - CHK_ERR_WIN32A(RPC_X_NO_MORE_ENTRIES) - CHK_ERR_WIN32A(RPC_X_SS_CHAR_TRANS_OPEN_FAIL) - CHK_ERR_WIN32A(RPC_X_SS_CHAR_TRANS_SHORT_FILE) - CHK_ERR_WIN32A(RPC_X_SS_IN_NULL_CONTEXT) - CHK_ERR_WIN32A(RPC_X_SS_CONTEXT_DAMAGED) - CHK_ERR_WIN32A(RPC_X_SS_HANDLES_MISMATCH) - CHK_ERR_WIN32A(RPC_X_SS_CANNOT_GET_CALL_HANDLE) - CHK_ERR_WIN32A(RPC_X_NULL_REF_POINTER) - CHK_ERR_WIN32A(RPC_X_ENUM_VALUE_OUT_OF_RANGE) - CHK_ERR_WIN32A(RPC_X_BYTE_COUNT_TOO_SMALL) - CHK_ERR_WIN32A(RPC_X_BAD_STUB_DATA) - CHK_ERR_WIN32A(ERROR_INVALID_USER_BUFFER) - CHK_ERR_WIN32A(ERROR_UNRECOGNIZED_MEDIA) - CHK_ERR_WIN32A(ERROR_NO_TRUST_LSA_SECRET) - CHK_ERR_WIN32A(ERROR_NO_TRUST_SAM_ACCOUNT) - CHK_ERR_WIN32A(ERROR_TRUSTED_DOMAIN_FAILURE) - CHK_ERR_WIN32A(ERROR_TRUSTED_RELATIONSHIP_FAILURE) - CHK_ERR_WIN32A(ERROR_TRUST_FAILURE) - CHK_ERR_WIN32A(RPC_S_CALL_IN_PROGRESS) - CHK_ERR_WIN32A(ERROR_NETLOGON_NOT_STARTED) - CHK_ERR_WIN32A(ERROR_ACCOUNT_EXPIRED) - CHK_ERR_WIN32A(ERROR_REDIRECTOR_HAS_OPEN_HANDLES) - CHK_ERR_WIN32A(ERROR_PRINTER_DRIVER_ALREADY_INSTALLED) - CHK_ERR_WIN32A(ERROR_UNKNOWN_PORT) - CHK_ERR_WIN32A(ERROR_UNKNOWN_PRINTER_DRIVER) - CHK_ERR_WIN32A(ERROR_UNKNOWN_PRINTPROCESSOR) - CHK_ERR_WIN32A(ERROR_INVALID_SEPARATOR_FILE) - CHK_ERR_WIN32A(ERROR_INVALID_PRIORITY) - CHK_ERR_WIN32A(ERROR_INVALID_PRINTER_NAME) - CHK_ERR_WIN32A(ERROR_PRINTER_ALREADY_EXISTS) - CHK_ERR_WIN32A(ERROR_INVALID_PRINTER_COMMAND) - CHK_ERR_WIN32A(ERROR_INVALID_DATATYPE) - CHK_ERR_WIN32A(ERROR_INVALID_ENVIRONMENT) - CHK_ERR_WIN32A(RPC_S_NO_MORE_BINDINGS) - CHK_ERR_WIN32A(ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT) - CHK_ERR_WIN32A(ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT) - CHK_ERR_WIN32A(ERROR_NOLOGON_SERVER_TRUST_ACCOUNT) - CHK_ERR_WIN32A(ERROR_DOMAIN_TRUST_INCONSISTENT) - CHK_ERR_WIN32A(ERROR_SERVER_HAS_OPEN_HANDLES) - CHK_ERR_WIN32A(ERROR_RESOURCE_DATA_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_RESOURCE_TYPE_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_RESOURCE_NAME_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_RESOURCE_LANG_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_NOT_ENOUGH_QUOTA) - CHK_ERR_WIN32A(RPC_S_NO_INTERFACES) - CHK_ERR_WIN32A(RPC_S_CALL_CANCELLED) - CHK_ERR_WIN32A(RPC_S_BINDING_INCOMPLETE) - CHK_ERR_WIN32A(RPC_S_COMM_FAILURE) - CHK_ERR_WIN32A(RPC_S_UNSUPPORTED_AUTHN_LEVEL) - CHK_ERR_WIN32A(RPC_S_NO_PRINC_NAME) - CHK_ERR_WIN32A(RPC_S_NOT_RPC_ERROR) - CHK_ERR_WIN32A(RPC_S_UUID_LOCAL_ONLY) - CHK_ERR_WIN32A(RPC_S_SEC_PKG_ERROR) - CHK_ERR_WIN32A(RPC_S_NOT_CANCELLED) - CHK_ERR_WIN32A(RPC_X_INVALID_ES_ACTION) - CHK_ERR_WIN32A(RPC_X_WRONG_ES_VERSION) - CHK_ERR_WIN32A(RPC_X_WRONG_STUB_VERSION) - CHK_ERR_WIN32A(RPC_X_INVALID_PIPE_OBJECT) - CHK_ERR_WIN32A(RPC_X_WRONG_PIPE_ORDER) - CHK_ERR_WIN32A(RPC_X_WRONG_PIPE_VERSION) - CHK_ERR_WIN32A(RPC_S_GROUP_MEMBER_NOT_FOUND) - CHK_ERR_WIN32A(EPT_S_CANT_CREATE) - CHK_ERR_WIN32A(RPC_S_INVALID_OBJECT) - CHK_ERR_WIN32A(ERROR_INVALID_TIME) - CHK_ERR_WIN32A(ERROR_INVALID_FORM_NAME) - CHK_ERR_WIN32A(ERROR_INVALID_FORM_SIZE) - CHK_ERR_WIN32A(ERROR_ALREADY_WAITING) - CHK_ERR_WIN32A(ERROR_PRINTER_DELETED) - CHK_ERR_WIN32A(ERROR_INVALID_PRINTER_STATE) - CHK_ERR_WIN32A(ERROR_PASSWORD_MUST_CHANGE) - CHK_ERR_WIN32A(ERROR_DOMAIN_CONTROLLER_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_ACCOUNT_LOCKED_OUT) - CHK_ERR_WIN32A(OR_INVALID_OXID) - CHK_ERR_WIN32A(OR_INVALID_OID) - CHK_ERR_WIN32A(OR_INVALID_SET) - CHK_ERR_WIN32A(RPC_S_SEND_INCOMPLETE) - CHK_ERR_WIN32A(RPC_S_INVALID_ASYNC_HANDLE) - CHK_ERR_WIN32A(RPC_S_INVALID_ASYNC_CALL) - CHK_ERR_WIN32A(RPC_X_PIPE_CLOSED) - CHK_ERR_WIN32A(RPC_X_PIPE_DISCIPLINE_ERROR) - CHK_ERR_WIN32A(RPC_X_PIPE_EMPTY) - CHK_ERR_WIN32A(ERROR_NO_SITENAME) - CHK_ERR_WIN32A(ERROR_CANT_ACCESS_FILE) - CHK_ERR_WIN32A(ERROR_CANT_RESOLVE_FILENAME) - CHK_ERR_WIN32A(ERROR_INVALID_PIXEL_FORMAT) - CHK_ERR_WIN32A(ERROR_BAD_DRIVER) - CHK_ERR_WIN32A(ERROR_INVALID_WINDOW_STYLE) - CHK_ERR_WIN32A(ERROR_METAFILE_NOT_SUPPORTED) - CHK_ERR_WIN32A(ERROR_TRANSFORM_NOT_SUPPORTED) - CHK_ERR_WIN32A(ERROR_CLIPPING_NOT_SUPPORTED) - CHK_ERR_WIN32A(ERROR_INVALID_CMM) - CHK_ERR_WIN32A(ERROR_INVALID_PROFILE) - CHK_ERR_WIN32A(ERROR_TAG_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_TAG_NOT_PRESENT) - CHK_ERR_WIN32A(ERROR_DUPLICATE_TAG) - CHK_ERR_WIN32A(ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE) - CHK_ERR_WIN32A(ERROR_PROFILE_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_INVALID_COLORSPACE) - CHK_ERR_WIN32A(ERROR_ICM_NOT_ENABLED) - CHK_ERR_WIN32A(ERROR_DELETING_ICM_XFORM) - CHK_ERR_WIN32A(ERROR_INVALID_TRANSFORM) - CHK_ERR_WIN32A(ERROR_COLORSPACE_MISMATCH) - CHK_ERR_WIN32A(ERROR_INVALID_COLORINDEX) - CHK_ERR_WIN32A(ERROR_CONNECTED_OTHER_PASSWORD) - CHK_ERR_WIN32A(ERROR_BAD_USERNAME) - CHK_ERR_WIN32A(ERROR_NOT_CONNECTED) - CHK_ERR_WIN32A(ERROR_OPEN_FILES) - CHK_ERR_WIN32A(ERROR_ACTIVE_CONNECTIONS) - CHK_ERR_WIN32A(ERROR_DEVICE_IN_USE) - CHK_ERR_WIN32A(ERROR_UNKNOWN_PRINT_MONITOR) - CHK_ERR_WIN32A(ERROR_PRINTER_DRIVER_IN_USE) - CHK_ERR_WIN32A(ERROR_SPOOL_FILE_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_SPL_NO_STARTDOC) - CHK_ERR_WIN32A(ERROR_SPL_NO_ADDJOB) - CHK_ERR_WIN32A(ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED) - CHK_ERR_WIN32A(ERROR_PRINT_MONITOR_ALREADY_INSTALLED) - CHK_ERR_WIN32A(ERROR_INVALID_PRINT_MONITOR) - CHK_ERR_WIN32A(ERROR_PRINT_MONITOR_IN_USE) - CHK_ERR_WIN32A(ERROR_PRINTER_HAS_JOBS_QUEUED) - CHK_ERR_WIN32A(ERROR_SUCCESS_REBOOT_REQUIRED) - CHK_ERR_WIN32A(ERROR_SUCCESS_RESTART_REQUIRED) - CHK_ERR_WIN32A(ERROR_PRINTER_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_WINS_INTERNAL) - CHK_ERR_WIN32A(ERROR_CAN_NOT_DEL_LOCAL_WINS) - CHK_ERR_WIN32A(ERROR_STATIC_INIT) - CHK_ERR_WIN32A(ERROR_INC_BACKUP) - CHK_ERR_WIN32A(ERROR_FULL_BACKUP) - CHK_ERR_WIN32A(ERROR_REC_NON_EXISTENT) - CHK_ERR_WIN32A(ERROR_RPL_NOT_ALLOWED) - CHK_ERR_WIN32A(ERROR_DHCP_ADDRESS_CONFLICT) - CHK_ERR_WIN32A(ERROR_WMI_GUID_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_WMI_INSTANCE_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_WMI_ITEMID_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_WMI_TRY_AGAIN) - CHK_ERR_WIN32A(ERROR_WMI_DP_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_WMI_UNRESOLVED_INSTANCE_REF) - CHK_ERR_WIN32A(ERROR_WMI_ALREADY_ENABLED) - CHK_ERR_WIN32A(ERROR_WMI_GUID_DISCONNECTED) - CHK_ERR_WIN32A(ERROR_WMI_SERVER_UNAVAILABLE) - CHK_ERR_WIN32A(ERROR_WMI_DP_FAILED) - CHK_ERR_WIN32A(ERROR_WMI_INVALID_MOF) - CHK_ERR_WIN32A(ERROR_WMI_INVALID_REGINFO) - CHK_ERR_WIN32A(ERROR_WMI_ALREADY_DISABLED) - CHK_ERR_WIN32A(ERROR_WMI_READ_ONLY) - CHK_ERR_WIN32A(ERROR_WMI_SET_FAILURE) - CHK_ERR_WIN32A(ERROR_INVALID_MEDIA) - CHK_ERR_WIN32A(ERROR_INVALID_LIBRARY) - CHK_ERR_WIN32A(ERROR_INVALID_MEDIA_POOL) - CHK_ERR_WIN32A(ERROR_DRIVE_MEDIA_MISMATCH) - CHK_ERR_WIN32A(ERROR_MEDIA_OFFLINE) - CHK_ERR_WIN32A(ERROR_LIBRARY_OFFLINE) - CHK_ERR_WIN32A(ERROR_EMPTY) - CHK_ERR_WIN32A(ERROR_NOT_EMPTY) - CHK_ERR_WIN32A(ERROR_MEDIA_UNAVAILABLE) - CHK_ERR_WIN32A(ERROR_RESOURCE_DISABLED) - CHK_ERR_WIN32A(ERROR_INVALID_CLEANER) - CHK_ERR_WIN32A(ERROR_UNABLE_TO_CLEAN) - CHK_ERR_WIN32A(ERROR_OBJECT_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_DATABASE_FAILURE) - CHK_ERR_WIN32A(ERROR_DATABASE_FULL) - CHK_ERR_WIN32A(ERROR_MEDIA_INCOMPATIBLE) - CHK_ERR_WIN32A(ERROR_RESOURCE_NOT_PRESENT) - CHK_ERR_WIN32A(ERROR_INVALID_OPERATION) - CHK_ERR_WIN32A(ERROR_MEDIA_NOT_AVAILABLE) - CHK_ERR_WIN32A(ERROR_DEVICE_NOT_AVAILABLE) - CHK_ERR_WIN32A(ERROR_REQUEST_REFUSED) - CHK_ERR_WIN32A(ERROR_INVALID_DRIVE_OBJECT) - CHK_ERR_WIN32A(ERROR_LIBRARY_FULL) - CHK_ERR_WIN32A(ERROR_MEDIUM_NOT_ACCESSIBLE) - CHK_ERR_WIN32A(ERROR_UNABLE_TO_LOAD_MEDIUM) - CHK_ERR_WIN32A(ERROR_UNABLE_TO_INVENTORY_DRIVE) - CHK_ERR_WIN32A(ERROR_UNABLE_TO_INVENTORY_SLOT) - CHK_ERR_WIN32A(ERROR_UNABLE_TO_INVENTORY_TRANSPORT) - CHK_ERR_WIN32A(ERROR_TRANSPORT_FULL) - CHK_ERR_WIN32A(ERROR_CONTROLLING_IEPORT) - CHK_ERR_WIN32A(ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA) - CHK_ERR_WIN32A(ERROR_CLEANER_SLOT_SET) - CHK_ERR_WIN32A(ERROR_CLEANER_SLOT_NOT_SET) - CHK_ERR_WIN32A(ERROR_CLEANER_CARTRIDGE_SPENT) - CHK_ERR_WIN32A(ERROR_UNEXPECTED_OMID) - CHK_ERR_WIN32A(ERROR_CANT_DELETE_LAST_ITEM) - CHK_ERR_WIN32A(ERROR_MESSAGE_EXCEEDS_MAX_SIZE) - CHK_ERR_WIN32A(ERROR_FILE_OFFLINE) - CHK_ERR_WIN32A(ERROR_REMOTE_STORAGE_NOT_ACTIVE) - CHK_ERR_WIN32A(ERROR_REMOTE_STORAGE_MEDIA_ERROR) - CHK_ERR_WIN32A(ERROR_NOT_A_REPARSE_POINT) - CHK_ERR_WIN32A(ERROR_REPARSE_ATTRIBUTE_CONFLICT) - CHK_ERR_WIN32A(ERROR_INVALID_REPARSE_DATA) - CHK_ERR_WIN32A(ERROR_DEPENDENT_RESOURCE_EXISTS) - CHK_ERR_WIN32A(ERROR_DEPENDENCY_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_DEPENDENCY_ALREADY_EXISTS) - CHK_ERR_WIN32A(ERROR_RESOURCE_NOT_ONLINE) - CHK_ERR_WIN32A(ERROR_HOST_NODE_NOT_AVAILABLE) - CHK_ERR_WIN32A(ERROR_RESOURCE_NOT_AVAILABLE) - CHK_ERR_WIN32A(ERROR_RESOURCE_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_SHUTDOWN_CLUSTER) - CHK_ERR_WIN32A(ERROR_CANT_EVICT_ACTIVE_NODE) - CHK_ERR_WIN32A(ERROR_OBJECT_ALREADY_EXISTS) - CHK_ERR_WIN32A(ERROR_OBJECT_IN_LIST) - CHK_ERR_WIN32A(ERROR_GROUP_NOT_AVAILABLE) - CHK_ERR_WIN32A(ERROR_GROUP_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_GROUP_NOT_ONLINE) - CHK_ERR_WIN32A(ERROR_HOST_NODE_NOT_RESOURCE_OWNER) - CHK_ERR_WIN32A(ERROR_HOST_NODE_NOT_GROUP_OWNER) - CHK_ERR_WIN32A(ERROR_RESMON_CREATE_FAILED) - CHK_ERR_WIN32A(ERROR_RESMON_ONLINE_FAILED) - CHK_ERR_WIN32A(ERROR_RESOURCE_ONLINE) - CHK_ERR_WIN32A(ERROR_QUORUM_RESOURCE) - CHK_ERR_WIN32A(ERROR_NOT_QUORUM_CAPABLE) - CHK_ERR_WIN32A(ERROR_CLUSTER_SHUTTING_DOWN) - CHK_ERR_WIN32A(ERROR_INVALID_STATE) - CHK_ERR_WIN32A(ERROR_RESOURCE_PROPERTIES_STORED) - CHK_ERR_WIN32A(ERROR_NOT_QUORUM_CLASS) - CHK_ERR_WIN32A(ERROR_CORE_RESOURCE) - CHK_ERR_WIN32A(ERROR_QUORUM_RESOURCE_ONLINE_FAILED) - CHK_ERR_WIN32A(ERROR_QUORUMLOG_OPEN_FAILED) - CHK_ERR_WIN32A(ERROR_CLUSTERLOG_CORRUPT) - CHK_ERR_WIN32A(ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE) - CHK_ERR_WIN32A(ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE) - CHK_ERR_WIN32A(ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE) - CHK_ERR_WIN32A(ERROR_ENCRYPTION_FAILED) - CHK_ERR_WIN32A(ERROR_DECRYPTION_FAILED) - CHK_ERR_WIN32A(ERROR_FILE_ENCRYPTED) - CHK_ERR_WIN32A(ERROR_NO_RECOVERY_POLICY) - CHK_ERR_WIN32A(ERROR_NO_EFS) - CHK_ERR_WIN32A(ERROR_WRONG_EFS) - CHK_ERR_WIN32A(ERROR_NO_USER_KEYS) - CHK_ERR_WIN32A(ERROR_FILE_NOT_ENCRYPTED) - CHK_ERR_WIN32A(ERROR_NOT_EXPORT_FORMAT) - CHK_ERR_WIN32A(ERROR_NO_BROWSER_SERVERS_FOUND) - CHK_ERR_WIN32A(ERROR_CTX_WINSTATION_NAME_INVALID) - CHK_ERR_WIN32A(ERROR_CTX_INVALID_PD) - CHK_ERR_WIN32A(ERROR_CTX_PD_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_CTX_WD_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY) - CHK_ERR_WIN32A(ERROR_CTX_SERVICE_NAME_COLLISION) - CHK_ERR_WIN32A(ERROR_CTX_CLOSE_PENDING) - CHK_ERR_WIN32A(ERROR_CTX_NO_OUTBUF) - CHK_ERR_WIN32A(ERROR_CTX_MODEM_INF_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_CTX_INVALID_MODEMNAME) - CHK_ERR_WIN32A(ERROR_CTX_MODEM_RESPONSE_ERROR) - CHK_ERR_WIN32A(ERROR_CTX_MODEM_RESPONSE_TIMEOUT) - CHK_ERR_WIN32A(ERROR_CTX_MODEM_RESPONSE_NO_CARRIER) - CHK_ERR_WIN32A(ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE) - CHK_ERR_WIN32A(ERROR_CTX_MODEM_RESPONSE_BUSY) - CHK_ERR_WIN32A(ERROR_CTX_MODEM_RESPONSE_VOICE) - CHK_ERR_WIN32A(ERROR_CTX_TD_ERROR) - CHK_ERR_WIN32A(ERROR_CTX_WINSTATION_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_CTX_WINSTATION_ALREADY_EXISTS) - CHK_ERR_WIN32A(ERROR_CTX_WINSTATION_BUSY) - CHK_ERR_WIN32A(ERROR_CTX_BAD_VIDEO_MODE) - CHK_ERR_WIN32A(ERROR_CTX_GRAPHICS_INVALID) - CHK_ERR_WIN32A(ERROR_CTX_LOGON_DISABLED) - CHK_ERR_WIN32A(ERROR_CTX_NOT_CONSOLE) - CHK_ERR_WIN32A(ERROR_CTX_CLIENT_QUERY_TIMEOUT) - CHK_ERR_WIN32A(ERROR_CTX_CONSOLE_DISCONNECT) - CHK_ERR_WIN32A(ERROR_CTX_CONSOLE_CONNECT) - CHK_ERR_WIN32A(ERROR_CTX_SHADOW_DENIED) - CHK_ERR_WIN32A(ERROR_CTX_WINSTATION_ACCESS_DENIED) - CHK_ERR_WIN32A(ERROR_CTX_INVALID_WD) - CHK_ERR_WIN32A(ERROR_CTX_SHADOW_INVALID) - CHK_ERR_WIN32A(ERROR_CTX_SHADOW_DISABLED) - CHK_ERR_WIN32A(FRS_ERR_INVALID_API_SEQUENCE) - CHK_ERR_WIN32A(FRS_ERR_STARTING_SERVICE) - CHK_ERR_WIN32A(FRS_ERR_STOPPING_SERVICE) - CHK_ERR_WIN32A(FRS_ERR_INTERNAL_API) - CHK_ERR_WIN32A(FRS_ERR_INTERNAL) - CHK_ERR_WIN32A(FRS_ERR_SERVICE_COMM) - CHK_ERR_WIN32A(FRS_ERR_INSUFFICIENT_PRIV) - CHK_ERR_WIN32A(FRS_ERR_AUTHENTICATION) - CHK_ERR_WIN32A(FRS_ERR_PARENT_INSUFFICIENT_PRIV) - CHK_ERR_WIN32A(FRS_ERR_PARENT_AUTHENTICATION) - CHK_ERR_WIN32A(FRS_ERR_CHILD_TO_PARENT_COMM) - CHK_ERR_WIN32A(FRS_ERR_PARENT_TO_CHILD_COMM) - CHK_ERR_WIN32A(FRS_ERR_SYSVOL_POPULATE) - CHK_ERR_WIN32A(FRS_ERR_SYSVOL_POPULATE_TIMEOUT) - CHK_ERR_WIN32A(FRS_ERR_SYSVOL_IS_BUSY) - CHK_ERR_WIN32A(FRS_ERR_SYSVOL_DEMOTE) - CHK_ERR_WIN32A(FRS_ERR_INVALID_SERVICE_PARAMETER) -// CHK_ERR_WIN32A(DS_S_SUCCESS) - CHK_ERR_WIN32A(ERROR_DS_NOT_INSTALLED) - CHK_ERR_WIN32A(ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY) - CHK_ERR_WIN32A(ERROR_DS_NO_ATTRIBUTE_OR_VALUE) - CHK_ERR_WIN32A(ERROR_DS_INVALID_ATTRIBUTE_SYNTAX) - CHK_ERR_WIN32A(ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED) - CHK_ERR_WIN32A(ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS) - CHK_ERR_WIN32A(ERROR_DS_BUSY) - CHK_ERR_WIN32A(ERROR_DS_UNAVAILABLE) - CHK_ERR_WIN32A(ERROR_DS_NO_RIDS_ALLOCATED) - CHK_ERR_WIN32A(ERROR_DS_NO_MORE_RIDS) - CHK_ERR_WIN32A(ERROR_DS_INCORRECT_ROLE_OWNER) - CHK_ERR_WIN32A(ERROR_DS_RIDMGR_INIT_ERROR) - CHK_ERR_WIN32A(ERROR_DS_OBJ_CLASS_VIOLATION) - CHK_ERR_WIN32A(ERROR_DS_CANT_ON_NON_LEAF) - CHK_ERR_WIN32A(ERROR_DS_CANT_ON_RDN) - CHK_ERR_WIN32A(ERROR_DS_CANT_MOD_OBJ_CLASS) - CHK_ERR_WIN32A(ERROR_DS_CROSS_DOM_MOVE_ERROR) - CHK_ERR_WIN32A(ERROR_DS_GC_NOT_AVAILABLE) - CHK_ERR_WIN32A(ERROR_SHARED_POLICY) - CHK_ERR_WIN32A(ERROR_POLICY_OBJECT_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_POLICY_ONLY_IN_DS) - CHK_ERR_WIN32A(ERROR_PROMOTION_ACTIVE) - CHK_ERR_WIN32A(ERROR_NO_PROMOTION_ACTIVE) - CHK_ERR_WIN32A(ERROR_DS_OPERATIONS_ERROR) - CHK_ERR_WIN32A(ERROR_DS_PROTOCOL_ERROR) - CHK_ERR_WIN32A(ERROR_DS_TIMELIMIT_EXCEEDED) - CHK_ERR_WIN32A(ERROR_DS_SIZELIMIT_EXCEEDED) - CHK_ERR_WIN32A(ERROR_DS_ADMIN_LIMIT_EXCEEDED) - CHK_ERR_WIN32A(ERROR_DS_COMPARE_FALSE) - CHK_ERR_WIN32A(ERROR_DS_COMPARE_TRUE) - CHK_ERR_WIN32A(ERROR_DS_AUTH_METHOD_NOT_SUPPORTED) - CHK_ERR_WIN32A(ERROR_DS_STRONG_AUTH_REQUIRED) - CHK_ERR_WIN32A(ERROR_DS_INAPPROPRIATE_AUTH) - CHK_ERR_WIN32A(ERROR_DS_AUTH_UNKNOWN) - CHK_ERR_WIN32A(ERROR_DS_REFERRAL) - CHK_ERR_WIN32A(ERROR_DS_UNAVAILABLE_CRIT_EXTENSION) - CHK_ERR_WIN32A(ERROR_DS_CONFIDENTIALITY_REQUIRED) - CHK_ERR_WIN32A(ERROR_DS_INAPPROPRIATE_MATCHING) - CHK_ERR_WIN32A(ERROR_DS_CONSTRAINT_VIOLATION) - CHK_ERR_WIN32A(ERROR_DS_NO_SUCH_OBJECT) - CHK_ERR_WIN32A(ERROR_DS_ALIAS_PROBLEM) - CHK_ERR_WIN32A(ERROR_DS_INVALID_DN_SYNTAX) - CHK_ERR_WIN32A(ERROR_DS_IS_LEAF) - CHK_ERR_WIN32A(ERROR_DS_ALIAS_DEREF_PROBLEM) - CHK_ERR_WIN32A(ERROR_DS_UNWILLING_TO_PERFORM) - CHK_ERR_WIN32A(ERROR_DS_LOOP_DETECT) - CHK_ERR_WIN32A(ERROR_DS_NAMING_VIOLATION) - CHK_ERR_WIN32A(ERROR_DS_OBJECT_RESULTS_TOO_LARGE) - CHK_ERR_WIN32A(ERROR_DS_AFFECTS_MULTIPLE_DSAS) - CHK_ERR_WIN32A(ERROR_DS_SERVER_DOWN) - CHK_ERR_WIN32A(ERROR_DS_LOCAL_ERROR) - CHK_ERR_WIN32A(ERROR_DS_ENCODING_ERROR) - CHK_ERR_WIN32A(ERROR_DS_DECODING_ERROR) - CHK_ERR_WIN32A(ERROR_DS_FILTER_UNKNOWN) - CHK_ERR_WIN32A(ERROR_DS_PARAM_ERROR) - CHK_ERR_WIN32A(ERROR_DS_NOT_SUPPORTED) - CHK_ERR_WIN32A(ERROR_DS_NO_RESULTS_RETURNED) - CHK_ERR_WIN32A(ERROR_DS_CONTROL_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_DS_CLIENT_LOOP) - CHK_ERR_WIN32A(ERROR_DS_REFERRAL_LIMIT_EXCEEDED) - CHK_ERR_WIN32A(ERROR_DS_ROOT_MUST_BE_NC) - CHK_ERR_WIN32A(ERROR_DS_ADD_REPLICA_INHIBITED) - CHK_ERR_WIN32A(ERROR_DS_ATT_NOT_DEF_IN_SCHEMA) - CHK_ERR_WIN32A(ERROR_DS_MAX_OBJ_SIZE_EXCEEDED) - CHK_ERR_WIN32A(ERROR_DS_OBJ_STRING_NAME_EXISTS) - CHK_ERR_WIN32A(ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA) - CHK_ERR_WIN32A(ERROR_DS_RDN_DOESNT_MATCH_SCHEMA) - CHK_ERR_WIN32A(ERROR_DS_NO_REQUESTED_ATTS_FOUND) - CHK_ERR_WIN32A(ERROR_DS_USER_BUFFER_TO_SMALL) - CHK_ERR_WIN32A(ERROR_DS_ATT_IS_NOT_ON_OBJ) - CHK_ERR_WIN32A(ERROR_DS_ILLEGAL_MOD_OPERATION) - CHK_ERR_WIN32A(ERROR_DS_OBJ_TOO_LARGE) - CHK_ERR_WIN32A(ERROR_DS_BAD_INSTANCE_TYPE) - CHK_ERR_WIN32A(ERROR_DS_MASTERDSA_REQUIRED) - CHK_ERR_WIN32A(ERROR_DS_OBJECT_CLASS_REQUIRED) - CHK_ERR_WIN32A(ERROR_DS_MISSING_REQUIRED_ATT) - CHK_ERR_WIN32A(ERROR_DS_ATT_NOT_DEF_FOR_CLASS) - CHK_ERR_WIN32A(ERROR_DS_ATT_ALREADY_EXISTS) - CHK_ERR_WIN32A(ERROR_DS_CANT_ADD_ATT_VALUES) - CHK_ERR_WIN32A(ERROR_DS_SINGLE_VALUE_CONSTRAINT) - CHK_ERR_WIN32A(ERROR_DS_RANGE_CONSTRAINT) - CHK_ERR_WIN32A(ERROR_DS_ATT_VAL_ALREADY_EXISTS) - CHK_ERR_WIN32A(ERROR_DS_CANT_REM_MISSING_ATT) - CHK_ERR_WIN32A(ERROR_DS_CANT_REM_MISSING_ATT_VAL) - CHK_ERR_WIN32A(ERROR_DS_ROOT_CANT_BE_SUBREF) - CHK_ERR_WIN32A(ERROR_DS_NO_CHAINING) - CHK_ERR_WIN32A(ERROR_DS_NO_CHAINED_EVAL) - CHK_ERR_WIN32A(ERROR_DS_NO_PARENT_OBJECT) - CHK_ERR_WIN32A(ERROR_DS_PARENT_IS_AN_ALIAS) - CHK_ERR_WIN32A(ERROR_DS_CANT_MIX_MASTER_AND_REPS) - CHK_ERR_WIN32A(ERROR_DS_CHILDREN_EXIST) - CHK_ERR_WIN32A(ERROR_DS_OBJ_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_DS_ALIASED_OBJ_MISSING) - CHK_ERR_WIN32A(ERROR_DS_BAD_NAME_SYNTAX) - CHK_ERR_WIN32A(ERROR_DS_ALIAS_POINTS_TO_ALIAS) - CHK_ERR_WIN32A(ERROR_DS_CANT_DEREF_ALIAS) - CHK_ERR_WIN32A(ERROR_DS_OUT_OF_SCOPE) - CHK_ERR_WIN32A(ERROR_DS_CANT_DELETE_DSA_OBJ) - CHK_ERR_WIN32A(ERROR_DS_GENERIC_ERROR) - CHK_ERR_WIN32A(ERROR_DS_DSA_MUST_BE_INT_MASTER) - CHK_ERR_WIN32A(ERROR_DS_CLASS_NOT_DSA) - CHK_ERR_WIN32A(ERROR_DS_INSUFF_ACCESS_RIGHTS) - CHK_ERR_WIN32A(ERROR_DS_ILLEGAL_SUPERIOR) - CHK_ERR_WIN32A(ERROR_DS_ATTRIBUTE_OWNED_BY_SAM) - CHK_ERR_WIN32A(ERROR_DS_NAME_TOO_MANY_PARTS) - CHK_ERR_WIN32A(ERROR_DS_NAME_TOO_LONG) - CHK_ERR_WIN32A(ERROR_DS_NAME_VALUE_TOO_LONG) - CHK_ERR_WIN32A(ERROR_DS_NAME_UNPARSEABLE) - CHK_ERR_WIN32A(ERROR_DS_NAME_TYPE_UNKNOWN) - CHK_ERR_WIN32A(ERROR_DS_NOT_AN_OBJECT) - CHK_ERR_WIN32A(ERROR_DS_SEC_DESC_TOO_SHORT) - CHK_ERR_WIN32A(ERROR_DS_SEC_DESC_INVALID) - CHK_ERR_WIN32A(ERROR_DS_NO_DELETED_NAME) - CHK_ERR_WIN32A(ERROR_DS_SUBREF_MUST_HAVE_PARENT) - CHK_ERR_WIN32A(ERROR_DS_NCNAME_MUST_BE_NC) - CHK_ERR_WIN32A(ERROR_DS_CANT_ADD_SYSTEM_ONLY) - CHK_ERR_WIN32A(ERROR_DS_CLASS_MUST_BE_CONCRETE) - CHK_ERR_WIN32A(ERROR_DS_INVALID_DMD) - CHK_ERR_WIN32A(ERROR_DS_OBJ_GUID_EXISTS) - CHK_ERR_WIN32A(ERROR_DS_NOT_ON_BACKLINK) - CHK_ERR_WIN32A(ERROR_DS_NO_CROSSREF_FOR_NC) - CHK_ERR_WIN32A(ERROR_DS_SHUTTING_DOWN) - CHK_ERR_WIN32A(ERROR_DS_UNKNOWN_OPERATION) - CHK_ERR_WIN32A(ERROR_DS_INVALID_ROLE_OWNER) - CHK_ERR_WIN32A(ERROR_DS_COULDNT_CONTACT_FSMO) - CHK_ERR_WIN32A(ERROR_DS_CROSS_NC_DN_RENAME) - CHK_ERR_WIN32A(ERROR_DS_CANT_MOD_SYSTEM_ONLY) - CHK_ERR_WIN32A(ERROR_DS_REPLICATOR_ONLY) - CHK_ERR_WIN32A(ERROR_DS_OBJ_CLASS_NOT_DEFINED) - CHK_ERR_WIN32A(ERROR_DS_OBJ_CLASS_NOT_SUBCLASS) - CHK_ERR_WIN32A(ERROR_DS_NAME_REFERENCE_INVALID) - CHK_ERR_WIN32A(ERROR_DS_CROSS_REF_EXISTS) - CHK_ERR_WIN32A(ERROR_DS_CANT_DEL_MASTER_CROSSREF) - CHK_ERR_WIN32A(ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD) - CHK_ERR_WIN32A(ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX) - CHK_ERR_WIN32A(ERROR_DS_DUP_RDN) - CHK_ERR_WIN32A(ERROR_DS_DUP_OID) - CHK_ERR_WIN32A(ERROR_DS_DUP_MAPI_ID) - CHK_ERR_WIN32A(ERROR_DS_DUP_SCHEMA_ID_GUID) - CHK_ERR_WIN32A(ERROR_DS_DUP_LDAP_DISPLAY_NAME) - CHK_ERR_WIN32A(ERROR_DS_SEMANTIC_ATT_TEST) - CHK_ERR_WIN32A(ERROR_DS_SYNTAX_MISMATCH) - CHK_ERR_WIN32A(ERROR_DS_EXISTS_IN_MUST_HAVE) - CHK_ERR_WIN32A(ERROR_DS_EXISTS_IN_MAY_HAVE) - CHK_ERR_WIN32A(ERROR_DS_NONEXISTENT_MAY_HAVE) - CHK_ERR_WIN32A(ERROR_DS_NONEXISTENT_MUST_HAVE) - CHK_ERR_WIN32A(ERROR_DS_AUX_CLS_TEST_FAIL) - CHK_ERR_WIN32A(ERROR_DS_NONEXISTENT_POSS_SUP) - CHK_ERR_WIN32A(ERROR_DS_SUB_CLS_TEST_FAIL) - CHK_ERR_WIN32A(ERROR_DS_BAD_RDN_ATT_ID_SYNTAX) - CHK_ERR_WIN32A(ERROR_DS_EXISTS_IN_AUX_CLS) - CHK_ERR_WIN32A(ERROR_DS_EXISTS_IN_SUB_CLS) - CHK_ERR_WIN32A(ERROR_DS_EXISTS_IN_POSS_SUP) - CHK_ERR_WIN32A(ERROR_DS_RECALCSCHEMA_FAILED) - CHK_ERR_WIN32A(ERROR_DS_TREE_DELETE_NOT_FINISHED) - CHK_ERR_WIN32A(ERROR_DS_CANT_DELETE) - CHK_ERR_WIN32A(ERROR_DS_ATT_SCHEMA_REQ_ID) - CHK_ERR_WIN32A(ERROR_DS_BAD_ATT_SCHEMA_SYNTAX) - CHK_ERR_WIN32A(ERROR_DS_CANT_CACHE_ATT) - CHK_ERR_WIN32A(ERROR_DS_CANT_CACHE_CLASS) - CHK_ERR_WIN32A(ERROR_DS_CANT_REMOVE_ATT_CACHE) - CHK_ERR_WIN32A(ERROR_DS_CANT_REMOVE_CLASS_CACHE) - CHK_ERR_WIN32A(ERROR_DS_CANT_RETRIEVE_DN) - CHK_ERR_WIN32A(ERROR_DS_MISSING_SUPREF) - CHK_ERR_WIN32A(ERROR_DS_CANT_RETRIEVE_INSTANCE) - CHK_ERR_WIN32A(ERROR_DS_CODE_INCONSISTENCY) - CHK_ERR_WIN32A(ERROR_DS_DATABASE_ERROR) - CHK_ERR_WIN32A(ERROR_DS_GOVERNSID_MISSING) - CHK_ERR_WIN32A(ERROR_DS_MISSING_EXPECTED_ATT) - CHK_ERR_WIN32A(ERROR_DS_NCNAME_MISSING_CR_REF) - CHK_ERR_WIN32A(ERROR_DS_SECURITY_CHECKING_ERROR) - CHK_ERR_WIN32A(ERROR_DS_SCHEMA_NOT_LOADED) - CHK_ERR_WIN32A(ERROR_DS_SCHEMA_ALLOC_FAILED) - CHK_ERR_WIN32A(ERROR_DS_ATT_SCHEMA_REQ_SYNTAX) - CHK_ERR_WIN32A(ERROR_DS_GCVERIFY_ERROR) - CHK_ERR_WIN32A(ERROR_DS_DRA_SCHEMA_MISMATCH) - CHK_ERR_WIN32A(ERROR_DS_CANT_FIND_DSA_OBJ) - CHK_ERR_WIN32A(ERROR_DS_CANT_FIND_EXPECTED_NC) - CHK_ERR_WIN32A(ERROR_DS_CANT_FIND_NC_IN_CACHE) - CHK_ERR_WIN32A(ERROR_DS_CANT_RETRIEVE_CHILD) - CHK_ERR_WIN32A(ERROR_DS_SECURITY_ILLEGAL_MODIFY) - CHK_ERR_WIN32A(ERROR_DS_CANT_REPLACE_HIDDEN_REC) - CHK_ERR_WIN32A(ERROR_DS_BAD_HIERARCHY_FILE) - CHK_ERR_WIN32A(ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED) - CHK_ERR_WIN32A(ERROR_DS_CONFIG_PARAM_MISSING) - CHK_ERR_WIN32A(ERROR_DS_COUNTING_AB_INDICES_FAILED) - CHK_ERR_WIN32A(ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED) - CHK_ERR_WIN32A(ERROR_DS_INTERNAL_FAILURE) - CHK_ERR_WIN32A(ERROR_DS_UNKNOWN_ERROR) - CHK_ERR_WIN32A(ERROR_DS_ROOT_REQUIRES_CLASS_TOP) - CHK_ERR_WIN32A(ERROR_DS_REFUSING_FSMO_ROLES) - CHK_ERR_WIN32A(ERROR_DS_MISSING_FSMO_SETTINGS) - CHK_ERR_WIN32A(ERROR_DS_UNABLE_TO_SURRENDER_ROLES) - CHK_ERR_WIN32A(ERROR_DS_DRA_GENERIC) - CHK_ERR_WIN32A(ERROR_DS_DRA_INVALID_PARAMETER) - CHK_ERR_WIN32A(ERROR_DS_DRA_BUSY) - CHK_ERR_WIN32A(ERROR_DS_DRA_BAD_DN) - CHK_ERR_WIN32A(ERROR_DS_DRA_BAD_NC) - CHK_ERR_WIN32A(ERROR_DS_DRA_DN_EXISTS) - CHK_ERR_WIN32A(ERROR_DS_DRA_INTERNAL_ERROR) - CHK_ERR_WIN32A(ERROR_DS_DRA_INCONSISTENT_DIT) - CHK_ERR_WIN32A(ERROR_DS_DRA_CONNECTION_FAILED) - CHK_ERR_WIN32A(ERROR_DS_DRA_BAD_INSTANCE_TYPE) - CHK_ERR_WIN32A(ERROR_DS_DRA_OUT_OF_MEM) - CHK_ERR_WIN32A(ERROR_DS_DRA_MAIL_PROBLEM) - CHK_ERR_WIN32A(ERROR_DS_DRA_REF_ALREADY_EXISTS) - CHK_ERR_WIN32A(ERROR_DS_DRA_REF_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_DS_DRA_OBJ_IS_REP_SOURCE) - CHK_ERR_WIN32A(ERROR_DS_DRA_DB_ERROR) - CHK_ERR_WIN32A(ERROR_DS_DRA_NO_REPLICA) - CHK_ERR_WIN32A(ERROR_DS_DRA_ACCESS_DENIED) - CHK_ERR_WIN32A(ERROR_DS_DRA_NOT_SUPPORTED) - CHK_ERR_WIN32A(ERROR_DS_DRA_RPC_CANCELLED) - CHK_ERR_WIN32A(ERROR_DS_DRA_SOURCE_DISABLED) - CHK_ERR_WIN32A(ERROR_DS_DRA_SINK_DISABLED) - CHK_ERR_WIN32A(ERROR_DS_DRA_NAME_COLLISION) - CHK_ERR_WIN32A(ERROR_DS_DRA_SOURCE_REINSTALLED) - CHK_ERR_WIN32A(ERROR_DS_DRA_MISSING_PARENT) - CHK_ERR_WIN32A(ERROR_DS_DRA_PREEMPTED) - CHK_ERR_WIN32A(ERROR_DS_DRA_ABANDON_SYNC) - CHK_ERR_WIN32A(ERROR_DS_DRA_SHUTDOWN) - CHK_ERR_WIN32A(ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET) - CHK_ERR_WIN32A(ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA) - CHK_ERR_WIN32A(ERROR_DS_DRA_EXTN_CONNECTION_FAILED) - CHK_ERR_WIN32A(ERROR_DS_INSTALL_SCHEMA_MISMATCH) - CHK_ERR_WIN32A(ERROR_DS_DUP_LINK_ID) - CHK_ERR_WIN32A(ERROR_DS_NAME_ERROR_RESOLVING) - CHK_ERR_WIN32A(ERROR_DS_NAME_ERROR_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_DS_NAME_ERROR_NOT_UNIQUE) - CHK_ERR_WIN32A(ERROR_DS_NAME_ERROR_NO_MAPPING) - CHK_ERR_WIN32A(ERROR_DS_NAME_ERROR_DOMAIN_ONLY) - CHK_ERR_WIN32A(ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING) - CHK_ERR_WIN32A(ERROR_DS_CONSTRUCTED_ATT_MOD) - CHK_ERR_WIN32A(ERROR_DS_WRONG_OM_OBJ_CLASS) - CHK_ERR_WIN32A(ERROR_DS_DRA_REPL_PENDING) - CHK_ERR_WIN32A(DNS_ERROR_RESPONSE_CODES_BASE) -// CHK_ERR_WIN32A(DNS_ERROR_MASK) - CHK_ERR_WIN32A(DNS_ERROR_RCODE_FORMAT_ERROR) - CHK_ERR_WIN32A(DNS_ERROR_RCODE_SERVER_FAILURE) - CHK_ERR_WIN32A(DNS_ERROR_RCODE_NAME_ERROR) - CHK_ERR_WIN32A(DNS_ERROR_RCODE_NOT_IMPLEMENTED) - CHK_ERR_WIN32A(DNS_ERROR_RCODE_REFUSED) - CHK_ERR_WIN32A(DNS_ERROR_RCODE_YXDOMAIN) - CHK_ERR_WIN32A(DNS_ERROR_RCODE_YXRRSET) - CHK_ERR_WIN32A(DNS_ERROR_RCODE_NXRRSET) - CHK_ERR_WIN32A(DNS_ERROR_RCODE_NOTAUTH) - CHK_ERR_WIN32A(DNS_ERROR_RCODE_NOTZONE) - CHK_ERR_WIN32A(DNS_ERROR_RCODE_BADSIG) - CHK_ERR_WIN32A(DNS_ERROR_RCODE_BADKEY) - CHK_ERR_WIN32A(DNS_ERROR_RCODE_BADTIME) - CHK_ERR_WIN32A(DNS_ERROR_PACKET_FMT_BASE) - CHK_ERR_WIN32A(DNS_INFO_NO_RECORDS) - CHK_ERR_WIN32A(DNS_ERROR_BAD_PACKET) - CHK_ERR_WIN32A(DNS_ERROR_NO_PACKET) - CHK_ERR_WIN32A(DNS_ERROR_RCODE) - CHK_ERR_WIN32A(DNS_ERROR_UNSECURE_PACKET) - CHK_ERR_WIN32A(DNS_ERROR_GENERAL_API_BASE) - CHK_ERR_WIN32A(DNS_ERROR_INVALID_TYPE) - CHK_ERR_WIN32A(DNS_ERROR_INVALID_IP_ADDRESS) - CHK_ERR_WIN32A(DNS_ERROR_INVALID_PROPERTY) - CHK_ERR_WIN32A(DNS_ERROR_TRY_AGAIN_LATER) - CHK_ERR_WIN32A(DNS_ERROR_NOT_UNIQUE) - CHK_ERR_WIN32A(DNS_ERROR_NON_RFC_NAME) - CHK_ERR_WIN32A(DNS_STATUS_FQDN) - CHK_ERR_WIN32A(DNS_STATUS_DOTTED_NAME) - CHK_ERR_WIN32A(DNS_STATUS_SINGLE_PART_NAME) - CHK_ERR_WIN32A(DNS_ERROR_ZONE_BASE) - CHK_ERR_WIN32A(DNS_ERROR_ZONE_DOES_NOT_EXIST) - CHK_ERR_WIN32A(DNS_ERROR_NO_ZONE_INFO) - CHK_ERR_WIN32A(DNS_ERROR_INVALID_ZONE_OPERATION) - CHK_ERR_WIN32A(DNS_ERROR_ZONE_CONFIGURATION_ERROR) - CHK_ERR_WIN32A(DNS_ERROR_ZONE_HAS_NO_SOA_RECORD) - CHK_ERR_WIN32A(DNS_ERROR_ZONE_HAS_NO_NS_RECORDS) - CHK_ERR_WIN32A(DNS_ERROR_ZONE_LOCKED) - CHK_ERR_WIN32A(DNS_ERROR_ZONE_CREATION_FAILED) - CHK_ERR_WIN32A(DNS_ERROR_ZONE_ALREADY_EXISTS) - CHK_ERR_WIN32A(DNS_ERROR_AUTOZONE_ALREADY_EXISTS) - CHK_ERR_WIN32A(DNS_ERROR_INVALID_ZONE_TYPE) - CHK_ERR_WIN32A(DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP) - CHK_ERR_WIN32A(DNS_ERROR_ZONE_NOT_SECONDARY) - CHK_ERR_WIN32A(DNS_ERROR_NEED_SECONDARY_ADDRESSES) - CHK_ERR_WIN32A(DNS_ERROR_WINS_INIT_FAILED) - CHK_ERR_WIN32A(DNS_ERROR_NEED_WINS_SERVERS) - CHK_ERR_WIN32A(DNS_ERROR_NBSTAT_INIT_FAILED) - CHK_ERR_WIN32A(DNS_ERROR_SOA_DELETE_INVALID) - CHK_ERR_WIN32A(DNS_ERROR_DATAFILE_BASE) - CHK_ERR_WIN32A(DNS_ERROR_PRIMARY_REQUIRES_DATAFILE) - CHK_ERR_WIN32A(DNS_ERROR_INVALID_DATAFILE_NAME) - CHK_ERR_WIN32A(DNS_ERROR_DATAFILE_OPEN_FAILURE) - CHK_ERR_WIN32A(DNS_ERROR_FILE_WRITEBACK_FAILED) - CHK_ERR_WIN32A(DNS_ERROR_DATAFILE_PARSING) - CHK_ERR_WIN32A(DNS_ERROR_DATABASE_BASE) - CHK_ERR_WIN32A(DNS_ERROR_RECORD_DOES_NOT_EXIST) - CHK_ERR_WIN32A(DNS_ERROR_RECORD_FORMAT) - CHK_ERR_WIN32A(DNS_ERROR_NODE_CREATION_FAILED) - CHK_ERR_WIN32A(DNS_ERROR_UNKNOWN_RECORD_TYPE) - CHK_ERR_WIN32A(DNS_ERROR_RECORD_TIMED_OUT) - CHK_ERR_WIN32A(DNS_ERROR_NAME_NOT_IN_ZONE) - CHK_ERR_WIN32A(DNS_ERROR_CNAME_LOOP) - CHK_ERR_WIN32A(DNS_ERROR_NODE_IS_CNAME) - CHK_ERR_WIN32A(DNS_ERROR_CNAME_COLLISION) - CHK_ERR_WIN32A(DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT) - CHK_ERR_WIN32A(DNS_ERROR_RECORD_ALREADY_EXISTS) - CHK_ERR_WIN32A(DNS_ERROR_SECONDARY_DATA) - CHK_ERR_WIN32A(DNS_ERROR_NO_CREATE_CACHE_DATA) - CHK_ERR_WIN32A(DNS_ERROR_NAME_DOES_NOT_EXIST) - CHK_ERR_WIN32A(DNS_WARNING_PTR_CREATE_FAILED) - CHK_ERR_WIN32A(DNS_WARNING_DOMAIN_UNDELETED) - CHK_ERR_WIN32A(DNS_ERROR_DS_UNAVAILABLE) - CHK_ERR_WIN32A(DNS_ERROR_DS_ZONE_ALREADY_EXISTS) - CHK_ERR_WIN32A(DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE) - CHK_ERR_WIN32A(DNS_ERROR_OPERATION_BASE) - CHK_ERR_WIN32A(DNS_INFO_AXFR_COMPLETE) - CHK_ERR_WIN32A(DNS_ERROR_AXFR) - CHK_ERR_WIN32A(DNS_INFO_ADDED_LOCAL_WINS) - CHK_ERR_WIN32A(DNS_ERROR_SECURE_BASE) - CHK_ERR_WIN32A(DNS_STATUS_CONTINUE_NEEDED) - CHK_ERR_WIN32A(DNS_ERROR_SETUP_BASE) - CHK_ERR_WIN32A(DNS_ERROR_NO_TCPIP) - CHK_ERR_WIN32A(DNS_ERROR_NO_DNS_SERVERS) - CHK_ERR_WIN32A(WSABASEERR) - CHK_ERR_WIN32A(WSAEINTR) - CHK_ERR_WIN32A(WSAEBADF) - CHK_ERR_WIN32A(WSAEACCES) - CHK_ERR_WIN32A(WSAEFAULT) - CHK_ERR_WIN32A(WSAEINVAL) - CHK_ERR_WIN32A(WSAEMFILE) - CHK_ERR_WIN32A(WSAEWOULDBLOCK) - CHK_ERR_WIN32A(WSAEINPROGRESS) - CHK_ERR_WIN32A(WSAEALREADY) - CHK_ERR_WIN32A(WSAENOTSOCK) - CHK_ERR_WIN32A(WSAEDESTADDRREQ) - CHK_ERR_WIN32A(WSAEMSGSIZE) - CHK_ERR_WIN32A(WSAEPROTOTYPE) - CHK_ERR_WIN32A(WSAENOPROTOOPT) - CHK_ERR_WIN32A(WSAEPROTONOSUPPORT) - CHK_ERR_WIN32A(WSAESOCKTNOSUPPORT) - CHK_ERR_WIN32A(WSAEOPNOTSUPP) - CHK_ERR_WIN32A(WSAEPFNOSUPPORT) - CHK_ERR_WIN32A(WSAEAFNOSUPPORT) - CHK_ERR_WIN32A(WSAEADDRINUSE) - CHK_ERR_WIN32A(WSAEADDRNOTAVAIL) - CHK_ERR_WIN32A(WSAENETDOWN) - CHK_ERR_WIN32A(WSAENETUNREACH) - CHK_ERR_WIN32A(WSAENETRESET) - CHK_ERR_WIN32A(WSAECONNABORTED) - CHK_ERR_WIN32A(WSAECONNRESET) - CHK_ERR_WIN32A(WSAENOBUFS) - CHK_ERR_WIN32A(WSAEISCONN) - CHK_ERR_WIN32A(WSAENOTCONN) - CHK_ERR_WIN32A(WSAESHUTDOWN) - CHK_ERR_WIN32A(WSAETOOMANYREFS) - CHK_ERR_WIN32A(WSAETIMEDOUT) - CHK_ERR_WIN32A(WSAECONNREFUSED) - CHK_ERR_WIN32A(WSAELOOP) - CHK_ERR_WIN32A(WSAENAMETOOLONG) - CHK_ERR_WIN32A(WSAEHOSTDOWN) - CHK_ERR_WIN32A(WSAEHOSTUNREACH) - CHK_ERR_WIN32A(WSAENOTEMPTY) - CHK_ERR_WIN32A(WSAEPROCLIM) - CHK_ERR_WIN32A(WSAEUSERS) - CHK_ERR_WIN32A(WSAEDQUOT) - CHK_ERR_WIN32A(WSAESTALE) - CHK_ERR_WIN32A(WSAEREMOTE) - CHK_ERR_WIN32A(WSASYSNOTREADY) - CHK_ERR_WIN32A(WSAVERNOTSUPPORTED) - CHK_ERR_WIN32A(WSANOTINITIALISED) - CHK_ERR_WIN32A(WSAEDISCON) - CHK_ERR_WIN32A(WSAENOMORE) - CHK_ERR_WIN32A(WSAECANCELLED) - CHK_ERR_WIN32A(WSAEINVALIDPROCTABLE) - CHK_ERR_WIN32A(WSAEINVALIDPROVIDER) - CHK_ERR_WIN32A(WSAEPROVIDERFAILEDINIT) - CHK_ERR_WIN32A(WSASYSCALLFAILURE) - CHK_ERR_WIN32A(WSASERVICE_NOT_FOUND) - CHK_ERR_WIN32A(WSATYPE_NOT_FOUND) - CHK_ERR_WIN32A(WSA_E_NO_MORE) - CHK_ERR_WIN32A(WSA_E_CANCELLED) - CHK_ERR_WIN32A(WSAEREFUSED) - CHK_ERR_WIN32A(WSAHOST_NOT_FOUND) - CHK_ERR_WIN32A(WSATRY_AGAIN) - CHK_ERR_WIN32A(WSANO_RECOVERY) - CHK_ERR_WIN32A(WSANO_DATA) - CHK_ERR_WIN32A(WSA_QOS_RECEIVERS) - CHK_ERR_WIN32A(WSA_QOS_SENDERS) - CHK_ERR_WIN32A(WSA_QOS_NO_SENDERS) - CHK_ERR_WIN32A(WSA_QOS_NO_RECEIVERS) - CHK_ERR_WIN32A(WSA_QOS_REQUEST_CONFIRMED) - CHK_ERR_WIN32A(WSA_QOS_ADMISSION_FAILURE) - CHK_ERR_WIN32A(WSA_QOS_POLICY_FAILURE) - CHK_ERR_WIN32A(WSA_QOS_BAD_STYLE) - CHK_ERR_WIN32A(WSA_QOS_BAD_OBJECT) - CHK_ERR_WIN32A(WSA_QOS_TRAFFIC_CTRL_ERROR) - CHK_ERR_WIN32A(WSA_QOS_GENERIC_ERROR) - - CHK_ERRA(CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT) - CHK_ERRA(CO_E_SERVER_PAUSED) - CHK_ERRA(CO_E_SERVER_NOT_PAUSED) - CHK_ERRA(CO_E_CLASS_DISABLED) - CHK_ERRA(CO_E_CLRNOTAVAILABLE) - CHK_ERRA(CO_E_ASYNC_WORK_REJECTED) - CHK_ERRA(CO_E_SERVER_INIT_TIMEOUT) - CHK_ERRA(CO_E_NO_SECCTX_IN_ACTIVATE) - CHK_ERRA(CO_E_TRACKER_CONFIG) - CHK_ERRA(CO_E_THREADPOOL_CONFIG) - CHK_ERRA(CO_E_SXS_CONFIG) - CHK_ERRA(CO_E_MALFORMED_SPN) - CHK_ERRA(REGDB_E_BADTHREADINGMODEL) -// CHK_ERRA(EVENT_E_FIRST) -// CHK_ERRA(EVENT_E_LAST) -// CHK_ERRA(EVENT_S_FIRST) -// CHK_ERRA(EVENT_S_LAST) -// CHK_ERRA(EVENT_S_SOME_SUBSCRIBERS_FAILED) -// CHK_ERRA(EVENT_E_ALL_SUBSCRIBERS_FAILED) - CHK_ERRA(EVENT_S_NOSUBSCRIBERS) -// CHK_ERRA(EVENT_E_QUERYSYNTAX) -// CHK_ERRA(EVENT_E_QUERYFIELD) -// CHK_ERRA(EVENT_E_INTERNALEXCEPTION) -// CHK_ERRA(EVENT_E_INTERNALERROR) -// CHK_ERRA(EVENT_E_INVALID_PER_USER_SID) -// CHK_ERRA(EVENT_E_USER_EXCEPTION) -// CHK_ERRA(EVENT_E_TOO_MANY_METHODS) -// CHK_ERRA(EVENT_E_MISSING_EVENTCLASS) -// CHK_ERRA(EVENT_E_NOT_ALL_REMOVED) -// CHK_ERRA(EVENT_E_COMPLUS_NOT_INSTALLED) -// CHK_ERRA(EVENT_E_CANT_MODIFY_OR_DELETE_UNCONFIGURED_OBJECT) -// CHK_ERRA(EVENT_E_CANT_MODIFY_OR_DELETE_CONFIGURED_OBJECT) -// CHK_ERRA(EVENT_E_INVALID_EVENT_CLASS_PARTITION) -// CHK_ERRA(EVENT_E_PER_USER_SID_NOT_LOGGED_ON) - CHK_ERRA(CONTEXT_E_FIRST) - CHK_ERRA(CONTEXT_E_LAST) - CHK_ERRA(CONTEXT_S_FIRST) - CHK_ERRA(CONTEXT_S_LAST) - CHK_ERRA(CONTEXT_E_ABORTED) - CHK_ERRA(CONTEXT_E_ABORTING) - CHK_ERRA(CONTEXT_E_NOCONTEXT) -// CHK_ERRA(CONTEXT_E_WOULD_DEADLOCK) - CHK_ERRA(CONTEXT_E_SYNCH_TIMEOUT) - CHK_ERRA(CONTEXT_E_OLDREF) - CHK_ERRA(CONTEXT_E_ROLENOTFOUND) - CHK_ERRA(CONTEXT_E_TMNOTAVAILABLE) - CHK_ERRA(CO_E_ACTIVATIONFAILED) - CHK_ERRA(CO_E_ACTIVATIONFAILED_EVENTLOGGED) - CHK_ERRA(CO_E_ACTIVATIONFAILED_CATALOGERROR) - CHK_ERRA(CO_E_ACTIVATIONFAILED_TIMEOUT) - CHK_ERRA(CO_E_INITIALIZATIONFAILED) - CHK_ERRA(CONTEXT_E_NOJIT) - CHK_ERRA(CONTEXT_E_NOTRANSACTION) - CHK_ERRA(CO_E_THREADINGMODEL_CHANGED) - CHK_ERRA(CO_E_NOIISINTRINSICS) - CHK_ERRA(CO_E_NOCOOKIES) - CHK_ERRA(CO_E_DBERROR) - CHK_ERRA(CO_E_NOTPOOLED) - CHK_ERRA(CO_E_NOTCONSTRUCTED) - CHK_ERRA(CO_E_NOSYNCHRONIZATION) -// CHK_ERRA(CO_E_ISOLEVELMISMATCH) - CHK_ERRA(SCHED_S_TASK_READY) - CHK_ERRA(SCHED_S_TASK_RUNNING) - CHK_ERRA(SCHED_S_TASK_DISABLED) - CHK_ERRA(SCHED_S_TASK_HAS_NOT_RUN) - CHK_ERRA(SCHED_S_TASK_NO_MORE_RUNS) - CHK_ERRA(SCHED_S_TASK_NOT_SCHEDULED) - CHK_ERRA(SCHED_S_TASK_TERMINATED) - CHK_ERRA(SCHED_S_TASK_NO_VALID_TRIGGERS) - CHK_ERRA(SCHED_S_EVENT_TRIGGER) - CHK_ERRA(SCHED_E_TRIGGER_NOT_FOUND) - CHK_ERRA(SCHED_E_TASK_NOT_READY) - CHK_ERRA(SCHED_E_TASK_NOT_RUNNING) - CHK_ERRA(SCHED_E_SERVICE_NOT_INSTALLED) - CHK_ERRA(SCHED_E_CANNOT_OPEN_TASK) - CHK_ERRA(SCHED_E_INVALID_TASK) - CHK_ERRA(SCHED_E_ACCOUNT_INFORMATION_NOT_SET) - CHK_ERRA(SCHED_E_ACCOUNT_NAME_NOT_FOUND) - CHK_ERRA(SCHED_E_ACCOUNT_DBASE_CORRUPT) - CHK_ERRA(SCHED_E_NO_SECURITY_SERVICES) - CHK_ERRA(SCHED_E_UNKNOWN_OBJECT_VERSION) - CHK_ERRA(SCHED_E_UNSUPPORTED_ACCOUNT_OPTION) - CHK_ERRA(SCHED_E_SERVICE_NOT_RUNNING) - CHK_ERRA(CO_S_MACHINENAMENOTFOUND) - CHK_ERRA(STG_E_STATUS_COPY_PROTECTION_FAILURE) - CHK_ERRA(STG_E_CSS_AUTHENTICATION_FAILURE) - CHK_ERRA(STG_E_CSS_KEY_NOT_PRESENT) - CHK_ERRA(STG_E_CSS_KEY_NOT_ESTABLISHED) - CHK_ERRA(STG_E_CSS_SCRAMBLED_SECTOR) - CHK_ERRA(STG_E_CSS_REGION_MISMATCH) - CHK_ERRA(STG_E_RESETS_EXHAUSTED) - CHK_ERRA(CO_E_CANCEL_DISABLED) - CHK_ERRA(ERROR_AUDITING_DISABLED) - CHK_ERRA(ERROR_ALL_SIDS_FILTERED) - CHK_ERRA(NTE_TEMPORARY_PROFILE) - CHK_ERRA(NTE_FIXEDPARAMETER) - CHK_ERRA(SEC_E_INSUFFICIENT_MEMORY) - CHK_ERRA(SEC_E_INVALID_HANDLE) - CHK_ERRA(SEC_E_UNSUPPORTED_FUNCTION) - CHK_ERRA(SEC_E_TARGET_UNKNOWN) - CHK_ERRA(SEC_E_INTERNAL_ERROR) - CHK_ERRA(SEC_E_SECPKG_NOT_FOUND) - CHK_ERRA(SEC_E_NOT_OWNER) - CHK_ERRA(SEC_E_CANNOT_INSTALL) - CHK_ERRA(SEC_E_INVALID_TOKEN) - CHK_ERRA(SEC_E_CANNOT_PACK) - CHK_ERRA(SEC_E_QOP_NOT_SUPPORTED) - CHK_ERRA(SEC_E_NO_IMPERSONATION) - CHK_ERRA(SEC_E_LOGON_DENIED) - CHK_ERRA(SEC_E_UNKNOWN_CREDENTIALS) - CHK_ERRA(SEC_E_NO_CREDENTIALS) - CHK_ERRA(SEC_E_MESSAGE_ALTERED) - CHK_ERRA(SEC_E_OUT_OF_SEQUENCE) - CHK_ERRA(SEC_E_NO_AUTHENTICATING_AUTHORITY) - CHK_ERRA(SEC_I_CONTINUE_NEEDED) - CHK_ERRA(SEC_I_COMPLETE_NEEDED) - CHK_ERRA(SEC_I_COMPLETE_AND_CONTINUE) - CHK_ERRA(SEC_I_LOCAL_LOGON) - CHK_ERRA(SEC_E_BAD_PKGID) - CHK_ERRA(SEC_E_CONTEXT_EXPIRED) - CHK_ERRA(SEC_I_CONTEXT_EXPIRED) - CHK_ERRA(SEC_E_INCOMPLETE_MESSAGE) - CHK_ERRA(SEC_E_INCOMPLETE_CREDENTIALS) - CHK_ERRA(SEC_E_BUFFER_TOO_SMALL) - CHK_ERRA(SEC_I_INCOMPLETE_CREDENTIALS) - CHK_ERRA(SEC_I_RENEGOTIATE) - CHK_ERRA(SEC_E_WRONG_PRINCIPAL) - CHK_ERRA(SEC_I_NO_LSA_CONTEXT) - CHK_ERRA(SEC_E_TIME_SKEW) - CHK_ERRA(SEC_E_UNTRUSTED_ROOT) - CHK_ERRA(SEC_E_ILLEGAL_MESSAGE) - CHK_ERRA(SEC_E_CERT_UNKNOWN) - CHK_ERRA(SEC_E_CERT_EXPIRED) - CHK_ERRA(SEC_E_ENCRYPT_FAILURE) - CHK_ERRA(SEC_E_DECRYPT_FAILURE) - CHK_ERRA(SEC_E_ALGORITHM_MISMATCH) - CHK_ERRA(SEC_E_SECURITY_QOS_FAILED) - CHK_ERRA(SEC_E_UNFINISHED_CONTEXT_DELETED) - CHK_ERRA(SEC_E_NO_TGT_REPLY) - CHK_ERRA(SEC_E_NO_IP_ADDRESSES) - CHK_ERRA(SEC_E_WRONG_CREDENTIAL_HANDLE) - CHK_ERRA(SEC_E_CRYPTO_SYSTEM_INVALID) - CHK_ERRA(SEC_E_MAX_REFERRALS_EXCEEDED) - CHK_ERRA(SEC_E_MUST_BE_KDC) - CHK_ERRA(SEC_E_STRONG_CRYPTO_NOT_SUPPORTED) - CHK_ERRA(SEC_E_TOO_MANY_PRINCIPALS) - CHK_ERRA(SEC_E_NO_PA_DATA) - CHK_ERRA(SEC_E_PKINIT_NAME_MISMATCH) - CHK_ERRA(SEC_E_SMARTCARD_LOGON_REQUIRED) - CHK_ERRA(SEC_E_SHUTDOWN_IN_PROGRESS) - CHK_ERRA(SEC_E_KDC_INVALID_REQUEST) - CHK_ERRA(SEC_E_KDC_UNABLE_TO_REFER) - CHK_ERRA(SEC_E_KDC_UNKNOWN_ETYPE) - CHK_ERRA(SEC_E_UNSUPPORTED_PREAUTH) - CHK_ERRA(SEC_E_DELEGATION_REQUIRED) - CHK_ERRA(SEC_E_BAD_BINDINGS) - CHK_ERRA(SEC_E_MULTIPLE_ACCOUNTS) - CHK_ERRA(SEC_E_NO_KERB_KEY) -// CHK_ERRA(SEC_E_CERT_WRONG_USAGE) -// CHK_ERRA(SEC_E_DOWNGRADE_DETECTED) - CHK_ERRA(SEC_E_SMARTCARD_CERT_REVOKED) - CHK_ERRA(SEC_E_ISSUING_CA_UNTRUSTED) - CHK_ERRA(SEC_E_REVOCATION_OFFLINE_C) - CHK_ERRA(SEC_E_PKINIT_CLIENT_FAILURE) - CHK_ERRA(SEC_E_SMARTCARD_CERT_EXPIRED) -// CHK_ERRA(SEC_E_NO_SPM) -// CHK_ERRA(SEC_E_NOT_SUPPORTED) - CHK_ERRA(CRYPT_I_NEW_PROTECTION_REQUIRED) - CHK_ERRA(CRYPT_E_MISSING_PUBKEY_PARA) - CHK_ERRA(CRYPT_E_ASN1_ERROR) - CHK_ERRA(CRYPT_E_ASN1_INTERNAL) - CHK_ERRA(CRYPT_E_ASN1_EOD) - CHK_ERRA(CRYPT_E_ASN1_CORRUPT) - CHK_ERRA(CRYPT_E_ASN1_LARGE) - CHK_ERRA(CRYPT_E_ASN1_CONSTRAINT) - CHK_ERRA(CRYPT_E_ASN1_MEMORY) - CHK_ERRA(CRYPT_E_ASN1_OVERFLOW) - CHK_ERRA(CRYPT_E_ASN1_BADPDU) - CHK_ERRA(CRYPT_E_ASN1_BADARGS) - CHK_ERRA(CRYPT_E_ASN1_BADREAL) - CHK_ERRA(CRYPT_E_ASN1_BADTAG) - CHK_ERRA(CRYPT_E_ASN1_CHOICE) - CHK_ERRA(CRYPT_E_ASN1_RULE) - CHK_ERRA(CRYPT_E_ASN1_UTF8) - CHK_ERRA(CRYPT_E_ASN1_PDU_TYPE) - CHK_ERRA(CRYPT_E_ASN1_NYI) - CHK_ERRA(CRYPT_E_ASN1_EXTENDED) - CHK_ERRA(CRYPT_E_ASN1_NOEOD) - CHK_ERRA(CERTSRV_E_SERVER_SUSPENDED) - CHK_ERRA(CERTSRV_E_ENCODING_LENGTH) - CHK_ERRA(CERTSRV_E_ROLECONFLICT) - CHK_ERRA(CERTSRV_E_RESTRICTEDOFFICER) - CHK_ERRA(CERTSRV_E_KEY_ARCHIVAL_NOT_CONFIGURED) - CHK_ERRA(CERTSRV_E_NO_VALID_KRA) - CHK_ERRA(CERTSRV_E_BAD_REQUEST_KEY_ARCHIVAL) - CHK_ERRA(CERTSRV_E_NO_CAADMIN_DEFINED) - CHK_ERRA(CERTSRV_E_BAD_RENEWAL_CERT_ATTRIBUTE) - CHK_ERRA(CERTSRV_E_NO_DB_SESSIONS) - CHK_ERRA(CERTSRV_E_ALIGNMENT_FAULT) - CHK_ERRA(CERTSRV_E_ENROLL_DENIED) - CHK_ERRA(CERTSRV_E_TEMPLATE_DENIED) -// CHK_ERRA(CERTSRV_E_DOWNLEVEL_DC_SSL_OR_UPGRADE) - CHK_ERRA(CERTSRV_E_TEMPLATE_CONFLICT) - CHK_ERRA(CERTSRV_E_SUBJECT_ALT_NAME_REQUIRED) - CHK_ERRA(CERTSRV_E_ARCHIVED_KEY_REQUIRED) - CHK_ERRA(CERTSRV_E_SMIME_REQUIRED) - CHK_ERRA(CERTSRV_E_BAD_RENEWAL_SUBJECT) - CHK_ERRA(CERTSRV_E_BAD_TEMPLATE_VERSION) - CHK_ERRA(CERTSRV_E_TEMPLATE_POLICY_REQUIRED) - CHK_ERRA(CERTSRV_E_SIGNATURE_POLICY_REQUIRED) - CHK_ERRA(CERTSRV_E_SIGNATURE_COUNT) - CHK_ERRA(CERTSRV_E_SIGNATURE_REJECTED) - CHK_ERRA(CERTSRV_E_ISSUANCE_POLICY_REQUIRED) - CHK_ERRA(CERTSRV_E_SUBJECT_UPN_REQUIRED) - CHK_ERRA(CERTSRV_E_SUBJECT_DIRECTORY_GUID_REQUIRED) - CHK_ERRA(CERTSRV_E_SUBJECT_DNS_REQUIRED) - CHK_ERRA(CERTSRV_E_ARCHIVED_KEY_UNEXPECTED) - CHK_ERRA(CERTSRV_E_KEY_LENGTH) -// CHK_ERRA(CERTSRV_E_SUBJECT_EMAIL_REQUIRED) -// CHK_ERRA(CERTSRV_E_UNKNOWN_CERT_TYPE) -// CHK_ERRA(CERTSRV_E_CERT_TYPE_OVERLAP) - CHK_ERRA(XENROLL_E_KEY_NOT_EXPORTABLE) - CHK_ERRA(XENROLL_E_CANNOT_ADD_ROOT_CERT) - CHK_ERRA(XENROLL_E_RESPONSE_KA_HASH_NOT_FOUND) - CHK_ERRA(XENROLL_E_RESPONSE_UNEXPECTED_KA_HASH) - CHK_ERRA(XENROLL_E_RESPONSE_KA_HASH_MISMATCH) - CHK_ERRA(XENROLL_E_KEYSPEC_SMIME_MISMATCH) - CHK_ERRA(MSSIPOTF_E_OUTOFMEMRANGE) - CHK_ERRA(MSSIPOTF_E_CANTGETOBJECT) - CHK_ERRA(MSSIPOTF_E_NOHEADTABLE) - CHK_ERRA(MSSIPOTF_E_BAD_MAGICNUMBER) - CHK_ERRA(MSSIPOTF_E_BAD_OFFSET_TABLE) - CHK_ERRA(MSSIPOTF_E_TABLE_TAGORDER) - CHK_ERRA(MSSIPOTF_E_TABLE_LONGWORD) - CHK_ERRA(MSSIPOTF_E_BAD_FIRST_TABLE_PLACEMENT) - CHK_ERRA(MSSIPOTF_E_TABLES_OVERLAP) - CHK_ERRA(MSSIPOTF_E_TABLE_PADBYTES) - CHK_ERRA(MSSIPOTF_E_FILETOOSMALL) - CHK_ERRA(MSSIPOTF_E_TABLE_CHECKSUM) - CHK_ERRA(MSSIPOTF_E_FILE_CHECKSUM) - CHK_ERRA(MSSIPOTF_E_FAILED_POLICY) - CHK_ERRA(MSSIPOTF_E_FAILED_HINTS_CHECK) - CHK_ERRA(MSSIPOTF_E_NOT_OPENTYPE) - CHK_ERRA(MSSIPOTF_E_FILE) - CHK_ERRA(MSSIPOTF_E_CRYPT) - CHK_ERRA(MSSIPOTF_E_BADVERSION) - CHK_ERRA(MSSIPOTF_E_DSIG_STRUCTURE) - CHK_ERRA(MSSIPOTF_E_PCONST_CHECK) - CHK_ERRA(MSSIPOTF_E_STRUCTURE) - CHK_ERRA(TRUST_E_EXPLICIT_DISTRUST) - CHK_ERRA(CERT_E_UNTRUSTEDCA) - CHK_ERRA(CERT_E_INVALID_POLICY) - CHK_ERRA(CERT_E_INVALID_NAME) - CHK_ERRA(SPAPI_E_NOT_DISABLEABLE) - CHK_ERRA(SPAPI_E_CANT_REMOVE_DEVINST) - CHK_ERRA(SPAPI_E_INVALID_TARGET) - CHK_ERRA(SPAPI_E_DRIVER_NONNATIVE) - CHK_ERRA(SPAPI_E_IN_WOW64) - CHK_ERRA(SPAPI_E_SET_SYSTEM_RESTORE_POINT) - CHK_ERRA(SPAPI_E_INCORRECTLY_COPIED_INF) - CHK_ERRA(SPAPI_E_SCE_DISABLED) - CHK_ERRA(SCARD_E_NO_KEY_CONTAINER) - CHK_ERRA(SCARD_W_CARD_NOT_AUTHENTICATED) - CHK_ERRA(COMADMIN_E_OBJECTERRORS) - CHK_ERRA(COMADMIN_E_OBJECTINVALID) - CHK_ERRA(COMADMIN_E_KEYMISSING) - CHK_ERRA(COMADMIN_E_ALREADYINSTALLED) - CHK_ERRA(COMADMIN_E_APP_FILE_WRITEFAIL) - CHK_ERRA(COMADMIN_E_APP_FILE_READFAIL) - CHK_ERRA(COMADMIN_E_APP_FILE_VERSION) - CHK_ERRA(COMADMIN_E_BADPATH) - CHK_ERRA(COMADMIN_E_APPLICATIONEXISTS) - CHK_ERRA(COMADMIN_E_ROLEEXISTS) - CHK_ERRA(COMADMIN_E_CANTCOPYFILE) - CHK_ERRA(COMADMIN_E_NOUSER) - CHK_ERRA(COMADMIN_E_INVALIDUSERIDS) - CHK_ERRA(COMADMIN_E_NOREGISTRYCLSID) - CHK_ERRA(COMADMIN_E_BADREGISTRYPROGID) - CHK_ERRA(COMADMIN_E_AUTHENTICATIONLEVEL) - CHK_ERRA(COMADMIN_E_USERPASSWDNOTVALID) - CHK_ERRA(COMADMIN_E_CLSIDORIIDMISMATCH) - CHK_ERRA(COMADMIN_E_REMOTEINTERFACE) - CHK_ERRA(COMADMIN_E_DLLREGISTERSERVER) - CHK_ERRA(COMADMIN_E_NOSERVERSHARE) - CHK_ERRA(COMADMIN_E_DLLLOADFAILED) - CHK_ERRA(COMADMIN_E_BADREGISTRYLIBID) - CHK_ERRA(COMADMIN_E_APPDIRNOTFOUND) - CHK_ERRA(COMADMIN_E_REGISTRARFAILED) - CHK_ERRA(COMADMIN_E_COMPFILE_DOESNOTEXIST) - CHK_ERRA(COMADMIN_E_COMPFILE_LOADDLLFAIL) - CHK_ERRA(COMADMIN_E_COMPFILE_GETCLASSOBJ) - CHK_ERRA(COMADMIN_E_COMPFILE_CLASSNOTAVAIL) - CHK_ERRA(COMADMIN_E_COMPFILE_BADTLB) - CHK_ERRA(COMADMIN_E_COMPFILE_NOTINSTALLABLE) - CHK_ERRA(COMADMIN_E_NOTCHANGEABLE) - CHK_ERRA(COMADMIN_E_NOTDELETEABLE) - CHK_ERRA(COMADMIN_E_SESSION) - CHK_ERRA(COMADMIN_E_COMP_MOVE_LOCKED) - CHK_ERRA(COMADMIN_E_COMP_MOVE_BAD_DEST) - CHK_ERRA(COMADMIN_E_REGISTERTLB) - CHK_ERRA(COMADMIN_E_SYSTEMAPP) - CHK_ERRA(COMADMIN_E_COMPFILE_NOREGISTRAR) - CHK_ERRA(COMADMIN_E_COREQCOMPINSTALLED) - CHK_ERRA(COMADMIN_E_SERVICENOTINSTALLED) - CHK_ERRA(COMADMIN_E_PROPERTYSAVEFAILED) - CHK_ERRA(COMADMIN_E_OBJECTEXISTS) - CHK_ERRA(COMADMIN_E_COMPONENTEXISTS) - CHK_ERRA(COMADMIN_E_REGFILE_CORRUPT) - CHK_ERRA(COMADMIN_E_PROPERTY_OVERFLOW) - CHK_ERRA(COMADMIN_E_NOTINREGISTRY) - CHK_ERRA(COMADMIN_E_OBJECTNOTPOOLABLE) - CHK_ERRA(COMADMIN_E_APPLID_MATCHES_CLSID) - CHK_ERRA(COMADMIN_E_ROLE_DOES_NOT_EXIST) - CHK_ERRA(COMADMIN_E_START_APP_NEEDS_COMPONENTS) - CHK_ERRA(COMADMIN_E_REQUIRES_DIFFERENT_PLATFORM) - CHK_ERRA(COMADMIN_E_CAN_NOT_EXPORT_APP_PROXY) - CHK_ERRA(COMADMIN_E_CAN_NOT_START_APP) - CHK_ERRA(COMADMIN_E_CAN_NOT_EXPORT_SYS_APP) - CHK_ERRA(COMADMIN_E_CANT_SUBSCRIBE_TO_COMPONENT) - CHK_ERRA(COMADMIN_E_EVENTCLASS_CANT_BE_SUBSCRIBER) - CHK_ERRA(COMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE) - CHK_ERRA(COMADMIN_E_BASE_PARTITION_ONLY) - CHK_ERRA(COMADMIN_E_START_APP_DISABLED) - CHK_ERRA(COMADMIN_E_CAT_DUPLICATE_PARTITION_NAME) - CHK_ERRA(COMADMIN_E_CAT_INVALID_PARTITION_NAME) - CHK_ERRA(COMADMIN_E_CAT_PARTITION_IN_USE) - CHK_ERRA(COMADMIN_E_FILE_PARTITION_DUPLICATE_FILES) - CHK_ERRA(COMADMIN_E_CAT_IMPORTED_COMPONENTS_NOT_ALLOWED) - CHK_ERRA(COMADMIN_E_AMBIGUOUS_APPLICATION_NAME) - CHK_ERRA(COMADMIN_E_AMBIGUOUS_PARTITION_NAME) - CHK_ERRA(COMADMIN_E_REGDB_NOTINITIALIZED) - CHK_ERRA(COMADMIN_E_REGDB_NOTOPEN) - CHK_ERRA(COMADMIN_E_REGDB_SYSTEMERR) - CHK_ERRA(COMADMIN_E_REGDB_ALREADYRUNNING) - CHK_ERRA(COMADMIN_E_MIG_VERSIONNOTSUPPORTED) - CHK_ERRA(COMADMIN_E_MIG_SCHEMANOTFOUND) - CHK_ERRA(COMADMIN_E_CAT_BITNESSMISMATCH) - CHK_ERRA(COMADMIN_E_CAT_UNACCEPTABLEBITNESS) - CHK_ERRA(COMADMIN_E_CAT_WRONGAPPBITNESS) - CHK_ERRA(COMADMIN_E_CAT_PAUSE_RESUME_NOT_SUPPORTED) - CHK_ERRA(COMADMIN_E_CAT_SERVERFAULT) - CHK_ERRA(COMQC_E_APPLICATION_NOT_QUEUED) - CHK_ERRA(COMQC_E_NO_QUEUEABLE_INTERFACES) - CHK_ERRA(COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE) - CHK_ERRA(COMQC_E_NO_IPERSISTSTREAM) - CHK_ERRA(COMQC_E_BAD_MESSAGE) - CHK_ERRA(COMQC_E_UNAUTHENTICATED) - CHK_ERRA(COMQC_E_UNTRUSTED_ENQUEUER) - CHK_ERRA(MSDTC_E_DUPLICATE_RESOURCE) - CHK_ERRA(COMADMIN_E_OBJECT_PARENT_MISSING) - CHK_ERRA(COMADMIN_E_OBJECT_DOES_NOT_EXIST) - CHK_ERRA(COMADMIN_E_APP_NOT_RUNNING) - CHK_ERRA(COMADMIN_E_INVALID_PARTITION) - CHK_ERRA(COMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE) - CHK_ERRA(COMADMIN_E_USER_IN_SET) - CHK_ERRA(COMADMIN_E_CANTRECYCLELIBRARYAPPS) - CHK_ERRA(COMADMIN_E_CANTRECYCLESERVICEAPPS) - CHK_ERRA(COMADMIN_E_PROCESSALREADYRECYCLED) - CHK_ERRA(COMADMIN_E_PAUSEDPROCESSMAYNOTBERECYCLED) - CHK_ERRA(COMADMIN_E_CANTMAKEINPROCSERVICE) - CHK_ERRA(COMADMIN_E_PROGIDINUSEBYCLSID) - CHK_ERRA(COMADMIN_E_DEFAULT_PARTITION_NOT_IN_SET) - CHK_ERRA(COMADMIN_E_RECYCLEDPROCESSMAYNOTBEPAUSED) - CHK_ERRA(COMADMIN_E_PARTITION_ACCESSDENIED) - CHK_ERRA(COMADMIN_E_PARTITION_MSI_ONLY) - CHK_ERRA(COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_1_0_FORMAT) - CHK_ERRA(COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_NONBASE_PARTITIONS) - CHK_ERRA(COMADMIN_E_COMP_MOVE_SOURCE) - CHK_ERRA(COMADMIN_E_COMP_MOVE_DEST) - CHK_ERRA(COMADMIN_E_COMP_MOVE_PRIVATE) - CHK_ERRA(COMADMIN_E_BASEPARTITION_REQUIRED_IN_SET) - CHK_ERRA(COMADMIN_E_CANNOT_ALIAS_EVENTCLASS) - CHK_ERRA(COMADMIN_E_PRIVATE_ACCESSDENIED) - CHK_ERRA(COMADMIN_E_SAFERINVALID) - CHK_ERRA(COMADMIN_E_REGISTRY_ACCESSDENIED) -// CHK_ERRA(COMADMIN_E_PARTITIONS_DISABLED) -// CHK_ERR_WIN32A(ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY) -// CHK_ERR_WIN32A(ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY) - CHK_ERR_WIN32A(ERROR_DISK_TOO_FRAGMENTED) - CHK_ERR_WIN32A(ERROR_DELETE_PENDING) -// CHK_ERR_WIN32A(ERROR_SCOPE_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_NOT_SAFEBOOT_SERVICE) - CHK_ERR_WIN32A(ERROR_JOURNAL_ENTRY_DELETED) - CHK_ERR_WIN32A(ERROR_ONLY_IF_CONNECTED) - CHK_ERR_WIN32A(ERROR_OVERRIDE_NOCHANGES) - CHK_ERR_WIN32A(ERROR_BAD_USER_PROFILE) - CHK_ERR_WIN32A(ERROR_NOT_SUPPORTED_ON_SBS) - CHK_ERR_WIN32A(ERROR_SERVER_SHUTDOWN_IN_PROGRESS) - CHK_ERR_WIN32A(ERROR_HOST_DOWN) - CHK_ERR_WIN32A(ERROR_NON_ACCOUNT_SID) - CHK_ERR_WIN32A(ERROR_NON_DOMAIN_SID) - CHK_ERR_WIN32A(ERROR_APPHELP_BLOCK) - CHK_ERR_WIN32A(ERROR_ACCESS_DISABLED_BY_POLICY) - CHK_ERR_WIN32A(ERROR_REG_NAT_CONSUMPTION) - CHK_ERR_WIN32A(ERROR_CSCSHARE_OFFLINE) - CHK_ERR_WIN32A(ERROR_PKINIT_FAILURE) - CHK_ERR_WIN32A(ERROR_SMARTCARD_SUBSYSTEM_FAILURE) - CHK_ERR_WIN32A(ERROR_DOWNGRADE_DETECTED) - CHK_ERR_WIN32A(ERROR_MACHINE_LOCKED) - CHK_ERR_WIN32A(ERROR_CALLBACK_SUPPLIED_INVALID_DATA) - CHK_ERR_WIN32A(ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED) - CHK_ERR_WIN32A(ERROR_DRIVER_BLOCKED) - CHK_ERR_WIN32A(ERROR_INVALID_IMPORT_OF_NON_DLL) -// CHK_ERR_WIN32A(ERROR_ACCESS_DISABLED_WEBBLADE) -// CHK_ERR_WIN32A(ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER) -// CHK_ERR_WIN32A(ERROR_RECOVERY_FAILURE) -// CHK_ERR_WIN32A(ERROR_ALREADY_FIBER) -// CHK_ERR_WIN32A(ERROR_ALREADY_THREAD) -// CHK_ERR_WIN32A(ERROR_STACK_BUFFER_OVERRUN) -// CHK_ERR_WIN32A(ERROR_PARAMETER_QUOTA_EXCEEDED) -// CHK_ERR_WIN32A(ERROR_DEBUGGER_INACTIVE) -// CHK_ERR_WIN32A(ERROR_DELAY_LOAD_FAILED) - CHK_ERR_WIN32A(ERROR_CURRENT_DOMAIN_NOT_ALLOWED) - CHK_ERR_WIN32A(ERROR_INSTALL_SERVICE_FAILURE) - CHK_ERR_WIN32A(ERROR_INSTALL_PACKAGE_VERSION) - CHK_ERR_WIN32A(ERROR_INSTALL_ALREADY_RUNNING) - CHK_ERR_WIN32A(ERROR_INSTALL_PACKAGE_OPEN_FAILED) - CHK_ERR_WIN32A(ERROR_INSTALL_PACKAGE_INVALID) - CHK_ERR_WIN32A(ERROR_INSTALL_UI_FAILURE) - CHK_ERR_WIN32A(ERROR_INSTALL_LOG_FAILURE) - CHK_ERR_WIN32A(ERROR_INSTALL_LANGUAGE_UNSUPPORTED) - CHK_ERR_WIN32A(ERROR_INSTALL_TRANSFORM_FAILURE) - CHK_ERR_WIN32A(ERROR_INSTALL_PACKAGE_REJECTED) - CHK_ERR_WIN32A(ERROR_FUNCTION_NOT_CALLED) - CHK_ERR_WIN32A(ERROR_FUNCTION_FAILED) - CHK_ERR_WIN32A(ERROR_INVALID_TABLE) - CHK_ERR_WIN32A(ERROR_DATATYPE_MISMATCH) - CHK_ERR_WIN32A(ERROR_UNSUPPORTED_TYPE) - CHK_ERR_WIN32A(ERROR_CREATE_FAILED) - CHK_ERR_WIN32A(ERROR_INSTALL_TEMP_UNWRITABLE) - CHK_ERR_WIN32A(ERROR_INSTALL_PLATFORM_UNSUPPORTED) - CHK_ERR_WIN32A(ERROR_INSTALL_NOTUSED) - CHK_ERR_WIN32A(ERROR_PATCH_PACKAGE_OPEN_FAILED) - CHK_ERR_WIN32A(ERROR_PATCH_PACKAGE_INVALID) - CHK_ERR_WIN32A(ERROR_PATCH_PACKAGE_UNSUPPORTED) - CHK_ERR_WIN32A(ERROR_PRODUCT_VERSION) - CHK_ERR_WIN32A(ERROR_INVALID_COMMAND_LINE) - CHK_ERR_WIN32A(ERROR_INSTALL_REMOTE_DISALLOWED) - CHK_ERR_WIN32A(ERROR_SUCCESS_REBOOT_INITIATED) - CHK_ERR_WIN32A(ERROR_PATCH_TARGET_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_PATCH_PACKAGE_REJECTED) - CHK_ERR_WIN32A(ERROR_INSTALL_TRANSFORM_REJECTED) -// CHK_ERR_WIN32A(ERROR_INSTALL_REMOTE_PROHIBITED) - CHK_ERR_WIN32A(RPC_S_ENTRY_TYPE_MISMATCH) - CHK_ERR_WIN32A(RPC_S_NOT_ALL_OBJS_EXPORTED) - CHK_ERR_WIN32A(RPC_S_INTERFACE_NOT_EXPORTED) - CHK_ERR_WIN32A(RPC_S_PROFILE_NOT_ADDED) - CHK_ERR_WIN32A(RPC_S_PRF_ELT_NOT_ADDED) - CHK_ERR_WIN32A(RPC_S_PRF_ELT_NOT_REMOVED) - CHK_ERR_WIN32A(RPC_S_GRP_ELT_NOT_ADDED) - CHK_ERR_WIN32A(RPC_S_GRP_ELT_NOT_REMOVED) - CHK_ERR_WIN32A(ERROR_KM_DRIVER_BLOCKED) - CHK_ERR_WIN32A(ERROR_CONTEXT_EXPIRED) -// CHK_ERR_WIN32A(ERROR_PER_USER_TRUST_QUOTA_EXCEEDED) -// CHK_ERR_WIN32A(ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED) -// CHK_ERR_WIN32A(ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED) - CHK_ERR_WIN32A(ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT) - CHK_ERR_WIN32A(ERROR_PRINTER_DRIVER_WARNED) - CHK_ERR_WIN32A(ERROR_PRINTER_DRIVER_BLOCKED) - CHK_ERR_WIN32A(ERROR_VOLUME_CONTAINS_SYS_FILES) - CHK_ERR_WIN32A(ERROR_INDIGENOUS_TYPE) - CHK_ERR_WIN32A(ERROR_NO_SUPPORTING_DRIVES) - CHK_ERR_WIN32A(ERROR_CLEANER_CARTRIDGE_INSTALLED) - CHK_ERR_WIN32A(ERROR_REPARSE_TAG_INVALID) - CHK_ERR_WIN32A(ERROR_REPARSE_TAG_MISMATCH) - CHK_ERR_WIN32A(ERROR_VOLUME_NOT_SIS_ENABLED) - CHK_ERR_WIN32A(ERROR_QUORUM_OWNER_ALIVE) - CHK_ERR_WIN32A(ERROR_NETWORK_NOT_AVAILABLE) - CHK_ERR_WIN32A(ERROR_NODE_NOT_AVAILABLE) - CHK_ERR_WIN32A(ERROR_ALL_NODES_NOT_AVAILABLE) - CHK_ERR_WIN32A(ERROR_RESOURCE_FAILED) - CHK_ERR_WIN32A(ERROR_CLUSTER_INVALID_NODE) - CHK_ERR_WIN32A(ERROR_CLUSTER_NODE_EXISTS) - CHK_ERR_WIN32A(ERROR_CLUSTER_JOIN_IN_PROGRESS) - CHK_ERR_WIN32A(ERROR_CLUSTER_NODE_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_CLUSTER_NETWORK_EXISTS) - CHK_ERR_WIN32A(ERROR_CLUSTER_NETWORK_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_CLUSTER_NETINTERFACE_EXISTS) - CHK_ERR_WIN32A(ERROR_CLUSTER_NETINTERFACE_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_CLUSTER_INVALID_REQUEST) - CHK_ERR_WIN32A(ERROR_CLUSTER_INVALID_NETWORK_PROVIDER) - CHK_ERR_WIN32A(ERROR_CLUSTER_NODE_DOWN) - CHK_ERR_WIN32A(ERROR_CLUSTER_NODE_UNREACHABLE) - CHK_ERR_WIN32A(ERROR_CLUSTER_NODE_NOT_MEMBER) - CHK_ERR_WIN32A(ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS) - CHK_ERR_WIN32A(ERROR_CLUSTER_INVALID_NETWORK) - CHK_ERR_WIN32A(ERROR_CLUSTER_NODE_UP) - CHK_ERR_WIN32A(ERROR_CLUSTER_IPADDR_IN_USE) - CHK_ERR_WIN32A(ERROR_CLUSTER_NODE_NOT_PAUSED) - CHK_ERR_WIN32A(ERROR_CLUSTER_NO_SECURITY_CONTEXT) - CHK_ERR_WIN32A(ERROR_CLUSTER_NETWORK_NOT_INTERNAL) - CHK_ERR_WIN32A(ERROR_CLUSTER_NODE_ALREADY_UP) - CHK_ERR_WIN32A(ERROR_CLUSTER_NODE_ALREADY_DOWN) - CHK_ERR_WIN32A(ERROR_CLUSTER_NETWORK_ALREADY_ONLINE) - CHK_ERR_WIN32A(ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE) - CHK_ERR_WIN32A(ERROR_CLUSTER_NODE_ALREADY_MEMBER) - CHK_ERR_WIN32A(ERROR_CLUSTER_LAST_INTERNAL_NETWORK) - CHK_ERR_WIN32A(ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS) - CHK_ERR_WIN32A(ERROR_INVALID_OPERATION_ON_QUORUM) - CHK_ERR_WIN32A(ERROR_DEPENDENCY_NOT_ALLOWED) - CHK_ERR_WIN32A(ERROR_CLUSTER_NODE_PAUSED) - CHK_ERR_WIN32A(ERROR_NODE_CANT_HOST_RESOURCE) - CHK_ERR_WIN32A(ERROR_CLUSTER_NODE_NOT_READY) - CHK_ERR_WIN32A(ERROR_CLUSTER_NODE_SHUTTING_DOWN) - CHK_ERR_WIN32A(ERROR_CLUSTER_JOIN_ABORTED) - CHK_ERR_WIN32A(ERROR_CLUSTER_INCOMPATIBLE_VERSIONS) - CHK_ERR_WIN32A(ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED) - CHK_ERR_WIN32A(ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED) - CHK_ERR_WIN32A(ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED) - CHK_ERR_WIN32A(ERROR_CLUSTER_RESNAME_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED) - CHK_ERR_WIN32A(ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST) - CHK_ERR_WIN32A(ERROR_CLUSTER_DATABASE_SEQMISMATCH) - CHK_ERR_WIN32A(ERROR_RESMON_INVALID_STATE) - CHK_ERR_WIN32A(ERROR_CLUSTER_GUM_NOT_LOCKER) - CHK_ERR_WIN32A(ERROR_QUORUM_DISK_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_DATABASE_BACKUP_CORRUPT) - CHK_ERR_WIN32A(ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT) - CHK_ERR_WIN32A(ERROR_RESOURCE_PROPERTY_UNCHANGEABLE) - CHK_ERR_WIN32A(ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE) - CHK_ERR_WIN32A(ERROR_CLUSTER_QUORUMLOG_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_CLUSTER_MEMBERSHIP_HALT) - CHK_ERR_WIN32A(ERROR_CLUSTER_INSTANCE_ID_MISMATCH) - CHK_ERR_WIN32A(ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP) - CHK_ERR_WIN32A(ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH) - CHK_ERR_WIN32A(ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP) - CHK_ERR_WIN32A(ERROR_CLUSTER_PARAMETER_MISMATCH) - CHK_ERR_WIN32A(ERROR_NODE_CANNOT_BE_CLUSTERED) - CHK_ERR_WIN32A(ERROR_CLUSTER_WRONG_OS_VERSION) - CHK_ERR_WIN32A(ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME) -// CHK_ERR_WIN32A(ERROR_CLUSCFG_ALREADY_COMMITTED) -// CHK_ERR_WIN32A(ERROR_CLUSCFG_ROLLBACK_FAILED) -// CHK_ERR_WIN32A(ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT) -// CHK_ERR_WIN32A(ERROR_CLUSTER_OLD_VERSION) -// CHK_ERR_WIN32A(ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME) - CHK_ERR_WIN32A(ERROR_FILE_READ_ONLY) - CHK_ERR_WIN32A(ERROR_DIR_EFS_DISALLOWED) - CHK_ERR_WIN32A(ERROR_EFS_SERVER_NOT_TRUSTED) - CHK_ERR_WIN32A(ERROR_BAD_RECOVERY_POLICY) - CHK_ERR_WIN32A(ERROR_EFS_ALG_BLOB_TOO_BIG) - CHK_ERR_WIN32A(ERROR_VOLUME_NOT_SUPPORT_EFS) - CHK_ERR_WIN32A(ERROR_EFS_DISABLED) - CHK_ERR_WIN32A(ERROR_EFS_VERSION_NOT_SUPPORT) - CHK_ERR_WIN32A(SCHED_E_SERVICE_NOT_LOCALSYSTEM) - CHK_ERR_WIN32A(ERROR_CTX_CLIENT_LICENSE_IN_USE) - CHK_ERR_WIN32A(ERROR_CTX_CLIENT_LICENSE_NOT_SET) - CHK_ERR_WIN32A(ERROR_CTX_LICENSE_NOT_AVAILABLE) - CHK_ERR_WIN32A(ERROR_CTX_LICENSE_CLIENT_INVALID) - CHK_ERR_WIN32A(ERROR_CTX_LICENSE_EXPIRED) - CHK_ERR_WIN32A(ERROR_CTX_SHADOW_NOT_RUNNING) - CHK_ERR_WIN32A(ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE) -// CHK_ERR_WIN32A(ERROR_ACTIVATION_COUNT_EXCEEDED) - CHK_ERR_WIN32A(ERROR_DS_SORT_CONTROL_MISSING) - CHK_ERR_WIN32A(ERROR_DS_OFFSET_RANGE_ERROR) - CHK_ERR_WIN32A(ERROR_DS_OBJECT_BEING_REMOVED) - CHK_ERR_WIN32A(ERROR_DS_DS_REQUIRED) - CHK_ERR_WIN32A(ERROR_DS_INVALID_LDAP_DISPLAY_NAME) - CHK_ERR_WIN32A(ERROR_DS_NON_BASE_SEARCH) - CHK_ERR_WIN32A(ERROR_DS_CANT_RETRIEVE_ATTS) - CHK_ERR_WIN32A(ERROR_DS_BACKLINK_WITHOUT_LINK) - CHK_ERR_WIN32A(ERROR_DS_EPOCH_MISMATCH) - CHK_ERR_WIN32A(ERROR_DS_SRC_NAME_MISMATCH) - CHK_ERR_WIN32A(ERROR_DS_SRC_AND_DST_NC_IDENTICAL) - CHK_ERR_WIN32A(ERROR_DS_DST_NC_MISMATCH) - CHK_ERR_WIN32A(ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC) - CHK_ERR_WIN32A(ERROR_DS_SRC_GUID_MISMATCH) - CHK_ERR_WIN32A(ERROR_DS_CANT_MOVE_DELETED_OBJECT) - CHK_ERR_WIN32A(ERROR_DS_PDC_OPERATION_IN_PROGRESS) - CHK_ERR_WIN32A(ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD) - CHK_ERR_WIN32A(ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION) - CHK_ERR_WIN32A(ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS) - CHK_ERR_WIN32A(ERROR_DS_NC_MUST_HAVE_NC_PARENT) - CHK_ERR_WIN32A(ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE) - CHK_ERR_WIN32A(ERROR_DS_DST_DOMAIN_NOT_NATIVE) - CHK_ERR_WIN32A(ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER) - CHK_ERR_WIN32A(ERROR_DS_CANT_MOVE_ACCOUNT_GROUP) - CHK_ERR_WIN32A(ERROR_DS_CANT_MOVE_RESOURCE_GROUP) - CHK_ERR_WIN32A(ERROR_DS_INVALID_SEARCH_FLAG) - CHK_ERR_WIN32A(ERROR_DS_NO_TREE_DELETE_ABOVE_NC) - CHK_ERR_WIN32A(ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE) - CHK_ERR_WIN32A(ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE) - CHK_ERR_WIN32A(ERROR_DS_SAM_INIT_FAILURE) - CHK_ERR_WIN32A(ERROR_DS_SENSITIVE_GROUP_VIOLATION) - CHK_ERR_WIN32A(ERROR_DS_CANT_MOD_PRIMARYGROUPID) - CHK_ERR_WIN32A(ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD) - CHK_ERR_WIN32A(ERROR_DS_NONSAFE_SCHEMA_CHANGE) - CHK_ERR_WIN32A(ERROR_DS_SCHEMA_UPDATE_DISALLOWED) - CHK_ERR_WIN32A(ERROR_DS_CANT_CREATE_UNDER_SCHEMA) - CHK_ERR_WIN32A(ERROR_DS_INSTALL_NO_SRC_SCH_VERSION) - CHK_ERR_WIN32A(ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE) - CHK_ERR_WIN32A(ERROR_DS_INVALID_GROUP_TYPE) - CHK_ERR_WIN32A(ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN) - CHK_ERR_WIN32A(ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN) - CHK_ERR_WIN32A(ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER) - CHK_ERR_WIN32A(ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER) - CHK_ERR_WIN32A(ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER) - CHK_ERR_WIN32A(ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER) - CHK_ERR_WIN32A(ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER) - CHK_ERR_WIN32A(ERROR_DS_HAVE_PRIMARY_MEMBERS) - CHK_ERR_WIN32A(ERROR_DS_STRING_SD_CONVERSION_FAILED) - CHK_ERR_WIN32A(ERROR_DS_NAMING_MASTER_GC) - CHK_ERR_WIN32A(ERROR_DS_DNS_LOOKUP_FAILURE) - CHK_ERR_WIN32A(ERROR_DS_COULDNT_UPDATE_SPNS) - CHK_ERR_WIN32A(ERROR_DS_CANT_RETRIEVE_SD) - CHK_ERR_WIN32A(ERROR_DS_KEY_NOT_UNIQUE) - CHK_ERR_WIN32A(ERROR_DS_WRONG_LINKED_ATT_SYNTAX) - CHK_ERR_WIN32A(ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD) - CHK_ERR_WIN32A(ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY) - CHK_ERR_WIN32A(ERROR_DS_CANT_START) - CHK_ERR_WIN32A(ERROR_DS_INIT_FAILURE) - CHK_ERR_WIN32A(ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION) - CHK_ERR_WIN32A(ERROR_DS_SOURCE_DOMAIN_IN_FOREST) - CHK_ERR_WIN32A(ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST) - CHK_ERR_WIN32A(ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED) - CHK_ERR_WIN32A(ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN) - CHK_ERR_WIN32A(ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER) - CHK_ERR_WIN32A(ERROR_DS_SRC_SID_EXISTS_IN_FOREST) - CHK_ERR_WIN32A(ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH) - CHK_ERR_WIN32A(ERROR_SAM_INIT_FAILURE) - CHK_ERR_WIN32A(ERROR_DS_DRA_SCHEMA_INFO_SHIP) - CHK_ERR_WIN32A(ERROR_DS_DRA_SCHEMA_CONFLICT) - CHK_ERR_WIN32A(ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT) - CHK_ERR_WIN32A(ERROR_DS_DRA_OBJ_NC_MISMATCH) - CHK_ERR_WIN32A(ERROR_DS_NC_STILL_HAS_DSAS) - CHK_ERR_WIN32A(ERROR_DS_GC_REQUIRED) - CHK_ERR_WIN32A(ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY) - CHK_ERR_WIN32A(ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS) - CHK_ERR_WIN32A(ERROR_DS_CANT_ADD_TO_GC) - CHK_ERR_WIN32A(ERROR_DS_NO_CHECKPOINT_WITH_PDC) - CHK_ERR_WIN32A(ERROR_DS_SOURCE_AUDITING_NOT_ENABLED) - CHK_ERR_WIN32A(ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC) - CHK_ERR_WIN32A(ERROR_DS_INVALID_NAME_FOR_SPN) - CHK_ERR_WIN32A(ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS) - CHK_ERR_WIN32A(ERROR_DS_UNICODEPWD_NOT_IN_QUOTES) - CHK_ERR_WIN32A(ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED) - CHK_ERR_WIN32A(ERROR_DS_MUST_BE_RUN_ON_DST_DC) - CHK_ERR_WIN32A(ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER) - CHK_ERR_WIN32A(ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ) - CHK_ERR_WIN32A(ERROR_DS_INIT_FAILURE_CONSOLE) - CHK_ERR_WIN32A(ERROR_DS_SAM_INIT_FAILURE_CONSOLE) - CHK_ERR_WIN32A(ERROR_DS_FOREST_VERSION_TOO_HIGH) - CHK_ERR_WIN32A(ERROR_DS_DOMAIN_VERSION_TOO_HIGH) - CHK_ERR_WIN32A(ERROR_DS_FOREST_VERSION_TOO_LOW) - CHK_ERR_WIN32A(ERROR_DS_DOMAIN_VERSION_TOO_LOW) - CHK_ERR_WIN32A(ERROR_DS_INCOMPATIBLE_VERSION) - CHK_ERR_WIN32A(ERROR_DS_LOW_DSA_VERSION) - CHK_ERR_WIN32A(ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN) - CHK_ERR_WIN32A(ERROR_DS_NOT_SUPPORTED_SORT_ORDER) - CHK_ERR_WIN32A(ERROR_DS_NAME_NOT_UNIQUE) - CHK_ERR_WIN32A(ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4) - CHK_ERR_WIN32A(ERROR_DS_OUT_OF_VERSION_STORE) - CHK_ERR_WIN32A(ERROR_DS_INCOMPATIBLE_CONTROLS_USED) - CHK_ERR_WIN32A(ERROR_DS_NO_REF_DOMAIN) - CHK_ERR_WIN32A(ERROR_DS_RESERVED_LINK_ID) - CHK_ERR_WIN32A(ERROR_DS_LINK_ID_NOT_AVAILABLE) - CHK_ERR_WIN32A(ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER) - CHK_ERR_WIN32A(ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE) - CHK_ERR_WIN32A(ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC) - CHK_ERR_WIN32A(ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG) - CHK_ERR_WIN32A(ERROR_DS_MODIFYDN_WRONG_GRANDPARENT) - CHK_ERR_WIN32A(ERROR_DS_NAME_ERROR_TRUST_REFERRAL) - CHK_ERR_WIN32A(ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER) - CHK_ERR_WIN32A(ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD) - CHK_ERR_WIN32A(ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2) - CHK_ERR_WIN32A(ERROR_DS_THREAD_LIMIT_EXCEEDED) - CHK_ERR_WIN32A(ERROR_DS_NOT_CLOSEST) - CHK_ERR_WIN32A(ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF) - CHK_ERR_WIN32A(ERROR_DS_SINGLE_USER_MODE_FAILED) - CHK_ERR_WIN32A(ERROR_DS_NTDSCRIPT_SYNTAX_ERROR) - CHK_ERR_WIN32A(ERROR_DS_NTDSCRIPT_PROCESS_ERROR) - CHK_ERR_WIN32A(ERROR_DS_DIFFERENT_REPL_EPOCHS) - CHK_ERR_WIN32A(ERROR_DS_DRS_EXTENSIONS_CHANGED) - CHK_ERR_WIN32A(ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR) - CHK_ERR_WIN32A(ERROR_DS_NO_MSDS_INTID) - CHK_ERR_WIN32A(ERROR_DS_DUP_MSDS_INTID) - CHK_ERR_WIN32A(ERROR_DS_EXISTS_IN_RDNATTID) - CHK_ERR_WIN32A(ERROR_DS_AUTHORIZATION_FAILED) - CHK_ERR_WIN32A(ERROR_DS_INVALID_SCRIPT) - CHK_ERR_WIN32A(ERROR_DS_REMOTE_CROSSREF_OP_FAILED) -// CHK_ERR_WIN32A(ERROR_DS_CROSS_REF_BUSY) -// CHK_ERR_WIN32A(ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN) -// CHK_ERR_WIN32A(ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC) -// CHK_ERR_WIN32A(ERROR_DS_DUPLICATE_ID_FOUND) -// CHK_ERR_WIN32A(ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT) -// CHK_ERR_WIN32A(ERROR_DS_GROUP_CONVERSION_ERROR) -// CHK_ERR_WIN32A(ERROR_DS_CANT_MOVE_APP_BASIC_GROUP) -// CHK_ERR_WIN32A(ERROR_DS_CANT_MOVE_APP_QUERY_GROUP) -// CHK_ERR_WIN32A(ERROR_DS_ROLE_NOT_VERIFIED) -// CHK_ERR_WIN32A(ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL) -// CHK_ERR_WIN32A(ERROR_DS_DOMAIN_RENAME_IN_PROGRESS) -// CHK_ERR_WIN32A(ERROR_DS_EXISTING_AD_CHILD_NC) -// CHK_ERR_WIN32A(DNS_ERROR_INVALID_NAME_CHAR) -// CHK_ERR_WIN32A(DNS_ERROR_NUMERIC_NAME) -// CHK_ERR_WIN32A(DNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER) -// CHK_ERR_WIN32A(DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION) -// CHK_ERR_WIN32A(DNS_ERROR_CANNOT_FIND_ROOT_HINTS) -// CHK_ERR_WIN32A(DNS_ERROR_INCONSISTENT_ROOT_HINTS) - CHK_ERR_WIN32A(DNS_ERROR_FORWARDER_ALREADY_EXISTS) - CHK_ERR_WIN32A(DNS_ERROR_ZONE_REQUIRES_MASTER_IP) - CHK_ERR_WIN32A(DNS_ERROR_ZONE_IS_SHUTDOWN) - CHK_ERR_WIN32A(DNS_ERROR_DP_BASE) - CHK_ERR_WIN32A(DNS_ERROR_DP_DOES_NOT_EXIST) - CHK_ERR_WIN32A(DNS_ERROR_DP_ALREADY_EXISTS) - CHK_ERR_WIN32A(DNS_ERROR_DP_NOT_ENLISTED) - CHK_ERR_WIN32A(DNS_ERROR_DP_ALREADY_ENLISTED) -// CHK_ERR_WIN32A(DNS_ERROR_DP_NOT_AVAILABLE) - CHK_ERR_WIN32A(WSA_QOS_ESERVICETYPE) - CHK_ERR_WIN32A(WSA_QOS_EFLOWSPEC) - CHK_ERR_WIN32A(WSA_QOS_EPROVSPECBUF) - CHK_ERR_WIN32A(WSA_QOS_EFILTERSTYLE) - CHK_ERR_WIN32A(WSA_QOS_EFILTERTYPE) - CHK_ERR_WIN32A(WSA_QOS_EFILTERCOUNT) - CHK_ERR_WIN32A(WSA_QOS_EOBJLENGTH) - CHK_ERR_WIN32A(WSA_QOS_EFLOWCOUNT) - CHK_ERR_WIN32A(WSA_QOS_EUNKOWNPSOBJ) - CHK_ERR_WIN32A(WSA_QOS_EPOLICYOBJ) - CHK_ERR_WIN32A(WSA_QOS_EFLOWDESC) - CHK_ERR_WIN32A(WSA_QOS_EPSFLOWSPEC) - CHK_ERR_WIN32A(WSA_QOS_EPSFILTERSPEC) - CHK_ERR_WIN32A(WSA_QOS_ESDMODEOBJ) - CHK_ERR_WIN32A(WSA_QOS_ESHAPERATEOBJ) - CHK_ERR_WIN32A(WSA_QOS_RESERVED_PETYPE) - CHK_ERR_WIN32A(ERROR_SXS_SECTION_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_SXS_CANT_GEN_ACTCTX) - CHK_ERR_WIN32A(ERROR_SXS_INVALID_ACTCTXDATA_FORMAT) - CHK_ERR_WIN32A(ERROR_SXS_ASSEMBLY_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_SXS_MANIFEST_FORMAT_ERROR) - CHK_ERR_WIN32A(ERROR_SXS_MANIFEST_PARSE_ERROR) - CHK_ERR_WIN32A(ERROR_SXS_ACTIVATION_CONTEXT_DISABLED) - CHK_ERR_WIN32A(ERROR_SXS_KEY_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_SXS_VERSION_CONFLICT) - CHK_ERR_WIN32A(ERROR_SXS_WRONG_SECTION_TYPE) - CHK_ERR_WIN32A(ERROR_SXS_THREAD_QUERIES_DISABLED) - CHK_ERR_WIN32A(ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET) - CHK_ERR_WIN32A(ERROR_SXS_UNKNOWN_ENCODING_GROUP) - CHK_ERR_WIN32A(ERROR_SXS_UNKNOWN_ENCODING) - CHK_ERR_WIN32A(ERROR_SXS_INVALID_XML_NAMESPACE_URI) - CHK_ERR_WIN32A(ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED) - CHK_ERR_WIN32A(ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED) - CHK_ERR_WIN32A(ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE) - CHK_ERR_WIN32A(ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE) - CHK_ERR_WIN32A(ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE) - CHK_ERR_WIN32A(ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT) - CHK_ERR_WIN32A(ERROR_SXS_DUPLICATE_DLL_NAME) - CHK_ERR_WIN32A(ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME) - CHK_ERR_WIN32A(ERROR_SXS_DUPLICATE_CLSID) - CHK_ERR_WIN32A(ERROR_SXS_DUPLICATE_IID) - CHK_ERR_WIN32A(ERROR_SXS_DUPLICATE_TLBID) - CHK_ERR_WIN32A(ERROR_SXS_DUPLICATE_PROGID) - CHK_ERR_WIN32A(ERROR_SXS_DUPLICATE_ASSEMBLY_NAME) - CHK_ERR_WIN32A(ERROR_SXS_FILE_HASH_MISMATCH) - CHK_ERR_WIN32A(ERROR_SXS_POLICY_PARSE_ERROR) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_MISSINGQUOTE) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_COMMENTSYNTAX) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_BADSTARTNAMECHAR) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_BADNAMECHAR) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_BADCHARINSTRING) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_XMLDECLSYNTAX) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_BADCHARDATA) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_MISSINGWHITESPACE) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_EXPECTINGTAGEND) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_MISSINGSEMICOLON) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_UNBALANCEDPAREN) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_INTERNALERROR) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_INCOMPLETE_ENCODING) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_MISSING_PAREN) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_MULTIPLE_COLONS) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_INVALID_DECIMAL) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_INVALID_HEXIDECIMAL) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_INVALID_UNICODE) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_UNEXPECTEDENDTAG) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_UNCLOSEDTAG) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_DUPLICATEATTRIBUTE) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_MULTIPLEROOTS) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_INVALIDATROOTLEVEL) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_BADXMLDECL) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_MISSINGROOT) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_UNEXPECTEDEOF) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_BADPEREFINSUBSET) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_UNCLOSEDSTARTTAG) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_UNCLOSEDENDTAG) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_UNCLOSEDSTRING) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_UNCLOSEDCOMMENT) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_UNCLOSEDDECL) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_UNCLOSEDCDATA) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_RESERVEDNAMESPACE) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_INVALIDENCODING) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_INVALIDSWITCH) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_BADXMLCASE) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_INVALID_STANDALONE) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_UNEXPECTED_STANDALONE) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_INVALID_VERSION) - CHK_ERR_WIN32A(ERROR_SXS_XML_E_MISSINGEQUALS) - CHK_ERR_WIN32A(ERROR_SXS_PROTECTION_RECOVERY_FAILED) - CHK_ERR_WIN32A(ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT) - CHK_ERR_WIN32A(ERROR_SXS_PROTECTION_CATALOG_NOT_VALID) - CHK_ERR_WIN32A(ERROR_SXS_UNTRANSLATABLE_HRESULT) - CHK_ERR_WIN32A(ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING) - CHK_ERR_WIN32A(ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE) - CHK_ERR_WIN32A(ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME) - CHK_ERR_WIN32A(ERROR_IPSEC_QM_POLICY_EXISTS) - CHK_ERR_WIN32A(ERROR_IPSEC_QM_POLICY_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_IPSEC_QM_POLICY_IN_USE) - CHK_ERR_WIN32A(ERROR_IPSEC_MM_POLICY_EXISTS) - CHK_ERR_WIN32A(ERROR_IPSEC_MM_POLICY_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_IPSEC_MM_POLICY_IN_USE) - CHK_ERR_WIN32A(ERROR_IPSEC_MM_FILTER_EXISTS) - CHK_ERR_WIN32A(ERROR_IPSEC_MM_FILTER_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_IPSEC_TRANSPORT_FILTER_EXISTS) - CHK_ERR_WIN32A(ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_IPSEC_MM_AUTH_EXISTS) - CHK_ERR_WIN32A(ERROR_IPSEC_MM_AUTH_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_IPSEC_MM_AUTH_IN_USE) - CHK_ERR_WIN32A(ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_IPSEC_TUNNEL_FILTER_EXISTS) - CHK_ERR_WIN32A(ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND) - CHK_ERR_WIN32A(ERROR_IPSEC_MM_FILTER_PENDING_DELETION) - CHK_ERR_WIN32A(ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION) - CHK_ERR_WIN32A(ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION) - CHK_ERR_WIN32A(ERROR_IPSEC_MM_POLICY_PENDING_DELETION) - CHK_ERR_WIN32A(ERROR_IPSEC_MM_AUTH_PENDING_DELETION) - CHK_ERR_WIN32A(ERROR_IPSEC_QM_POLICY_PENDING_DELETION) -// CHK_ERR_WIN32A(WARNING_IPSEC_MM_POLICY_PRUNED) -// CHK_ERR_WIN32A(WARNING_IPSEC_QM_POLICY_PRUNED) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_NEG_STATUS_BEGIN) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_AUTH_FAIL) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_ATTRIB_FAIL) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_NEGOTIATION_PENDING) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_TIMED_OUT) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_NO_CERT) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_SA_DELETED) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_SA_REAPED) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_MM_ACQUIRE_DROP) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_QM_ACQUIRE_DROP) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_QUEUE_DROP_MM) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_DROP_NO_RESPONSE) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_MM_DELAY_DROP) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_QM_DELAY_DROP) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_ERROR) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_CRL_FAILED) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_KEY_USAGE) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_CERT_TYPE) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_NO_PRIVATE_KEY) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_DH_FAIL) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_HEADER) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_NO_POLICY) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_SIGNATURE) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_KERBEROS_ERROR) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_NO_PUBLIC_KEY) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PROCESS_ERR) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PROCESS_ERR_SA) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PROCESS_ERR_PROP) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PROCESS_ERR_TRANS) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PROCESS_ERR_KE) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PROCESS_ERR_ID) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PROCESS_ERR_CERT) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PROCESS_ERR_HASH) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PROCESS_ERR_SIG) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PROCESS_ERR_NONCE) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PROCESS_ERR_DELETE) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_PAYLOAD) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_LOAD_SOFT_SA) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_COOKIE) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_NO_PEER_CERT) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_PEER_CRL_FAILED) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_POLICY_CHANGE) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_NO_MM_POLICY) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_NOTCBPRIV) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_SECLOADFAIL) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_FAILSSPINIT) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_FAILQUERYSSP) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_SRVACQFAIL) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_SRVQUERYCRED) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_GETSPIFAIL) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_FILTER) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_OUT_OF_MEMORY) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_POLICY) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_UNKNOWN_DOI) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_SITUATION) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_DH_FAILURE) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_GROUP) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_ENCRYPT) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_DECRYPT) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_POLICY_MATCH) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_UNSUPPORTED_ID) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_HASH) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_HASH_ALG) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_HASH_SIZE) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_AUTH_ALG) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_SIG) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_LOAD_FAILED) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_RPC_DELETE) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_BENIGN_REINIT) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_MM_LIMIT) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_NEGOTIATION_DISABLED) - CHK_ERR_WIN32A(ERROR_IPSEC_IKE_NEG_STATUS_END) - -// ------------------------------------------------------------- -// ddraw.h error codes -// ------------------------------------------------------------- - CHK_ERRA(DDERR_ALREADYINITIALIZED) - CHK_ERRA(DDERR_CANNOTATTACHSURFACE) - CHK_ERRA(DDERR_CANNOTDETACHSURFACE) - CHK_ERRA(DDERR_CURRENTLYNOTAVAIL) - CHK_ERRA(DDERR_EXCEPTION) -// CHK_ERRA(DDERR_GENERIC) - CHK_ERRA(DDERR_HEIGHTALIGN) - CHK_ERRA(DDERR_INCOMPATIBLEPRIMARY) - CHK_ERRA(DDERR_INVALIDCAPS) - CHK_ERRA(DDERR_INVALIDCLIPLIST) - CHK_ERRA(DDERR_INVALIDMODE) - CHK_ERRA(DDERR_INVALIDOBJECT) -// CHK_ERRA(DDERR_INVALIDPARAMS) - CHK_ERRA(DDERR_INVALIDPIXELFORMAT) - CHK_ERRA(DDERR_INVALIDRECT) - CHK_ERRA(DDERR_LOCKEDSURFACES) - CHK_ERRA(DDERR_NO3D) - CHK_ERRA(DDERR_NOALPHAHW) - CHK_ERRA(DDERR_NOSTEREOHARDWARE) - CHK_ERRA(DDERR_NOSURFACELEFT) - CHK_ERRA(DDERR_NOCLIPLIST) - CHK_ERRA(DDERR_NOCOLORCONVHW) - CHK_ERRA(DDERR_NOCOOPERATIVELEVELSET) - CHK_ERRA(DDERR_NOCOLORKEY) - CHK_ERRA(DDERR_NOCOLORKEYHW) - CHK_ERRA(DDERR_NODIRECTDRAWSUPPORT) - CHK_ERRA(DDERR_NOEXCLUSIVEMODE) - CHK_ERRA(DDERR_NOFLIPHW) - CHK_ERRA(DDERR_NOGDI) - CHK_ERRA(DDERR_NOMIRRORHW) - CHK_ERRA(DDERR_NOTFOUND) - CHK_ERRA(DDERR_NOOVERLAYHW) - CHK_ERRA(DDERR_OVERLAPPINGRECTS) - CHK_ERRA(DDERR_NORASTEROPHW) - CHK_ERRA(DDERR_NOROTATIONHW) - CHK_ERRA(DDERR_NOSTRETCHHW) - CHK_ERRA(DDERR_NOT4BITCOLOR) - CHK_ERRA(DDERR_NOT4BITCOLORINDEX) - CHK_ERRA(DDERR_NOT8BITCOLOR) - CHK_ERRA(DDERR_NOTEXTUREHW) - CHK_ERRA(DDERR_NOVSYNCHW) - CHK_ERRA(DDERR_NOZBUFFERHW) - CHK_ERRA(DDERR_NOZOVERLAYHW) - CHK_ERRA(DDERR_OUTOFCAPS) -// CHK_ERRA(DDERR_OUTOFMEMORY) -// CHK_ERRA(DDERR_OUTOFVIDEOMEMORY) - CHK_ERRA(DDERR_OVERLAYCANTCLIP) - CHK_ERRA(DDERR_OVERLAYCOLORKEYONLYONEACTIVE) - CHK_ERRA(DDERR_PALETTEBUSY) - CHK_ERRA(DDERR_COLORKEYNOTSET) - CHK_ERRA(DDERR_SURFACEALREADYATTACHED) - CHK_ERRA(DDERR_SURFACEALREADYDEPENDENT) - CHK_ERRA(DDERR_SURFACEBUSY) - CHK_ERRA(DDERR_CANTLOCKSURFACE) - CHK_ERRA(DDERR_SURFACEISOBSCURED) - CHK_ERRA(DDERR_SURFACELOST) - CHK_ERRA(DDERR_SURFACENOTATTACHED) - CHK_ERRA(DDERR_TOOBIGHEIGHT) - CHK_ERRA(DDERR_TOOBIGSIZE) - CHK_ERRA(DDERR_TOOBIGWIDTH) -// CHK_ERRA(DDERR_UNSUPPORTED) - CHK_ERRA(DDERR_UNSUPPORTEDFORMAT) - CHK_ERRA(DDERR_UNSUPPORTEDMASK) - CHK_ERRA(DDERR_INVALIDSTREAM) - CHK_ERRA(DDERR_VERTICALBLANKINPROGRESS) - CHK_ERRA(DDERR_WASSTILLDRAWING) - CHK_ERRA(DDERR_DDSCAPSCOMPLEXREQUIRED) - CHK_ERRA(DDERR_XALIGN) - CHK_ERRA(DDERR_INVALIDDIRECTDRAWGUID) - CHK_ERRA(DDERR_DIRECTDRAWALREADYCREATED) - CHK_ERRA(DDERR_NODIRECTDRAWHW) - CHK_ERRA(DDERR_PRIMARYSURFACEALREADYEXISTS) - CHK_ERRA(DDERR_NOEMULATION) - CHK_ERRA(DDERR_REGIONTOOSMALL) - CHK_ERRA(DDERR_CLIPPERISUSINGHWND) - CHK_ERRA(DDERR_NOCLIPPERATTACHED) - CHK_ERRA(DDERR_NOHWND) - CHK_ERRA(DDERR_HWNDSUBCLASSED) - CHK_ERRA(DDERR_HWNDALREADYSET) - CHK_ERRA(DDERR_NOPALETTEATTACHED) - CHK_ERRA(DDERR_NOPALETTEHW) - CHK_ERRA(DDERR_BLTFASTCANTCLIP) - CHK_ERRA(DDERR_NOBLTHW) - CHK_ERRA(DDERR_NODDROPSHW) - CHK_ERRA(DDERR_OVERLAYNOTVISIBLE) - CHK_ERRA(DDERR_NOOVERLAYDEST) - CHK_ERRA(DDERR_INVALIDPOSITION) - CHK_ERRA(DDERR_NOTAOVERLAYSURFACE) - CHK_ERRA(DDERR_EXCLUSIVEMODEALREADYSET) - CHK_ERRA(DDERR_NOTFLIPPABLE) - CHK_ERRA(DDERR_CANTDUPLICATE) - CHK_ERRA(DDERR_NOTLOCKED) - CHK_ERRA(DDERR_CANTCREATEDC) - CHK_ERRA(DDERR_NODC) - CHK_ERRA(DDERR_WRONGMODE) - CHK_ERRA(DDERR_IMPLICITLYCREATED) - CHK_ERRA(DDERR_NOTPALETTIZED) - CHK_ERRA(DDERR_UNSUPPORTEDMODE) - CHK_ERRA(DDERR_NOMIPMAPHW) - CHK_ERRA(DDERR_INVALIDSURFACETYPE) - CHK_ERRA(DDERR_NOOPTIMIZEHW) - CHK_ERRA(DDERR_NOTLOADED) - CHK_ERRA(DDERR_NOFOCUSWINDOW) - CHK_ERRA(DDERR_NOTONMIPMAPSUBLEVEL) - CHK_ERRA(DDERR_DCALREADYCREATED) - CHK_ERRA(DDERR_NONONLOCALVIDMEM) - CHK_ERRA(DDERR_CANTPAGELOCK) - CHK_ERRA(DDERR_CANTPAGEUNLOCK) - CHK_ERRA(DDERR_NOTPAGELOCKED) - CHK_ERRA(DDERR_MOREDATA) - CHK_ERRA(DDERR_EXPIRED) - CHK_ERRA(DDERR_TESTFINISHED) - CHK_ERRA(DDERR_NEWMODE) - CHK_ERRA(DDERR_D3DNOTINITIALIZED) - CHK_ERRA(DDERR_VIDEONOTACTIVE) - CHK_ERRA(DDERR_NOMONITORINFORMATION) - CHK_ERRA(DDERR_NODRIVERSUPPORT) - CHK_ERRA(DDERR_DEVICEDOESNTOWNSURFACE) - -// ------------------------------------------------------------- -// d3d10.h error codes -// ------------------------------------------------------------- - CHK_ERRA(D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS) - CHK_ERRA(D3D10_ERROR_FILE_NOT_FOUND) - -// ------------------------------------------------------------- -// dxgi.h error codes -// ------------------------------------------------------------- - CHK_ERRA(DXGI_STATUS_OCCLUDED) - CHK_ERRA(DXGI_STATUS_CLIPPED) - CHK_ERRA(DXGI_STATUS_NO_REDIRECTION) - CHK_ERRA(DXGI_STATUS_NO_DESKTOP_ACCESS) - CHK_ERRA(DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE) - CHK_ERRA(DXGI_STATUS_MODE_CHANGED) - CHK_ERRA(DXGI_STATUS_MODE_CHANGE_IN_PROGRESS) - CHK_ERRA(DXGI_ERROR_INVALID_CALL) - CHK_ERRA(DXGI_ERROR_NOT_FOUND) - CHK_ERRA(DXGI_ERROR_MORE_DATA) - CHK_ERRA(DXGI_ERROR_UNSUPPORTED) - CHK_ERRA(DXGI_ERROR_DEVICE_REMOVED) - CHK_ERRA(DXGI_ERROR_DEVICE_HUNG) - CHK_ERRA(DXGI_ERROR_DEVICE_RESET) - CHK_ERRA(DXGI_ERROR_WAS_STILL_DRAWING) - CHK_ERRA(DXGI_ERROR_FRAME_STATISTICS_DISJOINT) - CHK_ERRA(DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE) - CHK_ERRA(DXGI_ERROR_DRIVER_INTERNAL_ERROR) - CHK_ERRA(DXGI_ERROR_NONEXCLUSIVE) - CHK_ERRA(DXGI_ERROR_NOT_CURRENTLY_AVAILABLE) - CHK_ERRA(DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED) - CHK_ERRA(DXGI_ERROR_REMOTE_OUTOFMEMORY) - -// ------------------------------------------------------------- -// d3d11.h error codes -// ------------------------------------------------------------- - CHK_ERRA(D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS) - CHK_ERRA(D3D11_ERROR_FILE_NOT_FOUND) - CHK_ERRA(D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS) - CHK_ERRA(D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD) - -// ------------------------------------------------------------- -// Direct2D error codes -// ------------------------------------------------------------- - CHK_ERRA(D2DERR_UNSUPPORTED_PIXEL_FORMAT) -// CHK_ERRA(D2DERR_INSUFFICIENT_BUFFER) - CHK_ERRA(D2DERR_WRONG_STATE) - CHK_ERRA(D2DERR_NOT_INITIALIZED) - CHK_ERRA(D2DERR_UNSUPPORTED_OPERATION) - CHK_ERRA(D2DERR_SCANNER_FAILED) - CHK_ERRA(D2DERR_SCREEN_ACCESS_DENIED) - CHK_ERRA(D2DERR_DISPLAY_STATE_INVALID) - CHK_ERRA(D2DERR_ZERO_VECTOR) - CHK_ERRA(D2DERR_INTERNAL_ERROR) - CHK_ERRA(D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED) - CHK_ERRA(D2DERR_INVALID_CALL) - CHK_ERRA(D2DERR_NO_HARDWARE_DEVICE) - CHK_ERRA(D2DERR_RECREATE_TARGET) - CHK_ERRA(D2DERR_TOO_MANY_SHADER_ELEMENTS) - CHK_ERRA(D2DERR_SHADER_COMPILE_FAILED) - CHK_ERRA(D2DERR_MAX_TEXTURE_SIZE_EXCEEDED) - CHK_ERRA(D2DERR_UNSUPPORTED_VERSION) - CHK_ERRA(D2DERR_BAD_NUMBER) - CHK_ERRA(D2DERR_WRONG_FACTORY) - CHK_ERRA(D2DERR_LAYER_ALREADY_IN_USE) - CHK_ERRA(D2DERR_POP_CALL_DID_NOT_MATCH_PUSH) -// CHK_ERRA(D2DERR_WRONG_RESOURCE_DOMAIN) - CHK_ERRA(D2DERR_PUSH_POP_UNBALANCED) - CHK_ERRA(D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT) - CHK_ERRA(D2DERR_INCOMPATIBLE_BRUSH_TYPES) - CHK_ERRA(D2DERR_WIN32_ERROR) - CHK_ERRA(D2DERR_TARGET_NOT_GDI_COMPATIBLE) - CHK_ERRA(D2DERR_TEXT_EFFECT_IS_WRONG_TYPE) - CHK_ERRA(D2DERR_TEXT_RENDERER_NOT_RELEASED) -// CHK_ERRA(D2DERR_EXCEEDS_MAX_BITMAP_SIZE) - -// ------------------------------------------------------------- -// DirectWrite error codes -// ------------------------------------------------------------- - CHK_ERRA(DWRITE_E_FILEFORMAT) - CHK_ERRA(DWRITE_E_UNEXPECTED) - CHK_ERRA(DWRITE_E_NOFONT) - CHK_ERRA(DWRITE_E_FILENOTFOUND) - CHK_ERRA(DWRITE_E_FILEACCESS) - CHK_ERRA(DWRITE_E_FONTCOLLECTIONOBSOLETE) - CHK_ERRA(DWRITE_E_ALREADYREGISTERED) - -// ------------------------------------------------------------- -// WIC error codes -// ------------------------------------------------------------- - CHK_ERRA(WINCODEC_ERR_WRONGSTATE) - CHK_ERRA(WINCODEC_ERR_VALUEOUTOFRANGE) - CHK_ERRA(WINCODEC_ERR_UNKNOWNIMAGEFORMAT) - CHK_ERRA(WINCODEC_ERR_UNSUPPORTEDVERSION) - CHK_ERRA(WINCODEC_ERR_NOTINITIALIZED) - CHK_ERRA(WINCODEC_ERR_ALREADYLOCKED) - CHK_ERRA(WINCODEC_ERR_PROPERTYNOTFOUND) - CHK_ERRA(WINCODEC_ERR_PROPERTYNOTSUPPORTED) - CHK_ERRA(WINCODEC_ERR_PROPERTYSIZE) - CHK_ERRA(WINCODEC_ERR_CODECPRESENT) - CHK_ERRA(WINCODEC_ERR_CODECNOTHUMBNAIL) - CHK_ERRA(WINCODEC_ERR_PALETTEUNAVAILABLE) - CHK_ERRA(WINCODEC_ERR_CODECTOOMANYSCANLINES) - CHK_ERRA(WINCODEC_ERR_INTERNALERROR) - CHK_ERRA(WINCODEC_ERR_SOURCERECTDOESNOTMATCHDIMENSIONS) - CHK_ERRA(WINCODEC_ERR_COMPONENTNOTFOUND) - CHK_ERRA(WINCODEC_ERR_IMAGESIZEOUTOFRANGE) - CHK_ERRA(WINCODEC_ERR_TOOMUCHMETADATA) - CHK_ERRA(WINCODEC_ERR_BADIMAGE) - CHK_ERRA(WINCODEC_ERR_BADHEADER) - CHK_ERRA(WINCODEC_ERR_FRAMEMISSING) - CHK_ERRA(WINCODEC_ERR_BADMETADATAHEADER) - CHK_ERRA(WINCODEC_ERR_BADSTREAMDATA) - CHK_ERRA(WINCODEC_ERR_STREAMWRITE) - CHK_ERRA(WINCODEC_ERR_STREAMREAD) - CHK_ERRA(WINCODEC_ERR_STREAMNOTAVAILABLE) -// CHK_ERRA(WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT) - CHK_ERRA(WINCODEC_ERR_UNSUPPORTEDOPERATION) - CHK_ERRA(WINCODEC_ERR_INVALIDREGISTRATION) - CHK_ERRA(WINCODEC_ERR_COMPONENTINITIALIZEFAILURE) - CHK_ERRA(WINCODEC_ERR_INSUFFICIENTBUFFER) - CHK_ERRA(WINCODEC_ERR_DUPLICATEMETADATAPRESENT) - CHK_ERRA(WINCODEC_ERR_PROPERTYUNEXPECTEDTYPE) - CHK_ERRA(WINCODEC_ERR_UNEXPECTEDSIZE) - CHK_ERRA(WINCODEC_ERR_INVALIDQUERYREQUEST) - CHK_ERRA(WINCODEC_ERR_UNEXPECTEDMETADATATYPE) - CHK_ERRA(WINCODEC_ERR_REQUESTONLYVALIDATMETADATAROOT) - CHK_ERRA(WINCODEC_ERR_INVALIDQUERYCHARACTER) - CHK_ERRA(WINCODEC_ERR_WIN32ERROR) - CHK_ERRA(WINCODEC_ERR_INVALIDPROGRESSIVELEVEL) - -// ------------------------------------------------------------- -// DXUT error codes -// ------------------------------------------------------------- - CHK_ERRA(DXUTERR_NODIRECT3D) - CHK_ERRA(DXUTERR_NOCOMPATIBLEDEVICES) - CHK_ERRA(DXUTERR_MEDIANOTFOUND) - CHK_ERRA(DXUTERR_NONZEROREFCOUNT) - CHK_ERRA(DXUTERR_CREATINGDEVICE) - CHK_ERRA(DXUTERR_RESETTINGDEVICE) - CHK_ERRA(DXUTERR_CREATINGDEVICEOBJECTS) - CHK_ERRA(DXUTERR_RESETTINGDEVICEOBJECTS) - CHK_ERRA(DXUTERR_INCORRECTVERSION) - CHK_ERRA(DXUTERR_DEVICEREMOVED) - -// ------------------------------------------------------------- -// xaudio2.h error codes -// ------------------------------------------------------------- - CHK_ERRA(XAUDIO2_E_INVALID_CALL) - CHK_ERRA(XAUDIO2_E_XMA_DECODER_ERROR) - CHK_ERRA(XAUDIO2_E_XAPO_CREATION_FAILED) - CHK_ERRA(XAUDIO2_E_DEVICE_INVALIDATED) - -// ------------------------------------------------------------- -// xapo.h error codes -// ------------------------------------------------------------- - CHK_ERRA(XAPO_E_FORMAT_UNSUPPORTED) - } - - return L"Unknown"; -} - -//-------------------------------------------------------------------------------------- -#undef CHK_ERR -#undef CHK_ERRA -#undef HRESULT_FROM_WIN32b -#undef CHK_ERR_WIN32A -#undef CHK_ERR_WIN32_ONLY - -#define CHK_ERRA(hrchk) \ - case hrchk: \ - wcscpy_s( desc, count, L#hrchk ); - -#define CHK_ERR(hrchk, strOut) \ - case hrchk: \ - wcscpy_s( desc, count, L##strOut ); - - -//-------------------------------------------------------------------------------------- -void WINAPI DXGetErrorDescriptionW( _In_ HRESULT hr, _Out_cap_(count) WCHAR* desc, _In_ size_t count ) -{ - if ( !count ) - return; - - *desc = 0; - - // First try to see if FormatMessage knows this hr - LPWSTR errorText = nullptr; - - DWORD result = FormatMessageW( FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ALLOCATE_BUFFER, nullptr, hr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&errorText, 0, nullptr ); - - if (result > 0 && errorText) - { - wcscpy_s( desc, count, errorText ); - - if ( errorText ) - LocalFree( errorText ); - - return; - } - - switch (hr) - { -// Commmented out codes are actually alises for other codes - -// ------------------------------------------------------------- -// ddraw.h error codes -// ------------------------------------------------------------- - CHK_ERR(DDERR_ALREADYINITIALIZED, "This object is already initialized") - CHK_ERR(DDERR_CANNOTATTACHSURFACE, "This surface can not be attached to the requested surface.") - CHK_ERR(DDERR_CANNOTDETACHSURFACE, "This surface can not be detached from the requested surface.") - CHK_ERR(DDERR_CURRENTLYNOTAVAIL, "Support is currently not available.") - CHK_ERR(DDERR_EXCEPTION, "An exception was encountered while performing the requested operation") -// CHK_ERR(DDERR_GENERIC, "DDERR_GENERIC") - CHK_ERR(DDERR_HEIGHTALIGN, "Height of rectangle provided is not a multiple of reqd alignment") - CHK_ERR(DDERR_INCOMPATIBLEPRIMARY, "Unable to match primary surface creation request with existing primary surface.") - CHK_ERR(DDERR_INVALIDCAPS, "One or more of the caps bits passed to the callback are incorrect.") - CHK_ERR(DDERR_INVALIDCLIPLIST, "DirectDraw does not support provided Cliplist.") - CHK_ERR(DDERR_INVALIDMODE, "DirectDraw does not support the requested mode") - CHK_ERR(DDERR_INVALIDOBJECT, "DirectDraw received a pointer that was an invalid DIRECTDRAW object.") -// CHK_ERR(DDERR_INVALIDPARAMS, "DDERR_INVALIDPARAMS") - CHK_ERR(DDERR_INVALIDPIXELFORMAT, "pixel format was invalid as specified") - CHK_ERR(DDERR_INVALIDRECT, "Rectangle provided was invalid.") - CHK_ERR(DDERR_LOCKEDSURFACES, "Operation could not be carried out because one or more surfaces are locked") - CHK_ERR(DDERR_NO3D, "There is no 3D present.") - CHK_ERR(DDERR_NOALPHAHW, "Operation could not be carried out because there is no alpha accleration hardware present or available.") - CHK_ERR(DDERR_NOSTEREOHARDWARE, "Operation could not be carried out because there is no stereo hardware present or available.") - CHK_ERR(DDERR_NOSURFACELEFT, "Operation could not be carried out because there is no hardware present which supports stereo surfaces") - CHK_ERR(DDERR_NOCLIPLIST, "no clip list available") - CHK_ERR(DDERR_NOCOLORCONVHW, "Operation could not be carried out because there is no color conversion hardware present or available.") - CHK_ERR(DDERR_NOCOOPERATIVELEVELSET, "Create function called without DirectDraw object method SetCooperativeLevel being called.") - CHK_ERR(DDERR_NOCOLORKEY, "Surface doesn't currently have a color key") - CHK_ERR(DDERR_NOCOLORKEYHW, "Operation could not be carried out because there is no hardware support of the dest color key.") - CHK_ERR(DDERR_NODIRECTDRAWSUPPORT, "No DirectDraw support possible with current display driver") - CHK_ERR(DDERR_NOEXCLUSIVEMODE, "Operation requires the application to have exclusive mode but the application does not have exclusive mode.") - CHK_ERR(DDERR_NOFLIPHW, "Flipping visible surfaces is not supported.") - CHK_ERR(DDERR_NOGDI, "There is no GDI present.") - CHK_ERR(DDERR_NOMIRRORHW, "Operation could not be carried out because there is no hardware present or available.") - CHK_ERR(DDERR_NOTFOUND, "Requested item was not found") - CHK_ERR(DDERR_NOOVERLAYHW, "Operation could not be carried out because there is no overlay hardware present or available.") - CHK_ERR(DDERR_OVERLAPPINGRECTS, "Operation could not be carried out because the source and destination rectangles are on the same surface and overlap each other.") - CHK_ERR(DDERR_NORASTEROPHW, "Operation could not be carried out because there is no appropriate raster op hardware present or available.") - CHK_ERR(DDERR_NOROTATIONHW, "Operation could not be carried out because there is no rotation hardware present or available.") - CHK_ERR(DDERR_NOSTRETCHHW, "Operation could not be carried out because there is no hardware support for stretching") - CHK_ERR(DDERR_NOT4BITCOLOR, "DirectDrawSurface is not in 4 bit color palette and the requested operation requires 4 bit color palette.") - CHK_ERR(DDERR_NOT4BITCOLORINDEX, "DirectDrawSurface is not in 4 bit color index palette and the requested operation requires 4 bit color index palette.") - CHK_ERR(DDERR_NOT8BITCOLOR, "DirectDraw Surface is not in 8 bit color mode and the requested operation requires 8 bit color.") - CHK_ERR(DDERR_NOTEXTUREHW, "Operation could not be carried out because there is no texture mapping hardware present or available.") - CHK_ERR(DDERR_NOVSYNCHW, "Operation could not be carried out because there is no hardware support for vertical blank synchronized operations.") - CHK_ERR(DDERR_NOZBUFFERHW, "Operation could not be carried out because there is no hardware support for zbuffer blting.") - CHK_ERR(DDERR_NOZOVERLAYHW, "Overlay surfaces could not be z layered based on their BltOrder because the hardware does not support z layering of overlays.") - CHK_ERR(DDERR_OUTOFCAPS, "The hardware needed for the requested operation has already been allocated.") -// CHK_ERR(DDERR_OUTOFMEMORY, "DDERR_OUTOFMEMORY") -// CHK_ERR(DDERR_OUTOFVIDEOMEMORY, "DDERR_OUTOFVIDEOMEMORY") - CHK_ERR(DDERR_OVERLAYCANTCLIP, "hardware does not support clipped overlays") - CHK_ERR(DDERR_OVERLAYCOLORKEYONLYONEACTIVE, "Can only have ony color key active at one time for overlays") - CHK_ERR(DDERR_PALETTEBUSY, "Access to this palette is being refused because the palette is already locked by another thread.") - CHK_ERR(DDERR_COLORKEYNOTSET, "No src color key specified for this operation.") - CHK_ERR(DDERR_SURFACEALREADYATTACHED, "This surface is already attached to the surface it is being attached to.") - CHK_ERR(DDERR_SURFACEALREADYDEPENDENT, "This surface is already a dependency of the surface it is being made a dependency of.") - CHK_ERR(DDERR_SURFACEBUSY, "Access to this surface is being refused because the surface is already locked by another thread.") - CHK_ERR(DDERR_CANTLOCKSURFACE, "Access to this surface is being refused because no driver exists which can supply a pointer to the surface. This is most likely to happen when attempting to lock the primary surface when no DCI provider is present. Will also happen on attempts to lock an optimized surface.") - CHK_ERR(DDERR_SURFACEISOBSCURED, "Access to Surface refused because Surface is obscured.") - CHK_ERR(DDERR_SURFACELOST, "Access to this surface is being refused because the surface is gone. The DIRECTDRAWSURFACE object representing this surface should have Restore called on it.") - CHK_ERR(DDERR_SURFACENOTATTACHED, "The requested surface is not attached.") - CHK_ERR(DDERR_TOOBIGHEIGHT, "Height requested by DirectDraw is too large.") - CHK_ERR(DDERR_TOOBIGSIZE, "Size requested by DirectDraw is too large -- The individual height and width are OK.") - CHK_ERR(DDERR_TOOBIGWIDTH, "Width requested by DirectDraw is too large.") -// CHK_ERR(DDERR_UNSUPPORTED, "DDERR_UNSUPPORTED") - CHK_ERR(DDERR_UNSUPPORTEDFORMAT, "Pixel format requested is unsupported by DirectDraw") - CHK_ERR(DDERR_UNSUPPORTEDMASK, "Bitmask in the pixel format requested is unsupported by DirectDraw") - CHK_ERR(DDERR_INVALIDSTREAM, "The specified stream contains invalid data") - CHK_ERR(DDERR_VERTICALBLANKINPROGRESS, "vertical blank is in progress") - CHK_ERR(DDERR_WASSTILLDRAWING, "Was still drawing") - CHK_ERR(DDERR_DDSCAPSCOMPLEXREQUIRED, "The specified surface type requires specification of the COMPLEX flag") - CHK_ERR(DDERR_XALIGN, "Rectangle provided was not horizontally aligned on reqd. boundary") - CHK_ERR(DDERR_INVALIDDIRECTDRAWGUID, "The GUID passed to DirectDrawCreate is not a valid DirectDraw driver identifier.") - CHK_ERR(DDERR_DIRECTDRAWALREADYCREATED, "A DirectDraw object representing this driver has already been created for this process.") - CHK_ERR(DDERR_NODIRECTDRAWHW, "A hardware only DirectDraw object creation was attempted but the driver did not support any hardware.") - CHK_ERR(DDERR_PRIMARYSURFACEALREADYEXISTS, "this process already has created a primary surface") - CHK_ERR(DDERR_NOEMULATION, "software emulation not available.") - CHK_ERR(DDERR_REGIONTOOSMALL, "region passed to Clipper::GetClipList is too small.") - CHK_ERR(DDERR_CLIPPERISUSINGHWND, "an attempt was made to set a clip list for a clipper objec that is already monitoring an hwnd.") - CHK_ERR(DDERR_NOCLIPPERATTACHED, "No clipper object attached to surface object") - CHK_ERR(DDERR_NOHWND, "Clipper notification requires an HWND or no HWND has previously been set as the CooperativeLevel HWND.") - CHK_ERR(DDERR_HWNDSUBCLASSED, "HWND used by DirectDraw CooperativeLevel has been subclassed, this prevents DirectDraw from restoring state.") - CHK_ERR(DDERR_HWNDALREADYSET, "The CooperativeLevel HWND has already been set. It can not be reset while the process has surfaces or palettes created.") - CHK_ERR(DDERR_NOPALETTEATTACHED, "No palette object attached to this surface.") - CHK_ERR(DDERR_NOPALETTEHW, "No hardware support for 16 or 256 color palettes.") - CHK_ERR(DDERR_BLTFASTCANTCLIP, "If a clipper object is attached to the source surface passed into a BltFast call.") - CHK_ERR(DDERR_NOBLTHW, "No blter.") - CHK_ERR(DDERR_NODDROPSHW, "No DirectDraw ROP hardware.") - CHK_ERR(DDERR_OVERLAYNOTVISIBLE, "returned when GetOverlayPosition is called on a hidden overlay") - CHK_ERR(DDERR_NOOVERLAYDEST, "returned when GetOverlayPosition is called on a overlay that UpdateOverlay has never been called on to establish a destionation.") - CHK_ERR(DDERR_INVALIDPOSITION, "returned when the position of the overlay on the destionation is no longer legal for that destionation.") - CHK_ERR(DDERR_NOTAOVERLAYSURFACE, "returned when an overlay member is called for a non-overlay surface") - CHK_ERR(DDERR_EXCLUSIVEMODEALREADYSET, "An attempt was made to set the cooperative level when it was already set to exclusive.") - CHK_ERR(DDERR_NOTFLIPPABLE, "An attempt has been made to flip a surface that is not flippable.") - CHK_ERR(DDERR_CANTDUPLICATE, "Can't duplicate primary & 3D surfaces, or surfaces that are implicitly created.") - CHK_ERR(DDERR_NOTLOCKED, "Surface was not locked. An attempt to unlock a surface that was not locked at all, or by this process, has been attempted.") - CHK_ERR(DDERR_CANTCREATEDC, "Windows can not create any more DCs, or a DC was requested for a paltte-indexed surface when the surface had no palette AND the display mode was not palette-indexed (in this case DirectDraw cannot select a proper palette into the DC)") - CHK_ERR(DDERR_NODC, "No DC was ever created for this surface.") - CHK_ERR(DDERR_WRONGMODE, "This surface can not be restored because it was created in a different mode.") - CHK_ERR(DDERR_IMPLICITLYCREATED, "This surface can not be restored because it is an implicitly created surface.") - CHK_ERR(DDERR_NOTPALETTIZED, "The surface being used is not a palette-based surface") - CHK_ERR(DDERR_UNSUPPORTEDMODE, "The display is currently in an unsupported mode") - CHK_ERR(DDERR_NOMIPMAPHW, "Operation could not be carried out because there is no mip-map texture mapping hardware present or available.") - CHK_ERR(DDERR_INVALIDSURFACETYPE, "The requested action could not be performed because the surface was of the wrong type.") - CHK_ERR(DDERR_NOOPTIMIZEHW, "Device does not support optimized surfaces, therefore no video memory optimized surfaces") - CHK_ERR(DDERR_NOTLOADED, "Surface is an optimized surface, but has not yet been allocated any memory") - CHK_ERR(DDERR_NOFOCUSWINDOW, "Attempt was made to create or set a device window without first setting the focus window") - CHK_ERR(DDERR_NOTONMIPMAPSUBLEVEL, "Attempt was made to set a palette on a mipmap sublevel") - CHK_ERR(DDERR_DCALREADYCREATED, "A DC has already been returned for this surface. Only one DC can be retrieved per surface.") - CHK_ERR(DDERR_NONONLOCALVIDMEM, "An attempt was made to allocate non-local video memory from a device that does not support non-local video memory.") - CHK_ERR(DDERR_CANTPAGELOCK, "The attempt to page lock a surface failed.") - CHK_ERR(DDERR_CANTPAGEUNLOCK, "The attempt to page unlock a surface failed.") - CHK_ERR(DDERR_NOTPAGELOCKED, "An attempt was made to page unlock a surface with no outstanding page locks.") - CHK_ERR(DDERR_MOREDATA, "There is more data available than the specified buffer size could hold") - CHK_ERR(DDERR_EXPIRED, "The data has expired and is therefore no longer valid.") - CHK_ERR(DDERR_TESTFINISHED, "The mode test has finished executing.") - CHK_ERR(DDERR_NEWMODE, "The mode test has switched to a new mode.") - CHK_ERR(DDERR_D3DNOTINITIALIZED, "D3D has not yet been initialized.") - CHK_ERR(DDERR_VIDEONOTACTIVE, "The video port is not active") - CHK_ERR(DDERR_NOMONITORINFORMATION, "The monitor does not have EDID data.") - CHK_ERR(DDERR_NODRIVERSUPPORT, "The driver does not enumerate display mode refresh rates.") - CHK_ERR(DDERR_DEVICEDOESNTOWNSURFACE, "Surfaces created by one direct draw device cannot be used directly by another direct draw device.") - -// ------------------------------------------------------------- -// d3d10.h error codes -// ------------------------------------------------------------- - CHK_ERR(D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS, "There are too many unique state objects.") - CHK_ERR(D3D10_ERROR_FILE_NOT_FOUND, "File not found") - -// ------------------------------------------------------------- -// dxgi.h error codes -// ------------------------------------------------------------- - CHK_ERR(DXGI_STATUS_OCCLUDED, "The target window or output has been occluded. The application should suspend rendering operations if possible.") - CHK_ERR(DXGI_STATUS_CLIPPED, "Target window is clipped.") - CHK_ERR(DXGI_STATUS_NO_REDIRECTION, "") - CHK_ERR(DXGI_STATUS_NO_DESKTOP_ACCESS, "No access to desktop.") - CHK_ERR(DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE, "") - CHK_ERR(DXGI_STATUS_MODE_CHANGED, "Display mode has changed") - CHK_ERR(DXGI_STATUS_MODE_CHANGE_IN_PROGRESS, "Display mode is changing") - CHK_ERR(DXGI_ERROR_INVALID_CALL, "The application has made an erroneous API call that it had enough information to avoid. This error is intended to denote that the application should be altered to avoid the error. Use of the debug version of the DXGI.DLL will provide run-time debug output with further information.") - CHK_ERR(DXGI_ERROR_NOT_FOUND, "The item requested was not found. For GetPrivateData calls, this means that the specified GUID had not been previously associated with the object.") - CHK_ERR(DXGI_ERROR_MORE_DATA, "The specified size of the destination buffer is too small to hold the requested data.") - CHK_ERR(DXGI_ERROR_UNSUPPORTED, "Unsupported.") - CHK_ERR(DXGI_ERROR_DEVICE_REMOVED, "Hardware device removed.") - CHK_ERR(DXGI_ERROR_DEVICE_HUNG, "Device hung due to badly formed commands.") - CHK_ERR(DXGI_ERROR_DEVICE_RESET, "Device reset due to a badly formed commant.") - CHK_ERR(DXGI_ERROR_WAS_STILL_DRAWING, "Was still drawing.") - CHK_ERR(DXGI_ERROR_FRAME_STATISTICS_DISJOINT, "The requested functionality is not supported by the device or the driver.") - CHK_ERR(DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE, "The requested functionality is not supported by the device or the driver.") - CHK_ERR(DXGI_ERROR_DRIVER_INTERNAL_ERROR, "An internal driver error occurred.") - CHK_ERR(DXGI_ERROR_NONEXCLUSIVE, "The application attempted to perform an operation on an DXGI output that is only legal after the output has been claimed for exclusive owenership.") - CHK_ERR(DXGI_ERROR_NOT_CURRENTLY_AVAILABLE, "The requested functionality is not supported by the device or the driver.") - CHK_ERR(DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED, "Remote desktop client disconnected.") - CHK_ERR(DXGI_ERROR_REMOTE_OUTOFMEMORY, "Remote desktop client is out of memory.") - -// ------------------------------------------------------------- -// d3d11.h error codes -// ------------------------------------------------------------- - CHK_ERR(D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS, "There are too many unique state objects.") - CHK_ERR(D3D11_ERROR_FILE_NOT_FOUND, "File not found") - CHK_ERR(D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS, "Therea are too many unique view objects.") - CHK_ERR(D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD, "Deferred context requires Map-Discard usage pattern") - -// ------------------------------------------------------------- -// Direct2D error codes -// ------------------------------------------------------------- - CHK_ERR(D2DERR_UNSUPPORTED_PIXEL_FORMAT, "The pixel format is not supported.") -// CHK_ERR(D2DERR_INSUFFICIENT_BUFFER, "The supplied buffer was too small to accomodate the data.") - CHK_ERR(D2DERR_WRONG_STATE, "The object was not in the correct state to process the method.") - CHK_ERR(D2DERR_NOT_INITIALIZED, "The object has not yet been initialized.") - CHK_ERR(D2DERR_UNSUPPORTED_OPERATION, "The requested opertion is not supported.") - CHK_ERR(D2DERR_SCANNER_FAILED, "The geomery scanner failed to process the data.") - CHK_ERR(D2DERR_SCREEN_ACCESS_DENIED, "D2D could not access the screen.") - CHK_ERR(D2DERR_DISPLAY_STATE_INVALID, "A valid display state could not be determined.") - CHK_ERR(D2DERR_ZERO_VECTOR, "The supplied vector is zero.") - CHK_ERR(D2DERR_INTERNAL_ERROR, "An internal error (D2D bug) occurred. On checked builds, we would assert.") - CHK_ERR(D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED, "The display format we need to render is not supported by the hardware device.") - CHK_ERR(D2DERR_INVALID_CALL, "A call to this method is invalid.") - CHK_ERR(D2DERR_NO_HARDWARE_DEVICE, "No HW rendering device is available for this operation.") - CHK_ERR(D2DERR_RECREATE_TARGET, "here has been a presentation error that may be recoverable. The caller needs to recreate, rerender the entire frame, and reattempt present.") - CHK_ERR(D2DERR_TOO_MANY_SHADER_ELEMENTS, "Shader construction failed because it was too complex.") - CHK_ERR(D2DERR_SHADER_COMPILE_FAILED, "Shader compilation failed.") - CHK_ERR(D2DERR_MAX_TEXTURE_SIZE_EXCEEDED, "Requested DX surface size exceeded maximum texture size.") - CHK_ERR(D2DERR_UNSUPPORTED_VERSION, "The requested D2D version is not supported.") - CHK_ERR(D2DERR_BAD_NUMBER, "Invalid number.") - CHK_ERR(D2DERR_WRONG_FACTORY, "Objects used together must be created from the same factory instance.") - CHK_ERR(D2DERR_LAYER_ALREADY_IN_USE, "A layer resource can only be in use once at any point in time.") - CHK_ERR(D2DERR_POP_CALL_DID_NOT_MATCH_PUSH, "The pop call did not match the corresponding push call") -// CHK_ERR(D2DERR_WRONG_RESOURCE_DOMAIN, "The resource was realized on the wrong render target") - CHK_ERR(D2DERR_PUSH_POP_UNBALANCED, "The push and pop calls were unbalanced") - CHK_ERR(D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT, "Attempt to copy from a render target while a layer or clip rect is applied") - CHK_ERR(D2DERR_INCOMPATIBLE_BRUSH_TYPES, "The brush types are incompatible for the call.") - CHK_ERR(D2DERR_WIN32_ERROR, "An unknown win32 failure occurred.") - CHK_ERR(D2DERR_TARGET_NOT_GDI_COMPATIBLE, "The render target is not compatible with GDI") - CHK_ERR(D2DERR_TEXT_EFFECT_IS_WRONG_TYPE, "A text client drawing effect object is of the wrong type") - CHK_ERR(D2DERR_TEXT_RENDERER_NOT_RELEASED, "The application is holding a reference to the IDWriteTextRenderer interface after the corresponding DrawText or DrawTextLayout call has returned. The IDWriteTextRenderer instance will be zombied.") -// CHK_ERR(D2DERR_EXCEEDS_MAX_BITMAP_SIZE, "The requested size is larger than the guaranteed supported texture size.") - -// ------------------------------------------------------------- -// DirectWrite error codes -// ------------------------------------------------------------- - CHK_ERR(DWRITE_E_FILEFORMAT, "Indicates an error in an input file such as a font file.") - CHK_ERR(DWRITE_E_UNEXPECTED, "Indicates an error originating in DirectWrite code, which is not expected to occur but is safe to recover from.") - CHK_ERR(DWRITE_E_NOFONT, "Indicates the specified font does not exist.") - CHK_ERR(DWRITE_E_FILENOTFOUND, "A font file could not be opened because the file, directory, network location, drive, or other storage location does not exist or is unavailable.") - CHK_ERR(DWRITE_E_FILEACCESS, "A font file exists but could not be opened due to access denied, sharing violation, or similar error.") - CHK_ERR(DWRITE_E_FONTCOLLECTIONOBSOLETE, "A font collection is obsolete due to changes in the system.") - CHK_ERR(DWRITE_E_ALREADYREGISTERED, "The given interface is already registered.") - -// ------------------------------------------------------------- -// WIC error codes -// ------------------------------------------------------------- - CHK_ERR(WINCODEC_ERR_WRONGSTATE, "WIC object in incorrect state.") - CHK_ERR(WINCODEC_ERR_VALUEOUTOFRANGE, "WIC Value out of range.") - CHK_ERR(WINCODEC_ERR_UNKNOWNIMAGEFORMAT, "Encountered unexpected value or setting in WIC image format.") - CHK_ERR(WINCODEC_ERR_UNSUPPORTEDVERSION, "Unsupported WINCODEC_SD_VERSION passed to WIC factory.") - CHK_ERR(WINCODEC_ERR_NOTINITIALIZED, "WIC component not initialized.") - CHK_ERR(WINCODEC_ERR_ALREADYLOCKED, "WIC bitmap object already locked.") - CHK_ERR(WINCODEC_ERR_PROPERTYNOTFOUND, "WIC property not found.") - CHK_ERR(WINCODEC_ERR_PROPERTYNOTSUPPORTED, "WIC property not supported.") - CHK_ERR(WINCODEC_ERR_PROPERTYSIZE, "Invalid property size") - CHK_ERRA(WINCODEC_ERR_CODECPRESENT) // not currently used by WIC - CHK_ERRA(WINCODEC_ERR_CODECNOTHUMBNAIL) // not currently used by WIC - CHK_ERR(WINCODEC_ERR_PALETTEUNAVAILABLE, "Required palette data not available.") - CHK_ERR(WINCODEC_ERR_CODECTOOMANYSCANLINES, "More scanlines requested than are available in WIC bitmap.") - CHK_ERR(WINCODEC_ERR_INTERNALERROR, "Unexpected internal error in WIC.") - CHK_ERR(WINCODEC_ERR_SOURCERECTDOESNOTMATCHDIMENSIONS, "Source WIC rectangle does not match bitmap dimensions.") - CHK_ERR(WINCODEC_ERR_COMPONENTNOTFOUND, "WIC component not found.") - CHK_ERR(WINCODEC_ERR_IMAGESIZEOUTOFRANGE, "Image size beyond expected boundaries for WIC codec." ) - CHK_ERR(WINCODEC_ERR_TOOMUCHMETADATA, "Image metadata size beyond expected boundaries for WIC codec.") - CHK_ERR(WINCODEC_ERR_BADIMAGE, "WIC image is corrupted.") - CHK_ERR(WINCODEC_ERR_BADHEADER, "Invalid header found in WIC image.") - CHK_ERR(WINCODEC_ERR_FRAMEMISSING, "Expected bitmap frame data not found in WIC image." ) - CHK_ERR(WINCODEC_ERR_BADMETADATAHEADER, "Invalid metadata header found in WIC image.") - CHK_ERR(WINCODEC_ERR_BADSTREAMDATA, "Invalid stream data found in WIC image.") - CHK_ERR(WINCODEC_ERR_STREAMWRITE, "WIC operation on write stream failed.") - CHK_ERR(WINCODEC_ERR_STREAMREAD, "WIC operation on read stream failed.") - CHK_ERR(WINCODEC_ERR_STREAMNOTAVAILABLE, "Required stream is not available." ) -// CHK_ERRA(WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT) - CHK_ERR(WINCODEC_ERR_UNSUPPORTEDOPERATION, "This operation is not supported by WIC." ) - CHK_ERR(WINCODEC_ERR_INVALIDREGISTRATION, "Error occurred reading WIC codec registry keys.") - CHK_ERR(WINCODEC_ERR_COMPONENTINITIALIZEFAILURE, "Failed initializing WIC codec.") - CHK_ERR(WINCODEC_ERR_INSUFFICIENTBUFFER, "Not enough buffer space available for WIC operation.") - CHK_ERR(WINCODEC_ERR_DUPLICATEMETADATAPRESENT, "Duplicate metadata detected in WIC image.") - CHK_ERR(WINCODEC_ERR_PROPERTYUNEXPECTEDTYPE, "Unexpected property type in WIC image.") - CHK_ERR(WINCODEC_ERR_UNEXPECTEDSIZE, "Unexpected value size in WIC metadata.") - CHK_ERR(WINCODEC_ERR_INVALIDQUERYREQUEST, "Invalid metadata query.") - CHK_ERR(WINCODEC_ERR_UNEXPECTEDMETADATATYPE, "Unexpected metadata type encountered in WIC image.") - CHK_ERR(WINCODEC_ERR_REQUESTONLYVALIDATMETADATAROOT, "Operation only valid on meatadata root.") - CHK_ERR(WINCODEC_ERR_INVALIDQUERYCHARACTER, "Invalid character in WIC metadata query.") - CHK_ERR(WINCODEC_ERR_WIN32ERROR, "General Win32 error encountered during WIC operation.") - CHK_ERR(WINCODEC_ERR_INVALIDPROGRESSIVELEVEL, "Invalid level for progressive WIC image decode.") - -// ------------------------------------------------------------- -// DXUT error codes -// ------------------------------------------------------------- - CHK_ERR(DXUTERR_NODIRECT3D, "Could not initialize Direct3D.") - CHK_ERR(DXUTERR_NOCOMPATIBLEDEVICES, "No device could be found with the specified device settings.") - CHK_ERR(DXUTERR_MEDIANOTFOUND, "A media file could not be found.") - CHK_ERR(DXUTERR_NONZEROREFCOUNT, "The device interface has a non-zero reference count, meaning that some objects were not released.") - CHK_ERR(DXUTERR_CREATINGDEVICE, "An error occurred when attempting to create a device.") - CHK_ERR(DXUTERR_RESETTINGDEVICE, "An error occurred when attempting to reset a device.") - CHK_ERR(DXUTERR_CREATINGDEVICEOBJECTS, "An error occurred in the device create callback function.") - CHK_ERR(DXUTERR_RESETTINGDEVICEOBJECTS, "An error occurred in the device reset callback function.") - CHK_ERR(DXUTERR_INCORRECTVERSION, "Incorrect version of Direct3D or D3DX.") - CHK_ERR(DXUTERR_DEVICEREMOVED, "The device was removed.") - -// ------------------------------------------------------------- -// xaudio2.h error codes -// ------------------------------------------------------------- - CHK_ERR(XAUDIO2_E_INVALID_CALL, "Invalid XAudio2 API call or arguments") - CHK_ERR(XAUDIO2_E_XMA_DECODER_ERROR, "Hardware XMA decoder error") - CHK_ERR(XAUDIO2_E_XAPO_CREATION_FAILED, "Failed to create an audio effect") - CHK_ERR(XAUDIO2_E_DEVICE_INVALIDATED, "Device invalidated (unplugged, disabled, etc)") - -// ------------------------------------------------------------- -// xapo.h error codes -// ------------------------------------------------------------- - CHK_ERR(XAPO_E_FORMAT_UNSUPPORTED, "Requested audio format unsupported.") - } -} - -//----------------------------------------------------------------------------- -HRESULT WINAPI DXTraceW( _In_z_ const WCHAR* strFile, _In_ DWORD dwLine, _In_ HRESULT hr, - _In_opt_ const WCHAR* strMsg, _In_ bool bPopMsgBox ) -{ - WCHAR strBufferFile[MAX_PATH]; - WCHAR strBufferLine[128]; - WCHAR strBufferError[256]; - WCHAR strBufferMsg[1024]; - WCHAR strBuffer[BUFFER_SIZE]; - - swprintf_s( strBufferLine, 128, L"%lu", dwLine ); - if( strFile ) - { - swprintf_s( strBuffer, BUFFER_SIZE, L"%s(%s): ", strFile, strBufferLine ); - OutputDebugStringW( strBuffer ); - } - - size_t nMsgLen = (strMsg) ? wcsnlen_s( strMsg, 1024 ) : 0; - if( nMsgLen > 0 ) - { - OutputDebugStringW( strMsg ); - OutputDebugStringW( L" " ); - } - - swprintf_s( strBufferError, 256, L"%s (0x%0.8x)", DXGetErrorStringW(hr), hr ); - swprintf_s( strBuffer, BUFFER_SIZE, L"hr=%s", strBufferError ); - OutputDebugStringW( strBuffer ); - - OutputDebugStringW( L"\n" ); - - if( bPopMsgBox ) - { - wcscpy_s( strBufferFile, MAX_PATH, L"" ); - if( strFile ) - wcscpy_s( strBufferFile, MAX_PATH, strFile ); - - wcscpy_s( strBufferMsg, 1024, L"" ); - if( nMsgLen > 0 ) - swprintf_s( strBufferMsg, 1024, L"Calling: %s\n", strMsg ); - - swprintf_s( strBuffer, BUFFER_SIZE, L"File: %s\nLine: %s\nError Code: %s\n%sDo you want to debug the application?", - strBufferFile, strBufferLine, strBufferError, strBufferMsg ); - - int nResult = MessageBoxW( GetForegroundWindow(), strBuffer, L"Unexpected error encountered", MB_YESNO | MB_ICONERROR ); - if( nResult == IDYES ) - DebugBreak(); - } - - return hr; -} \ No newline at end of file diff --git a/sample/d3d11/common/dxerr.h b/sample/d3d11/common/dxerr.h deleted file mode 100644 index 48a34c6..0000000 --- a/sample/d3d11/common/dxerr.h +++ /dev/null @@ -1,78 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXErr.h -// -// DirectX Error Library -// -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved. -//-------------------------------------------------------------------------------------- - -// This version only supports UNICODE. - -#ifdef _MSC_VER -#pragma once -#endif - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -//-------------------------------------------------------------------------------------- -// DXGetErrorString -//-------------------------------------------------------------------------------------- -const WCHAR* WINAPI DXGetErrorStringW( _In_ HRESULT hr ); - -#define DXGetErrorString DXGetErrorStringW - -//-------------------------------------------------------------------------------------- -// DXGetErrorDescription has to be modified to return a copy in a buffer rather than -// the original static string. -//-------------------------------------------------------------------------------------- -void WINAPI DXGetErrorDescriptionW( _In_ HRESULT hr, _Out_cap_(count) WCHAR* desc, _In_ size_t count ); - -#define DXGetErrorDescription DXGetErrorDescriptionW - -//-------------------------------------------------------------------------------------- -// DXTrace -// -// Desc: Outputs a formatted error message to the debug stream -// -// Args: WCHAR* strFile The current file, typically passed in using the -// __FILEW__ macro. -// DWORD dwLine The current line number, typically passed in using the -// __LINE__ macro. -// HRESULT hr An HRESULT that will be traced to the debug stream. -// CHAR* strMsg A string that will be traced to the debug stream (may be NULL) -// BOOL bPopMsgBox If TRUE, then a message box will popup also containing the passed info. -// -// Return: The hr that was passed in. -//-------------------------------------------------------------------------------------- -HRESULT WINAPI DXTraceW( _In_z_ const WCHAR* strFile, _In_ DWORD dwLine, _In_ HRESULT hr, _In_opt_ const WCHAR* strMsg, _In_ bool bPopMsgBox ); - -#define DXTrace DXTraceW - -//-------------------------------------------------------------------------------------- -// -// Helper macros -// -//-------------------------------------------------------------------------------------- -#if defined(DEBUG) || defined(_DEBUG) -#define DXTRACE_MSG(str) DXTrace( __FILEW__, (DWORD)__LINE__, 0, str, false ) -#define DXTRACE_ERR(str,hr) DXTrace( __FILEW__, (DWORD)__LINE__, hr, str, false ) -#define DXTRACE_ERR_MSGBOX(str,hr) DXTrace( __FILEW__, (DWORD)__LINE__, hr, str, true ) -#else -#define DXTRACE_MSG(str) (0L) -#define DXTRACE_ERR(str,hr) (hr) -#define DXTRACE_ERR_MSGBOX(str,hr) (hr) -#endif - -#ifdef __cplusplus -} -#endif //__cplusplus diff --git a/sample/d3d11/distance_field.cpp b/sample/d3d11/distance_field.cpp deleted file mode 100644 index ad132ec..0000000 --- a/sample/d3d11/distance_field.cpp +++ /dev/null @@ -1,292 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed -// under the Mutual Non-Disclosure Agreement. -// -// Notice -// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES -// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. -// -// NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. No third party distribution is allowed unless -// expressly authorized by NVIDIA. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright © 2008- 2013 NVIDIA Corporation. All rights reserved. -// -// NVIDIA Corporation and its licensors retain all intellectual property and proprietary -// rights in and to this software and related documentation and any modifications thereto. -// Any use, reproduction, disclosure or distribution of this software and related -// documentation without an express license agreement from NVIDIA Corporation is -// strictly prohibited. -// - -#include -#include "DXUT.h" -#include "SDKMisc.h" -#include "distance_field.h" - -#include "GFSDK_WaveWorks_D3D_Util.h" - -#pragma warning(disable:4127) - -extern HRESULT LoadFile(LPCTSTR FileName, ID3DXBuffer** ppBuffer); - -const unsigned int kTopDownDataResolution = 256; - -DistanceField::DistanceField( CTerrain* const pTerrainRenderer ) - : m_pTerrainRenderer( pTerrainRenderer ) - , m_viewDirectionWS( 0, -1, 0 ) - , m_pTopDownDataSRV( NULL ) - , m_pTopDownDataRTV( NULL ) - , m_pTopDownDataTexture( NULL ) - , m_pStagingTexture( NULL ) - , m_shouldGenerateDataTexture( true ) -{ -} - -DistanceField::~DistanceField() -{ - SAFE_RELEASE( m_pTopDownDataSRV ); - SAFE_RELEASE( m_pTopDownDataRTV ); - SAFE_RELEASE( m_pTopDownDataTexture ); - SAFE_RELEASE( m_pStagingTexture ); -} - -HRESULT DistanceField::Init( ID3D11Device* const pDevice ) -{ - HRESULT hr = S_OK; - - if( NULL == m_pTopDownDataTexture ) - { - D3D11_TEXTURE2D_DESC textureDesc; - ZeroMemory(&textureDesc, sizeof(textureDesc)); - - textureDesc.ArraySize = 1; - textureDesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE; - textureDesc.CPUAccessFlags = 0; - textureDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT; - textureDesc.Height = kTopDownDataResolution; - textureDesc.Width = kTopDownDataResolution; - textureDesc.MipLevels = 1; - textureDesc.MiscFlags = 0; - textureDesc.SampleDesc.Count = 1; - textureDesc.SampleDesc.Quality = 0; - textureDesc.Usage = D3D11_USAGE_DEFAULT; - - V_RETURN( pDevice->CreateTexture2D( &textureDesc, nullptr, &m_pTopDownDataTexture ) ); - - - textureDesc.ArraySize = 1; - textureDesc.BindFlags = 0; - textureDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ; - textureDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT; - textureDesc.Height = kTopDownDataResolution; - textureDesc.Width = kTopDownDataResolution; - textureDesc.MipLevels = 1; - textureDesc.MiscFlags = 0; - textureDesc.SampleDesc.Count = 1; - textureDesc.SampleDesc.Quality = 0; - textureDesc.Usage = D3D11_USAGE_STAGING; - - V_RETURN( pDevice->CreateTexture2D( &textureDesc, nullptr, &m_pStagingTexture ) ); - - - D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; - ZeroMemory( &srvDesc, sizeof( srvDesc ) ); - srvDesc.Format = textureDesc.Format; - srvDesc.Texture2D.MipLevels = 1; - srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; - - V_RETURN( pDevice->CreateShaderResourceView( m_pTopDownDataTexture, &srvDesc, &m_pTopDownDataSRV ) ); - - D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; - ZeroMemory( &rtvDesc, sizeof( rtvDesc ) ); - rtvDesc.Format = textureDesc.Format; - rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; - - V_RETURN( pDevice->CreateRenderTargetView( m_pTopDownDataTexture, &rtvDesc, &m_pTopDownDataRTV ) ); - } - return S_OK; -} - -void DistanceField::GenerateDataTexture( ID3D11DeviceContext* pDC ) -{ - if( !m_shouldGenerateDataTexture ) return; - - renderTopDownData( pDC, D3DXVECTOR3( 250, 0, 250 ) ); - generateDistanceField( pDC ); - - m_shouldGenerateDataTexture = false; -} - -void DistanceField::renderTopDownData( ID3D11DeviceContext* pDC, const D3DXVECTOR3& eyePositionWS ) -{ - const float kHeightAboveSeaLevel = 300; - const float kMinHeightBelowSeaLevel = 20; - - D3D11_VIEWPORT vp; - UINT NumViewports = 1; - pDC->RSGetViewports(&NumViewports,&vp); - - ID3D11RenderTargetView* pRenderTarget; - ID3D11DepthStencilView* pDepthBuffer; - pDC->OMGetRenderTargets( 1, &pRenderTarget, &pDepthBuffer ); - - // Set the viewport - D3D11_VIEWPORT viewport; - ZeroMemory(&viewport, sizeof(D3D11_VIEWPORT)); - - viewport.TopLeftX = 0; - viewport.TopLeftY = 0; - viewport.Height = kTopDownDataResolution; - viewport.Width = kTopDownDataResolution; - - pDC->RSSetViewports(1, &viewport); - pDC->ClearRenderTargetView( m_pTopDownDataRTV, D3DXCOLOR( 0.0f, -kMinHeightBelowSeaLevel, 0.0f, 0.0f ) ); - pDC->OMSetRenderTargetsAndUnorderedAccessViews( 1, &m_pTopDownDataRTV, NULL, 0, 0, NULL, NULL ); - - m_topDownViewPositionWS = D3DXVECTOR3( eyePositionWS.x, kHeightAboveSeaLevel, eyePositionWS.z ); - - const float kOrthoSize = 700; - D3DXMatrixOrthoLH( &m_viewToProjectionMatrix, kOrthoSize, kOrthoSize, 0.3f, kHeightAboveSeaLevel + kMinHeightBelowSeaLevel ); - const D3DXVECTOR3 up = D3DXVECTOR3( 0, 0, 1 ); - D3DXMatrixLookAtLH( &m_worldToViewMatrix, &m_topDownViewPositionWS, &eyePositionWS, &up); - - m_pTerrainRenderer->RenderTerrainToHeightField( pDC, m_worldToViewMatrix, m_viewToProjectionMatrix, m_topDownViewPositionWS, m_viewDirectionWS ); - - pDC->RSSetViewports(NumViewports, &vp); - pDC->OMSetRenderTargetsAndUnorderedAccessViews( 1, &pRenderTarget, pDepthBuffer, 0, 0, NULL, NULL ); - SAFE_RELEASE( pRenderTarget ); - SAFE_RELEASE( pDepthBuffer ); -} - -void DistanceField::generateDistanceField( ID3D11DeviceContext* pDC ) -{ - float* pTextureReadData = (float*)malloc(kTopDownDataResolution * kTopDownDataResolution * 4*sizeof(float)); - - pDC->CopyResource( m_pStagingTexture, m_pTopDownDataTexture ); - - D3D11_MAPPED_SUBRESOURCE mappedResource; - pDC->Map( m_pStagingTexture, 0, D3D11_MAP_READ_WRITE, 0, &mappedResource ); - { - memcpy( pTextureReadData, mappedResource.pData, kTopDownDataResolution * kTopDownDataResolution * 4*sizeof(float)); - - float* pTextureWriteData = reinterpret_cast( mappedResource.pData ); - - // Calculating the distance field to be stored in R channel - // Seabed level is stored in G channel, leaving it intact - for( unsigned int x=0 ; xUnmap( m_pStagingTexture, 0 ); - - pDC->CopyResource( m_pTopDownDataTexture, m_pStagingTexture ); - free(pTextureReadData); -} - -bool DistanceField::checkPixel( float* pTextureData, const int cx, const int cy, const int dx, const int dy) const -{ - const int x = (cx+dx) < 0 ? 0 : (cx+dx) >= kTopDownDataResolution ? (kTopDownDataResolution-1) : (cx+dx); - const int y = (cy+dy) < 0 ? 0 : (cy+dy) >= kTopDownDataResolution ? (kTopDownDataResolution-1) : (cy+dy); - - const int idx = (x * kTopDownDataResolution + y) * 4 + 0; // Red channel - - return pTextureData[ idx ] > 0.0f; -} - -float DistanceField::FindNearestPixel( float* pTextureData, const int cx, const int cy, float& gradientX, float& gradientY) -{ - const int kMaxDistance = 20; - float minDistance = kMaxDistance; - bool originPositive = checkPixel( pTextureData, cx, cy, 0, 0); - bool resultPositive; - for( int dx = -kMaxDistance ; dx <= kMaxDistance ; dx++ ) - { - for( int dy = -kMaxDistance + 1 ; dy < kMaxDistance ; dy++ ) - { - resultPositive = checkPixel( pTextureData, cx, cy, dx, dy); - float pixelDistance = sqrtf((float)(dx * dx + dy * dy)); - if((originPositive != resultPositive) && (pixelDistance < minDistance)) - { - minDistance = pixelDistance; - gradientX = dx / (pixelDistance+0.001f); - gradientY = dy/ (pixelDistance+0.001f); - if(!originPositive) - { - gradientX=-gradientX; - gradientY=-gradientY; - - } - } - } - } - return originPositive ? -minDistance/kMaxDistance : minDistance/kMaxDistance; -} - -void DistanceField::GetWorldToTopDownTextureMatrix( D3DXMATRIX& worldToTopDownMatrix ) -{ - worldToTopDownMatrix = m_worldToViewMatrix * m_viewToProjectionMatrix; -} \ No newline at end of file diff --git a/sample/d3d11/distance_field.h b/sample/d3d11/distance_field.h deleted file mode 100644 index 2ca03eb..0000000 --- a/sample/d3d11/distance_field.h +++ /dev/null @@ -1,80 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed -// under the Mutual Non-Disclosure Agreement. -// -// Notice -// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES -// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. -// -// NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. No third party distribution is allowed unless -// expressly authorized by NVIDIA. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright © 2008- 2013 NVIDIA Corporation. All rights reserved. -// -// NVIDIA Corporation and its licensors retain all intellectual property and proprietary -// rights in and to this software and related documentation and any modifications thereto. -// Any use, reproduction, disclosure or distribution of this software and related -// documentation without an express license agreement from NVIDIA Corporation is -// strictly prohibited. -// - -#ifndef _SHORELINE_INTERACTION_H -#define _SHORELINE_INTERACTION_H - -#include "terrain.h" -#include - -#include - -struct DistanceField -{ - explicit DistanceField( CTerrain* const pTerrainRenderer ); - ~DistanceField(); - - HRESULT Init( ID3D11Device* const pDevice ); - - // --------------------------------- Accessors ----------------------------------- - ID3D11ShaderResourceView* GetDataTextureSRV() const { return m_pTopDownDataSRV; } - void GetWorldToTopDownTextureMatrix( D3DXMATRIX& worldToTopDownMatrix ); - - // --------------------------------- Rendering routines ----------------------------------- - void GenerateDataTexture(ID3D11DeviceContext* pDC ); - -private: - DistanceField() - : m_pTerrainRenderer( NULL ) - {} - DistanceField& operator=(const DistanceField &tmp); - - // ---------------------------------- Not owned refrences ------------------------------------ - CTerrain* const m_pTerrainRenderer; // Not owned. - - // ---------------------------------- GPU shading data ------------------------------------ - ID3D11ShaderResourceView* m_pTopDownDataSRV; - ID3D11RenderTargetView* m_pTopDownDataRTV; - ID3D11Texture2D* m_pTopDownDataTexture; - ID3D11Texture2D* m_pStagingTexture; - - // ---------------------------------- Top down camera data ------------------------------------ - D3DXVECTOR3 m_topDownViewPositionWS; - D3DXVECTOR3 m_viewDirectionWS; - D3DXMATRIX m_worldToViewMatrix; - D3DXMATRIX m_viewToProjectionMatrix; - - bool m_shouldGenerateDataTexture; - - void renderTopDownData(ID3D11DeviceContext* pDC, const D3DXVECTOR3& eyePositionWS ); - void generateDistanceField( ID3D11DeviceContext* pDC ); - bool checkPixel( float* pTextureData, const int cx, const int cy, const int dx, const int dy) const; - float FindNearestPixel( float* pTextureData, const int cx, const int cy, float&, float&); -}; - -#endif // _SHORELINE_INTERACTION_H diff --git a/sample/d3d11/ocean_surface.cpp b/sample/d3d11/ocean_surface.cpp deleted file mode 100644 index 8483d8c..0000000 --- a/sample/d3d11/ocean_surface.cpp +++ /dev/null @@ -1,324 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed -// under the Mutual Non-Disclosure Agreement. -// -// Notice -// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES -// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. -// -// NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. No third party distribution is allowed unless -// expressly authorized by NVIDIA. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright © 2008- 2013 NVIDIA Corporation. All rights reserved. -// -// NVIDIA Corporation and its licensors retain all intellectual property and proprietary -// rights in and to this software and related documentation and any modifications thereto. -// Any use, reproduction, disclosure or distribution of this software and related -// documentation without an express license agreement from NVIDIA Corporation is -// strictly prohibited. -// - -#include "DXUT.h" -#include "SDKMisc.h" -#include "ocean_surface.h" - -#include "GFSDK_WaveWorks_D3D_Util.h" - -#pragma warning(disable:4127) - -extern HRESULT LoadFile(LPCTSTR FileName, ID3DXBuffer** ppBuffer); - -OceanSurface::OceanSurface() -{ - m_pOceanFX = NULL; - m_hOceanQuadTree = NULL; - pDistanceFieldModule = NULL; - m_pQuadLayout = NULL; - m_pRayContactLayout = NULL; - m_pRenderRayContactTechnique = NULL; - m_pContactVB = NULL; - m_pContactIB = NULL; - - UINT NumQuadtreeShaderInputs = GFSDK_WaveWorks_Quadtree_GetShaderInputCountD3D11(); - UINT NumSimulationShaderInputs = GFSDK_WaveWorks_Simulation_GetShaderInputCountD3D11(); - m_pQuadTreeShaderInputMappings_Shore = new UINT [NumQuadtreeShaderInputs]; - m_pSimulationShaderInputMappings_Shore = new UINT [NumSimulationShaderInputs]; - - m_pd3dDevice = DXUTGetD3D11Device(); -} - -OceanSurface::~OceanSurface() -{ - if(m_hOceanQuadTree) - { - GFSDK_WaveWorks_Quadtree_Destroy(m_hOceanQuadTree); - m_hOceanQuadTree = NULL; - } - SAFE_DELETE_ARRAY(m_pQuadTreeShaderInputMappings_Shore); - SAFE_DELETE_ARRAY(m_pSimulationShaderInputMappings_Shore); - SAFE_RELEASE(m_pOceanFX); - SAFE_RELEASE(m_pQuadLayout); - SAFE_RELEASE(m_pRayContactLayout); - SAFE_RELEASE(m_pContactVB); - SAFE_RELEASE(m_pContactIB); -} - -HRESULT OceanSurface::initQuadTree(const GFSDK_WaveWorks_Quadtree_Params& params) -{ - if(NULL == m_hOceanQuadTree) -{ - return GFSDK_WaveWorks_Quadtree_CreateD3D11(params, m_pd3dDevice, &m_hOceanQuadTree); - } - else - { - return GFSDK_WaveWorks_Quadtree_UpdateParams(m_hOceanQuadTree, params); - } -} - -UINT GetShaderInputRegisterMapping( ID3D11ShaderReflection* pReflectionVS, - ID3D11ShaderReflection* pReflectionHS, - ID3D11ShaderReflection* pReflectionDS, - ID3D11ShaderReflection* pReflectionPS, - const GFSDK_WaveWorks_ShaderInput_Desc& inputDesc - ) -{ - ID3D11ShaderReflection* pReflection = NULL; - switch(inputDesc.Type) - { - case GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_FloatConstant: - case GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler: - case GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture: - case GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_ConstantBuffer: - pReflection = pReflectionVS; - break; - case GFSDK_WaveWorks_ShaderInput_Desc::HullShader_FloatConstant: - case GFSDK_WaveWorks_ShaderInput_Desc::HullShader_Sampler: - case GFSDK_WaveWorks_ShaderInput_Desc::HullShader_Texture: - case GFSDK_WaveWorks_ShaderInput_Desc::HullShader_ConstantBuffer: - pReflection = pReflectionHS; - break; - case GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_FloatConstant: - case GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler: - case GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture: - case GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_ConstantBuffer: - pReflection = pReflectionDS; - break; - case GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_FloatConstant: - case GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler: - case GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture: - case GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_ConstantBuffer: - pReflection = pReflectionPS; - break; - default: - pReflection = NULL; - break; - } - - assert(pReflection); - D3D11_SHADER_INPUT_BIND_DESC desc; - HRESULT hr = pReflection->GetResourceBindingDescByName(inputDesc.Name, &desc); - if(FAILED(hr)) - { - // Shader doesn't use this input, mark it as unused - return 0xFFFFFFFF; - } - - return desc.BindPoint; -} - -ID3D11ShaderReflection* GetReflection(const D3DX11_PASS_SHADER_DESC& passShader) -{ - D3DX11_EFFECT_SHADER_DESC shaderDesc; - passShader.pShaderVariable->GetShaderDesc(passShader.ShaderIndex, &shaderDesc); - ID3D11ShaderReflection* pResult = NULL; - D3DReflect(shaderDesc.pBytecode, shaderDesc.BytecodeLength, IID_ID3D11ShaderReflection, (void**)&pResult); - return pResult; -} - -HRESULT OceanSurface::init() -{ - HRESULT hr = S_OK; - - if(NULL == m_pOceanFX) - { - ID3DXBuffer* pEffectBuffer = NULL; - - TCHAR path[MAX_PATH]; - DXUTFindDXSDKMediaFileCch(path, MAX_PATH, TEXT("..\\Media\\ocean_surface_d3d11.fxo")); - V_RETURN(LoadFile(path, &pEffectBuffer)); - V_RETURN(D3DX11CreateEffectFromMemory(pEffectBuffer->GetBufferPointer(), pEffectBuffer->GetBufferSize(), 0, m_pd3dDevice, &m_pOceanFX)); - pEffectBuffer->Release(); - - // Hook up the shader mappings - m_pRenderSurfaceTechnique = m_pOceanFX->GetTechniqueByName("RenderOceanSurfTech"); - m_pRenderSurfaceShadedWithShorelinePass = m_pRenderSurfaceTechnique->GetPassByName("Pass_Solid_WithShoreline"); - - D3DX11_PASS_SHADER_DESC passShaderDesc; - - V_RETURN(m_pRenderSurfaceShadedWithShorelinePass->GetVertexShaderDesc(&passShaderDesc)); - ID3D11ShaderReflection* pShadedShoreReflectionVS = GetReflection(passShaderDesc); - - V_RETURN(m_pRenderSurfaceShadedWithShorelinePass->GetHullShaderDesc(&passShaderDesc)); - ID3D11ShaderReflection* pShadedShoreReflectionHS = GetReflection(passShaderDesc); - - V_RETURN(m_pRenderSurfaceShadedWithShorelinePass->GetDomainShaderDesc(&passShaderDesc)); - ID3D11ShaderReflection* pShadedShoreReflectionDS = GetReflection(passShaderDesc); - - V_RETURN(m_pRenderSurfaceShadedWithShorelinePass->GetPixelShaderDesc(&passShaderDesc)); - ID3D11ShaderReflection* pShadedShoreReflectionPS = GetReflection(passShaderDesc); - - UINT NumQuadtreeShaderInputs = GFSDK_WaveWorks_Quadtree_GetShaderInputCountD3D11(); - UINT NumSimulationShaderInputs = GFSDK_WaveWorks_Simulation_GetShaderInputCountD3D11(); - - for(UINT i = 0; i != NumQuadtreeShaderInputs; ++i) - { - GFSDK_WaveWorks_ShaderInput_Desc inputDesc; - GFSDK_WaveWorks_Quadtree_GetShaderInputDescD3D11(i, &inputDesc); - m_pQuadTreeShaderInputMappings_Shore[i] = GetShaderInputRegisterMapping(pShadedShoreReflectionVS, pShadedShoreReflectionHS, pShadedShoreReflectionDS, pShadedShoreReflectionPS, inputDesc); - } - - for(UINT i = 0; i != NumSimulationShaderInputs; ++i) - { - GFSDK_WaveWorks_ShaderInput_Desc inputDesc; - GFSDK_WaveWorks_Simulation_GetShaderInputDescD3D11(i, &inputDesc); - m_pSimulationShaderInputMappings_Shore[i] = GetShaderInputRegisterMapping(pShadedShoreReflectionVS, pShadedShoreReflectionHS, pShadedShoreReflectionDS, pShadedShoreReflectionPS, inputDesc); - } - - pShadedShoreReflectionVS->Release(); - pShadedShoreReflectionPS->Release(); - pShadedShoreReflectionHS->Release(); - pShadedShoreReflectionDS->Release(); - - m_pRenderSurfaceWireframeWithShorelinePass = m_pRenderSurfaceTechnique->GetPassByName("Pass_Wireframe_WithShoreline"); - } - - if(NULL == m_pQuadLayout) - { - const D3D11_INPUT_ELEMENT_DESC quad_layout[] = { - { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - }; - const UINT num_layout_elements = sizeof(quad_layout)/sizeof(quad_layout[0]); - - ID3DX11EffectTechnique* pDisplayLogoTech = m_pOceanFX->GetTechniqueByName("DisplayLogoTech"); - - D3DX11_PASS_DESC PassDesc; - V_RETURN(pDisplayLogoTech->GetPassByIndex(0)->GetDesc(&PassDesc)); - - V_RETURN(m_pd3dDevice->CreateInputLayout( quad_layout, num_layout_elements, - PassDesc.pIAInputSignature, PassDesc.IAInputSignatureSize, - &m_pQuadLayout - )); - } - - // Creating ray & contact related D3D objects - m_pRenderRayContactTechnique = m_pOceanFX->GetTechniqueByName("RenderRayContactTech"); - if(NULL == m_pRayContactLayout) - { - const D3D11_INPUT_ELEMENT_DESC ray_contact_layout[] = { - { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 } - }; - const UINT num_layout_elements = sizeof(ray_contact_layout)/sizeof(ray_contact_layout[0]); - - D3DX11_PASS_DESC PassDesc; - V_RETURN(m_pRenderRayContactTechnique->GetPassByIndex(0)->GetDesc(&PassDesc)); - - V_RETURN(m_pd3dDevice->CreateInputLayout( ray_contact_layout, num_layout_elements, - PassDesc.pIAInputSignature, PassDesc.IAInputSignatureSize, - &m_pRayContactLayout - )); - } - - { - - float vertex_data[5*4] = - {0, 0, 0, 1, - 1, 1, 0, 0, - 0, 1, 1, 0, - -1, 1, 0, 0, - 0, 1,-1, 0}; - D3D11_BUFFER_DESC vBufferDesc; - vBufferDesc.ByteWidth = 5 * sizeof(D3DXVECTOR4); - vBufferDesc.Usage = D3D11_USAGE_DEFAULT; - vBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; - vBufferDesc.CPUAccessFlags = 0; - vBufferDesc.MiscFlags = 0; - D3D11_SUBRESOURCE_DATA vBufferData; - vBufferData.pSysMem = vertex_data; - vBufferData.SysMemPitch = 0; - vBufferData.SysMemSlicePitch = 0; - V_RETURN(m_pd3dDevice->CreateBuffer(&vBufferDesc, &vBufferData, &m_pContactVB)); - - static const WORD indices[] = {0,1,2, 0,2,3, 0,3,4, 0,4,1}; - D3D11_BUFFER_DESC iBufferDesc; - iBufferDesc.ByteWidth = sizeof(indices); - iBufferDesc.Usage = D3D11_USAGE_IMMUTABLE; - iBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; - iBufferDesc.CPUAccessFlags = 0; - iBufferDesc.MiscFlags = 0; - D3D11_SUBRESOURCE_DATA iBufferData; - iBufferData.pSysMem = indices; - iBufferData.SysMemPitch = 0; - iBufferData.SysMemSlicePitch = 0; - V_RETURN(m_pd3dDevice->CreateBuffer(&iBufferDesc, &iBufferData, &m_pContactIB)); - } - - return S_OK; -} - - -void OceanSurface::renderShaded( ID3D11DeviceContext* pDC, - const D3DXMATRIX& matView, - const D3DXMATRIX& matProj, - GFSDK_WaveWorks_SimulationHandle hSim, - GFSDK_WaveWorks_SavestateHandle hSavestate, - const D3DXVECTOR2& windDir, - const float steepness, - const float amplitude, - const float wavelength, - const float speed, - const float parallelness, - const float totalTime - ) -{ - D3D11_VIEWPORT vp; - UINT NumViewports = 1; - pDC->RSGetViewports( &NumViewports, &vp ); - - if( pDistanceFieldModule != NULL) - { - // Apply data tex SRV - D3DXMATRIX topDownMatrix; - pDistanceFieldModule->GetWorldToTopDownTextureMatrix( topDownMatrix ); - m_pOceanFX->GetVariableByName("g_WorldToTopDownTextureMatrix")->AsMatrix()->SetMatrix( &topDownMatrix._11 ); - - m_pOceanFX->GetVariableByName("g_GerstnerSteepness")->AsScalar()->SetFloat( steepness ); - m_pOceanFX->GetVariableByName("g_BaseGerstnerAmplitude")->AsScalar()->SetFloat( amplitude ); - m_pOceanFX->GetVariableByName("g_BaseGerstnerWavelength")->AsScalar()->SetFloat( wavelength ); - m_pOceanFX->GetVariableByName("g_BaseGerstnerSpeed")->AsScalar()->SetFloat( speed ); - m_pOceanFX->GetVariableByName("g_BaseGerstnerParallelness")->AsScalar()->SetFloat( parallelness ); - m_pOceanFX->GetVariableByName("g_WindDirection")->AsVector()->SetFloatVector( &windDir.x ); - m_pOceanFX->GetVariableByName("g_DataTexture")->AsShaderResource()->SetResource( pDistanceFieldModule->GetDataTextureSRV() ); - m_pOceanFX->GetVariableByName("g_Time")->AsScalar()->SetFloat( totalTime ); - - m_pRenderSurfaceShadedWithShorelinePass->Apply( 0, pDC ); - GFSDK_WaveWorks_Simulation_SetRenderStateD3D11(hSim, pDC, NvFromDX(matView), m_pSimulationShaderInputMappings_Shore, hSavestate); - GFSDK_WaveWorks_Quadtree_DrawD3D11(m_hOceanQuadTree, pDC, NvFromDX(matView), NvFromDX(matProj), m_pQuadTreeShaderInputMappings_Shore, hSavestate); - - m_pOceanFX->GetVariableByName("g_DataTexture")->AsShaderResource()->SetResource( NULL ); - } - GFSDK_WaveWorks_Savestate_RestoreD3D11(hSavestate, pDC); -} - -void OceanSurface::getQuadTreeStats(GFSDK_WaveWorks_Quadtree_Stats& stats) -{ - GFSDK_WaveWorks_Quadtree_GetStats(m_hOceanQuadTree, stats); -} diff --git a/sample/d3d11/ocean_surface.fx b/sample/d3d11/ocean_surface.fx deleted file mode 100644 index c34c65e..0000000 --- a/sample/d3d11/ocean_surface.fx +++ /dev/null @@ -1,791 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed -// under the Mutual Non-Disclosure Agreement. -// -// Notice -// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES -// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. -// -// NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. No third party distribution is allowed unless -// expressly authorized by NVIDIA. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright © 2008- 2013 NVIDIA Corporation. All rights reserved. -// -// NVIDIA Corporation and its licensors retain all intellectual property and proprietary -// rights in and to this software and related documentation and any modifications thereto. -// Any use, reproduction, disclosure or distribution of this software and related -// documentation without an express license agreement from NVIDIA Corporation is -// strictly prohibited. -// - -#define GFSDK_WAVEWORKS_SM5 -#define GFSDK_WAVEWORKS_USE_TESSELLATION - -#define GFSDK_WAVEWORKS_DECLARE_GEOM_VS_CONSTANT(Type,Label,Regoff) Type Label; -#define GFSDK_WAVEWORKS_BEGIN_GEOM_VS_CBUFFER(Label) cbuffer Label { -#define GFSDK_WAVEWORKS_END_GEOM_VS_CBUFFER }; - -#define GFSDK_WAVEWORKS_DECLARE_GEOM_HS_CONSTANT(Type,Label,Regoff) Type Label; -#define GFSDK_WAVEWORKS_BEGIN_GEOM_HS_CBUFFER(Label) cbuffer Label { -#define GFSDK_WAVEWORKS_END_GEOM_HS_CBUFFER }; - -#include "GFSDK_WaveWorks_Quadtree.fxh" - -#define GFSDK_WAVEWORKS_DECLARE_ATTR_DS_CONSTANT(Type,Label,Regoff) Type Label; -#define GFSDK_WAVEWORKS_BEGIN_ATTR_DS_CBUFFER(Label) cbuffer Label { -#define GFSDK_WAVEWORKS_END_ATTR_DS_CBUFFER }; -#define GFSDK_WAVEWORKS_DECLARE_ATTR_DS_SAMPLER(Label,TextureLabel,Regoff) sampler Label; texture2D TextureLabel; - -#define GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(Type,Label,Regoff) Type Label; -#define GFSDK_WAVEWORKS_BEGIN_ATTR_PS_CBUFFER(Label) cbuffer Label { -#define GFSDK_WAVEWORKS_END_ATTR_PS_CBUFFER }; -#define GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(Label,TextureLabel,Regoff) sampler Label; texture2D TextureLabel; - -#include "GFSDK_WaveWorks_Attributes.fxh" -#include "common.fx" - -//------------------------------------------------------------------------------------ -// Global variables -//------------------------------------------------------------------------------------ - -// Constant - -float3 g_LightPosition; -float3 g_CameraPosition; -float4x4 g_ModelViewMatrix; -float4x4 g_ModelViewProjectionMatrix; -float4x4 g_LightModelViewProjectionMatrix; -float4x4 g_WorldToTopDownTextureMatrix; - -float3 g_WaterTransmittance = {0.065,0.028,0.035}; // light absorption per meter for coastal water, taken from here: http://www.seafriends.org.nz/phgraph/water.htm http://www.seafriends.org.nz/phgraph/phdwg34.gif -float3 g_WaterScatterColor = {0.0,0.7,0.3}; -float3 g_WaterSpecularColor = {1.1,0.8,0.5}; -float g_WaterScatterIntensity = 0.1; -float g_WaterSpecularIntensity = 10.0f; - -float3 g_FoamColor = {0.90f, 0.95f, 1.0f}; -float3 g_FoamUnderwaterColor = {0.0,0.7,0.6}; - -float g_WaterSpecularPower = 200.0; -float3 g_AtmosphereBrightColor = {1.1,0.9,0.6}; -float3 g_AtmosphereDarkColor = {0.4,0.4,0.5}; -float g_FogDensity = 1.0f/1500.0f; - -float4 g_WireframeColor = {1.0,1.0,1.0,1.0}; - -float2 g_WindDirection; - -float2 g_ScreenSizeInv; -float g_ZNear; -float g_ZFar; -float g_Time; - -float g_GerstnerSteepness; -float g_BaseGerstnerAmplitude; -float g_BaseGerstnerWavelength; -float g_BaseGerstnerSpeed; -float g_BaseGerstnerParallelness; -float g_enableShoreEffects; - -float g_Wireframe; -float2 g_WinSize = {1920.0,1080.0}; - -//----------------------------------------------------------------------------------- -// Texture & Samplers -//----------------------------------------------------------------------------------- -texture2D g_LogoTexture; -Texture2D g_ReflectionTexture; -Texture2D g_RefractionTexture; -Texture2D g_RefractionDepthTextureResolved; -Texture2D g_WaterNormalMapTexture; -Texture2D g_ShadowmapTexture; -Texture2D g_FoamIntensityTexture; -Texture2D g_FoamDiffuseTexture; -Texture2D g_DataTexture; - -// Custom trilinear sampler clamping to custom border color -sampler SamplerTrilinearBorder = -sampler_state -{ - Filter = MIN_MAG_MIP_LINEAR; - AddressU = Border; - AddressV = Border; - BorderColor = float4(20.0,-50.0,0.0,0.0); -}; - -struct VS_OUTPUT -{ - float4 worldspace_position : VSO ; -}; - -struct DS_OUTPUT -{ - float4 positionClip : SV_Position; - GFSDK_WAVEWORKS_INTERPOLATED_VERTEX_OUTPUT NV_ocean_interp; - float3 displacementWS: TEXCOORD5; - float3 positionWS: TEXCOORD6; - float3 world_pos_undisplaced : TEXCOORD7; - float3 gerstner_displacement : TEXCOORD8; - float2 gerstner_sdfUV : TEXCOORD9; - float gerstner_multiplier : TEXCOORD10; -}; - -struct PS_INPUT -{ - float4 positionClip : SV_Position; - GFSDK_WAVEWORKS_INTERPOLATED_VERTEX_OUTPUT NV_ocean_interp; - float3 displacementWS: TEXCOORD5; - float3 positionWS: TEXCOORD6; - float3 world_pos_undisplaced : TEXCOORD7; - float3 gerstner_displacement : TEXCOORD8; - float2 gerstner_sdfUV : TEXCOORD9; - float gerstner_multiplier : TEXCOORD10; - noperspective float3 v_dist : TEXCOORD11; -}; - -struct HS_ConstantOutput -{ - float fTessFactor[3] : SV_TessFactor; - float fInsideTessFactor : SV_InsideTessFactor; -}; - - - -static const float kTopDownDataPixelsPerMeter = 256.0f/700.0; // taken from SDF generation source code, the SDF texture size is 256x256, the viewport size is 700x700 -static const float kMaxDepthBelowSea = 50.0f; -static const float kMaxDistance = 20.0f; // taken from SDF generation code -static const float kNumWaves = 1.0; // Total number of Gerster waves of different amplitude, speed etc to calculate, - // i+1-th wave has 20% smaller amplitude, - // 20% smaller phase and group speed and 20% less parallelity - // Note that all the waves will share the same gerstnerMultiplierOut (lerping between ocean waves and Gerstner waves) for simplicity - -void GetGerstnerVertexAttributes(float3 posWS, out float2 sdfUVOut, out float3 offsetOut, out float gerstnerMultiplierOut) -{ - // getting UV for fetching SDF texture - float4 topDownPosition = mul( float4( posWS.xyz, 1), g_WorldToTopDownTextureMatrix ); - float2 uv = mad( topDownPosition.xy/topDownPosition.w, 0.5f, 0.5f ); - uv.y = 1-uv.y; - - // initializing the outputs so we can exit early - sdfUVOut = uv; - offsetOut = float3 (0.0,0.0,0.0); - gerstnerMultiplierOut = 0; - - // getting SDF - const float4 tdData = g_DataTexture.SampleLevel(SamplerTrilinearBorder, uv, 0 ); - - // early out without adding gerstner waves if far from shore - if((tdData.x >= kMaxDistance - 0.1)) - { - return; - } - - // initializing variables common to all Gerstner waves - float phaseShift = g_Time; - float sdfPhase = tdData.x*kMaxDistance/kTopDownDataPixelsPerMeter; - float distanceMultiplier = saturate(1.0-tdData.x); // Shore waves linearly fade in on the edges of SDF - float depthMultiplier = saturate((g_BaseGerstnerWavelength*0.5 + tdData.y)*0.5); // Shore waves fade in when depth is less than half the wave length, we use 0.25 as this parameter also allows shore waves to heighten as the depth decreases - gerstnerMultiplierOut = distanceMultiplier*depthMultiplier; - - // initializing variables to be changed along summing up the waves - float gerstnerWavelength = g_BaseGerstnerWavelength; - float gerstnerOmega = 2.0*3.141592 / g_BaseGerstnerWavelength; // angular speed of gerstner wave - float gerstnerParallelness = g_BaseGerstnerParallelness; // "parallelness" of shore waves. 0 means the waves are parallel to shore, 1 means the waves are parallel to wind gradient - float gerstnerSpeed = g_BaseGerstnerSpeed; // phase speed of gerstner waves - float gerstnerAmplitude = g_BaseGerstnerAmplitude; - float2 windDirection = g_WindDirection; - - // summing up the waves - for(float i = 0.0; i < kNumWaves; i+=1.0) - { - float windPhase = dot(windDirection, posWS.xz); - float gerstnerPhase = 2.0*3.141592*(lerp( sdfPhase, windPhase, gerstnerParallelness)/gerstnerWavelength); - float2 propagationDirection = normalize( lerp(-tdData.zw + windDirection * 0.000001f, g_WindDirection, gerstnerParallelness*gerstnerParallelness)); - float gerstnerGroupSpeedPhase = 2.0*3.141592*(lerp( sdfPhase, windPhase, gerstnerParallelness*3.0)/gerstnerWavelength); // letting the group speed phase to be non-parallel to propagation phase, so altering parallelness modificator fot this - - float groupSpeedMultiplier = 0.5 + 0.5*cos((gerstnerGroupSpeedPhase + gerstnerOmega*gerstnerSpeed*phaseShift/2.0)/2.7); // Group speed for water waves is half of the phase speed, we allow 2.7 wavelengths to be in wave group, not so much as breaking shore waves lose energy quickly - float worldSpacePosMultiplier = 0.75 + 0.25*sin(phaseShift*0.3 + 0.5*posWS.x/gerstnerWavelength)*sin(phaseShift*0.4 + 0.5*posWS.y/gerstnerWavelength); // slowly crawling worldspace aligned checkerboard pattern that damps gerstner waves further - float depthMultiplier = saturate((gerstnerWavelength*0.5 + tdData.y)*0.5); // Shore waves fade in when depth is less than half the wave length - float gerstnerMultiplier = distanceMultiplier*depthMultiplier*groupSpeedMultiplier*worldSpacePosMultiplier; // final scale factor applied to base Gerstner amplitude and used to mix between ocean waves and shore waves - - float steepness = g_GerstnerSteepness; - float baseAmplitude = gerstnerMultiplier * gerstnerAmplitude; //amplitude gradually increases as wave runs over shallower seabed - float breakerMultiplier = saturate((baseAmplitude*2.0*1.28 + tdData.y)/gerstnerAmplitude); // Wave height is 2*amplitude, a wave will start to break when it approximately reaches a water depth of 1.28 times the wave height, empirically: http://passyworldofmathematics.com/mathematics-of-ocean-waves-and-surfing/ - - // calculating Gerstner offset - float s,c; - sincos(gerstnerPhase + gerstnerOmega*gerstnerSpeed*phaseShift, s, c); - float waveVerticalOffset = s * baseAmplitude; - offsetOut.y += waveVerticalOffset; - offsetOut.xz += c * propagationDirection * steepness * baseAmplitude; // trochoidal Gerstner wave - offsetOut.xz -= propagationDirection * s * baseAmplitude * breakerMultiplier * 2.0; // adding wave forward skew due to its bottom slowing down, so the forward wave front gradually becomes vertical - float breakerPhase = gerstnerPhase + gerstnerOmega*gerstnerSpeed*phaseShift + 3.141592*0.05; - float fp = frac(breakerPhase/(3.141592*2.0)); - offsetOut.xz -= 0.5*baseAmplitude*propagationDirection*breakerMultiplier*(saturate(fp*10.0) - saturate(-1.0 + fp*10.0)); // moving breaking area of the wave further forward - - // updating the parameters for next wave - gerstnerWavelength *= 0.66; - gerstnerOmega /= 0.66; - gerstnerSpeed *= 0.66; - gerstnerAmplitude *= 0.66; - gerstnerParallelness *= 0.66; - windDirection.xy *= float2(-1.0,1.0)*windDirection.yx; // rotating wind direction - - offsetOut.y += baseAmplitude*1.2; // Adding vertical displacement as the wave increases while rolling on the shallow area - } - -} - -void GetGerstnerSurfaceAttributes( float2 sdfUV, float2 posWS, out float3 normalOut, out float breakerOut, out float foamTrailOut) -{ - // initializing the outputs - normalOut = float3 (0.0,1.0,0.0); - foamTrailOut = 0.0; - breakerOut = 0.0; - - // getting SDF - const float4 tdData = g_DataTexture.SampleLevel(SamplerTrilinearBorder, sdfUV, 0 ); - - // initializing variables common to all Gerstner waves - float phaseShift = g_Time; - float sdfPhase = tdData.x*kMaxDistance/kTopDownDataPixelsPerMeter; - float distanceMultiplier = saturate(1.0-tdData.x); // Shore waves linearly fade in on the edges of SDF - - // initializing variables to be changed along summing up the waves - float gerstnerWavelength = g_BaseGerstnerWavelength; - float gerstnerOmega = 2.0*3.141592 / g_BaseGerstnerWavelength; // angular speed of gerstner wave - float gerstnerParallelness = g_BaseGerstnerParallelness; // "parallelness" of shore waves. 0 means the waves are parallel to shore, 1 means the waves are parallel to wind gradient - float gerstnerSpeed = g_BaseGerstnerSpeed; // phase speed of gerstner waves - float gerstnerAmplitude = g_BaseGerstnerAmplitude; - float2 windDirection = g_WindDirection; - - // summing up the waves - for(float i = 0.0; i < kNumWaves; i+=1.0) - { - float windPhase = dot(windDirection, posWS.xy); - float gerstnerPhase = 2.0*3.141592*(lerp( sdfPhase, windPhase, gerstnerParallelness)/gerstnerWavelength); - float2 propagationDirection = normalize( lerp(-tdData.zw + windDirection * 0.000001f, g_WindDirection, gerstnerParallelness*gerstnerParallelness)); - float gerstnerGroupSpeedPhase = 2.0*3.141592*(lerp( sdfPhase, windPhase, gerstnerParallelness*3.0)/gerstnerWavelength); // letting the group speed phase to be non-parallel to propagation phase, so altering parallelness modificator fot this - - float groupSpeedMultiplier = 0.5 + 0.5*cos((gerstnerGroupSpeedPhase + gerstnerOmega*gerstnerSpeed*phaseShift/2.0)/2.7); // Group speed for water waves is half of the phase speed, we allow 2.7 wavelengths to be in wave group, not so much as breaking shore waves lose energy quickly - float worldSpacePosMultiplier = 0.75 + 0.25*sin(phaseShift*0.3 + 0.5*posWS.x/gerstnerWavelength)*sin(phaseShift*0.4 + 0.5*posWS.y/gerstnerWavelength); // slowly crawling worldspace aligned checkerboard pattern that damps gerstner waves further - float depthMultiplier = saturate((gerstnerWavelength*0.5 + tdData.y)*0.5); // Shore waves fade in when depth is less than half the wave length - float gerstnerMultiplier = distanceMultiplier*depthMultiplier*groupSpeedMultiplier*worldSpacePosMultiplier; // final scale factor applied to base Gerstner amplitude and used to mix between ocean waves and shore waves - - float steepness = g_GerstnerSteepness; - float baseAmplitude = gerstnerMultiplier * gerstnerAmplitude; //amplitude gradually increases as wave runs over shallower seabed - - // calculating normal - float s,c; - sincos(gerstnerPhase + gerstnerOmega*gerstnerSpeed*phaseShift, s, c); - normalOut.y -= gerstnerOmega*steepness*baseAmplitude*s; - normalOut.xz -= gerstnerOmega*baseAmplitude*c*propagationDirection; // orienting normal according to direction of wave propagation. No need to normalize, it is unit length. - - // calculating foam parameters - float breakerMultiplier = saturate((baseAmplitude*2.0*1.28 + tdData.y)/gerstnerAmplitude); // Wave height is 2*amplitude, a wave will start to break when it approximately reaches a water depth of 1.28 times the wave height, empirically: http://passyworldofmathematics.com/mathematics-of-ocean-waves-and-surfing/ - - float foamTrailPhase = gerstnerPhase + gerstnerOmega*gerstnerSpeed*phaseShift + 3.141592*0.05; // delaying foam trail a bit so it's following the breaker - float fp = frac(foamTrailPhase/(3.141592*2.0)); - foamTrailOut += gerstnerMultiplier*breakerMultiplier*(saturate(fp*10.0) - saturate(fp*1.1)); // only breaking waves leave foamy trails - breakerOut += gerstnerMultiplier*breakerMultiplier*(saturate(fp*10.0) - saturate(-1.0 + fp*10.0)); // making narrow sawtooth pattern - - // updating the parameters for next wave - gerstnerWavelength *= 0.66; - gerstnerOmega /= 0.66; - gerstnerSpeed *= 0.66; - gerstnerAmplitude *= 0.66; - gerstnerParallelness *= 0.66; - windDirection.xy *= float2(-1.0,1.0)*windDirection.yx; // rotating wind direction - } -} - -//----------------------------------------------------------------------------- -// Name: OceanWaveVS -// Type: Vertex shader -// Desc: -//----------------------------------------------------------------------------- -VS_OUTPUT OceanWaveVS(GFSDK_WAVEWORKS_VERTEX_INPUT In) -{ - VS_OUTPUT Output; - Output.worldspace_position = float4(GFSDK_WaveWorks_GetUndisplacedVertexWorldPosition(In),0.0); - return Output; -} - - -//----------------------------------------------------------------------------- -// Name: HS_Constant -// Type: Hull shader -// Desc: -//----------------------------------------------------------------------------- -HS_ConstantOutput HS_Constant( InputPatch I ) -{ - HS_ConstantOutput O; - O.fTessFactor[0] = GFSDK_WaveWorks_GetEdgeTessellationFactor(I[1].worldspace_position,I[2].worldspace_position); - O.fTessFactor[1] = GFSDK_WaveWorks_GetEdgeTessellationFactor(I[2].worldspace_position,I[0].worldspace_position); - O.fTessFactor[2] = GFSDK_WaveWorks_GetEdgeTessellationFactor(I[0].worldspace_position,I[1].worldspace_position); - O.fInsideTessFactor = (O.fTessFactor[0] + O.fTessFactor[1] + O.fTessFactor[2])/3.0f; - return O; -} - -[domain("tri")] -[partitioning("fractional_odd")] -[outputtopology("triangle_cw")] -[patchconstantfunc("HS_Constant")] -[outputcontrolpoints(3)] -VS_OUTPUT HS_FlatTriangles( InputPatch I, uint uCPID : SV_OutputControlPointID ) -{ - VS_OUTPUT O = (VS_OUTPUT)I[uCPID]; - return O; -} - -//-------------------------------------------------------------------------------------- -// This domain shader applies contol point weighting to the barycentric coords produced by the FF tessellator -//-------------------------------------------------------------------------------------- -[domain("tri")] -DS_OUTPUT DS_FlatTriangles_Shore( HS_ConstantOutput HSConstantData, const OutputPatch I, float3 f3BarycentricCoords : SV_DomainLocation ) -{ - DS_OUTPUT Output = (DS_OUTPUT)0; - - GFSDK_WAVEWORKS_VERTEX_OUTPUT NV_ocean = GFSDK_WaveWorks_GetDisplacedVertexAfterTessellation(I[0].worldspace_position, I[1].worldspace_position, I[2].worldspace_position, f3BarycentricCoords); - - float3 gerstnerDisplacement = float3(0,0,0); - float2 sdfUV = float2(0,0); - float gerstnerMultiplier = 0; - - if(g_enableShoreEffects > 0) - { - GetGerstnerVertexAttributes(NV_ocean.pos_world_undisplaced.xzy, sdfUV, gerstnerDisplacement, gerstnerMultiplier); - } - - NV_ocean.world_displacement *= 1.0 - 0.7*gerstnerMultiplier; - NV_ocean.world_displacement += gerstnerDisplacement.xzy*gerstnerMultiplier; - - NV_ocean.pos_world = NV_ocean.pos_world_undisplaced + NV_ocean.world_displacement; - Output.positionWS = NV_ocean.pos_world; - Output.displacementWS = NV_ocean.world_displacement; - Output.positionClip = mul(float4(NV_ocean.pos_world,1.0), g_ModelViewProjectionMatrix); - Output.world_pos_undisplaced = NV_ocean.pos_world_undisplaced; - Output.gerstner_displacement = gerstnerDisplacement.xzy; - Output.gerstner_sdfUV = sdfUV; - Output.gerstner_multiplier = gerstnerMultiplier; - Output.NV_ocean_interp = NV_ocean.interp; - - return Output; -} - -//-------------------------------------------------------------------------------------- -// This geometry shader enables solid wireframe mode -//-------------------------------------------------------------------------------------- -[maxvertexcount(3)] -void GSSolidWire( triangle DS_OUTPUT input[3], inout TriangleStream outStream ) -{ - PS_INPUT output; - - float2 p0 = g_WinSize * input[0].positionClip.xy/input[0].positionClip.w; - float2 p1 = g_WinSize * input[1].positionClip.xy/input[1].positionClip.w; - float2 p2 = g_WinSize * input[2].positionClip.xy/input[2].positionClip.w; - float2 v0 = p2 - p1; - float2 v1 = p2 - p0; - float2 v2 = p1 - p0; - float area = abs(v1.x*v2.y - v1.y * v2.x); - - - - // Generate vertices - output.positionClip = input[0].positionClip; - output.NV_ocean_interp = input[0].NV_ocean_interp; - output.displacementWS = input[0].displacementWS; - output.positionWS = input[0].positionWS; - output.world_pos_undisplaced = input[0].world_pos_undisplaced; - output.gerstner_displacement = input[0].gerstner_displacement; - output.gerstner_sdfUV = input[0].gerstner_sdfUV; - output.gerstner_multiplier = input[0].gerstner_multiplier; - output.v_dist = float3(area/length(v0),0,0); - outStream.Append( output ); - - output.positionClip = input[1].positionClip; - output.NV_ocean_interp = input[1].NV_ocean_interp; - output.displacementWS = input[1].displacementWS; - output.positionWS = input[1].positionWS; - output.world_pos_undisplaced = input[1].world_pos_undisplaced; - output.gerstner_displacement = input[1].gerstner_displacement; - output.gerstner_sdfUV = input[1].gerstner_sdfUV; - output.gerstner_multiplier = input[1].gerstner_multiplier; - output.v_dist = float3(0,area/length(v1),0); - outStream.Append( output ); - - output.positionClip = input[2].positionClip; - output.NV_ocean_interp = input[2].NV_ocean_interp; - output.displacementWS = input[2].displacementWS; - output.positionWS = input[2].positionWS; - output.world_pos_undisplaced = input[2].world_pos_undisplaced; - output.gerstner_displacement = input[2].gerstner_displacement; - output.gerstner_sdfUV = input[2].gerstner_sdfUV; - output.gerstner_multiplier = input[2].gerstner_multiplier; - output.v_dist = float3(0,0,area/length(v2)); - outStream.Append( output ); - - outStream.RestartStrip(); -} - -float GetRefractionDepth(float2 position) -{ - return g_RefractionDepthTextureResolved.SampleLevel(SamplerLinearClamp,position,0).r; -} - -// primitive simulation of non-uniform atmospheric fog -float3 CalculateFogColor(float3 pixel_to_light_vector, float3 pixel_to_eye_vector) -{ - return lerp(g_AtmosphereDarkColor,g_AtmosphereBrightColor,0.5*dot(pixel_to_light_vector,-pixel_to_eye_vector)+0.5); -} - -//----------------------------------------------------------------------------- -// Name: OceanWaveShorePS -// Type: Pixel shader -// Desc: -//----------------------------------------------------------------------------- -float4 OceanWaveShorePS(PS_INPUT In) : SV_Target -{ - float3 color; - float3 normal; - float fresnel_factor; - float specular_factor; - float scatter_factor; - float3 refraction_color; - float3 reflection_color; - float4 disturbance_eyespace; - - - float water_depth; - - float3 water_vertex_positionWS = In.positionWS.xzy; - - float3 pixel_to_light_vector = normalize(g_LightPosition-water_vertex_positionWS); - float3 pixel_to_eye_vector = normalize(g_CameraPosition-water_vertex_positionWS); - - GFSDK_WAVEWORKS_SURFACE_ATTRIBUTES surface_attributes = GFSDK_WaveWorks_GetSurfaceAttributes(In.NV_ocean_interp); - - float3 gerstner_normal = float3(0.0,1.0,0.0); - float gerstner_breaker = 0; - float gerstner_foamtrail = 0; - - if(g_enableShoreEffects > 0) - { - if(In.gerstner_multiplier > 0) - { - GetGerstnerSurfaceAttributes( In.gerstner_sdfUV, In.world_pos_undisplaced.xy, gerstner_normal, gerstner_breaker, gerstner_foamtrail); - } - surface_attributes.normal = lerp(float3(0,1,0),surface_attributes.normal.xzy, 1.0-0.9*In.gerstner_multiplier*In.gerstner_multiplier); // Leaving just 10% of original open ocean normals in areas affected by shore waves - surface_attributes.foam_turbulent_energy += gerstner_foamtrail*3.0; - surface_attributes.foam_wave_hats += gerstner_breaker*15.0; // 15.0*breaker so the breaker foam has rough edges - - // using PD normal combination - normal = normalize(float3(surface_attributes.normal.xz*gerstner_normal.y + gerstner_normal.xz*surface_attributes.normal.y, surface_attributes.normal.y*gerstner_normal.y)); - normal = normal.xzy; - } - else - { - normal = surface_attributes.normal.xzy; - } - - float3 reflected_eye_to_pixel_vector=-pixel_to_eye_vector+2*dot(pixel_to_eye_vector,normal)*normal; - - // calculating pixel position in light space - float4 positionLS = mul(float4(water_vertex_positionWS,1),g_LightModelViewProjectionMatrix); - positionLS.xyz/=positionLS.w; - positionLS.x=(positionLS.x+1)*0.5; - positionLS.y=(1-positionLS.y)*0.5; - positionLS.z = min(0.99,positionLS.z); - - // calculating shadow multiplier to be applied to diffuse/scatter/specular light components - float shadow_factor = g_ShadowmapTexture.SampleCmp(SamplerDepthAnisotropic,positionLS.xy,positionLS.z* 0.995f).r; - - // simulating scattering/double refraction: light hits the side of wave, travels some distance in water, and leaves wave on the other side - // it's difficult to do it physically correct without photon mapping/ray tracing, so using simple but plausible emulation below - - // only the crests of water waves generate double refracted light - scatter_factor = g_WaterScatterIntensity* - // the waves that lie between camera and light projection on water plane generate maximal amount of double refracted light - pow(max(0.0,dot(normalize(float3(pixel_to_light_vector.x,0.0,pixel_to_light_vector.z)),-pixel_to_eye_vector)),2.0)* - // the slopes of waves that are oriented back to light generate maximal amount of double refracted light - shadow_factor*pow(max(0.0,1.0-dot(pixel_to_light_vector,normal)),2.0); - - scatter_factor += g_WaterScatterIntensity* - // the scattered light is best seen if observing direction is normal to slope surface - max(0,dot(pixel_to_eye_vector,normal));//* - - // calculating fresnel factor - float r=(1.0 - 1.33)*(1.0 - 1.33)/((1.0 + 1.33)*(1.0 + 1.33)); - fresnel_factor = r + (1.0-r)*pow(saturate(1.0 - dot(normal,pixel_to_eye_vector)),5.0); - - - // calculating specular factor - specular_factor=shadow_factor*pow(max(0,dot(pixel_to_light_vector,reflected_eye_to_pixel_vector)),g_WaterSpecularPower); - - // calculating disturbance which has to be applied to planar reflections/refractions to give plausible results - disturbance_eyespace=mul(float4(normal.x,normal.z,0,0),g_ModelViewMatrix); - - float2 reflection_disturbance = float2(disturbance_eyespace.x,disturbance_eyespace.z)*0.06; - float2 refraction_disturbance = float2(-disturbance_eyespace.x,disturbance_eyespace.y)*0.9* - // fading out refraction disturbance at distance so refraction doesn't look noisy at distance - (100.0/(100+length(g_CameraPosition-water_vertex_positionWS))); - - // picking refraction depth at non-displaced point, need it to scale the refraction texture displacement amount according to water depth - float refraction_depth = GetRefractionDepth(In.positionClip.xy*g_ScreenSizeInv); - refraction_depth = g_ZFar*g_ZNear / (g_ZFar-refraction_depth*(g_ZFar-g_ZNear)); - float4 vertex_in_viewspace = mul(float4(In.positionWS.xyz,1),g_ModelViewMatrix); - water_depth = refraction_depth-vertex_in_viewspace.z; - - if(water_depth < 0) - { - refraction_disturbance = 0; - } - water_depth = max(0,water_depth); - refraction_disturbance *= min(1.0f,water_depth*0.03); - - // getting refraction depth again, at displaced point now - refraction_depth = GetRefractionDepth(In.positionClip.xy*g_ScreenSizeInv+refraction_disturbance); - refraction_depth = g_ZFar*g_ZNear / (g_ZFar-refraction_depth*(g_ZFar-g_ZNear)); - vertex_in_viewspace= mul(float4(In.positionWS.xyz,1),g_ModelViewMatrix); - water_depth = max(water_depth,refraction_depth-vertex_in_viewspace.z); - water_depth = max(0,water_depth); - float depth_damper = min(1,water_depth*3.0); - float depth_damper_sss = min(1,water_depth*0.5); - - // getting reflection and refraction color at disturbed texture coordinates - reflection_color = g_ReflectionTexture.SampleLevel(SamplerLinearClamp,float2(In.positionClip.x*g_ScreenSizeInv.x,1.0-In.positionClip.y*g_ScreenSizeInv.y)+reflection_disturbance,0).rgb; - refraction_color = g_RefractionTexture.SampleLevel(SamplerLinearClamp,In.positionClip.xy*g_ScreenSizeInv+refraction_disturbance,0).rgb; - - // fading fresnel factor to 0 to soften water surface edges - fresnel_factor*=depth_damper; - - // fading fresnel factor to 0 for rays that reflect below water surface - fresnel_factor*= 1.0 - 1.0*saturate(-2.0*reflected_eye_to_pixel_vector.y); - - // applying water absorbtion according to distance that refracted ray travels in water - // note that we multiply this by 2 since light travels through water twice: from light to seafloor then from seafloor back to eye - refraction_color.r *= exp(-1.0*water_depth*2.0*g_WaterTransmittance.r); - refraction_color.g *= exp(-1.0*water_depth*2.0*g_WaterTransmittance.g); - refraction_color.b *= exp(-1.0*water_depth*2.0*g_WaterTransmittance.b); - - // applying water scatter factor - refraction_color += scatter_factor*shadow_factor*g_WaterScatterColor*depth_damper_sss; - - // adding milkiness due to mixed-in foam - refraction_color += g_FoamUnderwaterColor*saturate(surface_attributes.foam_turbulent_energy*0.2)*depth_damper_sss; - - // combining final water color - color = lerp(refraction_color, reflection_color, fresnel_factor); - // adding specular - color.rgb += specular_factor*g_WaterSpecularIntensity*g_WaterSpecularColor*shadow_factor*depth_damper; - - // applying surface foam provided by turbulent energy - - // low frequency foam map - float foam_intensity_map_lf = 1.0*g_FoamIntensityTexture.Sample(SamplerLinearWrap, In.world_pos_undisplaced.xy*0.04*float2(1,1)).x - 1.0; - - // high frequency foam map - float foam_intensity_map_hf = 1.0*g_FoamIntensityTexture.Sample(SamplerLinearWrap, In.world_pos_undisplaced.xy*0.15*float2(1,1)).x - 1.0; - - // ultra high frequency foam map - float foam_intensity_map_uhf = 1.0*g_FoamIntensityTexture.Sample(SamplerLinearWrap, In.world_pos_undisplaced.xy*0.3*float2(1,1)).x; - - float foam_intensity; - foam_intensity = saturate(foam_intensity_map_hf + min(3.5,1.0*surface_attributes.foam_turbulent_energy-0.2)); - foam_intensity += (foam_intensity_map_lf + min(1.5,1.0*surface_attributes.foam_turbulent_energy)); - - - foam_intensity -= 0.1*saturate(-surface_attributes.foam_surface_folding); - - foam_intensity = max(0,foam_intensity); - - foam_intensity *= 1.0+0.8*saturate(surface_attributes.foam_surface_folding); - - float foam_bubbles = g_FoamDiffuseTexture.Sample(SamplerLinearWrap, In.world_pos_undisplaced.xy*0.5).r; - foam_bubbles = saturate(5.0*(foam_bubbles-0.8)); - - // applying foam hats - foam_intensity += max(0,foam_intensity_map_uhf*2.0*surface_attributes.foam_wave_hats); - - foam_intensity = pow(foam_intensity, 0.7); - foam_intensity = saturate(foam_intensity*foam_bubbles*1.0); - - foam_intensity*=depth_damper; - - // foam diffuse color - float foam_diffuse_factor = max(0,0.8+max(0,0.2*dot(pixel_to_light_vector,surface_attributes.normal))); - - color = lerp(color, foam_diffuse_factor*float3(1.0,1.0,1.0),foam_intensity); - - // applying atmospheric fog to water surface - float fog_factor = min(1,exp(-length(g_CameraPosition-water_vertex_positionWS)*g_FogDensity)); - color = lerp(color, CalculateFogColor(normalize(g_LightPosition),pixel_to_eye_vector).rgb, fresnel_factor*(1.0-fog_factor)); - - // applying solid wireframe - float d = min(In.v_dist.x,min(In.v_dist.y,In.v_dist.z)); - float I = exp2(-2.0*d*d); - return float4(color + g_Wireframe*I*0.5, 1.0); -} - -//----------------------------------------------------------------------------- -// Name: OceanWaveTech -// Type: Technique -// Desc: -//----------------------------------------------------------------------------- -technique11 RenderOceanSurfTech -{ - - // With shoreline - pass Pass_Solid_WithShoreline - { - SetVertexShader( CompileShader( vs_5_0, OceanWaveVS() ) ); - SetHullShader( CompileShader( hs_5_0, HS_FlatTriangles() ) ); - SetDomainShader( CompileShader( ds_5_0, DS_FlatTriangles_Shore() ) ); - SetGeometryShader( CompileShader( gs_5_0, GSSolidWire() ) ); - SetPixelShader( CompileShader( ps_5_0, OceanWaveShorePS() ) ); - - SetDepthStencilState( DepthNormal, 0 ); - SetRasterizerState( CullBackMS ); - SetBlendState(NoBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); - } -} - - -struct VS_LOGO_OUTPUT -{ - float4 positionClip : SV_Position; - float2 tex_coord : TEXCOORD1; -}; - -//----------------------------------------------------------------------------- -// Name: DisplayLogoVS -// Type: Vertex shader -//----------------------------------------------------------------------------- -VS_LOGO_OUTPUT DisplayLogoVS(float4 vPos : POSITION, float2 vTexCoord : TEXCOORD0) -{ - VS_LOGO_OUTPUT Output; - Output.positionClip = vPos; - Output.tex_coord = vTexCoord; - return Output; -} - -//----------------------------------------------------------------------------- -// Name: DisplayLogoPS -// Type: Pixel shader -//----------------------------------------------------------------------------- -float4 DisplayLogoPS(VS_LOGO_OUTPUT In) : SV_Target -{ - return g_LogoTexture.Sample(SamplerLinearWrap, In.tex_coord); -} - -//----------------------------------------------------------------------------- -// Name: DisplayBufferTech -// Type: Technique -// Desc: Logo rendering -//----------------------------------------------------------------------------- -technique11 DisplayLogoTech -{ - pass P0 - { - SetVertexShader( CompileShader( vs_5_0, DisplayLogoVS() ) ); - SetGeometryShader( NULL ); - SetPixelShader( CompileShader( ps_5_0, DisplayLogoPS() ) ); - - SetDepthStencilState( DepthAlways, 0 ); - SetRasterizerState( NoCullMS ); - SetBlendState( Translucent, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF ); - } -} - -float4 g_OriginPosition; -float4 g_ContactPosition; -float4 g_RayDirection; - -struct RAY_CONTACT_VS_INPUT -{ - float4 PositionWS : POSITION; -}; - -struct RAY_CONTACT_VS_OUTPUT -{ - float4 PositionClip : SV_Position; -}; - -//----------------------------------------------------------------------------- -// Name: ContactVS -// Type: Vertex shader -// Desc: -//----------------------------------------------------------------------------- -RAY_CONTACT_VS_OUTPUT ContactVS(RAY_CONTACT_VS_INPUT In) -{ - RAY_CONTACT_VS_OUTPUT Output; - Output.PositionClip = mul(float4(In.PositionWS.xzy*0.5 + g_ContactPosition.xyz, 1.0), g_ModelViewProjectionMatrix); - return Output; -} - -//----------------------------------------------------------------------------- -// Name: RayVS -// Type: Vertex shader -// Desc: -//----------------------------------------------------------------------------- -RAY_CONTACT_VS_OUTPUT RayVS(RAY_CONTACT_VS_INPUT In) -{ - RAY_CONTACT_VS_OUTPUT Output; - Output.PositionClip = mul(float4(g_OriginPosition.xzy + In.PositionWS.y*g_RayDirection.xzy,1.0), g_ModelViewProjectionMatrix); - return Output; -} - -//----------------------------------------------------------------------------- -// Name: RayContactPS -// Type: Pixel shader -// Desc: -//----------------------------------------------------------------------------- -float4 RayContactPS(RAY_CONTACT_VS_OUTPUT In) : SV_Target -{ - return float4(0, 1.0, 0, 1.0); -} - -//----------------------------------------------------------------------------- -// Name: RenderRayContactTech -// Type: Technique -// Desc: -//----------------------------------------------------------------------------- -technique11 RenderRayContactTech -{ - - // Contact - pass Pass_Contact - { - SetVertexShader( CompileShader( vs_5_0, ContactVS() ) ); - SetHullShader( NULL ); - SetDomainShader( NULL ); - SetGeometryShader( NULL ); - SetPixelShader( CompileShader( ps_5_0, RayContactPS() ) ); - - SetDepthStencilState( DepthNormal, 0 ); - SetRasterizerState( NoCullMS ); - SetBlendState( NoBlending, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF ); - } - - // Ray - pass Pass_Ray - { - SetVertexShader( CompileShader( vs_5_0, RayVS() ) ); - SetHullShader( NULL ); - SetDomainShader( NULL ); - SetGeometryShader( NULL ); - SetPixelShader( CompileShader( ps_5_0, RayContactPS() ) ); - - SetDepthStencilState( DepthNormal, 0 ); - SetRasterizerState( Wireframe ); - SetBlendState( NoBlending, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF ); - } -} diff --git a/sample/d3d11/ocean_surface.h b/sample/d3d11/ocean_surface.h deleted file mode 100644 index 9ceb909..0000000 --- a/sample/d3d11/ocean_surface.h +++ /dev/null @@ -1,89 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed -// under the Mutual Non-Disclosure Agreement. -// -// Notice -// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES -// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. -// -// NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. No third party distribution is allowed unless -// expressly authorized by NVIDIA. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright © 2008- 2013 NVIDIA Corporation. All rights reserved. -// -// NVIDIA Corporation and its licensors retain all intellectual property and proprietary -// rights in and to this software and related documentation and any modifications thereto. -// Any use, reproduction, disclosure or distribution of this software and related -// documentation without an express license agreement from NVIDIA Corporation is -// strictly prohibited. -// - -#ifndef _OCEAN_WAVE_H -#define _OCEAN_WAVE_H - -#include - -#include -#include "distance_field.h" - -class OceanSurface -{ -public: - OceanSurface(); - ~OceanSurface(); - - HRESULT init(); - - // ---------------------------------- GPU shading data ------------------------------------ - - // D3D objects - ID3D11Device* m_pd3dDevice; - - ID3DX11Effect* m_pOceanFX; - ID3DX11EffectTechnique* m_pRenderSurfaceTechnique; - ID3DX11EffectPass* m_pRenderSurfaceShadedWithShorelinePass; - ID3DX11EffectPass* m_pRenderSurfaceWireframeWithShorelinePass; - - ID3D11InputLayout* m_pQuadLayout; - ID3D11InputLayout* m_pRayContactLayout; - ID3DX11EffectTechnique* m_pRenderRayContactTechnique; - ID3D11Buffer* m_pContactVB; - ID3D11Buffer* m_pContactIB; - - DistanceField* pDistanceFieldModule; // Not owned! - void AttachDistanceFieldModule( DistanceField* pDistanceField ) { pDistanceFieldModule = pDistanceField; } - - // --------------------------------- Rendering routines ----------------------------------- - // Rendering - void renderShaded( ID3D11DeviceContext* pDC, - const D3DXMATRIX& matView, - const D3DXMATRIX& matProj, - GFSDK_WaveWorks_SimulationHandle hSim, - GFSDK_WaveWorks_SavestateHandle hSavestate, - const D3DXVECTOR2& windDir, - const float steepness, - const float amplitude, - const float wavelength, - const float speed, - const float parallelness, - const float totalTime - ); - void getQuadTreeStats(GFSDK_WaveWorks_Quadtree_Stats& stats); - - // --------------------------------- Surface geometry ----------------------------------- - GFSDK_WaveWorks_QuadtreeHandle m_hOceanQuadTree; - HRESULT initQuadTree(const GFSDK_WaveWorks_Quadtree_Params& params); - - UINT* m_pQuadTreeShaderInputMappings_Shore; - UINT* m_pSimulationShaderInputMappings_Shore; -}; - -#endif // _OCEAN_WAVE_H diff --git a/sample/d3d11/resource.h b/sample/d3d11/resource.h deleted file mode 100644 index 1777be2..0000000 --- a/sample/d3d11/resource.h +++ /dev/null @@ -1,44 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed -// under the Mutual Non-Disclosure Agreement. -// -// Notice -// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES -// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. -// -// NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. No third party distribution is allowed unless -// expressly authorized by NVIDIA. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright © 2008- 2013 NVIDIA Corporation. All rights reserved. -// -// NVIDIA Corporation and its licensors retain all intellectual property and proprietary -// rights in and to this software and related documentation and any modifications thereto. -// Any use, reproduction, disclosure or distribution of this software and related -// documentation without an express license agreement from NVIDIA Corporation is -// strictly prohibited. -// - - //{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by water_lib_d3d11_demo.rc -// -#define IDI_MAIN_ICON 101 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 113 -#define _APS_NEXT_COMMAND_VALUE 40029 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/sample/d3d11/sample.fx b/sample/d3d11/sample.fx deleted file mode 100644 index 4d85e07..0000000 --- a/sample/d3d11/sample.fx +++ /dev/null @@ -1,759 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed -// under the Mutual Non-Disclosure Agreement. -// -// Notice -// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES -// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. -// -// NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. No third party distribution is allowed unless -// expressly authorized by NVIDIA. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright © 2008- 2013 NVIDIA Corporation. All rights reserved. -// -// NVIDIA Corporation and its licensors retain all intellectual property and proprietary -// rights in and to this software and related documentation and any modifications thereto. -// Any use, reproduction, disclosure or distribution of this software and related -// documentation without an express license agreement from NVIDIA Corporation is -// strictly prohibited. -// - -#include "common.fx" - -//-------------------------------------------------------------------------------------- -// Textures -//-------------------------------------------------------------------------------------- - -// static textures -Texture2D g_HeightfieldTexture; -Texture2D g_LayerdefTexture; -Texture2D g_RockBumpTexture; -Texture2D g_FoamIntensityTexture; -Texture2D g_FoamDiffuseTexture; - -// rendertarget textures -Texture2D g_SkyTexture; -Texture2D g_ShadowmapTexture; -Texture2D g_MainTexture; -Texture2DMS g_RefractionDepthTextureMS1; -Texture2DMS g_RefractionDepthTextureMS2; -Texture2DMS g_RefractionDepthTextureMS4; - - - -//-------------------------------------------------------------------------------------- -// Shader Inputs/Outputs -//-------------------------------------------------------------------------------------- -struct VSIn_Diffuse -{ - float3 position : POSITION; - float2 texcoord : TEXCOORD; - float3 normal : NORMAL; -}; - -struct PSIn_Diffuse -{ - float4 position : SV_Position; - centroid float3 normal : NORMAL; - centroid float3 positionWS : TEXCOORD0; - centroid float4 layerdef : TEXCOORD1; - centroid float brightness : TEXCOORD2; -}; - -struct PSIn_Quad -{ - float4 position : SV_Position; - float2 texcoord : TEXCOORD0; -}; - -struct VSIn_Default -{ - float4 position : POSITION; - float2 texcoord : TEXCOORD; -}; - - -struct DUMMY -{ - float Dummmy : DUMMY; -}; - -struct HSIn_Heightfield -{ - float2 origin : ORIGIN; - float2 size : SIZE; -}; - - -struct PatchData -{ - float Edges[4] : SV_TessFactor; - float Inside[2] : SV_InsideTessFactor; - - float2 origin : ORIGIN; - float2 size : SIZE; -}; - -//-------------------------------------------------------------------------------------- -// Global variables -//-------------------------------------------------------------------------------------- - -// rendering control variables -float g_DynamicTessFactor; -float g_HalfSpaceCullSign; -float g_HalfSpaceCullPosition; -int g_MSSamples; - -// view/time dependent variables -float4x4 g_ModelViewMatrix; -float4x4 g_ModelViewProjectionMatrix; -float4x4 g_ModelViewProjectionMatrixInv; -float4x4 g_LightModelViewProjectionMatrix; -float4x4 g_LightModelViewProjectionMatrixInv; -float3 g_CameraPosition; -float3 g_CameraDirection; - -float3 g_LightPosition; -float2 g_ScreenSizeInv; -float g_MainBufferSizeMultiplier; -float g_ZNear; -float g_ZFar; -float g_ApplyFog; - -// constants defining visual appearance -float2 g_RockBumpTexcoordScale={10.0,10.0}; -float g_RockBumpHeightScale=3.0; -float3 g_AtmosphereBrightColor={1.1,0.9,0.6}; -float3 g_AtmosphereDarkColor={0.4,0.4,0.5}; -float g_FogDensity = 1.0f/1500.0f; -float2 g_HeightFieldOrigin = float2(0, 0); -float g_HeightFieldSize = 512; - -// Shoreline rendering related variables -float4x4 g_WorldToTopDownTextureMatrix; -Texture2D g_DataTexture; -float g_Time; -float g_GerstnerSteepness; -float g_BaseGerstnerAmplitude; -float g_BaseGerstnerWavelength; -float g_BaseGerstnerSpeed; -float g_BaseGerstnerParallelness; -float2 g_WindDirection; -float g_enableShoreEffects; - -//-------------------------------------------------------------------------------------- -// Misc functions -//-------------------------------------------------------------------------------------- - -// calculating tessellation factor. -float CalculateTessellationFactor(float distance) -{ - return g_DynamicTessFactor*(1.0/(0.015*distance)); -} - -// to avoid vertex swimming while tessellation varies, one can use mipmapping for displacement maps -// it's not always the best choice, but it effificiently suppresses high frequencies at zero cost -float CalculateMIPLevelForDisplacementTextures(float distance) -{ - return log2(128/CalculateTessellationFactor(distance)); -} - -// primitive simulation of non-uniform atmospheric fog -float3 CalculateFogColor(float3 pixel_to_light_vector, float3 pixel_to_eye_vector) -{ - return lerp(g_AtmosphereDarkColor,g_AtmosphereBrightColor,0.5*dot(pixel_to_light_vector,-pixel_to_eye_vector)+0.5); -} - -//-------------------------------------------------------------------------------------- -// Sky shaders -//-------------------------------------------------------------------------------------- - -struct PSIn_Sky -{ - float4 position : SV_Position; - centroid float2 texcoord : TEXCOORD0; - centroid float3 positionWS : TEXCOORD1; -}; - -PSIn_Sky SkyVS(VSIn_Default input) -{ - PSIn_Sky output; - - output.position = mul(input.position, g_ModelViewProjectionMatrix); - output.positionWS=input.position.xyz; - output.texcoord = input.texcoord; - return output; -} - -float4 SkyPS(PSIn_Sky input) : SV_Target -{ - float4 color; - float3 acolor; - float3 pixel_to_eye_vector = normalize(g_CameraPosition-input.positionWS); - - color=1.5*g_SkyTexture.Sample(SamplerLinearWrap,float2(input.texcoord.x,input.texcoord.y))-0.3; - acolor =CalculateFogColor(normalize(g_LightPosition),pixel_to_eye_vector); - color.rgb = lerp(color.rgb,acolor,pow(saturate(input.texcoord.y),3)); - color.a =1; - return color; -} - -//-------------------------------------------------------------------------------------- -// Heightfield shaders -//-------------------------------------------------------------------------------------- - -HSIn_Heightfield PassThroughVS(float4 PatchParams : PATCH_PARAMETERS) -{ - HSIn_Heightfield output; - output.origin = PatchParams.xy; - output.size = PatchParams.zw; - return output; -} - -PatchData PatchConstantHS( InputPatch inputPatch ) -{ - PatchData output; - - float distance_to_camera; - float tesselation_factor; - float inside_tessellation_factor=0; - float in_frustum=0; - - output.origin = inputPatch[0].origin; - output.size = inputPatch[0].size; - - float2 texcoord0to1 = (inputPatch[0].origin + inputPatch[0].size/2.0)/g_HeightFieldSize; - texcoord0to1.y=1-texcoord0to1.y; - - // conservative frustum culling - float3 patch_center=float3(inputPatch[0].origin.x+inputPatch[0].size.x*0.5,g_HeightfieldTexture.SampleLevel(SamplerLinearWrap, texcoord0to1,0).w,inputPatch[0].origin.y+inputPatch[0].size.y*0.5); - float3 camera_to_patch_vector = patch_center-g_CameraPosition; - float3 patch_to_camera_direction_vector = g_CameraDirection*dot(camera_to_patch_vector,g_CameraDirection)-camera_to_patch_vector; - float3 patch_center_realigned=patch_center+normalize(patch_to_camera_direction_vector)*min(2*inputPatch[0].size.x,length(patch_to_camera_direction_vector)); - float4 patch_screenspace_center = mul(float4(patch_center_realigned, 1.0), g_ModelViewProjectionMatrix); - - if(((patch_screenspace_center.x/patch_screenspace_center.w>-1.0) && (patch_screenspace_center.x/patch_screenspace_center.w<1.0) - && (patch_screenspace_center.y/patch_screenspace_center.w>-1.0) && (patch_screenspace_center.y/patch_screenspace_center.w<1.0) - && (patch_screenspace_center.w>0)) || (length(patch_center-g_CameraPosition)<2*inputPatch[0].size.x)) - { - in_frustum=1; - } - - if(in_frustum) - { - distance_to_camera=length(g_CameraPosition.xz-inputPatch[0].origin-float2(0,inputPatch[0].size.y*0.5)); - tesselation_factor=CalculateTessellationFactor(distance_to_camera); - output.Edges[0] = tesselation_factor; - inside_tessellation_factor+=tesselation_factor; - - - distance_to_camera=length(g_CameraPosition.xz-inputPatch[0].origin-float2(inputPatch[0].size.x*0.5,0)); - tesselation_factor=CalculateTessellationFactor(distance_to_camera); - output.Edges[1] = tesselation_factor; - inside_tessellation_factor+=tesselation_factor; - - distance_to_camera=length(g_CameraPosition.xz-inputPatch[0].origin-float2(inputPatch[0].size.x,inputPatch[0].size.y*0.5)); - tesselation_factor=CalculateTessellationFactor(distance_to_camera); - output.Edges[2] = tesselation_factor; - inside_tessellation_factor+=tesselation_factor; - - distance_to_camera=length(g_CameraPosition.xz-inputPatch[0].origin-float2(inputPatch[0].size.x*0.5,inputPatch[0].size.y)); - tesselation_factor=CalculateTessellationFactor(distance_to_camera); - output.Edges[3] = tesselation_factor; - inside_tessellation_factor+=tesselation_factor; - output.Inside[0] = output.Inside[1] = inside_tessellation_factor*0.25; - } - else - { - output.Edges[0]=-1; - output.Edges[1]=-1; - output.Edges[2]=-1; - output.Edges[3]=-1; - output.Inside[0]=-1; - output.Inside[1]=-1; - } - - return output; -} - -[domain("quad")] -[partitioning("fractional_odd")] -[outputtopology("triangle_cw")] -[outputcontrolpoints(1)] -[patchconstantfunc("PatchConstantHS")] -DUMMY PatchHS( InputPatch inputPatch ) -{ - return (DUMMY)0; -} - -[domain("quad")] -PSIn_Diffuse HeightFieldPatchDS( PatchData input, - float2 uv : SV_DomainLocation, - OutputPatch inputPatch ) -{ - PSIn_Diffuse output; - float3 vertexPosition; - float4 base_texvalue; - float2 texcoord0to1 = (input.origin + uv * input.size)/g_HeightFieldSize; - float3 base_normal; - float3 detail_normal; - float3 detail_normal_rotated; - float4 detail_texvalue; - float detail_height; - float3x3 normal_rotation_matrix; - float4 layerdef; - float distance_to_camera; - float detailmap_miplevel; - texcoord0to1.y=1-texcoord0to1.y; - - // fetching base heightmap,normal and moving vertices along y axis - base_texvalue=g_HeightfieldTexture.SampleLevel(SamplerLinearWrap, texcoord0to1,0); - base_normal=base_texvalue.xyz; - base_normal.z=-base_normal.z; - vertexPosition.xz = input.origin + uv * input.size; - vertexPosition.y = base_texvalue.w; - - // calculating MIP level for detail texture fetches - distance_to_camera=length(g_CameraPosition-vertexPosition); - detailmap_miplevel= CalculateMIPLevelForDisplacementTextures(distance_to_camera); - - // fetching layer definition texture - layerdef=g_LayerdefTexture.SampleLevel(SamplerLinearWrap, texcoord0to1,0); - - // rock detail texture - detail_texvalue = g_RockBumpTexture.SampleLevel(SamplerLinearWrap, texcoord0to1*g_RockBumpTexcoordScale,detailmap_miplevel).rbga; - detail_normal = normalize(lerp(float3(0.0,1.0,0.0),2.0*detail_texvalue.xyz-float3(1,1,1),layerdef.w)); - detail_height = (detail_texvalue.w-0.5)*g_RockBumpHeightScale*layerdef.w; - - // moving vertices by detail height along base normal - vertexPosition+=base_normal*detail_height; - - //calculating base normal rotation matrix - normal_rotation_matrix[1]=base_normal; - normal_rotation_matrix[2]=normalize(cross(float3(-1.0,0.0,0.0),normal_rotation_matrix[1])); - normal_rotation_matrix[0]=normalize(cross(normal_rotation_matrix[2],normal_rotation_matrix[1])); - - //applying base rotation matrix to detail normal - detail_normal_rotated = mul(detail_normal,normal_rotation_matrix); - - // writing output params - output.position = mul(float4(vertexPosition, 1.0), g_ModelViewProjectionMatrix); - output.normal = detail_normal_rotated; - output.positionWS = vertexPosition; - output.layerdef = layerdef; - output.brightness = detail_height; - return output; -} - -static const float kTopDownDataPixelsPerMeter = 256.0f/700.0; // taken from SDF generation source code, the SDF texture size is 256x256, the viewport size is 700x700 -static const float kMaxDepthBelowSea = 50.0f; -static const float kMaxDistance = 20.0f; // taken from SDF generation code -static const float kNumWaves = 1.0; // Total number of Gerster waves of different amplitude, speed etc to calculate, - // i+1-th wave has 20% smaller amplitude, - // 20% smaller phase and group speed and 20% less parallelity - // Note that all the waves will share the same gerstnerMultiplierOut (lerping between ocean waves and Gerstner waves) for simplicity -static const float kBackWaveSpeed = 0.5; // the speed of wave rolling back from shore, in vertical dimension, in meters/sec - -void GetGerstnerShoreAttributes(float3 posWS, out float waveOut, out float3 normalOut, out float foamTrailOut, out float2 foamWSShift, out float waterLayerOut, out float waterLayerSlowOut) -{ - // getting UV for fetching SDF texture - float4 topDownPosition = mul( float4( posWS.xyz, 1), g_WorldToTopDownTextureMatrix ); - float2 uv = mad( topDownPosition.xy/topDownPosition.w, 0.5f, 0.5f ); - uv.y = 1-uv.y; - - // initializing the outputs - normalOut = float3(0.0,1.0,0.0); - waveOut = 0; - foamWSShift = float2(0.0,0.0); - foamTrailOut = 0; - waterLayerOut = 0; - waterLayerSlowOut = 0; - - // getting SDF - const float4 tdData = g_DataTexture.SampleLevel(SamplerLinearBorder, uv, 0 ); - - // getting terrain altitude gradient in y meters per xz meter - float terrain_dy = 0.25*(tdData.y - g_DataTexture.SampleLevel(SamplerLinearBorder, uv - kTopDownDataPixelsPerMeter*float2(tdData.z,-tdData.w)/256.0, 0 ).y); - - // initializing variables common to all Gerstner waves - float phaseShift = g_Time; - float sdfPhase = tdData.x*kMaxDistance/kTopDownDataPixelsPerMeter; - float distanceMultiplier = saturate(1.0-tdData.x); // Shore waves linearly fade in on the edges of SDF - float depthMultiplier = saturate((g_BaseGerstnerWavelength*0.5 + tdData.y)); // Shore waves fade in when depth is less than half the wave length - - // initializing variables to be changed along summing up the waves - float gerstnerWavelength = g_BaseGerstnerWavelength; - float gerstnerOmega = 2.0*3.141592 / g_BaseGerstnerWavelength; // angular speed of gerstner wave - float gerstnerParallelness = g_BaseGerstnerParallelness; // "parallelness" of shore waves. 0 means the waves are parallel to shore, 1 means the waves are parallel to wind gradient - float gerstnerSpeed = g_BaseGerstnerSpeed; // phase speed of gerstner waves - float gerstnerAmplitude = g_BaseGerstnerAmplitude; - float2 windDirection = g_WindDirection; - - // summing up the waves - for(float i = 0.0; i < kNumWaves; i+=1.0) - { - float windPhase = dot(windDirection, posWS.xz); - float gerstnerPhase = 2.0*3.141592*(lerp( sdfPhase, windPhase, gerstnerParallelness)/gerstnerWavelength); - float2 propagationDirection = normalize( lerp(-tdData.zw + windDirection * 0.000001f, g_WindDirection, gerstnerParallelness*gerstnerParallelness)); - float gerstnerGroupSpeedPhase = 2.0*3.141592*(lerp( sdfPhase, windPhase, gerstnerParallelness*3.0)/gerstnerWavelength); // letting the group speed phase to be non-parallel to propagation phase, so altering parallelness modificator fot this - - float groupSpeedMultiplier = 0.5 + 0.5*cos((gerstnerGroupSpeedPhase + gerstnerOmega*gerstnerSpeed*phaseShift/2.0)/2.7); // Group speed for water waves is half of the phase speed, we allow 2.7 wavelengths to be in wave group, not so much as breaking shore waves lose energy quickly - float worldSpacePosMultiplier = 0.75 + 0.25*sin(phaseShift*0.3 + 0.5*posWS.x/gerstnerWavelength)*sin(phaseShift*0.4 + 0.5*posWS.y/gerstnerWavelength); // slowly crawling worldspace aligned checkerboard pattern that damps gerstner waves further - float depthMultiplier = saturate((gerstnerWavelength*0.5 + tdData.y)*0.5); // Shore waves fade in when depth is less than half the wave length - float gerstnerMultiplier = distanceMultiplier*depthMultiplier*worldSpacePosMultiplier*groupSpeedMultiplier; - - float steepness = gerstnerMultiplier * g_GerstnerSteepness; // steepness gradually increases as wave runs over shallower seabed - float baseAmplitude = gerstnerMultiplier * gerstnerAmplitude; //amplitude gradually increases as wave runs over shallower seabed - float skewMultiplier = saturate((baseAmplitude*2.0*1.28 + tdData.y)/gerstnerAmplitude); // Wave height is 2*amplitude, a wave will start to break when it approximately reaches a water depth of 1.28 times the wave height, empirically: http://passyworldofmathematics.com/mathematics-of-ocean-waves-and-surfing/ - float breakerMultiplier = saturate((baseAmplitude*2.0*1.28 + tdData.y)/gerstnerAmplitude); // Wave height is 2*amplitude, a wave will start to break when it approximately reaches a water depth of 1.28 times the wave height, empirically: http://passyworldofmathematics.com/mathematics-of-ocean-waves-and-surfing/ - - // calculating Gerstner offset - float s,c; - sincos(gerstnerPhase + gerstnerOmega*gerstnerSpeed*phaseShift, s, c); - float waveVerticalOffset = (s*0.5+0.5)*(s*0.5+0.5); - - // calculating normal - normalOut.y -= gerstnerOmega*steepness*baseAmplitude*s; - normalOut.xz -= gerstnerOmega*baseAmplitude*c*propagationDirection; // orienting normal according to direction of wave propagation. No need to normalize, it is unit length. - - // calculating foam parameters - foamTrailOut += gerstnerMultiplier*breakerMultiplier; - - // calculating wave falling edges moving slow and fast - float foamTrailPhase = gerstnerPhase + gerstnerOmega*gerstnerSpeed*phaseShift + 3.141592*0.05; // delaying foam trail a bit so it's following the breaker - float fp = frac(foamTrailPhase/(3.141592*2.0)); - - float k = kBackWaveSpeed*terrain_dy/((gerstnerSpeed/gerstnerWavelength)*baseAmplitude); - float sawtooth = 1.0 - k + k*(saturate(fp*10.0) - saturate(fp*1.1)); - waterLayerOut += sawtooth*baseAmplitude + baseAmplitude; - - k = kBackWaveSpeed/(gerstnerOmega*gerstnerSpeed); - sawtooth = k*(saturate(fp*10.0) - saturate(fp*1.1)); - - foamWSShift += 10.0*sawtooth*propagationDirection*gerstnerAmplitude; - - k = 0.33*kBackWaveSpeed*terrain_dy/((gerstnerSpeed/gerstnerWavelength)*baseAmplitude); - sawtooth = 1.0 - k + k*(saturate(fp*10.0) - saturate(fp*1.1)); - waterLayerSlowOut += sawtooth*baseAmplitude + baseAmplitude; - - waveOut += waveVerticalOffset*baseAmplitude; - - // updating the parameters for next wave - gerstnerWavelength *= 0.66; - gerstnerOmega /= 0.66; - gerstnerSpeed *= 0.66; - gerstnerAmplitude *= 0.66; - gerstnerParallelness *= 0.66; - windDirection.xy *= float2(-1.0,1.0)*windDirection.yx; // rotating wind direction - - } -} - -float4 HeightFieldPatchPS(PSIn_Diffuse input) : SV_Target -{ - float3 color; - float3 pixel_to_light_vector = normalize(g_LightPosition-input.positionWS); - float3 pixel_to_eye_vector = normalize(g_CameraPosition-input.positionWS); - - // culling halfspace if needed - clip(g_HalfSpaceCullSign*(input.positionWS.y-g_HalfSpaceCullPosition)); - - float darkening_change_rate = min(1.0,1.0/(3.0*g_BaseGerstnerAmplitude)); - float shore_darkening_factor = saturate((input.positionWS.y + 1.0)*darkening_change_rate); - - // getting diffuse color - color = float3(0.3,0.3,0.3); - - // adding per-vertex lighting defined by displacement of vertex - color*=0.5+0.5*min(1.0,max(0.0, input.brightness/3.0f+0.5f)); - - // calculating pixel position in light view space - float4 positionLS = mul(float4(input.positionWS,1),g_LightModelViewProjectionMatrix); - positionLS.xyz/=positionLS.w; - positionLS.x=(positionLS.x+1)*0.5; - positionLS.y=(1-positionLS.y)*0.5; - - // fetching shadowmap and shading - float dsf = 0.66f/4096.0f; - float shadow_factor = 0.2*g_ShadowmapTexture.SampleCmp(SamplerDepthAnisotropic,positionLS.xy,positionLS.z* 0.99f).r; - shadow_factor+=0.2*g_ShadowmapTexture.SampleCmp(SamplerDepthAnisotropic,positionLS.xy+float2(dsf,dsf),positionLS.z* 0.99f).r; - shadow_factor+=0.2*g_ShadowmapTexture.SampleCmp(SamplerDepthAnisotropic,positionLS.xy+float2(-dsf,dsf),positionLS.z* 0.99f).r; - shadow_factor+=0.2*g_ShadowmapTexture.SampleCmp(SamplerDepthAnisotropic,positionLS.xy+float2(dsf,-dsf),positionLS.z* 0.99f).r; - shadow_factor+=0.2*g_ShadowmapTexture.SampleCmp(SamplerDepthAnisotropic,positionLS.xy+float2(-dsf,-dsf),positionLS.z* 0.99f).r; - color *= g_AtmosphereBrightColor*max(0,dot(pixel_to_light_vector,input.normal))*shadow_factor; - - // making all brighter - color*=2.0; - // adding light from the sky - color += (0.0+0.2*max(0,(dot(float3(0,1,0),input.normal))))*g_AtmosphereDarkColor; - - - // calculating shore effects - if((g_enableShoreEffects > 0) && (shore_darkening_factor < 1.0)) - { - float3 normal; - float foam_trail; - float water_layer; - float water_layer_slow; - float wave_pos; - float2 foamWSShift; - - GetGerstnerShoreAttributes(input.positionWS, wave_pos, normal, foam_trail, foamWSShift, water_layer, water_layer_slow); - - float waterlayer_change_rate = max(2.0,1.0/(0.1 + water_layer_slow - water_layer)); - - float underwater_factor = saturate((input.positionWS.y - wave_pos + 2.0)*5.0); - float darkening_factor = saturate((input.positionWS.y - g_BaseGerstnerAmplitude*2.0 + 2.0)*1.0); - float fresnel_damp_factor = saturate((input.positionWS.y + 0.1 - wave_pos + 2.0)*5.0); - float shore_waterlayer_factor_windy = saturate((input.positionWS.y - water_layer + 2.0)*waterlayer_change_rate); - float shore_waterlayer_factor_calm = saturate((input.positionWS.y + 2.0)*10.0); - float shore_waterlayer_factor = lerp(shore_waterlayer_factor_calm, shore_waterlayer_factor_windy, saturate(g_BaseGerstnerAmplitude*5.0)); - float shore_foam_lower_bound_factor = saturate((input.positionWS.y + g_BaseGerstnerAmplitude - wave_pos + 2.0)*min(3.0,3.0/(2.0*g_BaseGerstnerAmplitude))); - - - float3 reflected_eye_to_pixel_vector=-pixel_to_eye_vector+2*dot(pixel_to_eye_vector,input.normal)*input.normal; - float specular_light = pow(max(0,dot(reflected_eye_to_pixel_vector,pixel_to_light_vector)),40.0); - - // calculating fresnel factor - float r = (1.0 - 1.33)*(1.0 - 1.33)/((1.0 + 1.33)*(1.0 + 1.33)); - float fresnel_factor = r + (1.0-r)*pow(saturate(1.0 - dot(input.normal,pixel_to_eye_vector)),5.0); - - fresnel_factor *= (1.0-shore_waterlayer_factor)*fresnel_damp_factor; - - // darkening the terrain close to water - color *= 0.6 + 0.4*darkening_factor; - // darkening terrain underwater - color *= min(1.0,exp((input.positionWS.y + 2.0))); - - // adding specular - color += 5.0*g_AtmosphereBrightColor*specular_light*shadow_factor*fresnel_factor; - - // calculating reflection color - float3 reflection_color = CalculateFogColor(pixel_to_light_vector,-reflected_eye_to_pixel_vector); - - color = lerp(color, reflection_color.rgb, fresnel_factor); - - // adding foam - float2 positionWS_shifted = input.positionWS.xz + foamWSShift; - float foam_intensity_map_lf = g_FoamIntensityTexture.Sample(SamplerLinearWrap, positionWS_shifted*0.04*float2(1,1)).x - 1.0; - float foam_intensity_map_hf = g_FoamIntensityTexture.Sample(SamplerLinearWrap, positionWS_shifted*0.15*float2(1,1)).x - 1.0; - - float foam_intensity; - float k = 1.5; - float ff2 = (2.0/g_BaseGerstnerAmplitude)*saturate(input.positionWS.y - water_layer*0.8 + 2.0); - float ff = (1.0-ff2)*shore_foam_lower_bound_factor*foam_trail; - foam_intensity = saturate(foam_intensity_map_hf + min(3.5,k*ff-0.2)); - foam_intensity += (foam_intensity_map_lf + min(1.5,k*ff)); - foam_intensity = max(0.0, foam_intensity); - float foam_bubbles = g_FoamDiffuseTexture.Sample(SamplerLinearWrap, positionWS_shifted*0.5).r; - foam_bubbles = saturate(5.0*(foam_bubbles-0.8)); - foam_intensity = pow(foam_intensity, 0.7); - foam_intensity = saturate(foam_intensity*foam_bubbles*1.0); - - // foam diffuse color - float foam_diffuse_factor = max(0,0.8+max(0,0.2*dot(pixel_to_light_vector,normal))); - - color = lerp(color, foam_diffuse_factor*float3(1.0,1.0,1.0),foam_intensity); - } - - // applying fog - if(g_ApplyFog > 0) - { - color = lerp(CalculateFogColor(pixel_to_light_vector,pixel_to_eye_vector).rgb, color, min(1,exp(-length(g_CameraPosition-input.positionWS)*g_FogDensity))); - } - - - return float4(color, length(g_CameraPosition-input.positionWS)); -} - -float4 HeightFieldPatchDataPS( PSIn_Diffuse input ) : SV_Target -{ - float y_biased = input.positionWS.y + 2.0; - return float4( y_biased, y_biased, 0, 0 ); -} - - -//-------------------------------------------------------------------------------------- -// Fullscreen shaders -//-------------------------------------------------------------------------------------- - -PSIn_Quad FullScreenQuadVS(uint VertexId: SV_VertexID) -{ - PSIn_Quad output; - - output.position = float4(QuadVertices[VertexId],0,1); - output.texcoord = QuadTexCoordinates[VertexId]; - - return output; -} - -float4 MainToBackBufferPS(PSIn_Quad input) : SV_Target -{ - float4 color; - color.rgb = g_MainTexture.SampleLevel(SamplerLinearWrap,float2((input.texcoord.x-0.5)/g_MainBufferSizeMultiplier+0.5f,(input.texcoord.y-0.5)/g_MainBufferSizeMultiplier+0.5f),0).rgb; - color.a=0; - return color; -} - -float RefractionDepthManualResolvePS1(PSIn_Quad input) : SV_Target -{ - return g_RefractionDepthTextureMS1.Load(input.position.xy,0,int2(0,0)).r; -} - -float RefractionDepthManualResolvePS2(PSIn_Quad input) : SV_Target -{ - return g_RefractionDepthTextureMS2.Load(input.position.xy,0,int2(0,0)).r; -} - -float RefractionDepthManualResolvePS4(PSIn_Quad input) : SV_Target -{ - return g_RefractionDepthTextureMS4.Load(input.position.xy,0,int2(0,0)).r; -} - -//-------------------------------------------------------------------------------------- -// Techniques -//-------------------------------------------------------------------------------------- - -technique11 RefractionDepthManualResolve -{ - pass MS1 - { - SetRasterizerState(NoCullMS); - SetDepthStencilState(NoDepthStencil, 0); - SetBlendState(NoBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); - SetVertexShader(CompileShader(vs_4_0, FullScreenQuadVS())); - SetHullShader(NULL); - SetDomainShader(NULL); - SetGeometryShader(NULL); - SetPixelShader(CompileShader(ps_4_0, RefractionDepthManualResolvePS1())); - } - pass MS2 - { - SetRasterizerState(NoCullMS); - SetDepthStencilState(NoDepthStencil, 0); - SetBlendState(NoBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); - SetVertexShader(CompileShader(vs_4_0, FullScreenQuadVS())); - SetHullShader(NULL); - SetDomainShader(NULL); - SetGeometryShader(NULL); - SetPixelShader(CompileShader(ps_4_0, RefractionDepthManualResolvePS2())); - } - pass MS4 - { - SetRasterizerState(NoCullMS); - SetDepthStencilState(NoDepthStencil, 0); - SetBlendState(NoBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); - SetVertexShader(CompileShader(vs_4_0, FullScreenQuadVS())); - SetHullShader(NULL); - SetDomainShader(NULL); - SetGeometryShader(NULL); - SetPixelShader(CompileShader(ps_4_0, RefractionDepthManualResolvePS4())); - } -} - -technique11 MainToBackBuffer -{ - pass Solid - { - SetRasterizerState(NoCullMS); - SetDepthStencilState(NoDepthStencil, 0); - SetBlendState(NoBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); - - SetVertexShader(CompileShader(vs_4_0, FullScreenQuadVS())); - SetHullShader(NULL); - SetDomainShader(NULL); - SetGeometryShader(NULL); - SetPixelShader(CompileShader(ps_4_0, MainToBackBufferPS())); - } -} - -technique11 RenderHeightfield -{ - pass Solid - { - SetRasterizerState(CullBackMS); - SetDepthStencilState(DepthNormal, 0); - SetBlendState(NoBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); - - SetVertexShader(CompileShader(vs_4_0, PassThroughVS())); - SetHullShader(CompileShader(hs_5_0, PatchHS())); - SetDomainShader(CompileShader(ds_5_0, HeightFieldPatchDS())); - SetGeometryShader(NULL); - SetPixelShader(CompileShader(ps_4_0, HeightFieldPatchPS())); - } - pass Wireframe - { - SetRasterizerState(WireframeMS); - SetDepthStencilState(DepthNormal, 0); - SetBlendState(NoBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); - - SetVertexShader(CompileShader(vs_4_0, PassThroughVS())); - SetHullShader(CompileShader(hs_5_0, PatchHS())); - SetDomainShader(CompileShader(ds_5_0, HeightFieldPatchDS())); - SetGeometryShader(NULL); - SetPixelShader(CompileShader(ps_4_0, ColorPS(float4(1.0f, 1.0f, 1.0f, 0.0f)))); - } - - pass DepthOnly - { - SetRasterizerState(CullBackMS); - SetDepthStencilState(DepthNormal, 0); - SetBlendState(NoBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); - - SetVertexShader(CompileShader(vs_4_0, PassThroughVS())); - SetHullShader(CompileShader(hs_5_0, PatchHS())); - SetDomainShader(CompileShader(ds_5_0, HeightFieldPatchDS())); - SetGeometryShader(NULL); - SetPixelShader(NULL); - } - - pass DataPass - { - SetRasterizerState(CullBackMS); - SetDepthStencilState(DepthNormal, 0); - SetBlendState(NoBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); - - SetVertexShader(CompileShader(vs_4_0, PassThroughVS())); - SetHullShader(CompileShader(hs_5_0, PatchHS())); - SetDomainShader(CompileShader(ds_5_0, HeightFieldPatchDS())); - SetGeometryShader(NULL); - SetPixelShader(CompileShader(ps_4_0, HeightFieldPatchDataPS())); - } -} - - -technique11 RenderSky -{ - pass Solid - { - SetRasterizerState(NoCullMS); - SetDepthStencilState(DepthNormal, 0); - SetBlendState(NoBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); - - SetVertexShader(CompileShader(vs_4_0, SkyVS())); - SetHullShader(NULL); - SetDomainShader(NULL); - SetGeometryShader(NULL); - SetPixelShader(CompileShader(ps_4_0, SkyPS())); - } - pass Wireframe - { - SetRasterizerState(WireframeMS); - SetDepthStencilState(DepthNormal, 0); - SetBlendState(NoBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); - - SetVertexShader(CompileShader(vs_4_0, SkyVS())); - SetHullShader(NULL); - SetDomainShader(NULL); - SetGeometryShader(NULL); - SetPixelShader(CompileShader(ps_4_0, ColorPS(float4(1.0f, 1.0f, 1.0f, 0.0f)))); - } -} diff --git a/sample/d3d11/sample_d3d11.cpp b/sample/d3d11/sample_d3d11.cpp deleted file mode 100644 index 3296401..0000000 --- a/sample/d3d11/sample_d3d11.cpp +++ /dev/null @@ -1,1307 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed -// under the Mutual Non-Disclosure Agreement. -// -// Notice -// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES -// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. -// -// NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. No third party distribution is allowed unless -// expressly authorized by NVIDIA. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright © 2008- 2013 NVIDIA Corporation. All rights reserved. -// -// NVIDIA Corporation and its licensors retain all intellectual property and proprietary -// rights in and to this software and related documentation and any modifications thereto. -// Any use, reproduction, disclosure or distribution of this software and related -// documentation without an express license agreement from NVIDIA Corporation is -// strictly prohibited. -// - -#include "DXUT.h" -#include "DXUTcamera.h" -#include "DXUTgui.h" -#include "DXUTsettingsdlg.h" -#include "SDKmisc.h" - -#include "resource.h" -#include "ocean_surface.h" -#include "distance_field.h" -#include "GFSDK_WaveWorks.h" -#include "GFSDK_WaveWorks_D3D_Util.h" -#include "terrain.h" -#include // for QueryPerformanceFrequency/QueryPerformanceCounter - -//#define DEBUG_VS // Uncomment this line to debug vertex shaders -//#define DEBUG_PS // Uncomment this line to debug pixel shaders - -// Disable warning "conditional expression is constant" -#pragma warning(disable:4127) - -extern HRESULT LoadFile(LPCTSTR FileName, ID3DXBuffer** ppBuffer); - -//-------------------------------------------------------------------------------------- -// Global variables -//-------------------------------------------------------------------------------------- -bool g_bShowHelp = false; // If true, it renders the UI control text -bool g_bShowUI = true; // UI can be hidden e.g. for video capture -CFirstPersonCamera g_Camera; // -CDXUTDialogResourceManager g_DialogResourceManager; // manager for shared resources of dialogs -CD3DSettingsDlg g_SettingsDlg; // Device settings dialog -CDXUTTextHelper* g_pTxtHelper = NULL; // Text helper -CDXUTDialog g_HUD; // manages the 3D UI -CDXUTDialog g_SampleUI; // dialog for sample specific controls - -GFSDK_WaveWorks_SavestateHandle g_hOceanSavestate = NULL; -GFSDK_WaveWorks_SimulationHandle g_hOceanSimulation = NULL; - -gfsdk_U64 g_LastKickID = 0; -gfsdk_U64 g_LastArchivedKickID = GFSDK_WaveWorks_InvalidKickID; -gfsdk_U64 g_LastReadbackKickID = GFSDK_WaveWorks_InvalidKickID; -gfsdk_U32 g_RenderLatency = 0; -gfsdk_S32 g_ReadbackLatency = 0; -enum { ReadbackArchiveSize = 50 }; -enum { ReadbackArchiveInterval = 5 }; -float g_ReadbackCoord = 0.f; - -OceanSurface* g_pOceanSurf = NULL; -DistanceField* g_pDistanceField = NULL; - -GFSDK_WaveWorks_Simulation_Params g_ocean_simulation_param; -GFSDK_WaveWorks_Simulation_Settings g_ocean_simulation_settings; -GFSDK_WaveWorks_Simulation_Stats g_ocean_simulation_stats; -GFSDK_WaveWorks_Simulation_Stats g_ocean_simulation_stats_filtered; - -GFSDK_WaveWorks_Quadtree_Params g_ocean_quadtree_param; -GFSDK_WaveWorks_Quadtree_Stats g_ocean_quadtree_stats; -GFSDK_WaveWorks_Simulation_DetailLevel g_max_detail_level = GFSDK_WaveWorks_Simulation_DetailLevel_Normal; - -D3DXVECTOR2 g_WindDir = D3DXVECTOR2(0.8f, 0.6f); -bool g_Wireframe = false; -bool g_SimulateWater = true; -bool g_ForceKick = false; -bool g_QueryStats = false; -bool g_enableShoreEffects = true; -float g_TessellationLOD = 50.0f; -float g_NearPlane = 1.0f; -float g_FarPlane = 25000.0f; -double g_SimulationTime = 0.0; -float g_FrameTime = 0.0f; - -float g_GerstnerSteepness = 1.0f; -float g_BaseGerstnerAmplitude = 0.279f; -float g_BaseGerstnerWavelength = 3.912f; -float g_BaseGerstnerSpeed = 2.472f; -float g_GerstnerParallelity = 0.2f; -float g_ShoreTime = 0.0f; - -CTerrain g_Terrain; -ID3DX11Effect* g_pEffect = NULL; - -ID3DX11EffectTechnique* g_pLogoTechnique = NULL; -ID3DX11EffectShaderResourceVariable* g_pLogoTextureVariable = NULL; -ID3D11ShaderResourceView* g_pLogoTex = NULL; -ID3D11Buffer* g_pLogoVB = NULL; -ID3D11InputLayout* g_pSkyboxLayout = NULL; - - - -D3D11_QUERY_DATA_PIPELINE_STATISTICS g_PipelineQueryData; -ID3D11Query* g_pPipelineQuery= NULL; - -// Readbacks and raycasts related globals -enum { NumMarkersXY = 10, NumMarkers = NumMarkersXY*NumMarkersXY }; - -gfsdk_float2 g_readback_marker_coords[NumMarkers]; -gfsdk_float4 g_readback_marker_positions[NumMarkers]; - -D3DXVECTOR3 g_raycast_origins[NumMarkers]; -D3DXVECTOR3 g_raycast_directions[NumMarkers]; -D3DXVECTOR3 g_raycast_hitpoints[NumMarkers]; -bool g_raycast_hittestresults[NumMarkers]; -static LARGE_INTEGER g_IntersectRaysPerfCounter, g_IntersectRaysPerfCounterOld, g_IntersectRaysPerfFrequency; -float g_IntersectRaysTime; - -//-------------------------------------------------------------------------------------- -// UI control IDs -//-------------------------------------------------------------------------------------- -#define IDC_TOGGLEFULLSCREEN 1 -#define IDC_TOGGLEREF 2 -#define IDC_CHANGEDEVICE 3 -#define IDC_WIND_SPEED_SLIDER 4 -#define IDC_WIND_DEPENDENCY_SLIDER 5 -#define IDC_TIME_SCALE_SLIDER 6 -#define IDC_TOGGLEWIREFRAME 7 -#define IDC_TOGGLESIMULATE 8 -#define IDC_TESSELLATION_LOD_SLIDER 9 -#define IDC_TOGGLEQUERYSTATS 10 -#define IDC_DETAIL_LEVEL_COMBO 11 -#define IDC_TOGGLEUSESHOREEFFECTS 12 - -CDXUTComboBox* g_pDetailLevelCombo = NULL; - -const INT kSliderRange = 100; -const FLOAT kMinWindDep = 0.f; -const FLOAT kMaxWindDep = 1.f; -const FLOAT kMinTimeScale = 0.25f; -const FLOAT kMaxTimeScale = 1.f; -const FLOAT kMinWindSpeedBeaufort = 2.0f; -const FLOAT kMaxWindSpeedBeaufort = 4.0f; - -//-------------------------------------------------------------------------------------- -// Forward declarations -//-------------------------------------------------------------------------------------- -bool CALLBACK IsD3D9DeviceAcceptable( D3DCAPS9* pCaps, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, bool bWindowed, void* pUserContext ); -bool CALLBACK IsD3D11DeviceAcceptable( const CD3D11EnumAdapterInfo *AdapterInfo, UINT Output, const CD3D11EnumDeviceInfo *DeviceInfo, DXGI_FORMAT BackBufferFormat, bool bWindowed, void* pUserContext ); -bool CALLBACK ModifyDeviceSettings( DXUTDeviceSettings* pDeviceSettings, void* pUserContext ); -HRESULT CALLBACK OnD3D11CreateDevice( ID3D11Device* pd3dDevice, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ); -HRESULT CALLBACK OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice, IDXGISwapChain* pSwapChain, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ); -void CALLBACK OnFrameMove( double fTime, float fElapsedTime, void* pUserContext ); -void CALLBACK OnD3D11FrameRender( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext, double fTime, float fElapsedTime, void* pUserContext ); -LRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing, void* pUserContext ); -void CALLBACK KeyboardProc( UINT nChar, bool bKeyDown, bool bAltDown, void* pUserContext ); -void CALLBACK OnGUIEvent( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserContext ); -void CALLBACK OnD3D11ReleasingSwapChain( void* pUserContext ); -void CALLBACK OnD3D11DestroyDevice( void* pUserContext ); - -void InitApp(); -void RenderText( double fTime ); -void AddGUISet(); -void RenderSkybox(ID3D11DeviceContext* pDC); -void RenderLogo(ID3D11DeviceContext* pDC); - -void UpdateReadbackPositions(); -void UpdateRaycastPositions(); - -HRESULT a; - -enum SynchronizationMode -{ - SynchronizationMode_None = 0, - SynchronizationMode_RenderOnly, - SynchronizationMode_Readback, - Num_SynchronizationModes -}; -SynchronizationMode g_bSyncMode = SynchronizationMode_None; - -//-------------------------------------------------------------------------------------- -// Entry point to the program. Initializes everything and goes into a message processing -// loop. Idle time is used to render the scene. -//-------------------------------------------------------------------------------------- -INT WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR cmdline, int ) -{ - // Enable run-time memory check for debug builds. -#if defined(DEBUG) | defined(_DEBUG) - _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); -#endif - // Set the callback functions. These functions allow DXUT to notify - // the application about device changes, user input, and windows messages. The - // callbacks are optional so you need only set callbacks for events you're interested - // in. However, if you don't handle the device reset/lost callbacks then the sample - // framework won't be able to reset your device since the application must first - // release all device resources before resetting. Likewise, if you don't handle the - // device created/destroyed callbacks then DXUT won't be able to - // recreate your device resources. - DXUTSetCallbackDeviceChanging( ModifyDeviceSettings ); - DXUTSetCallbackMsgProc( MsgProc ); - DXUTSetCallbackKeyboard( KeyboardProc ); - DXUTSetCallbackFrameMove( OnFrameMove ); - - DXUTSetCallbackD3D9DeviceAcceptable( IsD3D9DeviceAcceptable ); - DXUTSetCallbackD3D11DeviceAcceptable( IsD3D11DeviceAcceptable ); - DXUTSetCallbackD3D11DeviceCreated( OnD3D11CreateDevice ); - DXUTSetCallbackD3D11SwapChainResized( OnD3D11ResizedSwapChain ); - DXUTSetCallbackD3D11FrameRender( OnD3D11FrameRender ); - DXUTSetCallbackD3D11SwapChainReleasing( OnD3D11ReleasingSwapChain ); - DXUTSetCallbackD3D11DeviceDestroyed( OnD3D11DestroyDevice ); - - // TBD: Switch to gamma-correct - DXUTSetIsInGammaCorrectMode(false); - - // Show the cursor and clip it when in full screen - DXUTSetCursorSettings( true, true ); - - InitApp(); - - // Initialize DXUT and create the desired Win32 window and Direct3D - // device for the application. Calling each of these functions is optional, but they - // allow you to set several options which control the behavior of the framework. - DXUTInit( true, true, NULL ); // Parse the command line, and show msgboxes - DXUTSetCursorSettings( true, true ); - DXUTCreateWindow( L"FFT Ocean" ); - DXUTCreateDevice( D3D_FEATURE_LEVEL_11_0, true, 1280, 720 ); - - // Pass control to DXUT for handling the message pump and - // dispatching render calls. DXUT will call your FrameMove - // and FrameRender callback when there is idle time between handling window messages. - DXUTMainLoop(); - - return DXUTGetExitCode(); -} - - -//-------------------------------------------------------------------------------------- -// Initialize the app -//-------------------------------------------------------------------------------------- -void InitApp() -{ - g_ocean_quadtree_param.min_patch_length = 40.f; - g_ocean_quadtree_param.upper_grid_coverage = 64.0f; - g_ocean_quadtree_param.mesh_dim = 128; - g_ocean_quadtree_param.sea_level = -2.f; - g_ocean_quadtree_param.auto_root_lod = 10; - g_ocean_quadtree_param.use_tessellation = true; - g_ocean_quadtree_param.tessellation_lod = 50.0f; - g_ocean_quadtree_param.geomorphing_degree = 1.f; - g_ocean_quadtree_param.enable_CPU_timers = true; - - g_ocean_simulation_param.time_scale = 0.75f; - g_ocean_simulation_param.wave_amplitude = 0.8f; - g_ocean_simulation_param.wind_dir = NvFromDX(g_WindDir); - g_ocean_simulation_param.wind_speed = 2.52f; - g_ocean_simulation_param.wind_dependency = 0.85f; - g_ocean_simulation_param.choppy_scale = 1.2f; - g_ocean_simulation_param.small_wave_fraction = 0.f; - g_ocean_simulation_param.foam_dissipation_speed = 0.6f; - g_ocean_simulation_param.foam_falloff_speed = 0.985f; - g_ocean_simulation_param.foam_generation_amount = 0.12f; - g_ocean_simulation_param.foam_generation_threshold = 0.37f; - - g_ocean_simulation_settings.fft_period = 400.0f; - g_ocean_simulation_settings.detail_level = GFSDK_WaveWorks_Simulation_DetailLevel_Normal; - g_ocean_simulation_settings.readback_displacements = true; - g_ocean_simulation_settings.num_readback_FIFO_entries = ReadbackArchiveSize; - g_ocean_simulation_settings.aniso_level = 16; - g_ocean_simulation_settings.CPU_simulation_threading_model = GFSDK_WaveWorks_Simulation_CPU_Threading_Model_Automatic; - g_ocean_simulation_settings.use_Beaufort_scale = true; - g_ocean_simulation_settings.num_GPUs = 1; - g_ocean_simulation_settings.enable_CUDA_timers = true; - g_ocean_simulation_settings.enable_gfx_timers = true; - g_ocean_simulation_settings.enable_CPU_timers = true; - - // Initialize dialogs - g_SettingsDlg.Init( &g_DialogResourceManager ); - g_HUD.Init( &g_DialogResourceManager ); - g_SampleUI.Init( &g_DialogResourceManager ); - - g_Camera.SetRotateButtons( true, false, false ); - g_Camera.SetScalers(0.003f, 4000.0f); - - const D3DCOLOR kHUDBackgroundColor = 0x5F2F2F2F; - g_HUD.SetBackgroundColors(kHUDBackgroundColor); - g_HUD.SetCallback( OnGUIEvent ); - g_SampleUI.SetCallback( OnGUIEvent ); - - AddGUISet(); -} - -void UpdateDetailLevelCombo() -{ - if(NULL == g_pDetailLevelCombo) - return; - - g_pDetailLevelCombo->RemoveAllItems(); - - for(int detail_level = 0; detail_level <= g_max_detail_level; ++detail_level) - { - switch(detail_level) - { - case GFSDK_WaveWorks_Simulation_DetailLevel_Normal: - g_pDetailLevelCombo->AddItem( L"Normal", NULL ); - break; - case GFSDK_WaveWorks_Simulation_DetailLevel_High: - g_pDetailLevelCombo->AddItem( L"High", NULL ); - break; - case GFSDK_WaveWorks_Simulation_DetailLevel_Extreme: - g_pDetailLevelCombo->AddItem( L"Extreme", NULL ); - break; - } - } - - g_pDetailLevelCombo->SetSelectedByIndex(g_ocean_simulation_settings.detail_level); - g_pDetailLevelCombo->SetDropHeight(32); -} - -void AddGUISet() -{ - int iY = 10; - const int kElementSize = 15; - - g_HUD.AddButton(IDC_TOGGLEFULLSCREEN, L"Toggle Full Screen", 10, iY, 180, kElementSize); - g_HUD.AddButton(IDC_CHANGEDEVICE, L"Change Device", 10, iY += 20, 180, kElementSize, VK_F2); - iY += 20; - - g_HUD.AddCheckBox(IDC_TOGGLESIMULATE, L"Simulate Water", 10, iY += 20, 180, kElementSize, g_SimulateWater); - g_HUD.AddCheckBox(IDC_TOGGLEQUERYSTATS, L"Show Stats", 10, iY += 20, 180, kElementSize, g_QueryStats); - g_HUD.AddCheckBox(IDC_TOGGLEUSESHOREEFFECTS, L"Shore Effects", 10, iY += 20, 180, kElementSize, g_enableShoreEffects); - g_HUD.AddCheckBox(IDC_TOGGLEWIREFRAME, L"Wireframe", 10, iY += 20, 180, kElementSize, g_Wireframe); - iY += 20; - - g_HUD.AddStatic(IDC_WIND_SPEED_SLIDER, L"Wind speed", 10, iY += kElementSize, 180, kElementSize); - g_HUD.AddSlider(IDC_WIND_SPEED_SLIDER, 10, iY += 20, 180, kElementSize, 0, kSliderRange, int(float(kSliderRange) * (g_ocean_simulation_param.wind_speed-kMinWindSpeedBeaufort)/(kMaxWindSpeedBeaufort-kMinWindSpeedBeaufort))); - - g_HUD.AddStatic(IDC_WIND_DEPENDENCY_SLIDER, L"Wind dependency: %.2f", 10, iY += kElementSize, 180, kElementSize); - g_HUD.AddSlider(IDC_WIND_DEPENDENCY_SLIDER, 10, iY += 20, 180, kElementSize, 0, 100, int(float(kSliderRange) * (g_ocean_simulation_param.wind_dependency-kMinWindDep)/(kMaxWindDep-kMinWindDep))); - - g_HUD.AddStatic(IDC_TIME_SCALE_SLIDER, L"Time scale", 10, iY += kElementSize, 180, kElementSize); - g_HUD.AddSlider(IDC_TIME_SCALE_SLIDER, 10, iY += 20, 180, kElementSize, 0, kSliderRange, int(float(kSliderRange) * (g_ocean_simulation_param.time_scale-kMinTimeScale)/(kMaxTimeScale-kMinTimeScale))); - - iY += 20; - - g_HUD.AddStatic(IDC_TESSELLATION_LOD_SLIDER, L"Tessellation LOD", 10, iY += kElementSize, 180, kElementSize); - g_HUD.AddSlider(IDC_TESSELLATION_LOD_SLIDER, 10, iY += 20, 180, kElementSize, 0, 200, int(g_TessellationLOD)); - - g_HUD.AddStatic(0, L"Detail Level", 10, iY += kElementSize, 180, kElementSize); - g_HUD.AddComboBox( IDC_DETAIL_LEVEL_COMBO, 10, iY += 20, 180, kElementSize, 0, false, &g_pDetailLevelCombo ); - - iY += 20; -} - -//-------------------------------------------------------------------------------------- -// Called during device initialization, this code checks the device for some -// minimum set of capabilities, and rejects those that don't pass by returning E_FAIL. -//-------------------------------------------------------------------------------------- -bool CALLBACK IsD3D9DeviceAcceptable( D3DCAPS9* pCaps, D3DFORMAT AdapterFormat, - D3DFORMAT BackBufferFormat, bool bWindowed, void* pUserContext ) -{ - return false; -} - -bool CALLBACK IsD3D11DeviceAcceptable(const CD3D11EnumAdapterInfo *AdapterInfo, UINT Output, const CD3D11EnumDeviceInfo *DeviceInfo, - DXGI_FORMAT BackBufferFormat, bool bWindowed, void* pUserContext ) -{ - return true; -} - -//-------------------------------------------------------------------------------------- -// This callback function is called immediately before a device is created to allow the -// application to modify the device settings. The supplied pDeviceSettings parameter -// contains the settings that the framework has selected for the new device, and the -// application can make any desired changes directly to this structure. Note however that -// DXUT will not correct invalid device settings so care must be taken -// to return valid device settings, otherwise IDirect3D9::CreateDevice() will fail. -//-------------------------------------------------------------------------------------- -bool CALLBACK ModifyDeviceSettings( DXUTDeviceSettings* pDeviceSettings, void* pUserContext ) -{ - static bool s_bFirstTime = true; - if( s_bFirstTime ) - { - s_bFirstTime = false; - - // 16x CSAA - pDeviceSettings->d3d11.sd.SampleDesc.Count = 1; - pDeviceSettings->d3d11.sd.SampleDesc.Quality = 0; - g_Terrain.MultiSampleCount = 1; - g_Terrain.MultiSampleQuality = 0; - - // Turn off vsync - pDeviceSettings->d3d11.SyncInterval = 0; - } - else - { - if(pDeviceSettings->d3d11.sd.SampleDesc.Count>4) - pDeviceSettings->d3d11.sd.SampleDesc.Count = 4; - g_Terrain.MultiSampleCount = pDeviceSettings->d3d11.sd.SampleDesc.Count; - g_Terrain.MultiSampleQuality = pDeviceSettings->d3d11.sd.SampleDesc.Quality; - } - - // It seems that AdapterInfo->m_pAdapter cannot be trusted (DXUT bug?), so enumerate our own - IDXGIFactory1* pFactory = DXUTGetDXGIFactory(); - IDXGIAdapter* pAdapter = NULL; - HRESULT hr = pFactory->EnumAdapters(pDeviceSettings->d3d11.AdapterOrdinal,&pAdapter); - if(FAILED(hr) || NULL == pAdapter) - return false; - - // Check detail level support - int detail_level = 0; - for(; detail_level != Num_GFSDK_WaveWorks_Simulation_DetailLevels; ++detail_level) { - if(!GFSDK_WaveWorks_Simulation_DetailLevelIsSupported_D3D11(pAdapter, (GFSDK_WaveWorks_Simulation_DetailLevel)detail_level)) - break; - } - if(0 == detail_level) - return false; - - g_max_detail_level = (GFSDK_WaveWorks_Simulation_DetailLevel)(detail_level - 1); - g_ocean_simulation_settings.detail_level = g_max_detail_level; - - SAFE_RELEASE(pAdapter); - UpdateDetailLevelCombo(); - - return true; -} - -//-------------------------------------------------------------------------------------- -// Create any D3D11 resources that aren't dependant on the back buffer -//-------------------------------------------------------------------------------------- -HRESULT CALLBACK OnD3D11CreateDevice( ID3D11Device* pd3dDevice, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, - void* pUserContext ) -{ - HRESULT hr; - TCHAR path[MAX_PATH]; - static int first_time=0; - - ID3D11DeviceContext* pd3dImmediateContext = DXUTGetD3D11DeviceContext(); - V_RETURN( g_DialogResourceManager.OnD3D11CreateDevice( pd3dDevice, pd3dImmediateContext ) ); - V_RETURN( g_SettingsDlg.OnD3D11CreateDevice( pd3dDevice ) ); - g_pTxtHelper = new CDXUTTextHelper( pd3dDevice, pd3dImmediateContext, &g_DialogResourceManager, 15 ); - - if(first_time==0) - { - // Setup the camera's view parameters - D3DXVECTOR3 vecEye(-100.f, 8.0f, 200.f); - D3DXVECTOR3 vecAt (100.f, 0.f, 200.f); - - g_Camera.SetViewParams(&vecEye, &vecAt); - g_Camera.SetScalers(0.005f, 50.0f); - - } - - float aspectRatio = (float)pBackBufferSurfaceDesc->Width / (float)pBackBufferSurfaceDesc->Height; - g_Camera.SetProjParams(camera_fov * D3DX_PI / 360.0f, aspectRatio, scene_z_near, scene_z_far); - - // Ocean sim - GFSDK_WaveWorks_InitD3D11(pd3dDevice,NULL,GFSDK_WAVEWORKS_API_GUID); - - GFSDK_WaveWorks_Simulation_CreateD3D11(g_ocean_simulation_settings, g_ocean_simulation_param, pd3dDevice, &g_hOceanSimulation); - GFSDK_WaveWorks_Savestate_CreateD3D11(GFSDK_WaveWorks_StatePreserve_All, pd3dDevice, &g_hOceanSavestate); - g_ForceKick = true; - - // Ocean object - g_pOceanSurf = new OceanSurface(); - g_pOceanSurf->init(); - g_pOceanSurf->initQuadTree(g_ocean_quadtree_param); - GFSDK_WaveWorks_Simulation_UpdateProperties(g_hOceanSimulation, g_ocean_simulation_settings, g_ocean_simulation_param); - GFSDK_WaveWorks_Quadtree_SetFrustumCullMargin(g_pOceanSurf->m_hOceanQuadTree, GFSDK_WaveWorks_Simulation_GetConservativeMaxDisplacementEstimate(g_hOceanSimulation)); - - // Effect hooks borrowed from ocean object - g_pLogoTechnique = g_pOceanSurf->m_pOceanFX->GetTechniqueByName("DisplayLogoTech"); - g_pLogoTextureVariable = g_pOceanSurf->m_pOceanFX->GetVariableByName("g_LogoTexture")->AsShaderResource(); - - ID3D11Resource* pD3D11Resource = NULL; - DXUTFindDXSDKMediaFileCch(path, MAX_PATH, TEXT("..\\media\\nvidia_logo.dds")); - V_RETURN(D3DX11CreateTextureFromFile(pd3dDevice, path, NULL, NULL, &pD3D11Resource, NULL)); - V_RETURN(pd3dDevice->CreateShaderResourceView(pD3D11Resource, NULL, &g_pLogoTex)); - SAFE_RELEASE(pD3D11Resource); - - // Terrain and sky fx - ID3DXBuffer* pEffectBuffer = NULL; - DXUTFindDXSDKMediaFileCch(path, MAX_PATH, TEXT("..\\Media\\sample_d3d11.fxo")); - V_RETURN(LoadFile(path, &pEffectBuffer)); - V_RETURN(D3DX11CreateEffectFromMemory(pEffectBuffer->GetBufferPointer(), pEffectBuffer->GetBufferSize(), 0, pd3dDevice, &g_pEffect)); - SAFE_RELEASE(pEffectBuffer); - - // Initialize shoreline interaction. - g_pDistanceField = new DistanceField( &g_Terrain ); - g_pDistanceField->Init( pd3dDevice ); - g_pOceanSurf->AttachDistanceFieldModule( g_pDistanceField ); - - // Initialize terrain - g_Terrain.Initialize(pd3dDevice,g_pEffect); - g_Terrain.LoadTextures(); - g_Terrain.BackbufferWidth=(float)pBackBufferSurfaceDesc->Width; - g_Terrain.BackbufferHeight=(float)pBackBufferSurfaceDesc->Height; - g_Terrain.ReCreateBuffers(); - - // Creating pipeline query - D3D11_QUERY_DESC queryDesc; - queryDesc.Query = D3D11_QUERY_PIPELINE_STATISTICS; - queryDesc.MiscFlags = 0; - pd3dDevice->CreateQuery(&queryDesc, &g_pPipelineQuery); - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -// Create any D3D11 resources that depend on the back buffer -//-------------------------------------------------------------------------------------- -HRESULT CALLBACK OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice, IDXGISwapChain* pSwapChain, - const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ) -{ - HRESULT hr; - - V_RETURN( g_DialogResourceManager.OnD3D11ResizedSwapChain(pd3dDevice,pBackBufferSurfaceDesc) ); - V_RETURN( g_SettingsDlg.OnD3D11ResizedSwapChain(pd3dDevice,pBackBufferSurfaceDesc) ); - - float aspectRatio = (float)pBackBufferSurfaceDesc->Width / (float)pBackBufferSurfaceDesc->Height; - g_Camera.SetProjParams(camera_fov * D3DX_PI / 360.0f, aspectRatio, scene_z_near, scene_z_far); - - // UI - g_HUD.SetLocation(pBackBufferSurfaceDesc->Width-240, 8); - g_HUD.SetSize(232, 704); - - g_Terrain.BackbufferWidth = (float)pBackBufferSurfaceDesc->Width; - g_Terrain.BackbufferHeight = (float)pBackBufferSurfaceDesc->Height; - - g_Terrain.ReCreateBuffers(); - - // Logo VB - float width = (float)200/pBackBufferSurfaceDesc->Width; - float height = (float)160/pBackBufferSurfaceDesc->Height; - float half_tex = 0; - float vertices0[] = {-0.98f, -0.96f + height, 0, half_tex, half_tex, - -0.98f, -0.96f, 0, half_tex, half_tex+1.0f, - -0.98f + width, -0.96f + height, 0, half_tex+1.0f, half_tex, - -0.98f + width, -0.96f, 0, half_tex+1.0f, half_tex+1.0f}; - - D3D11_BUFFER_DESC vBufferDesc; - vBufferDesc.ByteWidth = sizeof(vertices0); - vBufferDesc.Usage = D3D11_USAGE_IMMUTABLE; - vBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; - vBufferDesc.CPUAccessFlags = 0; - vBufferDesc.MiscFlags = 0; - vBufferDesc.StructureByteStride = 0; - - D3D11_SUBRESOURCE_DATA vSrd; - vSrd.pSysMem = vertices0; - vSrd.SysMemPitch = 0; - vSrd.SysMemSlicePitch = 0; - g_Terrain.BackbufferWidth = (float)pBackBufferSurfaceDesc->Width; - g_Terrain.BackbufferHeight = (float)pBackBufferSurfaceDesc->Height; - - V_RETURN(pd3dDevice->CreateBuffer(&vBufferDesc, &vSrd, &g_pLogoVB)); - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -// Handle updates to the scene. This is called regardless of which D3D API is used -//-------------------------------------------------------------------------------------- -void CALLBACK OnFrameMove( double fTime, float fElapsedTime, void* pUserContext ) -{ - g_SimulationTime += fElapsedTime; - if(g_SimulateWater) - { - g_ShoreTime += fElapsedTime*g_ocean_simulation_param.time_scale; - } - - // Update the camera's position based on user input - g_Camera.FrameMove( fElapsedTime ); -} - -//-------------------------------------------------------------------------------------- -// Render the scene using the D3D11 device -//-------------------------------------------------------------------------------------- -void CALLBACK OnD3D11FrameRender( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pDC, double fTime, - float fElapsedTime, void* pUserContext ) -{ - CDXUTStatic* static_being_updated; - WCHAR number_string[256]; - - if(g_SimulateWater || g_ForceKick || (gfsdk_waveworks_result_NONE==GFSDK_WaveWorks_Simulation_GetStagingCursor(g_hOceanSimulation,NULL))) - { - GFSDK_WaveWorks_Simulation_SetTime(g_hOceanSimulation, g_SimulationTime); - GFSDK_WaveWorks_Simulation_KickD3D11(g_hOceanSimulation, &g_LastKickID, pDC, g_hOceanSavestate); - - if(g_bSyncMode >= SynchronizationMode_RenderOnly) - { - // Block until the just-submitted kick is ready to render - gfsdk_U64 stagingCursorKickID = g_LastKickID - 1; // Just ensure that the initial value is different from last kick, - // so that we continue waiting if the staging cursor is empty - GFSDK_WaveWorks_Simulation_GetStagingCursor(g_hOceanSimulation, &stagingCursorKickID); - while(stagingCursorKickID != g_LastKickID) - { - const bool doBlock = true; - GFSDK_WaveWorks_Simulation_AdvanceStagingCursorD3D11(g_hOceanSimulation, doBlock, pDC, g_hOceanSavestate); - GFSDK_WaveWorks_Simulation_GetStagingCursor(g_hOceanSimulation, &stagingCursorKickID); - } - - if(g_bSyncMode >= SynchronizationMode_Readback && g_ocean_simulation_settings.readback_displacements) - { - gfsdk_U64 readbackCursorKickID = g_LastKickID - 1; // Just ensure that the initial value is different from last kick, - // so that we continue waiting if the staging cursor is empty - while(readbackCursorKickID != g_LastKickID) - { - const bool doBlock = true; - GFSDK_WaveWorks_Simulation_AdvanceReadbackCursor(g_hOceanSimulation, doBlock); - GFSDK_WaveWorks_Simulation_GetReadbackCursor(g_hOceanSimulation, &readbackCursorKickID); - } - } - } - else - { - // Keep feeding the simulation pipeline until it is full - this loop should skip in all - // cases except the first iteration, when the simulation pipeline is first 'primed' - while(gfsdk_waveworks_result_NONE==GFSDK_WaveWorks_Simulation_GetStagingCursor(g_hOceanSimulation,NULL)) - { - GFSDK_WaveWorks_Simulation_SetTime(g_hOceanSimulation, g_SimulationTime); - GFSDK_WaveWorks_Simulation_KickD3D11(g_hOceanSimulation, &g_LastKickID, pDC, g_hOceanSavestate); - } - } - - GFSDK_WaveWorks_Savestate_RestoreD3D11(g_hOceanSavestate, pDC); - g_ForceKick = false; - - // Exercise the readback archiving API - if(gfsdk_waveworks_result_OK == GFSDK_WaveWorks_Simulation_GetReadbackCursor(g_hOceanSimulation, &g_LastReadbackKickID)) - { - if((g_LastReadbackKickID-g_LastArchivedKickID) > ReadbackArchiveInterval) - { - GFSDK_WaveWorks_Simulation_ArchiveDisplacements(g_hOceanSimulation); - g_LastArchivedKickID = g_LastReadbackKickID; - } - } - } - - // deduce the rendering latency of the WaveWorks pipeline - { - gfsdk_U64 staging_cursor_kickID = 0; - GFSDK_WaveWorks_Simulation_GetStagingCursor(g_hOceanSimulation,&staging_cursor_kickID); - g_RenderLatency = (gfsdk_U32)(g_LastKickID - staging_cursor_kickID); - } - - // likewise with the readback latency - if(g_ocean_simulation_settings.readback_displacements) - { - gfsdk_U64 readback_cursor_kickID = 0; - if(gfsdk_waveworks_result_OK == GFSDK_WaveWorks_Simulation_GetReadbackCursor(g_hOceanSimulation,&readback_cursor_kickID)) - { - g_ReadbackLatency = (gfsdk_S32)(g_LastKickID - readback_cursor_kickID); - } - else - { - g_ReadbackLatency = -1; - } - } - else - { - g_ReadbackLatency = -1; - } - - // getting simulation timings - GFSDK_WaveWorks_Simulation_GetStats(g_hOceanSimulation,g_ocean_simulation_stats); - - // Performing treadbacks and raycasts - UpdateReadbackPositions(); - UpdateRaycastPositions(); - - // exponential filtering for stats - g_ocean_simulation_stats_filtered.CPU_main_thread_wait_time = g_ocean_simulation_stats_filtered.CPU_main_thread_wait_time*0.98f + 0.02f*g_ocean_simulation_stats.CPU_main_thread_wait_time; - g_ocean_simulation_stats_filtered.CPU_threads_start_to_finish_time = g_ocean_simulation_stats_filtered.CPU_threads_start_to_finish_time*0.98f + 0.02f*g_ocean_simulation_stats.CPU_threads_start_to_finish_time; - g_ocean_simulation_stats_filtered.CPU_threads_total_time = g_ocean_simulation_stats_filtered.CPU_threads_total_time*0.98f + 0.02f*g_ocean_simulation_stats.CPU_threads_total_time; - g_ocean_simulation_stats_filtered.GPU_simulation_time = g_ocean_simulation_stats_filtered.GPU_simulation_time*0.98f + 0.02f*g_ocean_simulation_stats.GPU_simulation_time; - g_ocean_simulation_stats_filtered.GPU_FFT_simulation_time = g_ocean_simulation_stats_filtered.GPU_FFT_simulation_time*0.98f + 0.02f*g_ocean_simulation_stats.GPU_FFT_simulation_time; - g_ocean_simulation_stats_filtered.GPU_gfx_time = g_ocean_simulation_stats_filtered.GPU_gfx_time*0.98f + 0.02f*g_ocean_simulation_stats.GPU_gfx_time; - g_ocean_simulation_stats_filtered.GPU_update_time = g_ocean_simulation_stats_filtered.GPU_update_time*0.98f + 0.02f*g_ocean_simulation_stats.GPU_update_time; - - // If the settings dialog is being shown, then - // render it instead of rendering the app's scene - if( g_SettingsDlg.IsActive() ) - { - g_SettingsDlg.OnRender( fElapsedTime ); - return; - } - - g_FrameTime = fElapsedTime; - - D3DXVECTOR2 ScreenSizeInv(1.0f / (g_Terrain.BackbufferWidth*main_buffer_size_multiplier), 1.0f / (g_Terrain.BackbufferHeight*main_buffer_size_multiplier)); - - ID3DX11Effect* oceanFX = g_pOceanSurf->m_pOceanFX; - - oceanFX->GetVariableByName("g_ZNear")->AsScalar()->SetFloat(scene_z_near); - oceanFX->GetVariableByName("g_ZFar")->AsScalar()->SetFloat(scene_z_far); - D3DXVECTOR3 light_pos = D3DXVECTOR3(140000.0f,65000.0f,40000.0f); - g_pEffect->GetVariableByName("g_LightPosition")->AsVector()->SetFloatVector(light_pos); - g_pEffect->GetVariableByName("g_ScreenSizeInv")->AsVector()->SetFloatVector(ScreenSizeInv); - oceanFX->GetVariableByName("g_ScreenSizeInv")->AsVector()->SetFloatVector(ScreenSizeInv); - g_pEffect->GetVariableByName("g_DynamicTessFactor")->AsScalar()->SetFloat(g_ocean_quadtree_param.tessellation_lod * 0.25f + 0.1f); - - g_pOceanSurf->m_pOceanFX->GetVariableByName("g_enableShoreEffects")->AsScalar()->SetFloat(g_enableShoreEffects? 1.0f:0.0f); - g_Terrain.pEffect->GetVariableByName("g_enableShoreEffects")->AsScalar()->SetFloat(g_enableShoreEffects? 1.0f:0.0f); - - g_Terrain.Render(&g_Camera); - g_pDistanceField->GenerateDataTexture( pDC ); - - - - RenderLogo(pDC); - - if(g_bShowUI) { - - const WCHAR* windSpeedFormatString = g_ocean_simulation_settings.use_Beaufort_scale ? L"Beaufort: %.1f" : L"Wind speed: %.1f"; - swprintf_s(number_string, 255, windSpeedFormatString, g_ocean_simulation_param.wind_speed); - static_being_updated = g_HUD.GetStatic(IDC_WIND_SPEED_SLIDER); - static_being_updated->SetText(number_string); - - swprintf_s(number_string, 255, L"Wind dependency: %.2f", g_ocean_simulation_param.wind_dependency); - static_being_updated = g_HUD.GetStatic(IDC_WIND_DEPENDENCY_SLIDER); - static_being_updated->SetText(number_string); - - swprintf_s(number_string, 255, L"Time scale: %.1f", g_ocean_simulation_param.time_scale); - static_being_updated = g_HUD.GetStatic(IDC_TIME_SCALE_SLIDER); - static_being_updated->SetText(number_string); - - swprintf_s(number_string, 255, L"Tessellation LOD: %.0f", g_ocean_quadtree_param.tessellation_lod); - static_being_updated = g_HUD.GetStatic(IDC_TESSELLATION_LOD_SLIDER); - static_being_updated->SetText(number_string); - - g_HUD.OnRender( fElapsedTime ); - g_SampleUI.OnRender( fElapsedTime ); - RenderText( fTime ); - } - - pDC->GSSetShader(NULL,NULL,0); -} - - -//-------------------------------------------------------------------------------------- -// Render the help and statistics text. This function uses the ID3DXFont interface for -// efficient text rendering. -//-------------------------------------------------------------------------------------- -void RenderText( double fTime ) -{ - - WCHAR number_string[256]; - WCHAR number_string_with_spaces[256]; - const UINT buffer_len = 2048; - WCHAR buffer[buffer_len]; - - // Output statistics - g_pTxtHelper->Begin(); - g_pTxtHelper->SetInsertionPos( 2, 0 ); - g_pTxtHelper->SetForegroundColor( D3DXCOLOR( 0.9f, 0.9f, 0.9f, 1.0f ) ); - - swprintf_s(buffer, buffer_len, L"Lib build: %S\n", GFSDK_WaveWorks_GetBuildString()); - g_pTxtHelper->DrawTextLine(buffer); - - g_pTxtHelper->DrawTextLine( DXUTGetFrameStats(true) ); - g_pTxtHelper->DrawTextLine( DXUTGetDeviceStats() ); - - if(g_QueryStats) - { - g_pTxtHelper->SetForegroundColor( D3DXCOLOR( 1.0f, 1.0f, 1.0f, 1.0f ) ); - g_pTxtHelper->DrawTextLine(L"----------"); - wsprintf(buffer, L"Quad patches drawn : %d\n", g_ocean_quadtree_stats.num_patches_drawn); - g_pTxtHelper->DrawTextLine(buffer); - - g_pTxtHelper->DrawTextLine(L"----------"); - g_pTxtHelper->DrawTextLine(L"Pipeline Stats for water surface"); - - wsprintf(number_string, L"%d", (UINT)g_PipelineQueryData.IAPrimitives); - number_string_with_spaces[0]=NULL; - for(int i=0;i<(int)wcslen(number_string);i++) - { - if((((int)wcslen(number_string)-i)%3==0)&&(i!=0)) wcsncat_s(&number_string_with_spaces[0],256,L",",1); - wcsncat_s(&number_string_with_spaces[0],256,&number_string[i],1); - } - wsprintf(buffer, L"Input Primitives : %s", number_string_with_spaces); - g_pTxtHelper->DrawTextLine(buffer); - - - wsprintf(number_string, L"%d", (UINT)g_PipelineQueryData.CInvocations); - number_string_with_spaces[0]=NULL; - for(int i=0;i<(int)wcslen(number_string);i++) - { - if((((int)wcslen(number_string)-i)%3==0)&&(i!=0)) wcsncat_s(&number_string_with_spaces[0],256,L",",1); - wcsncat_s(&number_string_with_spaces[0],256,&number_string[i],1); - } - wsprintf(buffer, L"Primitives created : %s", number_string_with_spaces); - g_pTxtHelper->DrawTextLine(buffer); - - - wsprintf(number_string, L"%d", (UINT)((float)g_PipelineQueryData.CInvocations*(1.0f/g_FrameTime)/1000000.0f)); - number_string_with_spaces[0]=NULL; - for(int i=0;i<(int)wcslen(number_string);i++) - { - if((((int)wcslen(number_string)-i)%3==0)&&(i!=0)) wcsncat_s(&number_string_with_spaces[0],256,L",",1); - wcsncat_s(&number_string_with_spaces[0],256,&number_string[i],1); - } - wsprintf(buffer, L"Primitives created / sec : %sM", number_string_with_spaces); - g_pTxtHelper->DrawTextLine(buffer); - - wsprintf(number_string, L"%d", (UINT)g_PipelineQueryData.CPrimitives); - number_string_with_spaces[0]=NULL; - for(int i=0;i<(int)wcslen(number_string);i++) - { - if((((int)wcslen(number_string)-i)%3==0)&&(i!=0)) wcsncat_s(&number_string_with_spaces[0],256,L",",1); - wcsncat_s(&number_string_with_spaces[0],256,&number_string[i],1); - } - wsprintf(buffer, L"Primitives passed clipping : %s", number_string_with_spaces); - g_pTxtHelper->DrawTextLine(buffer); - - if(g_PipelineQueryData.IAPrimitives>0) - { - wsprintf(number_string, L"%d", (UINT)(g_PipelineQueryData.CInvocations/g_PipelineQueryData.IAPrimitives)); - number_string_with_spaces[0]=NULL; - for(int i=0;i<(int)wcslen(number_string);i++) - { - if((((int)wcslen(number_string)-i)%3==0)&&(i!=0)) wcsncat_s(&number_string_with_spaces[0],256,L",",1); - wcsncat_s(&number_string_with_spaces[0],256,&number_string[i],1); - } - wsprintf(buffer, L"Average expansion ratio : %s", number_string_with_spaces); - } - else - { - wsprintf(buffer, L"Average expansion ratio : N/A"); - } - g_pTxtHelper->DrawTextLine(buffer); - g_pTxtHelper->DrawTextLine(L"----------"); - - swprintf_s(buffer,buffer_len,L"GPU_gfx_time : %3.3f msec",g_ocean_simulation_stats_filtered.GPU_gfx_time); - g_pTxtHelper->DrawTextLine(buffer); - swprintf_s(buffer,buffer_len,L"GPU_update_time : %3.3f msec",g_ocean_simulation_stats_filtered.GPU_update_time); - g_pTxtHelper->DrawTextLine(buffer); - swprintf_s(buffer,buffer_len,L"CPU_main_thread_wait_time : %3.3f msec",g_ocean_simulation_stats_filtered.CPU_main_thread_wait_time); - g_pTxtHelper->DrawTextLine(buffer); - swprintf_s(buffer,buffer_len,L"CPU_threads_start_to_finish_time : %3.3f msec",g_ocean_simulation_stats_filtered.CPU_threads_start_to_finish_time); - g_pTxtHelper->DrawTextLine(buffer); - swprintf_s(buffer,buffer_len,L"CPU_threads_total_time : %3.3f msec",g_ocean_simulation_stats_filtered.CPU_threads_total_time); - g_pTxtHelper->DrawTextLine(buffer); - swprintf_s(buffer,buffer_len,L"GPU_simulation_time : %3.3f msec",g_ocean_simulation_stats_filtered.GPU_simulation_time); - g_pTxtHelper->DrawTextLine(buffer); - swprintf_s(buffer,buffer_len,L"GPU_FFT_simulation_time : %3.3f msec",g_ocean_simulation_stats_filtered.GPU_FFT_simulation_time); - g_pTxtHelper->DrawTextLine(buffer); - swprintf_s(buffer,buffer_len,L"CPU_quadtree_update_time : %3.3f msec",g_ocean_quadtree_stats.CPU_quadtree_update_time); - g_pTxtHelper->DrawTextLine(buffer); - - swprintf_s(buffer,buffer_len,L"RenderLatency : %i",g_RenderLatency); - g_pTxtHelper->DrawTextLine(buffer); - if(g_ReadbackLatency >= 0) - { - swprintf_s(buffer,buffer_len,L"ReadbackLatency : %i",g_ReadbackLatency); - g_pTxtHelper->DrawTextLine(buffer); - } - else - { - swprintf_s(buffer,buffer_len,L"ReadbackLatency : "); - g_pTxtHelper->DrawTextLine(buffer); - } - - swprintf_s(buffer,buffer_len,L"Num of raycasts : %i",NumMarkers); - g_pTxtHelper->DrawTextLine(buffer); - swprintf_s(buffer,buffer_len,L"Total time for raycasts : %3.3f msec", 1000.0f * g_IntersectRaysTime); - g_pTxtHelper->DrawTextLine(buffer); - swprintf_s(buffer,buffer_len,L"Time per raycast : %3.3f msec", 1000.0f * g_IntersectRaysTime / NumMarkers); - g_pTxtHelper->DrawTextLine(buffer); - g_pTxtHelper->DrawTextLine(L"----------"); - swprintf_s(buffer,buffer_len,L"Readback cache coordinate : %3.3f", g_ReadbackCoord); - g_pTxtHelper->DrawTextLine(buffer); - } - - // Draw help - if( g_bShowHelp ) - { - g_pTxtHelper->DrawTextLine(L"----------"); - g_pTxtHelper->DrawTextLine( L"Controls:" ); - g_pTxtHelper->DrawTextLine( L"Camera control: left mouse\n"); - g_pTxtHelper->DrawTextLine( L"W/S/A/D/Q/E to move camera" ); - g_pTxtHelper->DrawTextLine( L"'[' to cycle readback mode" ); - g_pTxtHelper->DrawTextLine( L"'N'/'M' to change readback cache coordinate" ); - g_pTxtHelper->DrawTextLine( L"'U' to toggle UI" ); - g_pTxtHelper->DrawTextLine( L"Hide help: F1\nQuit: ESC\n" ); - } - else - { - g_pTxtHelper->DrawTextLine(L"----------"); - g_pTxtHelper->DrawTextLine( L"Press F1 for help" ); - } - g_pTxtHelper->End(); -} - - -//-------------------------------------------------------------------------------------- -// Before handling window messages, DXUT passes incoming windows -// messages to the application through this callback function. If the application sets -// *pbNoFurtherProcessing to TRUE, then DXUT will not process this message. -//-------------------------------------------------------------------------------------- -LRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing, void* pUserContext ) -{ - // Always allow dialog resource manager calls to handle global messages - // so GUI state is updated correctly - *pbNoFurtherProcessing = g_DialogResourceManager.MsgProc( hWnd, uMsg, wParam, lParam ); - if( *pbNoFurtherProcessing ) - return 0; - - if( g_SettingsDlg.IsActive() ) - { - g_SettingsDlg.MsgProc( hWnd, uMsg, wParam, lParam ); - return 0; - } - - // Give the dialogs a chance to handle the message first - *pbNoFurtherProcessing = g_HUD.MsgProc( hWnd, uMsg, wParam, lParam ); - if( *pbNoFurtherProcessing ) - return 0; - *pbNoFurtherProcessing = g_SampleUI.MsgProc( hWnd, uMsg, wParam, lParam ); - if( *pbNoFurtherProcessing ) - return 0; - - // Pass all remaining windows messages to camera so it can respond to user input - g_Camera.HandleMessages( hWnd, uMsg, wParam, lParam ); - - return 0; -} - - -//-------------------------------------------------------------------------------------- -// As a convenience, DXUT inspects the incoming windows messages for -// keystroke messages and decodes the message parameters to pass relevant keyboard -// messages to the application. The framework does not remove the underlying keystroke -// messages, which are still passed to the application's MsgProc callback. -//-------------------------------------------------------------------------------------- -void CALLBACK KeyboardProc( UINT nChar, bool bKeyDown, bool bAltDown, void* pUserContext ) -{ - if( bKeyDown ) - { - switch( nChar ) - { - case VK_F1: - g_bShowHelp = !g_bShowHelp; - break; - case 'u': - case 'U': - g_bShowUI = !g_bShowUI; - break; - case VK_OEM_4: // '[{' for US - g_bSyncMode = (SynchronizationMode)((g_bSyncMode+1)%Num_SynchronizationModes); - break; - case 'n': - case 'N': - if(1.f == g_ReadbackCoord) - g_ReadbackCoord = 0.f; - else - { - g_ReadbackCoord -= 0.5f; - if(g_ReadbackCoord < 0.f) - g_ReadbackCoord = 0.f; - } - break; - case 'm': - case 'M': - if(0.f == g_ReadbackCoord) - g_ReadbackCoord = 1.f; - else - { - g_ReadbackCoord += 0.5f; - if(g_ReadbackCoord > (ReadbackArchiveSize-1)) - g_ReadbackCoord = (ReadbackArchiveSize-1); - } - break; - } - } -} - - -//-------------------------------------------------------------------------------------- -// Handles the GUI events -//-------------------------------------------------------------------------------------- -void CALLBACK OnGUIEvent( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserContext ) -{ - - switch( nControlID ) - { - case IDC_TOGGLEFULLSCREEN: DXUTToggleFullScreen(); break; - case IDC_TOGGLEREF: DXUTToggleREF(); break; - case IDC_CHANGEDEVICE: g_SettingsDlg.SetActive( !g_SettingsDlg.IsActive() ); break; - case IDC_TOGGLESIMULATE: g_SimulateWater = g_HUD.GetCheckBox(IDC_TOGGLESIMULATE)->GetChecked(); break; - case IDC_TOGGLEQUERYSTATS: g_QueryStats = g_HUD.GetCheckBox(IDC_TOGGLEQUERYSTATS)->GetChecked(); break; - - - case IDC_TOGGLEUSESHOREEFFECTS: - { - g_enableShoreEffects = !g_enableShoreEffects; - break; - } - - case IDC_TOGGLEWIREFRAME: - { - g_Wireframe = !g_Wireframe; - break; - } - - case IDC_WIND_SPEED_SLIDER: - if(EVENT_SLIDER_VALUE_CHANGED_UP == nEvent) - { - g_ocean_simulation_param.wind_speed = kMinWindSpeedBeaufort + FLOAT(g_HUD.GetSlider(IDC_WIND_SPEED_SLIDER)->GetValue()) * (kMaxWindSpeedBeaufort-kMinWindSpeedBeaufort)/float(kSliderRange); - GFSDK_WaveWorks_Simulation_UpdateProperties(g_hOceanSimulation, g_ocean_simulation_settings, g_ocean_simulation_param); - GFSDK_WaveWorks_Quadtree_SetFrustumCullMargin(g_pOceanSurf->m_hOceanQuadTree, GFSDK_WaveWorks_Simulation_GetConservativeMaxDisplacementEstimate(g_hOceanSimulation)); - g_BaseGerstnerAmplitude = (GFSDK_WaveWorks_Simulation_GetConservativeMaxDisplacementEstimate(g_hOceanSimulation)/4.0f); // The estimate is based on significant wave height with 4x confidence: http://en.wikipedia.org/wiki/Significant_wave_height, we take it as our shore wave - g_BaseGerstnerWavelength = 14.0f*g_BaseGerstnerAmplitude; // 7.0 is the min possible, according to Bascom reports: http://hyperphysics.phy-astr.gsu.edu/hbase/waves/watwav2.html - g_BaseGerstnerSpeed = sqrtf(9.81f*g_BaseGerstnerWavelength/6.28f); // m/sec, let's use equation for deep water waves for simplicity, and slow it down a bit as we're working with shallow water - break; - } - break; - - case IDC_WIND_DEPENDENCY_SLIDER: - if(EVENT_SLIDER_VALUE_CHANGED_UP == nEvent) - { - g_ocean_simulation_param.wind_dependency = kMinWindDep + FLOAT(g_HUD.GetSlider(IDC_WIND_DEPENDENCY_SLIDER)->GetValue()) * (kMaxWindDep-kMinWindDep)/float(kSliderRange); - GFSDK_WaveWorks_Simulation_UpdateProperties(g_hOceanSimulation, g_ocean_simulation_settings, g_ocean_simulation_param); - GFSDK_WaveWorks_Quadtree_SetFrustumCullMargin(g_pOceanSurf->m_hOceanQuadTree, GFSDK_WaveWorks_Simulation_GetConservativeMaxDisplacementEstimate(g_hOceanSimulation)); - } - break; - - case IDC_TIME_SCALE_SLIDER: - { - g_ocean_simulation_param.time_scale = kMinTimeScale + FLOAT(g_HUD.GetSlider(IDC_TIME_SCALE_SLIDER)->GetValue()) * (kMaxTimeScale-kMinTimeScale)/float(kSliderRange); - GFSDK_WaveWorks_Simulation_UpdateProperties(g_hOceanSimulation, g_ocean_simulation_settings, g_ocean_simulation_param); - } - break; - - case IDC_TESSELLATION_LOD_SLIDER: - { - g_ocean_quadtree_param.tessellation_lod = (float)g_HUD.GetSlider(IDC_TESSELLATION_LOD_SLIDER)->GetValue(); - g_pOceanSurf->initQuadTree(g_ocean_quadtree_param); - } - break; - - case IDC_DETAIL_LEVEL_COMBO: - { - g_ocean_simulation_settings.detail_level = (GFSDK_WaveWorks_Simulation_DetailLevel)g_HUD.GetComboBox(IDC_DETAIL_LEVEL_COMBO)->GetSelectedIndex(); - GFSDK_WaveWorks_Simulation_UpdateProperties(g_hOceanSimulation, g_ocean_simulation_settings, g_ocean_simulation_param); - } - break; - - } - -} - - -//-------------------------------------------------------------------------------------- -// Release D3D11 resources created in OnD3D11ResizedSwapChain -//-------------------------------------------------------------------------------------- -void CALLBACK OnD3D11ReleasingSwapChain( void* pUserContext ) -{ - g_DialogResourceManager.OnD3D11ReleasingSwapChain(); - - SAFE_RELEASE(g_pLogoVB); -} - - -//-------------------------------------------------------------------------------------- -// Release D3D11 resources created in OnD3D11CreateDevice -//-------------------------------------------------------------------------------------- -void CALLBACK OnD3D11DestroyDevice( void* pUserContext ) -{ - g_DialogResourceManager.OnD3D11DestroyDevice(); - g_SettingsDlg.OnD3D11DestroyDevice(); - CDXUTDirectionWidget::StaticOnD3D11DestroyDevice(); - - // Ocean object - SAFE_DELETE(g_pOceanSurf); - SAFE_DELETE(g_pDistanceField); - - if(g_hOceanSimulation) - { - GFSDK_WaveWorks_Simulation_Destroy(g_hOceanSimulation); - g_hOceanSimulation = NULL; - } - SAFE_RELEASE(g_pLogoTex); - SAFE_RELEASE(g_pEffect); - SAFE_DELETE(g_pTxtHelper); - g_Terrain.DeInitialize(); - - if(g_hOceanSavestate) - { - GFSDK_WaveWorks_Savestate_Destroy(g_hOceanSavestate); - g_hOceanSavestate = NULL; - } - - GFSDK_WaveWorks_ReleaseD3D11(DXUTGetD3D11Device()); - - SAFE_RELEASE(g_pPipelineQuery); -} - -void RenderLogo(ID3D11DeviceContext* pDC) -{ - g_pLogoTextureVariable->SetResource(g_pLogoTex); - - const UINT vbOffset = 0; - const UINT vertexStride = 20; - pDC->IASetInputLayout(g_pOceanSurf->m_pQuadLayout); - pDC->IASetVertexBuffers(0, 1, &g_pLogoVB, &vertexStride, &vbOffset); - pDC->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); - pDC->GSSetShader(NULL,NULL,0); - pDC->HSSetShader(NULL,NULL,0); - pDC->DSSetShader(NULL,NULL,0); - g_pLogoTechnique->GetPassByIndex(0)->Apply(0, pDC); - pDC->Draw(4, 0); -} - -void UpdateReadbackPositions() -{ - for(int x = 0; x != NumMarkersXY; ++x) - { - for(int y = 0; y != NumMarkersXY; ++y) - { - g_readback_marker_coords[y * NumMarkersXY + x].x = 5.0f*x; - g_readback_marker_coords[y * NumMarkersXY + x].y = 5.0f*y; - } - } - - if(g_ocean_simulation_settings.readback_displacements) - { - gfsdk_float4 displacements[NumMarkers]; - if(g_ReadbackCoord >= 1.f) - { - const float coord = g_ReadbackCoord - (g_LastReadbackKickID-g_LastArchivedKickID) * 1.f/float(ReadbackArchiveInterval + 1); - GFSDK_WaveWorks_Simulation_GetArchivedDisplacements(g_hOceanSimulation, coord, g_readback_marker_coords, displacements, NumMarkers); - } - else - { - GFSDK_WaveWorks_Simulation_GetDisplacements(g_hOceanSimulation, g_readback_marker_coords, displacements, NumMarkers); - } - - for(int ix = 0; ix != NumMarkers; ++ix) - { - g_readback_marker_positions[ix].x = displacements[ix].x + g_readback_marker_coords[ix].x; - g_readback_marker_positions[ix].y = displacements[ix].y + g_readback_marker_coords[ix].y; - g_readback_marker_positions[ix].z = displacements[ix].z + g_ocean_quadtree_param.sea_level; - g_readback_marker_positions[ix].w = 1.f; - } - } -} - -// Returns true and sets Result to intersection point if intersection is found, or returns false and does not update Result -// NB: The function does trace the water surface from above or from inside the water volume, but can be easily changed to trace from below water volume -// NB: y axiz is up -bool intersectRayWithOcean(D3DXVECTOR3& Result, D3DXVECTOR3 Position, D3DXVECTOR3 Direction, GFSDK_WaveWorks_SimulationHandle hSim, float sea_level) -{ - gfsdk_float2 test_point; // x,z coordinates of current test point - gfsdk_float2 old_test_point; // x,z coordinates of current test point - gfsdk_float4 displacements; // displacements returned by GFSDK_WaveWorks library - float t; // distance traveled along the ray while tracing - int num_steps = 0; // number of steps we've done while tracing - float max_displacement = GFSDK_WaveWorks_Simulation_GetConservativeMaxDisplacementEstimate(hSim); - // the maximal possible displacements of ocean surface along y axis, - // defining volume we have to trace - const int max_num_successive_steps = 16; // we limit ourselves on #of successive steps - const int max_num_binary_steps = 16; // we limit ourselves on #of binary search steps - const float t_threshold = 0.05f; // we stop successive tracing when we don't progress more than 5 cm each step - const float refinement_threshold_sqr = 0.1f*0.1f; // we stop refinement step when we don't progress more than 10cm while doing refinement of current water altitude - const float t_multiplier = 1.8f/(fabs(Direction.y) + 1.0f); // we increase step length at steep angles to speed up the tracing, - // but less than 2 to make sure the process converges - // and to add some safety to minimize chance of overshooting - D3DXVECTOR3 PositionBSStart; // Vectors used at binary search step - D3DXVECTOR3 PositionBSEnd; - - // normalizing direction - D3DXVec3Normalize(&Direction, &Direction); - - // checking if ray is outside of ocean surface volume - if((Position.y >= max_displacement + sea_level) && (Direction.y >=0)) return false; - - // getting to the top edge of volume where we can start - if(Position.y > max_displacement + sea_level) - { - t = -(Position.y - max_displacement - sea_level) / Direction.y; - Position += t*Direction; - } - - // tracing the ocean surface: - // moving along the ray by distance defined by vertical distance form current test point, increased/decreased by safety multiplier - // this process will converge despite our assumption on local flatness of the surface because curvature of the surface is smooth - // NB: this process guarantees we don't shoot through wave tips - while(1) - { - displacements.x = 0; - displacements.y = 0; - old_test_point.x = 0; - old_test_point.y = 0; - for(int k = 0; k < 4; k++) // few refinement steps to converge at correct intersection point - { - // moving back sample points by the displacements read initially, - // to get a guess on which undisturbed water surface point moved to the actual sample point - // due to x,y motion of water surface, assuming the x,y disturbances are locally constant - test_point.x = Position.x - displacements.x; - test_point.y = Position.z - displacements.y; - GFSDK_WaveWorks_Simulation_GetDisplacements( hSim, &test_point, &displacements, 1 ); - if(refinement_threshold_sqr > (old_test_point.x - test_point.x)*(old_test_point.x - test_point.x) + (old_test_point.y - test_point.y)*(old_test_point.y - test_point.y)) break; - old_test_point.x = test_point.x; - old_test_point.y = test_point.y; - } - // getting t to travel along the ray - t = t_multiplier * (Position.y - displacements.z - sea_level); - - // traveling along the ray - Position += t*Direction; - - if(num_steps >= max_num_successive_steps) break; - if(t < t_threshold) break; - ++num_steps; - } - - // exited the loop, checking if intersection is found - if(t < t_threshold) - { - Result.x = Position.x; - Result.y = Position.y; - Result.z = Position.z; - return true; - } - - // if we're looking down and we did not hit water surface, doing binary search to make sure we hit water surface, - // but there is risk of shooting through wave tips if we are tracing at extremely steep angles - if(Direction.y < 0) - { - PositionBSStart = Position; - - // getting to the bottom edge of volume where we can start - t = -(Position.y + max_displacement - sea_level) / Direction.y; - PositionBSEnd = Position + t*Direction; - - for(int i = 0; i < max_num_binary_steps; i++) - { - Position = (PositionBSStart + PositionBSEnd)*0.5f; - old_test_point.x = 0; - old_test_point.y = 0; - for(int k = 0; k < 4; k++) - { - test_point.x = Position.x - displacements.x; - test_point.y = Position.z - displacements.y; - GFSDK_WaveWorks_Simulation_GetDisplacements( hSim, &test_point, &displacements, 1 ); - if(refinement_threshold_sqr > (old_test_point.x - test_point.x)*(old_test_point.x - test_point.x) + (old_test_point.y - test_point.y)*(old_test_point.y - test_point.y)) break; - old_test_point.x = test_point.x; - old_test_point.y = test_point.y; - } - if(Position.y - displacements.z - sea_level > 0) - { - PositionBSStart = Position; - } - else - { - PositionBSEnd = Position; - } - } - Result.x = Position.x; - Result.y = Position.y; - Result.z = Position.z; - return true; - } - return false; -} - -void UpdateRaycastPositions() -{ - for(int x = 0; x != NumMarkersXY; ++x) - { - for(int y = 0; y != NumMarkersXY; ++y) - { - int i = x + y*NumMarkersXY; - g_raycast_origins[i].x = 0; - g_raycast_origins[i].y = 10; - g_raycast_origins[i].z = terrain_gridpoints*terrain_geometry_scale; - g_raycast_directions[i].x = 5.0f*float(x - NumMarkersXY/2.0f); - g_raycast_directions[i].y = -10.0f; - g_raycast_directions[i].z = 5.0f*float(y - NumMarkersXY/2.0f); - D3DXVec3Normalize(&g_raycast_directions[i], &g_raycast_directions[i]); - } - } - g_IntersectRaysTime = 0.f; - // Performing water hit test for rays - QueryPerformanceFrequency(&g_IntersectRaysPerfFrequency); - QueryPerformanceCounter(&g_IntersectRaysPerfCounterOld); - for(int i = 0; i < NumMarkers; i++) - { - g_raycast_hittestresults[i] = intersectRayWithOcean(g_raycast_hitpoints[i], g_raycast_origins[i], g_raycast_directions[i], g_hOceanSimulation, g_ocean_quadtree_param.sea_level); - } - QueryPerformanceCounter(&g_IntersectRaysPerfCounter); - g_IntersectRaysTime = (float)(((double)(g_IntersectRaysPerfCounter.QuadPart) - (double)(g_IntersectRaysPerfCounterOld.QuadPart))/(double)g_IntersectRaysPerfFrequency.QuadPart); -} diff --git a/sample/d3d11/sample_d3d11.rc b/sample/d3d11/sample_d3d11.rc deleted file mode 100644 index af4d459..0000000 --- a/sample/d3d11/sample_d3d11.rc +++ /dev/null @@ -1,106 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed -// under the Mutual Non-Disclosure Agreement. -// -// Notice -// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES -// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. -// -// NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. No third party distribution is allowed unless -// expressly authorized by NVIDIA. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright © 2008- 2013 NVIDIA Corporation. All rights reserved. -// -// NVIDIA Corporation and its licensors retain all intellectual property and proprietary -// rights in and to this software and related documentation and any modifications thereto. -// Any use, reproduction, disclosure or distribution of this software and related -// documentation without an express license agreement from NVIDIA Corporation is -// strictly prohibited. -// - -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#define IDC_STATIC -1 -#include - - - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_MAIN_ICON ICON "common\\directx.ico" - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#define IDC_STATIC -1\r\n" - "#include \r\n" - "\r\n" - "\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/sample/d3d11/terrain.cpp b/sample/d3d11/terrain.cpp deleted file mode 100644 index c3a9682..0000000 --- a/sample/d3d11/terrain.cpp +++ /dev/null @@ -1,1524 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed -// under the Mutual Non-Disclosure Agreement. -// -// Notice -// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES -// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. -// -// NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. No third party distribution is allowed unless -// expressly authorized by NVIDIA. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright © 2008- 2013 NVIDIA Corporation. All rights reserved. -// -// NVIDIA Corporation and its licensors retain all intellectual property and proprietary -// rights in and to this software and related documentation and any modifications thereto. -// Any use, reproduction, disclosure or distribution of this software and related -// documentation without an express license agreement from NVIDIA Corporation is -// strictly prohibited. -// - -#include "DXUT.h" -#include "terrain.h" -#include - -#include "ocean_surface.h" - -#ifndef PI -#define PI 3.14159265358979323846f -#endif - -extern OceanSurface *g_pOceanSurf; -extern GFSDK_WaveWorks_SimulationHandle g_hOceanSimulation; -extern GFSDK_WaveWorks_SavestateHandle g_hOceanSavestate; -extern GFSDK_WaveWorks_Quadtree_Stats g_ocean_quadtree_stats; - - -extern D3D11_QUERY_DATA_PIPELINE_STATISTICS g_PipelineQueryData; -extern ID3D11Query* g_pPipelineQuery; -extern bool g_QueryStats; - -extern float g_GerstnerSteepness; -extern float g_BaseGerstnerAmplitude; -extern float g_BaseGerstnerWavelength; -extern float g_BaseGerstnerSpeed; -extern float g_GerstnerParallelity; -extern float g_ShoreTime; -extern D3DXVECTOR2 g_WindDir; -extern bool g_Wireframe; - -enum { NumMarkersXY = 10, NumMarkers = NumMarkersXY*NumMarkersXY }; - -extern gfsdk_float2 g_readback_marker_coords[NumMarkers]; -extern gfsdk_float4 g_readback_marker_positions[NumMarkers]; - -extern D3DXVECTOR3 g_raycast_origins[NumMarkers]; -extern D3DXVECTOR3 g_raycast_directions[NumMarkers]; -extern D3DXVECTOR3 g_raycast_hitpoints[NumMarkers]; - -int gp_wrap( int a) -{ - if(a<0) return (a+terrain_gridpoints); - if(a>=terrain_gridpoints) return (a-terrain_gridpoints); - return a; -} - -void CTerrain::Initialize(ID3D11Device* device, ID3DX11Effect * effect) -{ - pEffect = effect; - pDevice = device; - - - const D3D11_INPUT_ELEMENT_DESC TerrainLayout = - { "PATCH_PARAMETERS", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }; - - D3DX11_PASS_DESC passDesc; - effect->GetTechniqueByName("RenderHeightfield")->GetPassByIndex(0)->GetDesc(&passDesc); - - device->CreateInputLayout( &TerrainLayout, 1, passDesc.pIAInputSignature, passDesc.IAInputSignatureSize, &heightfield_inputlayout ); - - const D3D11_INPUT_ELEMENT_DESC SkyLayout [] = - { - { "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 16, D3D11_INPUT_PER_VERTEX_DATA, 0 } - }; - - effect->GetTechniqueByName("RenderSky")->GetPassByIndex(0)->GetDesc(&passDesc); - - device->CreateInputLayout( SkyLayout, - 2, - passDesc.pIAInputSignature, - passDesc.IAInputSignatureSize, - &trianglestrip_inputlayout ); - - CreateTerrain(); -} - -void CTerrain::ReCreateBuffers() -{ - - D3D11_TEXTURE2D_DESC tex_desc; - D3D11_SHADER_RESOURCE_VIEW_DESC textureSRV_desc; - D3D11_DEPTH_STENCIL_VIEW_DESC DSV_desc; - - - - SAFE_RELEASE(main_color_resource); - SAFE_RELEASE(main_color_resourceSRV); - SAFE_RELEASE(main_color_resourceRTV); - - SAFE_RELEASE(main_color_resource_resolved); - SAFE_RELEASE(main_color_resource_resolvedSRV); - - SAFE_RELEASE(main_depth_resource); - SAFE_RELEASE(main_depth_resourceDSV); - SAFE_RELEASE(main_depth_resourceSRV); - - SAFE_RELEASE(reflection_color_resource); - SAFE_RELEASE(reflection_color_resourceSRV); - SAFE_RELEASE(reflection_color_resourceRTV); - SAFE_RELEASE(refraction_color_resource); - SAFE_RELEASE(refraction_color_resourceSRV); - SAFE_RELEASE(refraction_color_resourceRTV); - - SAFE_RELEASE(reflection_depth_resource); - SAFE_RELEASE(reflection_depth_resourceDSV); - SAFE_RELEASE(refraction_depth_resource); - SAFE_RELEASE(refraction_depth_resourceSRV); - SAFE_RELEASE(refraction_depth_resourceRTV); - - SAFE_RELEASE(shadowmap_resource); - SAFE_RELEASE(shadowmap_resourceDSV); - SAFE_RELEASE(shadowmap_resourceSRV); - - // recreating main color buffer - - ZeroMemory(&textureSRV_desc,sizeof(textureSRV_desc)); - ZeroMemory(&tex_desc,sizeof(tex_desc)); - - tex_desc.Width = (UINT)(BackbufferWidth*main_buffer_size_multiplier); - tex_desc.Height = (UINT)(BackbufferHeight*main_buffer_size_multiplier); - tex_desc.MipLevels = 1; - tex_desc.ArraySize = 1; - tex_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - tex_desc.SampleDesc.Count = MultiSampleCount; - tex_desc.SampleDesc.Quality = MultiSampleQuality; - tex_desc.Usage = D3D11_USAGE_DEFAULT; - tex_desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; - tex_desc.CPUAccessFlags = 0; - tex_desc.MiscFlags = 0; - - textureSRV_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - textureSRV_desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DMS; - textureSRV_desc.Texture2D.MipLevels = tex_desc.MipLevels; - textureSRV_desc.Texture2D.MostDetailedMip = 0; - - - pDevice->CreateTexture2D ( &tex_desc, NULL, &main_color_resource ); - pDevice->CreateShaderResourceView( main_color_resource, &textureSRV_desc, &main_color_resourceSRV ); - pDevice->CreateRenderTargetView ( main_color_resource, NULL, &main_color_resourceRTV ); - - - ZeroMemory(&textureSRV_desc,sizeof(textureSRV_desc)); - ZeroMemory(&tex_desc,sizeof(tex_desc)); - - tex_desc.Width = (UINT)(BackbufferWidth*main_buffer_size_multiplier); - tex_desc.Height = (UINT)(BackbufferHeight*main_buffer_size_multiplier); - tex_desc.MipLevels = 1; - tex_desc.ArraySize = 1; - tex_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - tex_desc.SampleDesc.Count = 1; - tex_desc.SampleDesc.Quality = 0; - tex_desc.Usage = D3D11_USAGE_DEFAULT; - tex_desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; - tex_desc.CPUAccessFlags = 0; - tex_desc.MiscFlags = 0; - - textureSRV_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - textureSRV_desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; - textureSRV_desc.Texture2D.MipLevels = tex_desc.MipLevels; - textureSRV_desc.Texture2D.MostDetailedMip = 0; - - pDevice->CreateTexture2D ( &tex_desc, NULL, &main_color_resource_resolved ); - pDevice->CreateShaderResourceView( main_color_resource_resolved, &textureSRV_desc, &main_color_resource_resolvedSRV ); - - // recreating main depth buffer - - ZeroMemory(&textureSRV_desc,sizeof(textureSRV_desc)); - ZeroMemory(&tex_desc,sizeof(tex_desc)); - - tex_desc.Width = (UINT)(BackbufferWidth*main_buffer_size_multiplier); - tex_desc.Height = (UINT)(BackbufferHeight*main_buffer_size_multiplier); - tex_desc.MipLevels = 1; - tex_desc.ArraySize = 1; - tex_desc.Format = DXGI_FORMAT_R32_TYPELESS; - tex_desc.SampleDesc.Count = MultiSampleCount; - tex_desc.SampleDesc.Quality = MultiSampleQuality; - tex_desc.Usage = D3D11_USAGE_DEFAULT; - tex_desc.BindFlags = D3D11_BIND_DEPTH_STENCIL | D3D11_BIND_SHADER_RESOURCE; - tex_desc.CPUAccessFlags = 0; - tex_desc.MiscFlags = 0; - - DSV_desc.Format = DXGI_FORMAT_D32_FLOAT; - DSV_desc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DMS; - DSV_desc.Flags = 0; - DSV_desc.Texture2D.MipSlice = 0; - - textureSRV_desc.Format = DXGI_FORMAT_R32_FLOAT; - textureSRV_desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DMS; - textureSRV_desc.Texture2D.MipLevels = 1; - textureSRV_desc.Texture2D.MostDetailedMip = 0; - - pDevice->CreateTexture2D( &tex_desc, NULL, &main_depth_resource ); - pDevice->CreateDepthStencilView(main_depth_resource, &DSV_desc, &main_depth_resourceDSV ); - pDevice->CreateShaderResourceView( main_depth_resource, &textureSRV_desc, &main_depth_resourceSRV ); - - // recreating reflection and refraction color buffers - - ZeroMemory(&textureSRV_desc,sizeof(textureSRV_desc)); - ZeroMemory(&tex_desc,sizeof(tex_desc)); - - tex_desc.Width = (UINT)(BackbufferWidth*reflection_buffer_size_multiplier); - tex_desc.Height = (UINT)(BackbufferHeight*reflection_buffer_size_multiplier); - tex_desc.MipLevels = (UINT)max(1,log(max((float)tex_desc.Width,(float)tex_desc.Height))/(float)log(2.0f)); - tex_desc.ArraySize = 1; - tex_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - tex_desc.SampleDesc.Count = 1; - tex_desc.SampleDesc.Quality = 0; - tex_desc.Usage = D3D11_USAGE_DEFAULT; - tex_desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; - tex_desc.CPUAccessFlags = 0; - tex_desc.MiscFlags = D3D11_RESOURCE_MISC_GENERATE_MIPS; - - textureSRV_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - textureSRV_desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; - textureSRV_desc.Texture2D.MipLevels = tex_desc.MipLevels; - textureSRV_desc.Texture2D.MostDetailedMip = 0; - - pDevice->CreateTexture2D ( &tex_desc, NULL, &reflection_color_resource ); - pDevice->CreateShaderResourceView( reflection_color_resource, &textureSRV_desc, &reflection_color_resourceSRV ); - pDevice->CreateRenderTargetView ( reflection_color_resource, NULL, &reflection_color_resourceRTV ); - - - ZeroMemory(&textureSRV_desc,sizeof(textureSRV_desc)); - ZeroMemory(&tex_desc,sizeof(tex_desc)); - - tex_desc.Width = (UINT)(BackbufferWidth*refraction_buffer_size_multiplier); - tex_desc.Height = (UINT)(BackbufferHeight*refraction_buffer_size_multiplier); - tex_desc.MipLevels = (UINT)max(1,log(max((float)tex_desc.Width,(float)tex_desc.Height))/(float)log(2.0f)); - tex_desc.ArraySize = 1; - tex_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - tex_desc.SampleDesc.Count = 1; - tex_desc.SampleDesc.Quality = 0; - tex_desc.Usage = D3D11_USAGE_DEFAULT; - tex_desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; - tex_desc.CPUAccessFlags = 0; - tex_desc.MiscFlags = D3D11_RESOURCE_MISC_GENERATE_MIPS; - - textureSRV_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - textureSRV_desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; - textureSRV_desc.Texture2D.MipLevels = tex_desc.MipLevels; - textureSRV_desc.Texture2D.MostDetailedMip = 0; - - pDevice->CreateTexture2D ( &tex_desc, NULL, &refraction_color_resource ); - pDevice->CreateShaderResourceView( refraction_color_resource, &textureSRV_desc, &refraction_color_resourceSRV ); - pDevice->CreateRenderTargetView ( refraction_color_resource, NULL, &refraction_color_resourceRTV ); - - ZeroMemory(&textureSRV_desc,sizeof(textureSRV_desc)); - ZeroMemory(&tex_desc,sizeof(tex_desc)); - - // recreating reflection and refraction depth buffers - - tex_desc.Width = (UINT)(BackbufferWidth*reflection_buffer_size_multiplier); - tex_desc.Height = (UINT)(BackbufferHeight*reflection_buffer_size_multiplier); - tex_desc.MipLevels = 1; - tex_desc.ArraySize = 1; - tex_desc.Format = DXGI_FORMAT_R32_TYPELESS; - tex_desc.SampleDesc.Count = 1; - tex_desc.SampleDesc.Quality = 0; - tex_desc.Usage = D3D11_USAGE_DEFAULT; - tex_desc.BindFlags = D3D11_BIND_DEPTH_STENCIL | D3D11_BIND_SHADER_RESOURCE; - tex_desc.CPUAccessFlags = 0; - tex_desc.MiscFlags = 0; - - DSV_desc.Format = DXGI_FORMAT_D32_FLOAT; - DSV_desc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; - DSV_desc.Flags = 0; - DSV_desc.Texture2D.MipSlice = 0; - - pDevice->CreateTexture2D( &tex_desc, NULL, &reflection_depth_resource ); - pDevice->CreateDepthStencilView(reflection_depth_resource, &DSV_desc, &reflection_depth_resourceDSV ); - - - tex_desc.Width = (UINT)(BackbufferWidth*refraction_buffer_size_multiplier); - tex_desc.Height = (UINT)(BackbufferHeight*refraction_buffer_size_multiplier); - tex_desc.MipLevels = 1; - tex_desc.ArraySize = 1; - tex_desc.Format = DXGI_FORMAT_R32_FLOAT; - tex_desc.SampleDesc.Count = 1; - tex_desc.SampleDesc.Quality = 0; - tex_desc.Usage = D3D11_USAGE_DEFAULT; - tex_desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; - tex_desc.CPUAccessFlags = 0; - tex_desc.MiscFlags = 0; - - textureSRV_desc.Format = DXGI_FORMAT_R32_FLOAT; - textureSRV_desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; - textureSRV_desc.Texture2D.MipLevels = 1; - textureSRV_desc.Texture2D.MostDetailedMip = 0; - - pDevice->CreateTexture2D( &tex_desc, NULL, &refraction_depth_resource ); - pDevice->CreateRenderTargetView (refraction_depth_resource, NULL, &refraction_depth_resourceRTV ); - pDevice->CreateShaderResourceView(refraction_depth_resource, &textureSRV_desc, &refraction_depth_resourceSRV ); - - // recreating shadowmap resource - tex_desc.Width = shadowmap_resource_buffer_size_xy; - tex_desc.Height = shadowmap_resource_buffer_size_xy; - tex_desc.MipLevels = 1; - tex_desc.ArraySize = 1; - tex_desc.Format = DXGI_FORMAT_R32_TYPELESS; - tex_desc.SampleDesc.Count = 1; - tex_desc.SampleDesc.Quality = 0; - tex_desc.Usage = D3D11_USAGE_DEFAULT; - tex_desc.BindFlags = D3D11_BIND_DEPTH_STENCIL | D3D11_BIND_SHADER_RESOURCE; - tex_desc.CPUAccessFlags = 0; - tex_desc.MiscFlags = 0; - - DSV_desc.Format = DXGI_FORMAT_D32_FLOAT; - DSV_desc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; - DSV_desc.Flags = 0; - DSV_desc.Texture2D.MipSlice=0; - - textureSRV_desc.Format = DXGI_FORMAT_R32_FLOAT; - textureSRV_desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; - textureSRV_desc.Texture2D.MipLevels = 1; - textureSRV_desc.Texture2D.MostDetailedMip = 0; - - pDevice->CreateTexture2D( &tex_desc, NULL, &shadowmap_resource); - pDevice->CreateShaderResourceView( shadowmap_resource, &textureSRV_desc, &shadowmap_resourceSRV ); - pDevice->CreateDepthStencilView(shadowmap_resource, &DSV_desc, &shadowmap_resourceDSV ); - -} - -void CTerrain::DeInitialize() -{ - SAFE_RELEASE(heightmap_texture); - SAFE_RELEASE(heightmap_textureSRV); - - SAFE_RELEASE(rock_bump_texture); - SAFE_RELEASE(rock_bump_textureSRV); - - SAFE_RELEASE(layerdef_texture); - SAFE_RELEASE(layerdef_textureSRV); - - SAFE_RELEASE(depthmap_texture); - SAFE_RELEASE(depthmap_textureSRV); - - SAFE_RELEASE(sky_texture); - SAFE_RELEASE(sky_textureSRV); - - SAFE_RELEASE(foam_intensity_texture); - SAFE_RELEASE(foam_intensity_textureSRV); - - SAFE_RELEASE(foam_diffuse_texture); - SAFE_RELEASE(foam_diffuse_textureSRV); - - SAFE_RELEASE(main_color_resource); - SAFE_RELEASE(main_color_resourceSRV); - SAFE_RELEASE(main_color_resourceRTV); - - SAFE_RELEASE(main_color_resource_resolved); - SAFE_RELEASE(main_color_resource_resolvedSRV); - - SAFE_RELEASE(main_depth_resource); - SAFE_RELEASE(main_depth_resourceDSV); - SAFE_RELEASE(main_depth_resourceSRV); - - SAFE_RELEASE(reflection_color_resource); - SAFE_RELEASE(reflection_color_resourceSRV); - SAFE_RELEASE(reflection_color_resourceRTV); - SAFE_RELEASE(refraction_color_resource); - SAFE_RELEASE(refraction_color_resourceSRV); - SAFE_RELEASE(refraction_color_resourceRTV); - - SAFE_RELEASE(reflection_depth_resource); - SAFE_RELEASE(reflection_depth_resourceDSV); - SAFE_RELEASE(refraction_depth_resource); - SAFE_RELEASE(refraction_depth_resourceRTV); - SAFE_RELEASE(refraction_depth_resourceSRV); - - SAFE_RELEASE(shadowmap_resource); - SAFE_RELEASE(shadowmap_resourceDSV); - SAFE_RELEASE(shadowmap_resourceSRV); - - SAFE_RELEASE(sky_vertexbuffer); - SAFE_RELEASE(trianglestrip_inputlayout); - - SAFE_RELEASE(heightfield_vertexbuffer); - SAFE_RELEASE(heightfield_inputlayout); - -} -void CTerrain::CreateTerrain() -{ - int i,j,k,l; - float x,z; - int ix,iz; - float * backterrain; - D3DXVECTOR3 vec1,vec2,vec3; - int currentstep=terrain_gridpoints; - float mv,rm; - float offset=0,yscale=0,maxheight=0,minheight=0; - - float *height_linear_array; - float *patches_rawdata; - HRESULT result; - D3D11_SUBRESOURCE_DATA subresource_data; - D3D11_TEXTURE2D_DESC tex_desc; - D3D11_SHADER_RESOURCE_VIEW_DESC textureSRV_desc; - - backterrain = (float *) malloc((terrain_gridpoints+1)*(terrain_gridpoints+1)*sizeof(float)); - rm=terrain_fractalinitialvalue; - backterrain[0]=0; - backterrain[0+terrain_gridpoints*terrain_gridpoints]=0; - backterrain[terrain_gridpoints]=0; - backterrain[terrain_gridpoints+terrain_gridpoints*terrain_gridpoints]=0; - currentstep=terrain_gridpoints; - srand(3); - - // generating fractal terrain using square-diamond method - while (currentstep>1) - { - //square step; - i=0; - j=0; - - - while (imaxheight) maxheight=height[i][j]; - if(height[i][j] 0.02f) - { - mv -= 0.02f; - } - if(mv < -3.00f) - { - mv += 0.5f; - } - height[i][j]=mv; - } - } - - // smoothing - for(k=0;kterrain_rockfactor)||(height[i][j]<1.2f))) - { - rm=terrain_smoothfactor1; - mv=height[i][j]*(1.0f-rm) +rm*0.25f*(height[gp_wrap(i-1)][j]+height[i][gp_wrap(j-1)]+height[gp_wrap(i+1)][j]+height[i][gp_wrap(j+1)]); - backterrain[i+terrain_gridpoints*j]=mv; - } - else - { - rm=terrain_smoothfactor2; - mv=height[i][j]*(1.0f-rm) +rm*0.25f*(height[gp_wrap(i-1)][j]+height[i][gp_wrap(j-1)]+height[gp_wrap(i+1)][j]+height[i][gp_wrap(j+1)]); - backterrain[i+terrain_gridpoints*j]=mv; - } - - } - for (i=0;iterrain_height_underwater_start)&&(rm<=terrain_height_underwater_end)) - { - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+0]=255; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+1]=0; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+2]=0; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+3]=0; - } - - if((rm>terrain_height_sand_start)&&(rm<=terrain_height_sand_end)) - { - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+0]=0; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+1]=255; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+2]=0; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+3]=0; - } - - if((rm>terrain_height_grass_start)&&(rm<=terrain_height_grass_end)) - { - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+0]=0; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+1]=0; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+2]=255; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+3]=0; - } - - mv=bilinear_interpolation(x-ix,z-iz,normal[ix][iz][1],normal[ix+1][iz][1],normal[ix+1][iz+1][1],normal[ix][iz+1][1]); - - if((mvterrain_height_sand_end)) - { - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+0]=0; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+1]=0; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+2]=0; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+3]=0; - } - - if((mvterrain_height_rocks_start)) - { - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+0]=0; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+1]=0; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+2]=0; - temp_layerdef_map_texture_pixels[(j*terrain_layerdef_map_texture_size+i)*4+3]=255; - } - - } - for(i=0;iCreateTexture2D(&tex_desc,&subresource_data,&layerdef_texture); - - ZeroMemory(&textureSRV_desc,sizeof(textureSRV_desc)); - textureSRV_desc.Format=tex_desc.Format; - textureSRV_desc.ViewDimension=D3D11_SRV_DIMENSION_TEXTURE2D; - textureSRV_desc.Texture2D.MipLevels=tex_desc.MipLevels; - textureSRV_desc.Texture2D.MostDetailedMip=0; - pDevice->CreateShaderResourceView(layerdef_texture,&textureSRV_desc,&layerdef_textureSRV); - - free(temp_layerdef_map_texture_pixels); - free(layerdef_map_texture_pixels); - - height_linear_array = new float [terrain_gridpoints*terrain_gridpoints*4]; - patches_rawdata = new float [terrain_numpatches_1d*terrain_numpatches_1d*4]; - - for(int i=0;iCreateTexture2D(&tex_desc,&subresource_data,&heightmap_texture); - - free(height_linear_array); - - ZeroMemory(&textureSRV_desc,sizeof(textureSRV_desc)); - textureSRV_desc.Format=tex_desc.Format; - textureSRV_desc.ViewDimension=D3D11_SRV_DIMENSION_TEXTURE2D; - textureSRV_desc.Texture2D.MipLevels=tex_desc.MipLevels; - pDevice->CreateShaderResourceView(heightmap_texture,&textureSRV_desc,&heightmap_textureSRV); - - //building depthmap - byte * depth_shadow_map_texture_pixels=(byte *)malloc(terrain_depth_shadow_map_texture_size*terrain_depth_shadow_map_texture_size*4); - for(i=0;i0) - { - depth_shadow_map_texture_pixels[(j*terrain_depth_shadow_map_texture_size+i)*4+0]=0; - depth_shadow_map_texture_pixels[(j*terrain_depth_shadow_map_texture_size+i)*4+1]=0; - depth_shadow_map_texture_pixels[(j*terrain_depth_shadow_map_texture_size+i)*4+2]=0; - } - else - { - float no=(1.0f*255.0f*(rm/(terrain_minheight*terrain_geometry_scale)))-1.0f; - if(no>255) no=255; - if(no<0) no=0; - depth_shadow_map_texture_pixels[(j*terrain_depth_shadow_map_texture_size+i)*4+0]=(byte)no; - - no=(10.0f*255.0f*(rm/(terrain_minheight*terrain_geometry_scale)))-80.0f; - if(no>255) no=255; - if(no<0) no=0; - depth_shadow_map_texture_pixels[(j*terrain_depth_shadow_map_texture_size+i)*4+1]=(byte)no; - - no=(100.0f*255.0f*(rm/(terrain_minheight*terrain_geometry_scale)))-300.0f; - if(no>255) no=255; - if(no<0) no=0; - depth_shadow_map_texture_pixels[(j*terrain_depth_shadow_map_texture_size+i)*4+2]=(byte)no; - } - depth_shadow_map_texture_pixels[(j*terrain_depth_shadow_map_texture_size+i)*4+3]=0; - } - - subresource_data.pSysMem = depth_shadow_map_texture_pixels; - subresource_data.SysMemPitch = terrain_depth_shadow_map_texture_size*4; - subresource_data.SysMemSlicePitch = 0; - - tex_desc.Width = terrain_depth_shadow_map_texture_size; - tex_desc.Height = terrain_depth_shadow_map_texture_size; - tex_desc.MipLevels = 1; - tex_desc.ArraySize = 1; - tex_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - tex_desc.SampleDesc.Count = 1; - tex_desc.SampleDesc.Quality = 0; - tex_desc.Usage = D3D11_USAGE_DEFAULT; - tex_desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; - tex_desc.CPUAccessFlags = 0; - tex_desc.MiscFlags = 0; - result=pDevice->CreateTexture2D(&tex_desc,&subresource_data,&depthmap_texture); - - ZeroMemory(&textureSRV_desc,sizeof(textureSRV_desc)); - textureSRV_desc.Format=tex_desc.Format; - textureSRV_desc.ViewDimension=D3D11_SRV_DIMENSION_TEXTURE2D; - textureSRV_desc.Texture2D.MipLevels=tex_desc.MipLevels; - pDevice->CreateShaderResourceView(depthmap_texture,&textureSRV_desc,&depthmap_textureSRV); - - free(depth_shadow_map_texture_pixels); - - // creating terrain vertex buffer - for(int i=0;iCreateBuffer(&buf_desc,&subresource_data,&heightfield_vertexbuffer); - free (patches_rawdata); - - // creating sky vertex buffer - float *sky_vertexdata; - int floatnum; - sky_vertexdata = new float [sky_gridpoints*(sky_gridpoints+2)*2*6]; - - for(int j=0;jCreateBuffer(&buf_desc,&subresource_data,&sky_vertexbuffer); - - free (sky_vertexdata); -} - -void CTerrain::LoadTextures() -{ - D3D11_TEXTURE2D_DESC tex_desc; - D3D11_SHADER_RESOURCE_VIEW_DESC textureSRV_desc; - - tex_desc.Width = terrain_layerdef_map_texture_size; - tex_desc.Height = terrain_layerdef_map_texture_size; - tex_desc.MipLevels = 1; - tex_desc.ArraySize = 1; - tex_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - tex_desc.SampleDesc.Count = 1; - tex_desc.SampleDesc.Quality = 0; - tex_desc.Usage = D3D11_USAGE_DEFAULT; - // Load images - D3DX11_IMAGE_LOAD_INFO imageLoadInfo; - D3DX11_IMAGE_INFO imageInfo; - WCHAR path[MAX_PATH]; - - DXUTFindDXSDKMediaFileCch(path, MAX_PATH, L"..\\media\\rock_bump6.dds"); - D3DX11GetImageInfoFromFile(path, NULL, &imageInfo, NULL); - memset(&imageLoadInfo, 0, sizeof(imageLoadInfo)); - imageLoadInfo.Width = imageInfo.Width; - imageLoadInfo.Height = imageInfo.Height; - imageLoadInfo.MipLevels = imageInfo.MipLevels; - imageLoadInfo.Format = imageInfo.Format; - imageLoadInfo.BindFlags = D3D11_BIND_SHADER_RESOURCE; - D3DX11CreateTextureFromFile(pDevice, path, &imageLoadInfo, NULL, (ID3D11Resource**)&rock_bump_texture, NULL); - - ZeroMemory(&textureSRV_desc,sizeof(textureSRV_desc)); - textureSRV_desc.Format=imageLoadInfo.Format; - textureSRV_desc.ViewDimension=D3D11_SRV_DIMENSION_TEXTURE2D; - textureSRV_desc.Texture2D.MipLevels=imageLoadInfo.MipLevels; - pDevice->CreateShaderResourceView(rock_bump_texture,&textureSRV_desc,&rock_bump_textureSRV); - - DXUTFindDXSDKMediaFileCch(path, MAX_PATH, L"..\\media\\SunsetFair.dds"); - D3DX11GetImageInfoFromFile(path, NULL, &imageInfo, NULL); - memset(&imageLoadInfo, 0, sizeof(imageLoadInfo)); - imageLoadInfo.Width = imageInfo.Width; - imageLoadInfo.Height = imageInfo.Height; - imageLoadInfo.MipLevels = imageInfo.MipLevels; - imageLoadInfo.Format = imageInfo.Format; - imageLoadInfo.BindFlags = D3D11_BIND_SHADER_RESOURCE; - D3DX11CreateTextureFromFile(pDevice, path, &imageLoadInfo, NULL, (ID3D11Resource**)&sky_texture, NULL); - - ZeroMemory(&textureSRV_desc,sizeof(textureSRV_desc)); - textureSRV_desc.Format=imageLoadInfo.Format; - textureSRV_desc.ViewDimension=D3D11_SRV_DIMENSION_TEXTURE2D; - textureSRV_desc.Texture2D.MipLevels=imageLoadInfo.MipLevels; - pDevice->CreateShaderResourceView(sky_texture,&textureSRV_desc,&sky_textureSRV); - - - DXUTFindDXSDKMediaFileCch(path, MAX_PATH, L"..\\media\\foam_intensity_perlin2.dds"); - D3DX11GetImageInfoFromFile(path, NULL, &imageInfo, NULL); - memset(&imageLoadInfo, 0, sizeof(imageLoadInfo)); - imageLoadInfo.Width = imageInfo.Width; - imageLoadInfo.Height = imageInfo.Height; - imageLoadInfo.MipLevels = imageInfo.MipLevels; - imageLoadInfo.Format = imageInfo.Format; - imageLoadInfo.BindFlags = D3D11_BIND_SHADER_RESOURCE; - D3DX11CreateTextureFromFile(pDevice, path, &imageLoadInfo, NULL, (ID3D11Resource**)&foam_intensity_texture, NULL); - - ZeroMemory(&textureSRV_desc,sizeof(textureSRV_desc)); - textureSRV_desc.Format=imageLoadInfo.Format; - textureSRV_desc.ViewDimension=D3D11_SRV_DIMENSION_TEXTURE2D; - textureSRV_desc.Texture2D.MipLevels=imageLoadInfo.MipLevels; - pDevice->CreateShaderResourceView(foam_intensity_texture,&textureSRV_desc,&foam_intensity_textureSRV); - - - DXUTFindDXSDKMediaFileCch(path, MAX_PATH, L"..\\media\\foam.dds"); - D3DX11GetImageInfoFromFile(path, NULL, &imageInfo, NULL); - memset(&imageLoadInfo, 0, sizeof(imageLoadInfo)); - imageLoadInfo.Width = imageInfo.Width; - imageLoadInfo.Height = imageInfo.Height; - imageLoadInfo.MipLevels = imageInfo.MipLevels; - imageLoadInfo.Format = imageInfo.Format; - imageLoadInfo.BindFlags = D3D11_BIND_SHADER_RESOURCE; - D3DX11CreateTextureFromFile(pDevice, path, &imageLoadInfo, NULL, (ID3D11Resource**)&foam_diffuse_texture, NULL); - - ZeroMemory(&textureSRV_desc,sizeof(textureSRV_desc)); - textureSRV_desc.Format=imageLoadInfo.Format; - textureSRV_desc.ViewDimension=D3D11_SRV_DIMENSION_TEXTURE2D; - textureSRV_desc.Texture2D.MipLevels=imageLoadInfo.MipLevels; - pDevice->CreateShaderResourceView(foam_diffuse_texture,&textureSRV_desc,&foam_diffuse_textureSRV); -} - - -void CTerrain::RenderTerrainToHeightField( ID3D11DeviceContext* const pContext, const D3DXMATRIX& worldToViewMatrix, const D3DXMATRIX& viewToProjectionMatrix, const D3DXVECTOR3 eyePositionWS, const D3DXVECTOR3 viewDirectionWS ) -{ - float origin[2]={0,0}; - UINT stride=sizeof(float)*4; - UINT offset=0; - - pEffect->GetVariableByName("g_HeightfieldTexture")->AsShaderResource()->SetResource(heightmap_textureSRV); - pEffect->GetVariableByName("g_LayerdefTexture")->AsShaderResource()->SetResource(layerdef_textureSRV); - pEffect->GetVariableByName("g_RockBumpTexture")->AsShaderResource()->SetResource(rock_bump_textureSRV); - pEffect->GetVariableByName("g_SkyTexture")->AsShaderResource()->SetResource(sky_textureSRV); - pEffect->GetVariableByName("g_HeightFieldOrigin")->AsVector()->SetFloatVector(origin); - pEffect->GetVariableByName("g_HeightFieldSize")->AsScalar()->SetFloat(terrain_gridpoints*terrain_geometry_scale); - - D3DXMATRIX worldToProjectionMatrix = worldToViewMatrix * viewToProjectionMatrix; - D3DXMATRIX projectionToWorldMatrix; - D3DXMatrixInverse(&projectionToWorldMatrix, NULL, &worldToProjectionMatrix); - - pEffect->GetVariableByName("g_ModelViewMatrix")->AsMatrix()->SetMatrix( worldToViewMatrix ); - pEffect->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix( worldToProjectionMatrix ); - pEffect->GetVariableByName("g_ModelViewProjectionMatrixInv")->AsMatrix()->SetMatrix( projectionToWorldMatrix ); - pEffect->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector( eyePositionWS ); - pEffect->GetVariableByName("g_CameraDirection")->AsVector()->SetFloatVector( viewDirectionWS ); - - pEffect->GetVariableByName("g_HalfSpaceCullSign")->AsScalar()->SetFloat(1.0); - pEffect->GetVariableByName("g_HalfSpaceCullPosition")->AsScalar()->SetFloat(terrain_minheight*20); - - // drawing terrain to main buffer - pEffect->GetVariableByName("g_ApplyFog")->AsScalar()->SetFloat(0.0f); - - enum PassPermutation - { - kPermutationSolid = 0, - kPermutationWireframe, - kPermutationDepthOnly, - kPermutationDataOnly - }; - - pContext->IASetInputLayout(heightfield_inputlayout); - pContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST); - pEffect->GetTechniqueByName("RenderHeightfield")->GetPassByIndex( kPermutationDataOnly )->Apply( 0, pContext ); - stride = sizeof(float) * 4; - pContext->IASetVertexBuffers( 0, 1, &heightfield_vertexbuffer, &stride,&offset ); - pContext->Draw(terrain_numpatches_1d*terrain_numpatches_1d, 0); -} - - -void CTerrain::Render(CFirstPersonCamera *cam) -{ - ID3D11DeviceContext* pContext; - float origin[2]={0,0}; - UINT stride=sizeof(float)*4; - UINT offset=0; - UINT cRT = 1; - - pDevice->GetImmediateContext(&pContext); - - pEffect->GetVariableByName("g_HeightfieldTexture")->AsShaderResource()->SetResource(heightmap_textureSRV); - pEffect->GetVariableByName("g_LayerdefTexture")->AsShaderResource()->SetResource(layerdef_textureSRV); - pEffect->GetVariableByName("g_RockBumpTexture")->AsShaderResource()->SetResource(rock_bump_textureSRV); - pEffect->GetVariableByName("g_SkyTexture")->AsShaderResource()->SetResource(sky_textureSRV); - pEffect->GetVariableByName("g_HeightFieldOrigin")->AsVector()->SetFloatVector(origin); - pEffect->GetVariableByName("g_HeightFieldSize")->AsScalar()->SetFloat(terrain_gridpoints*terrain_geometry_scale); - - ID3D11RenderTargetView *colorBuffer = DXUTGetD3D11RenderTargetView(); - ID3D11DepthStencilView *backBuffer = DXUTGetD3D11DepthStencilView(); - D3D11_VIEWPORT currentViewport; - D3D11_VIEWPORT reflection_Viewport; - D3D11_VIEWPORT refraction_Viewport; - D3D11_VIEWPORT shadowmap_resource_viewport; - D3D11_VIEWPORT water_normalmap_resource_viewport; - D3D11_VIEWPORT main_Viewport; - - float ClearColor[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; - float RefractionClearColor[4] = { 0.5f, 0.5f, 0.5f, 1.0f }; - - reflection_Viewport.Width=(float)BackbufferWidth*reflection_buffer_size_multiplier; - reflection_Viewport.Height=(float)BackbufferHeight*reflection_buffer_size_multiplier; - reflection_Viewport.MaxDepth=1; - reflection_Viewport.MinDepth=0; - reflection_Viewport.TopLeftX=0; - reflection_Viewport.TopLeftY=0; - - refraction_Viewport.Width=(float)BackbufferWidth*refraction_buffer_size_multiplier; - refraction_Viewport.Height=(float)BackbufferHeight*refraction_buffer_size_multiplier; - refraction_Viewport.MaxDepth=1; - refraction_Viewport.MinDepth=0; - refraction_Viewport.TopLeftX=0; - refraction_Viewport.TopLeftY=0; - - main_Viewport.Width=(float)BackbufferWidth*main_buffer_size_multiplier; - main_Viewport.Height=(float)BackbufferHeight*main_buffer_size_multiplier; - main_Viewport.MaxDepth=1; - main_Viewport.MinDepth=0; - main_Viewport.TopLeftX=0; - main_Viewport.TopLeftY=0; - - shadowmap_resource_viewport.Width=shadowmap_resource_buffer_size_xy; - shadowmap_resource_viewport.Height=shadowmap_resource_buffer_size_xy; - shadowmap_resource_viewport.MaxDepth=1; - shadowmap_resource_viewport.MinDepth=0; - shadowmap_resource_viewport.TopLeftX=0; - shadowmap_resource_viewport.TopLeftY=0; - - water_normalmap_resource_viewport.Width=water_normalmap_resource_buffer_size_xy; - water_normalmap_resource_viewport.Height=water_normalmap_resource_buffer_size_xy; - water_normalmap_resource_viewport.MaxDepth=1; - water_normalmap_resource_viewport.MinDepth=0; - water_normalmap_resource_viewport.TopLeftX=0; - water_normalmap_resource_viewport.TopLeftY=0; - - - //saving scene color buffer and back buffer to constants - pContext->RSGetViewports( &cRT, ¤tViewport); - pContext->OMGetRenderTargets( 1, &colorBuffer, &backBuffer ); - - - // selecting shadowmap_resource rendertarget - pEffect->GetVariableByName("g_ShadowmapTexture")->AsShaderResource()->SetResource(NULL); - - pContext->RSSetViewports(1,&shadowmap_resource_viewport); - pContext->OMSetRenderTargets( 0, NULL, shadowmap_resourceDSV); - pContext->ClearDepthStencilView( shadowmap_resourceDSV, D3D11_CLEAR_DEPTH, 1.0, 0 ); - - //drawing terrain to shadowmap - SetupLightView(cam); - - pEffect->GetVariableByName("g_ShadowmapTexture")->AsShaderResource()->SetResource(NULL); - - pEffect->GetVariableByName("g_ApplyFog")->AsScalar()->SetFloat(0.0f); - - pContext->IASetInputLayout(heightfield_inputlayout); - pContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST); - pEffect->GetTechniqueByName("RenderHeightfield")->GetPassByIndex(2)->Apply(0, pContext); - stride=sizeof(float)*4; - pContext->IASetVertexBuffers(0,1,&heightfield_vertexbuffer,&stride,&offset); - pContext->Draw(terrain_numpatches_1d*terrain_numpatches_1d, 0); - - pEffect->GetTechniqueByName("Default")->GetPassByIndex(0)->Apply(0, pContext); - - pEffect->GetVariableByName("g_ShadowmapTexture")->AsShaderResource()->SetResource(shadowmap_resourceSRV); - - - // setting up reflection rendertarget - pContext->RSSetViewports(1,&reflection_Viewport); - pContext->OMSetRenderTargets( 1, &reflection_color_resourceRTV, reflection_depth_resourceDSV); - pContext->ClearRenderTargetView( reflection_color_resourceRTV, RefractionClearColor ); - pContext->ClearDepthStencilView( reflection_depth_resourceDSV, D3D11_CLEAR_DEPTH, 1.0, 0 ); - - SetupReflectionView(cam); - // drawing sky to reflection RT - pEffect->GetTechniqueByName("RenderSky")->GetPassByIndex(0)->Apply(0, pContext); - pContext->IASetInputLayout(trianglestrip_inputlayout); - pContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); - stride=sizeof(float)*6; - pContext->IASetVertexBuffers(0,1,&sky_vertexbuffer,&stride,&offset); - pContext->Draw(sky_gridpoints*(sky_gridpoints+2)*2, 0); - - // drawing terrain to reflection RT - pEffect->GetVariableByName("g_ApplyFog")->AsScalar()->SetFloat(0.0f); - pContext->IASetInputLayout(heightfield_inputlayout); - pContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST); - pEffect->GetTechniqueByName("RenderHeightfield")->GetPassByIndex(0)->Apply(0, pContext); - stride=sizeof(float)*4; - pContext->IASetVertexBuffers(0,1,&heightfield_vertexbuffer,&stride,&offset); - pContext->Draw(terrain_numpatches_1d*terrain_numpatches_1d, 0); - - - pEffect->GetTechniqueByName("Default")->GetPassByIndex(0)->Apply(0, pContext); - - // setting up main rendertarget - pContext->RSSetViewports(1,&main_Viewport); - pContext->OMSetRenderTargets( 1, &main_color_resourceRTV, main_depth_resourceDSV); - pContext->ClearRenderTargetView( main_color_resourceRTV, ClearColor ); - pContext->ClearDepthStencilView( main_depth_resourceDSV, D3D11_CLEAR_DEPTH, 1.0, 0 ); - SetupNormalView(cam); - - // drawing terrain to main buffer - - pEffect->GetVariableByName("g_ApplyFog")->AsScalar()->SetFloat(1.0f); - pEffect->GetVariableByName("g_FoamIntensityTexture")->AsShaderResource()->SetResource(foam_intensity_textureSRV); - pEffect->GetVariableByName("g_FoamDiffuseTexture")->AsShaderResource()->SetResource(foam_diffuse_textureSRV); - D3DXMATRIX topDownMatrix; - g_pOceanSurf->pDistanceFieldModule->GetWorldToTopDownTextureMatrix( topDownMatrix ); - pEffect->GetVariableByName("g_WorldToTopDownTextureMatrix" )->AsMatrix()->SetMatrix(&topDownMatrix._11); - pEffect->GetVariableByName("g_Time" )->AsScalar()->SetFloat( g_ShoreTime ); - pEffect->GetVariableByName("g_DataTexture" )->AsShaderResource()->SetResource( g_pOceanSurf->pDistanceFieldModule->GetDataTextureSRV() ); - pEffect->GetVariableByName("g_GerstnerSteepness")->AsScalar()->SetFloat( g_GerstnerSteepness ); - pEffect->GetVariableByName("g_BaseGerstnerAmplitude")->AsScalar()->SetFloat( g_BaseGerstnerAmplitude ); - pEffect->GetVariableByName("g_BaseGerstnerWavelength")->AsScalar()->SetFloat( g_BaseGerstnerWavelength ); - pEffect->GetVariableByName("g_BaseGerstnerSpeed")->AsScalar()->SetFloat( g_BaseGerstnerSpeed ); - pEffect->GetVariableByName("g_BaseGerstnerParallelness")->AsScalar()->SetFloat( g_GerstnerParallelity ); - pEffect->GetVariableByName("g_WindDirection")->AsVector()->SetFloatVector( &g_WindDir.x ); - - pContext->IASetInputLayout(heightfield_inputlayout); - pContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST); - pEffect->GetTechniqueByName("RenderHeightfield")->GetPassByIndex(0)->Apply(0, pContext); - stride=sizeof(float)*4; - pContext->IASetVertexBuffers(0,1,&heightfield_vertexbuffer,&stride,&offset); - pContext->Draw(terrain_numpatches_1d*terrain_numpatches_1d, 0); - - - // resolving main buffer color to refraction color resource - pContext->ResolveSubresource(refraction_color_resource,0,main_color_resource,0,DXGI_FORMAT_R8G8B8A8_UNORM); - pContext->GenerateMips(refraction_color_resourceSRV); - - // resolving main buffer depth to refraction depth resource manually - pContext->RSSetViewports( 1, &main_Viewport ); - pContext->OMSetRenderTargets( 1, &refraction_depth_resourceRTV, NULL); - pContext->ClearRenderTargetView(refraction_depth_resourceRTV, ClearColor); - - pContext->IASetInputLayout(trianglestrip_inputlayout); - pContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); - - switch(MultiSampleCount) - { - case 1: - pEffect->GetVariableByName("g_RefractionDepthTextureMS1")->AsShaderResource()->SetResource(main_depth_resourceSRV); - pEffect->GetTechniqueByName("RefractionDepthManualResolve")->GetPassByIndex(0)->Apply(0, pContext); - break; - case 2: - pEffect->GetVariableByName("g_RefractionDepthTextureMS2")->AsShaderResource()->SetResource(main_depth_resourceSRV); - pEffect->GetTechniqueByName("RefractionDepthManualResolve")->GetPassByIndex(1)->Apply(0, pContext); - break; - case 4: - pEffect->GetVariableByName("g_RefractionDepthTextureMS4")->AsShaderResource()->SetResource(main_depth_resourceSRV); - pEffect->GetTechniqueByName("RefractionDepthManualResolve")->GetPassByIndex(2)->Apply(0, pContext); - break; - default: - pEffect->GetVariableByName("g_RefractionDepthTextureMS1")->AsShaderResource()->SetResource(main_depth_resourceSRV); - pEffect->GetTechniqueByName("RefractionDepthManualResolve1")->GetPassByIndex(0)->Apply(0, pContext); - break; - } - - - - stride=sizeof(float)*6; - pContext->IASetVertexBuffers(0,1,&heightfield_vertexbuffer,&stride,&offset); - pContext->Draw(4, 0); // just need to pass 4 vertices to shader - pEffect->GetTechniqueByName("Default")->GetPassByIndex(0)->Apply(0, pContext); - - // clearing resource bindings - switch(MultiSampleCount) - { - case 1: - pEffect->GetVariableByName("g_RefractionDepthTextureMS1")->AsShaderResource()->SetResource(NULL); - pEffect->GetTechniqueByName("RefractionDepthManualResolve")->GetPassByIndex(0)->Apply(0, pContext); - break; - case 2: - pEffect->GetVariableByName("g_RefractionDepthTextureMS2")->AsShaderResource()->SetResource(NULL); - pEffect->GetTechniqueByName("RefractionDepthManualResolve")->GetPassByIndex(1)->Apply(0, pContext); - break; - case 4: - pEffect->GetVariableByName("g_RefractionDepthTextureMS4")->AsShaderResource()->SetResource(NULL); - pEffect->GetTechniqueByName("RefractionDepthManualResolve")->GetPassByIndex(2)->Apply(0, pContext); - break; - default: - pEffect->GetVariableByName("g_RefractionDepthTextureMS1")->AsShaderResource()->SetResource(NULL); - pEffect->GetTechniqueByName("RefractionDepthManualResolve1")->GetPassByIndex(0)->Apply(0, pContext); - break; - } - pEffect->GetTechniqueByName("Default")->GetPassByIndex(0)->Apply(0, pContext); - - // getting back to rendering to main buffer - pContext->RSSetViewports(1,&main_Viewport); - pContext->OMSetRenderTargets( 1, &main_color_resourceRTV, main_depth_resourceDSV); - - // drawing water surface to main buffer - if(g_QueryStats) - { - pContext->Begin(g_pPipelineQuery); - } - - ID3DX11Effect* oceanFX = g_pOceanSurf->m_pOceanFX; - - oceanFX->GetVariableByName("g_ReflectionTexture")->AsShaderResource()->SetResource(reflection_color_resourceSRV); - oceanFX->GetVariableByName("g_RefractionTexture")->AsShaderResource()->SetResource(refraction_color_resourceSRV); - oceanFX->GetVariableByName("g_RefractionDepthTextureResolved")->AsShaderResource()->SetResource(refraction_depth_resourceSRV); - oceanFX->GetVariableByName("g_ShadowmapTexture")->AsShaderResource()->SetResource(shadowmap_resourceSRV); - oceanFX->GetVariableByName("g_FoamIntensityTexture")->AsShaderResource()->SetResource(foam_intensity_textureSRV); - oceanFX->GetVariableByName("g_FoamDiffuseTexture")->AsShaderResource()->SetResource(foam_diffuse_textureSRV); - - const D3DXMATRIX matView = D3DXMATRIX(1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1) * *cam->GetViewMatrix(); - const D3DXMATRIX matProj = *cam->GetProjMatrix(); - D3DXVECTOR3 cameraPosition = *cam->GetEyePt(); - D3DXVECTOR3 lightPosition = D3DXVECTOR3(14000.0f,6500.0f,4000.0f); - - oceanFX->GetVariableByName("g_ModelViewMatrix")->AsMatrix()->SetMatrix(matView); - oceanFX->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix(matView*matProj); - oceanFX->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector(cameraPosition); - oceanFX->GetVariableByName("g_LightPosition")->AsVector()->SetFloatVector(lightPosition); - oceanFX->GetVariableByName("g_Wireframe")->AsScalar()->SetFloat(g_Wireframe ? 1.0f : 0.0f); - oceanFX->GetVariableByName("g_WinSize")->AsVector()->SetFloatVector(D3DXVECTOR4(main_Viewport.Width,main_Viewport.Height,0,0)); - g_pOceanSurf->renderShaded(pContext, matView,matProj,g_hOceanSimulation, g_hOceanSavestate, g_WindDir, g_GerstnerSteepness, g_BaseGerstnerAmplitude, g_BaseGerstnerWavelength, g_BaseGerstnerSpeed, g_GerstnerParallelity, g_ShoreTime); - - g_pOceanSurf->getQuadTreeStats(g_ocean_quadtree_stats); - - if(g_QueryStats) - { - pContext->End(g_pPipelineQuery); - while(S_OK != pContext->GetData(g_pPipelineQuery, &g_PipelineQueryData, sizeof(g_PipelineQueryData), 0)); - } - - // clearing resource bindings - oceanFX->GetVariableByName("g_ReflectionTexture")->AsShaderResource()->SetResource(NULL); - oceanFX->GetVariableByName("g_RefractionTexture")->AsShaderResource()->SetResource(NULL); - oceanFX->GetVariableByName("g_RefractionDepthTextureResolved")->AsShaderResource()->SetResource(NULL); - oceanFX->GetVariableByName("g_ShadowmapTexture")->AsShaderResource()->SetResource(NULL); - oceanFX->GetTechniqueByName("RenderOceanSurfTech")->GetPassByIndex(0)->Apply(0, pContext); - - // drawing readback markers to main buffer - const UINT vbOffset = 0; - const UINT vertexStride = sizeof(D3DXVECTOR4); - pContext->IASetInputLayout(g_pOceanSurf->m_pRayContactLayout); - pContext->IASetVertexBuffers(0, 1, &g_pOceanSurf->m_pContactVB, &vertexStride, &vbOffset); - pContext->IASetIndexBuffer(g_pOceanSurf->m_pContactIB, DXGI_FORMAT_R16_UINT, 0); - pContext->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - for( int i = 0; i < NumMarkers; i++) - { - g_pOceanSurf->m_pOceanFX->GetVariableByName("g_ContactPosition")->AsVector()->SetFloatVector(D3DXVECTOR4(g_readback_marker_positions[i].x,g_readback_marker_positions[i].y,g_readback_marker_positions[i].z,0)); - g_pOceanSurf->m_pRenderRayContactTechnique->GetPassByIndex(0)->Apply(0, pContext); - pContext->DrawIndexed(12, 0, 0); - } - - - // drawing raycast contacts to main buffer - pContext->IASetInputLayout(g_pOceanSurf->m_pRayContactLayout); - pContext->IASetVertexBuffers(0, 1, &g_pOceanSurf->m_pContactVB, &vertexStride, &vbOffset); - pContext->IASetIndexBuffer(g_pOceanSurf->m_pContactIB, DXGI_FORMAT_R16_UINT, 0); - pContext->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - for( int i = 0; i < NumMarkers; i++) - { - g_pOceanSurf->m_pOceanFX->GetVariableByName("g_ContactPosition")->AsVector()->SetFloatVector(D3DXVECTOR4(g_raycast_hitpoints[i].x, g_raycast_hitpoints[i].z, g_raycast_hitpoints[i].y, 0.0f)); - g_pOceanSurf->m_pRenderRayContactTechnique->GetPassByIndex(0)->Apply(0, pContext); - pContext->DrawIndexed(12, 0, 0); - } - // drawing rays to main buffer - pContext->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP); - for( int i = 0; i < NumMarkers; i++) - { - g_pOceanSurf->m_pOceanFX->GetVariableByName("g_OriginPosition")->AsVector()->SetFloatVector(g_raycast_origins[i]); - g_pOceanSurf->m_pOceanFX->GetVariableByName("g_RayDirection")->AsVector()->SetFloatVector(g_raycast_directions[i]*100.0f); - g_pOceanSurf->m_pRenderRayContactTechnique->GetPassByIndex(1)->Apply(0, pContext); - pContext->DrawIndexed(2, 0, 0); - } - - //drawing sky to main buffer - pEffect->GetTechniqueByName("RenderSky")->GetPassByIndex(0)->Apply(0, pContext); - - pContext->IASetInputLayout(trianglestrip_inputlayout); - pContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); - - stride=sizeof(float)*6; - pContext->IASetVertexBuffers(0,1,&sky_vertexbuffer,&stride,&offset); - pContext->Draw(sky_gridpoints*(sky_gridpoints+2)*2, 0); - - pEffect->GetTechniqueByName("Default")->GetPassByIndex(0)->Apply(0, pContext); - - //restoring scene color buffer and back buffer - pContext->OMSetRenderTargets( 1, &colorBuffer, backBuffer); - pContext->ClearDepthStencilView(backBuffer, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.f, 0); - pContext->ClearRenderTargetView(colorBuffer, ClearColor); - pContext->RSSetViewports( 1, ¤tViewport ); - - //resolving main buffer - pContext->ResolveSubresource(main_color_resource_resolved,0,main_color_resource,0,DXGI_FORMAT_R8G8B8A8_UNORM); - - //drawing main buffer to back buffer - pEffect->GetVariableByName("g_MainTexture")->AsShaderResource()->SetResource(main_color_resource_resolvedSRV); - pEffect->GetVariableByName("g_MainBufferSizeMultiplier")->AsScalar()->SetFloat(main_buffer_size_multiplier); - - pContext->IASetInputLayout(trianglestrip_inputlayout); - pContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); - pEffect->GetTechniqueByName("MainToBackBuffer")->GetPassByIndex(0)->Apply(0, pContext); - stride=sizeof(float)*6; - pContext->IASetVertexBuffers(0,1,&heightfield_vertexbuffer,&stride,&offset); - pContext->Draw(4, 0); // just need to pass 4 vertices to shader - pEffect->GetTechniqueByName("Default")->GetPassByIndex(0)->Apply(0, pContext); - - pEffect->GetVariableByName("g_MainTexture")->AsShaderResource()->SetResource(NULL); - - SAFE_RELEASE ( colorBuffer ); - SAFE_RELEASE ( backBuffer ); - - pContext->Release(); -} - -float bilinear_interpolation(float fx, float fy, float a, float b, float c, float d) -{ - float s1,s2,s3,s4; - s1=fx*fy; - s2=(1-fx)*fy; - s3=(1-fx)*(1-fy); - s4=fx*(1-fy); - return((a*s3+b*s4+c*s1+d*s2)); -} - -void CTerrain::SetupReflectionView(CFirstPersonCamera *cam) -{ - - float aspectRatio = BackbufferWidth / BackbufferHeight; - - D3DXVECTOR3 EyePoint; - D3DXVECTOR3 LookAtPoint; - - EyePoint =*cam->GetEyePt(); - LookAtPoint =*cam->GetLookAtPt(); - EyePoint.y=-1.0f*EyePoint.y+1.0f; - LookAtPoint.y=-1.0f*LookAtPoint.y+1.0f; - - - D3DXMATRIX mView; - D3DXMATRIX mProj; - D3DXMATRIX mViewProj; - D3DXMATRIX mViewProjInv; - - D3DXMATRIX mWorld; - mView = *cam->GetViewMatrix(); - mWorld = *cam->GetWorldMatrix(); - - mWorld._42=-mWorld._42-1.0f; - - mWorld._21*=-1.0f; - mWorld._23*=-1.0f; - - mWorld._32*=-1.0f; - - D3DXMatrixInverse(&mView, NULL, &mWorld); - D3DXMatrixPerspectiveFovLH(&mProj,camera_fov * D3DX_PI / 360.0f,aspectRatio,scene_z_near,scene_z_far); - mViewProj=mView*mProj; - D3DXMatrixInverse(&mViewProjInv, NULL, &mViewProj); - - pEffect->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix(mViewProj); - pEffect->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector(EyePoint); - D3DXVECTOR3 direction = LookAtPoint - EyePoint; - D3DXVECTOR3 normalized_direction = *D3DXVec3Normalize(&normalized_direction,&direction); - pEffect->GetVariableByName("g_CameraDirection")->AsVector()->SetFloatVector(normalized_direction); - - pEffect->GetVariableByName("g_HalfSpaceCullSign")->AsScalar()->SetFloat(1.0f); - pEffect->GetVariableByName("g_HalfSpaceCullPosition")->AsScalar()->SetFloat(0); -} - -void CTerrain::SetupRefractionView(CFirstPersonCamera *cam) -{ - pEffect->GetVariableByName("g_HalfSpaceCullSign")->AsScalar()->SetFloat(-1.0f); - pEffect->GetVariableByName("g_HalfSpaceCullPosition")->AsScalar()->SetFloat(terrain_minheight); -} -void CTerrain::SetupLightView(CFirstPersonCamera *cam) -{ - - D3DXVECTOR3 EyePoint= D3DXVECTOR3(14000.0f,6500.0f,4000.0f); - D3DXVECTOR3 LookAtPoint = D3DXVECTOR3(terrain_far_range/2.0f,0.0f,terrain_far_range/2.0f); - D3DXVECTOR3 lookUp = D3DXVECTOR3(0,1,0); - D3DXVECTOR3 cameraPosition = *cam->GetEyePt(); - - float nr, fr; - nr=sqrt(EyePoint.x*EyePoint.x+EyePoint.y*EyePoint.y+EyePoint.z*EyePoint.z)-terrain_far_range*1.0f; - fr=sqrt(EyePoint.x*EyePoint.x+EyePoint.y*EyePoint.y+EyePoint.z*EyePoint.z)+terrain_far_range*1.0f; - - D3DXMATRIX mView = *D3DXMatrixLookAtLH(&mView,&EyePoint,&LookAtPoint,&lookUp); - D3DXMATRIX mProjMatrix = *D3DXMatrixOrthoLH(&mProjMatrix,terrain_far_range*1.5,terrain_far_range,nr,fr); - D3DXMATRIX mViewProj = mView * mProjMatrix; - D3DXMATRIX mViewProjInv; - D3DXMatrixInverse(&mViewProjInv, NULL, &mViewProj); - - ID3DX11Effect* oceanFX = g_pOceanSurf->m_pOceanFX; - oceanFX->GetVariableByName("g_LightModelViewProjectionMatrix")->AsMatrix()->SetMatrix(mViewProj); - - pEffect->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix(mViewProj); - pEffect->GetVariableByName("g_LightModelViewProjectionMatrix")->AsMatrix()->SetMatrix(mViewProj); - pEffect->GetVariableByName("g_LightModelViewProjectionMatrixInv")->AsMatrix()->SetMatrix(mViewProjInv); - pEffect->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector(cameraPosition); - D3DXVECTOR3 direction = *cam->GetLookAtPt() - *cam->GetEyePt(); - D3DXVECTOR3 normalized_direction = *D3DXVec3Normalize(&normalized_direction,&direction); - pEffect->GetVariableByName("g_CameraDirection")->AsVector()->SetFloatVector(normalized_direction); - - pEffect->GetVariableByName("g_HalfSpaceCullSign")->AsScalar()->SetFloat(1.0); - pEffect->GetVariableByName("g_HalfSpaceCullPosition")->AsScalar()->SetFloat(terrain_minheight*2); - -} - -void CTerrain::SetupNormalView(CFirstPersonCamera *cam) -{ - D3DXVECTOR3 EyePoint; - D3DXVECTOR3 LookAtPoint; - - EyePoint =*cam->GetEyePt(); - LookAtPoint =*cam->GetLookAtPt(); - D3DXMATRIX mView = *cam->GetViewMatrix(); - D3DXMATRIX mProjMatrix = *cam->GetProjMatrix(); - D3DXMATRIX mViewProj = mView * mProjMatrix; - D3DXMATRIX mViewProjInv; - D3DXMatrixInverse(&mViewProjInv, NULL, &mViewProj); - D3DXVECTOR3 cameraPosition = *cam->GetEyePt(); - - pEffect->GetVariableByName("g_ModelViewMatrix")->AsMatrix()->SetMatrix(mView); - pEffect->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix(mViewProj); - pEffect->GetVariableByName("g_ModelViewProjectionMatrixInv")->AsMatrix()->SetMatrix(mViewProjInv); - pEffect->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector(cameraPosition); - D3DXVECTOR3 direction = LookAtPoint - EyePoint; - D3DXVECTOR3 normalized_direction = *D3DXVec3Normalize(&normalized_direction,&direction); - pEffect->GetVariableByName("g_CameraDirection")->AsVector()->SetFloatVector(normalized_direction); - pEffect->GetVariableByName("g_HalfSpaceCullSign")->AsScalar()->SetFloat(1.0); - pEffect->GetVariableByName("g_HalfSpaceCullPosition")->AsScalar()->SetFloat(terrain_minheight*20); - -} diff --git a/sample/d3d11/terrain.h b/sample/d3d11/terrain.h deleted file mode 100644 index be23b1f..0000000 --- a/sample/d3d11/terrain.h +++ /dev/null @@ -1,174 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed -// under the Mutual Non-Disclosure Agreement. -// -// Notice -// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES -// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. -// -// NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. No third party distribution is allowed unless -// expressly authorized by NVIDIA. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright © 2008- 2013 NVIDIA Corporation. All rights reserved. -// -// NVIDIA Corporation and its licensors retain all intellectual property and proprietary -// rights in and to this software and related documentation and any modifications thereto. -// Any use, reproduction, disclosure or distribution of this software and related -// documentation without an express license agreement from NVIDIA Corporation is -// strictly prohibited. -// - -#ifndef _TERRAIN_H -#define _TERRAIN_H - -#include "DXUT.h" -#include "DXUTcamera.h" -#include "SDKMisc.h" -#include "d3dx11effect.h" -#include "d3d11.h" - - -#define terrain_gridpoints 512 -#define terrain_numpatches_1d 64 -#define terrain_geometry_scale 1.0f -#define terrain_maxheight 35.0f -#define terrain_minheight -30.0f -#define terrain_fractalfactor 0.51f; -#define terrain_fractalinitialvalue 100.0f -#define terrain_smoothfactor1 0.9f -#define terrain_smoothfactor2 -0.03f -#define terrain_rockfactor 0.97f -#define terrain_smoothsteps 40 - -#define terrain_height_underwater_start -100.0f -#define terrain_height_underwater_end -8.0f -#define terrain_height_sand_start -30.0f -#define terrain_height_sand_end 1.7f -#define terrain_height_grass_start 1.7f -#define terrain_height_grass_end 30.0f -#define terrain_height_rocks_start -2.0f -#define terrain_height_trees_start 4.0f -#define terrain_height_trees_end 30.0f -#define terrain_slope_grass_start 0.96f -#define terrain_slope_rocks_start 0.85f - -#define terrain_far_range terrain_gridpoints*terrain_geometry_scale - -#define shadowmap_resource_buffer_size_xy 4096 -#define water_normalmap_resource_buffer_size_xy 2048 -#define terrain_layerdef_map_texture_size 1024 -#define terrain_depth_shadow_map_texture_size 512 - -#define sky_gridpoints 20 -#define sky_texture_angle 0.34f - -#define main_buffer_size_multiplier 1.1f -#define reflection_buffer_size_multiplier 1.1f -#define refraction_buffer_size_multiplier 1.1f - -#define scene_z_near 1.0f -#define scene_z_far 25000.0f -#define camera_fov 110.0f - -class CTerrain -{ - public: - - - void Initialize(ID3D11Device*, ID3DX11Effect*); - void DeInitialize(); - void ReCreateBuffers(); - void LoadTextures(); - void Render(CFirstPersonCamera *); - void RenderTerrainToHeightField( ID3D11DeviceContext* const pContext, const D3DXMATRIX& worldToViewMatrix, const D3DXMATRIX& viewToProjectionMatrix, const D3DXVECTOR3 eyePositionWS, const D3DXVECTOR3 viewDirectionWS ); - void CreateTerrain(); - - float DynamicTesselationFactor; - void SetupNormalView(CFirstPersonCamera *); - void SetupReflectionView(CFirstPersonCamera *); - void SetupRefractionView(CFirstPersonCamera *); - void SetupLightView(CFirstPersonCamera * ); - float BackbufferWidth; - float BackbufferHeight; - - UINT MultiSampleCount; - UINT MultiSampleQuality; - - ID3D11Texture2D *rock_bump_texture; - ID3D11ShaderResourceView *rock_bump_textureSRV; - - ID3D11Texture2D *sky_texture; - ID3D11ShaderResourceView *sky_textureSRV; - - ID3D11Texture2D *foam_intensity_texture; - ID3D11ShaderResourceView *foam_intensity_textureSRV; - - ID3D11Texture2D *foam_diffuse_texture; - ID3D11ShaderResourceView *foam_diffuse_textureSRV; - - ID3D11Texture2D *reflection_color_resource; - ID3D11ShaderResourceView *reflection_color_resourceSRV; - ID3D11RenderTargetView *reflection_color_resourceRTV; - ID3D11Texture2D *refraction_color_resource; - ID3D11ShaderResourceView *refraction_color_resourceSRV; - ID3D11RenderTargetView *refraction_color_resourceRTV; - - ID3D11Texture2D *shadowmap_resource; - ID3D11ShaderResourceView *shadowmap_resourceSRV; - ID3D11DepthStencilView *shadowmap_resourceDSV; - - ID3D11Texture2D *reflection_depth_resource; - ID3D11DepthStencilView *reflection_depth_resourceDSV; - - ID3D11Texture2D *refraction_depth_resource; - ID3D11RenderTargetView *refraction_depth_resourceRTV; - ID3D11ShaderResourceView *refraction_depth_resourceSRV; - - ID3D11Texture2D *main_color_resource; - ID3D11ShaderResourceView *main_color_resourceSRV; - ID3D11RenderTargetView *main_color_resourceRTV; - ID3D11Texture2D *main_depth_resource; - ID3D11DepthStencilView *main_depth_resourceDSV; - ID3D11ShaderResourceView *main_depth_resourceSRV; - ID3D11Texture2D *main_color_resource_resolved; - ID3D11ShaderResourceView *main_color_resource_resolvedSRV; - - ID3D11Device* pDevice; - ID3DX11Effect* pEffect; - - - - - float height[terrain_gridpoints+1][terrain_gridpoints+1]; - D3DXVECTOR3 normal[terrain_gridpoints+1][terrain_gridpoints+1]; - D3DXVECTOR3 tangent[terrain_gridpoints+1][terrain_gridpoints+1]; - D3DXVECTOR3 binormal[terrain_gridpoints+1][terrain_gridpoints+1]; - - ID3D11Texture2D *heightmap_texture; - ID3D11ShaderResourceView *heightmap_textureSRV; - - ID3D11Texture2D *layerdef_texture; - ID3D11ShaderResourceView *layerdef_textureSRV; - - ID3D11Texture2D *depthmap_texture; - ID3D11ShaderResourceView *depthmap_textureSRV; - - ID3D11Buffer *heightfield_vertexbuffer; - ID3D11Buffer *sky_vertexbuffer; - - ID3D11InputLayout *heightfield_inputlayout; - ID3D11InputLayout *trianglestrip_inputlayout; - -}; - -float bilinear_interpolation(float fx, float fy, float a, float b, float c, float d); - -#endif // _TERRAIN_H \ No newline at end of file diff --git a/sample/d3d11/util.cpp b/sample/d3d11/util.cpp deleted file mode 100644 index 62b7772..0000000 --- a/sample/d3d11/util.cpp +++ /dev/null @@ -1,63 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed -// under the Mutual Non-Disclosure Agreement. -// -// Notice -// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES -// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. -// -// NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. No third party distribution is allowed unless -// expressly authorized by NVIDIA. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright © 2008- 2013 NVIDIA Corporation. All rights reserved. -// -// NVIDIA Corporation and its licensors retain all intellectual property and proprietary -// rights in and to this software and related documentation and any modifications thereto. -// Any use, reproduction, disclosure or distribution of this software and related -// documentation without an express license agreement from NVIDIA Corporation is -// strictly prohibited. -// - -#include "DXUT.h" - -HRESULT LoadFile(LPCTSTR FileName, ID3DXBuffer** ppBuffer) -{ - FILE* pF = NULL; - ID3DXBuffer* pBuffer = NULL; - - if(_wfopen_s(&pF, FileName, L"rb")) - goto error; - - if(fseek(pF,0,SEEK_END)) - goto error; - - const DWORD fileSize = ftell(pF); - - if(fseek(pF,0,SEEK_SET)) - goto error; - - if(FAILED(D3DXCreateBuffer(fileSize, &pBuffer))) - goto error; - - if(fileSize != fread(pBuffer->GetBufferPointer(), 1, fileSize, pF)) - goto error; - - fclose(pF); - - *ppBuffer = pBuffer; - return S_OK; - -error: - fclose(pF); - SAFE_RELEASE(pBuffer); - - return E_FAIL; -} diff --git a/sample/d3d11/win64/debug/cudart64_55.dll b/sample/d3d11/win64/debug/cudart64_55.dll deleted file mode 100644 index d729fdc..0000000 Binary files a/sample/d3d11/win64/debug/cudart64_55.dll and /dev/null differ diff --git a/sample/d3d11/win64/debug/gfsdk_waveworks_debug.win64.dll b/sample/d3d11/win64/debug/gfsdk_waveworks_debug.win64.dll deleted file mode 100644 index 4835dca..0000000 Binary files a/sample/d3d11/win64/debug/gfsdk_waveworks_debug.win64.dll and /dev/null differ diff --git a/sample/d3d11/win64/debug/sample_d3d11_debug.exe b/sample/d3d11/win64/debug/sample_d3d11_debug.exe deleted file mode 100644 index ea5cb87..0000000 Binary files a/sample/d3d11/win64/debug/sample_d3d11_debug.exe and /dev/null differ diff --git a/sample/d3d11/win64/debug/sample_d3d11_debug.ilk b/sample/d3d11/win64/debug/sample_d3d11_debug.ilk deleted file mode 100644 index 4066515..0000000 Binary files a/sample/d3d11/win64/debug/sample_d3d11_debug.ilk and /dev/null differ diff --git a/sample/deploy_sample_d3d11.xpj b/sample/deploy_sample_d3d11.xpj deleted file mode 100644 index fda2873..0000000 --- a/sample/deploy_sample_d3d11.xpj +++ /dev/null @@ -1,51 +0,0 @@ - - - -