diff options
Diffstat (limited to 'test/src/D3D11/TwoPassBlend.cpp')
| -rw-r--r-- | test/src/D3D11/TwoPassBlend.cpp | 1693 |
1 files changed, 0 insertions, 1693 deletions
diff --git a/test/src/D3D11/TwoPassBlend.cpp b/test/src/D3D11/TwoPassBlend.cpp deleted file mode 100644 index d28f8d6..0000000 --- a/test/src/D3D11/TwoPassBlend.cpp +++ /dev/null @@ -1,1693 +0,0 @@ -/* -* Copyright (c) 2008-2016, NVIDIA CORPORATION. All rights reserved. -* -* NVIDIA CORPORATION and its licensors retain all intellectual property -* and proprietary rights in and to this software, 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 <DXUTgui.h> -#include <DXUTmisc.h> -#include <DXUTCamera.h> -#include <DXUTSettingsDlg.h> -#include <SDKmisc.h> - -#include "..\..\..\src\Renderer_DX11.h" -#include "SceneRTs.h" -#include "Scene3D.h" -#include "GPUProfiler.h" - -#define ENABLE_MESHES 1 -#define ENABLE_SHOW_COLORS 0 -#define ENABLE_GBUFFER_NORMALS 1 -#define ENABLE_DEBUG_NORMALS 0 -#define ENABLE_SMALL_SCALE_AO 1 -#define ENABLE_LARGE_SCALE_AO 1 -#define ENABLE_BLUR_RADIUS 1 -#define ENABLE_BORDER_PIXELS 0 -#define ENABLE_FP16_VIEW_DEPTHS 1 -#define ENABLE_DEPTH_CLAMP_MODES 0 -#define ENABLE_BLUR_SHARPNESS 1 -#define ENABLE_BLUR_SHARPNESS_PROFILE 0 -#define ENABLE_BACKGROUND_AO 0 -#define ENABLE_FOREGROUND_AO 0 -#define ENABLE_VIEW_DEPTH_THRESHOLD 0 -#define ENABLE_INTERNAL_RENDER_TIMES 1 -#define ENABLE_HUD_BACKGROUND 0 -#define ENABLE_NVAPI 0 - -#define TEST_TWO_PASS_BLEND 1 -#define TEST_PARTIAL_VIEWPORT_DIMENSIONS 0 -#define TEST_PARTIAL_VIEWPORT_DEPTH_RANGE 0 -#define TEST_PRE_CREATE_RTS 1 -#define TEST_REVERSED_DEPTH_TEST 1 - -//-------------------------------------------------------------------------------------- -// Scene description -//-------------------------------------------------------------------------------------- - -#define FOVY (40.0f * D3DX_PI / 180.0f) -#define ZNEAR 0.01f -#define ZFAR 500.0f - -#define MESH_PATH L"..\\assets\\" - -MeshDescriptor g_MeshDesc[] = -{ - //{L"Sibenik", MESH_PATH L"sibenik.sdkmesh", SCENE_NO_GROUND_PLANE, SCENE_NO_SHADING, SCENE_USE_FIRST_PERSON_CAMERA, 0.005f }, - {L"AT-AT", MESH_PATH L"AT-AT.sdkmesh", SCENE_USE_GROUND_PLANE, SCENE_NO_SHADING, SCENE_USE_ORBITAL_CAMERA, 0.1f }, -}; - -//-------------------------------------------------------------------------------------- -// MSAA settings -//-------------------------------------------------------------------------------------- - -struct MSAADescriptor -{ - WCHAR Name[32]; - int SampleCount; -}; - -MSAADescriptor g_MSAADesc[] = -{ - {L"1x MSAA", 1}, - {L"2x MSAA", 2}, - {L"4x MSAA", 4}, - {L"8x MSAA", 8}, - {L"", 0}, -}; - -//-------------------------------------------------------------------------------------- -// GUI constants -//-------------------------------------------------------------------------------------- - -#define MAX_RADIUS_MULT 2.f -#define MAX_BACKGROUND_DEPTH 800.f -#define MAX_DEPTH_THRESHOLD 1.f -#define MAX_DEPTH_SHARPNESS 32.f -#define MAX_BLUR_SHARPNESS 32.f - -enum -{ - IDC_TOGGLEFULLSCREEN = 1, - IDC_TOGGLEREF, - IDC_CHANGEDEVICE, - IDC_CHANGESCENE, - IDC_CHANGEMSAA, -#if ENABLE_SHOW_COLORS - IDC_SHOW_COLORS, - IDC_SHOW_AO, -#endif -#if ENABLE_GBUFFER_NORMALS - IDC_USE_GBUFFER_NORMALS, -#endif -#if ENABLE_DEBUG_NORMALS - IDC_DEBUG_NORMALS, -#endif - IDC_RADIUS_STATIC, - IDC_RADIUS_SLIDER, -#if ENABLE_BACKGROUND_AO - IDC_BACKGROUND_DEPTH_STATIC, - IDC_BACKGROUND_DEPTH_SLIDER, -#endif -#if ENABLE_FOREGROUND_AO - IDC_FOREGROUND_DEPTH_STATIC, - IDC_FOREGROUND_DEPTH_SLIDER, -#endif -#if ENABLE_VIEW_DEPTH_THRESHOLD - IDC_DEPTH_THRESHOLD_STATIC, - IDC_DEPTH_THRESHOLD_SLIDER, - IDC_DEPTH_SHARPNESS_STATIC, - IDC_DEPTH_SHARPNESS_SLIDER, -#endif - IDC_BIAS_STATIC, - IDC_BIAS_SLIDER, - IDC_SMALL_SCALE_AO_STATIC, - IDC_SMALL_SCALE_AO_SLIDER, -#if ENABLE_LARGE_SCALE_AO - IDC_LARGE_SCALE_AO_STATIC, - IDC_LARGE_SCALE_AO_SLIDER, -#endif - IDC_EXPONENT_STATIC, - IDC_EXPONENT_SLIDER, -#if ENABLE_BLUR_RADIUS - IDC_BLUR_DISABLED, - IDC_BLUR_RADIUS_2, - IDC_BLUR_RADIUS_4, -#endif -#if ENABLE_BORDER_PIXELS - IDC_BORDER_PIXELS_0, - IDC_BORDER_PIXELS_64, - IDC_BORDER_PIXELS_128, -#endif -#if ENABLE_BLUR_SHARPNESS - IDC_BLUR_SHARPNESS_STATIC, - IDC_BLUR_SHARPNESS_SLIDER, -#endif -#if ENABLE_FP16_VIEW_DEPTHS - IDC_DEPTH_STORAGE_TYPE_FP16, - IDC_DEPTH_STORAGE_TYPE_FP32, -#endif -#if ENABLE_DEPTH_CLAMP_MODES - IDC_DEPTH_CLAMP_TO_EDGE, - IDC_DEPTH_CLAMP_TO_BORDER, -#endif -#if ENABLE_DEBUG_MODES - IDC_SHADER_TYPE_HBAO_PLUS, - IDC_SHADER_TYPE_DEBUG_HBAO_PLUS, -#endif -}; - -enum -{ - MSAA_MODE_1X = 0, - MSAA_MODE_2X, - MSAA_MODE_4X, - MSAA_MODE_8X, -}; - -#define UI_RADIUS_MULT L"Radius multiplier: " -#define UI_BACKGROUND_DEPTH L"Background depth:" -#define UI_FOREGROUND_DEPTH L"Foreground depth:" -#define UI_DEPTH_THRESHOLD L"Depth threshold: " -#define UI_DEPTH_SHARPNESS L"Depth sharpness: " -#define UI_AO_BIAS L"Bias: " -#define UI_POW_EXPONENT L"Power exponent: " -#define UI_SMALL_SCALE_AO L"Small-scale AO: " -#define UI_LARGE_SCALE_AO L"Large-scale AO: " -#define UI_BLUR_SHARPNESS L"Blur sharpness: " - -//-------------------------------------------------------------------------------------- -// Global variables -//-------------------------------------------------------------------------------------- - -CDXUTDialogResourceManager g_DialogResourceManager; // manager for shared resources of dialogs -CD3DSettingsDlg g_SettingsDlg; // Device settings dialog -CDXUTDialog g_HUD; // dialog for standard controls -CDXUTTextHelper* g_pTxtHelper = NULL; -UINT g_TextLineHeight = 15; -bool g_DrawUI = true; -bool g_ShowAO = true; -bool g_BlurAO = true; -bool g_ShowColors = false; -bool g_PerSampleAO = true; -bool g_UseGBufferNormals = true; -bool g_DebugNormals = false; -GFSDK_SSAO_RenderMask g_RenderMask; -GFSDK_SSAO_Parameters g_AOParams; -GFSDK_SSAO_Context_D3D11* g_pAOContext = NULL; -GFSDK_SSAO_ProjectionMatrixDepthRange g_ProjectionMatrixDepthRange; - -D3D11_VIEWPORT g_BackBufferViewport; -UINT g_BackBufferWidth = 0; -UINT g_BackBufferHeight = 0; -UINT g_BorderPixels = 0; -SceneRenderer g_pSceneRenderer; -SceneRTs* g_pSceneRTs = NULL; - -#if TEST_TWO_PASS_BLEND -ID3D11BlendState* g_pMinBlendState; -ID3D11DepthStencilState* g_pStencilEqualState; -bool g_EnableTwoPassBlend = true; -#endif - -#if TEST_PARTIAL_VIEWPORT_DIMENSIONS -BOOL g_TestSmallViewport = FALSE; -#endif - -#if ENABLE_NVAPI -BOOL g_MonitorAvailableVidMem = FALSE; -BOOL g_MonitorNvGraphicsClock = TRUE; -#endif - -#if ENABLE_RENDER_TIMES -GFSDK::SSAO::GpuTimeRenderPassIndex GFSDK::SSAO::RenderTimes::CurrentPassIndex = GFSDK::SSAO::RENDER_PASS_0; -#endif - -SceneMesh g_SceneMeshes[SIZEOF_ARRAY(g_MeshDesc)]; -D3D11::GPUProfiler g_GPUProfiler; - -struct Scene -{ - Scene() - : pMesh(NULL) - { - } - SceneMesh *pMesh; -}; -Scene g_Scenes[SIZEOF_ARRAY(g_MeshDesc)]; -bool g_UseOrbitalCamera = true; - -int g_CurrentSceneId = 0; -int g_MSAACurrentSettings = MSAA_MODE_1X; - -#if 1 -#define RENDER_AO_WIDTH g_BackBufferWidth -#define RENDER_AO_HEIGHT g_BackBufferHeight -#else -#define RENDER_AO_WIDTH 3840 -#define RENDER_AO_HEIGHT 2160 -#endif - -//-------------------------------------------------------------------------------------- -class CPUTimer -{ -public: - CPUTimer(float* pTimeUS) - { - QueryPerformanceCounter(&m_StartTime); - m_pTimeUS = pTimeUS; - } - ~CPUTimer() - { - LARGE_INTEGER EndTime, Freq; - QueryPerformanceCounter(&EndTime); - QueryPerformanceFrequency(&Freq); - *m_pTimeUS = float((((double)EndTime.QuadPart) - ((double)m_StartTime.QuadPart))/((double)Freq.QuadPart) * 1.e6); - } - -private: - LARGE_INTEGER m_StartTime; - float* m_pTimeUS; -}; -float g_CPUTimeRenderAO = 0.f; -float g_CPUTimePreCreateRTs = 0.f; - -//-------------------------------------------------------------------------------------- -#if ENABLE_NVAPI -#include "NVAPI/nvapi.h" -//#pragma comment(lib, "nvapi") -class NvApiWrapper -{ -public: - struct MemInfo - { - unsigned int DedicatedVideoMemoryInMB; - unsigned int AvailableDedicatedVideoMemoryInMB; - unsigned int CurrentAvailableDedicatedVideoMemoryInMB; - }; - struct FrequencyInfo - { - unsigned int NvGraphicsClockInMhz; - }; - - NvApiWrapper() - : m_GpuHandle(0) - { - } - - void Init() - { - NvAPI_Status Status = NvAPI_Initialize(); - assert(Status == NVAPI_OK); - - NvPhysicalGpuHandle NvGpuHandles[NVAPI_MAX_PHYSICAL_GPUS] = { 0 }; - NvU32 NvGpuCount = 0; - Status = NvAPI_EnumPhysicalGPUs(NvGpuHandles, &NvGpuCount); - assert(Status == NVAPI_OK); - assert(NvGpuCount != 0); - m_GpuHandle = NvGpuHandles[0]; - } - - bool GetVideoMemoryInfo(MemInfo* pInfo) - { - NV_DISPLAY_DRIVER_MEMORY_INFO MemInfo = { 0 }; - MemInfo.version = NV_DISPLAY_DRIVER_MEMORY_INFO_VER_2; - NvAPI_Status Status = NvAPI_GPU_GetMemoryInfo(m_GpuHandle, &MemInfo); - if (Status != NVAPI_OK) - { - return false; - } - - pInfo->DedicatedVideoMemoryInMB = MemInfo.dedicatedVideoMemory / 1024; - pInfo->AvailableDedicatedVideoMemoryInMB = MemInfo.availableDedicatedVideoMemory / 1024; - pInfo->CurrentAvailableDedicatedVideoMemoryInMB = MemInfo.curAvailableDedicatedVideoMemory / 1024; - return true; - } - - bool GetNVGraphicsClockMhz(FrequencyInfo *pInfo) - { - NV_GPU_CLOCK_FREQUENCIES table = { 0 }; - table.version = NV_GPU_CLOCK_FREQUENCIES_VER; - table.ClockType = NV_GPU_CLOCK_FREQUENCIES_CURRENT_FREQ; - - NvAPI_Status Status = NvAPI_GPU_GetAllClockFrequencies(m_GpuHandle, &table); - if (Status != NVAPI_OK) - { - return false; - } - - if (!table.domain[NVAPI_GPU_PUBLIC_CLOCK_GRAPHICS].bIsPresent) - { - return false; - } - - NvU32 GraphicsClockInKhz = table.domain[NVAPI_GPU_PUBLIC_CLOCK_GRAPHICS].frequency; - pInfo->NvGraphicsClockInMhz = NvU32((GraphicsClockInKhz + 500) / 1000); - return true; - } - -private: - NvPhysicalGpuHandle m_GpuHandle; -}; -NvApiWrapper g_NvApiWrapper; -#endif - -//-------------------------------------------------------------------------------------- -using namespace GFSDK; - -class TextRenderer -{ -public: - void Init(CDXUTDialogResourceManager* pManager) - { -#if ENABLE_HUD_BACKGROUND - const UINT NumTextLines = 5; - const float HudOpacity = 0.32f; - m_BackgroundQuad.Init(pManager); - m_BackgroundQuad.SetLocation(0,0); - m_BackgroundQuad.SetSize(260, g_TextLineHeight * NumTextLines + 15); - m_BackgroundQuad.SetBackgroundColors(D3DCOLOR_COLORVALUE(1,1,1,HudOpacity)); -#endif -#if ENABLE_NVAPI - g_NvApiWrapper.Init(); -#endif - } - - void DrawText() - { - g_pTxtHelper->Begin(); - - g_pTxtHelper->SetInsertionPos(5, 5); - g_pTxtHelper->SetForegroundColor(D3DXCOLOR(0.f, 0.f, 0.f, 1.f)); - - GFSDK_SSAO_Version Version; - GFSDK_SSAO_Status Status; - Status = GFSDK_SSAO_GetVersion(&Version); - assert(Status == GFSDK_SSAO_OK); - - WCHAR VersionString[128]; - StringCchPrintf(VersionString, SIZEOF_ARRAY(VersionString), L"%d.%d.%d.%d", Version.Major, Version.Minor, Version.Branch, Version.Revision); - g_pTxtHelper->DrawFormattedTextLine(L"D3D11 HBAO+ %s\n", VersionString); - - g_pTxtHelper->DrawTextLine(DXUTGetDeviceStats()); - - UINT AOWidth = g_pSceneRTs->Width; - UINT AOHeight = g_pSceneRTs->Height; - g_pTxtHelper->DrawFormattedTextLine(L"AO Resolution: %d x %d", AOWidth, AOHeight); - - g_pTxtHelper->DrawFormattedTextLine(L"ZNear: %g, ZFar: %g", g_ProjectionMatrixDepthRange.ZNear, g_ProjectionMatrixDepthRange.ZFar); - -#if ENABLE_RENDER_TIMES -#if ENABLE_INTERNAL_RENDER_TIMES -#if TEST_TWO_PASS_BLEND - for (UINT PassIndex = 0; PassIndex < GFSDK::SSAO::RENDER_PASS_COUNT; ++PassIndex) -#else - UINT PassIndex = 0; -#endif - { - g_pTxtHelper->DrawFormattedTextLine(L"GPU Times (ms): Total: %0.2f Z {%0.2f, %0.2f} AO {%0.2f, %0.2f, %0.2f} Blur {%0.2f, %0.2f}", - GFSDK::SSAO::D3D11::Renderer::s_RenderTimes.GPUTimeMS[PassIndex][SSAO::REGIME_TIME_TOTAL], - // Z - GFSDK::SSAO::D3D11::Renderer::s_RenderTimes.GPUTimeMS[PassIndex][SSAO::REGIME_TIME_LINEAR_Z], - GFSDK::SSAO::D3D11::Renderer::s_RenderTimes.GPUTimeMS[PassIndex][SSAO::REGIME_TIME_DEINTERLEAVE_Z], - // AO - GFSDK::SSAO::D3D11::Renderer::s_RenderTimes.GPUTimeMS[PassIndex][SSAO::REGIME_TIME_NORMAL], - GFSDK::SSAO::D3D11::Renderer::s_RenderTimes.GPUTimeMS[PassIndex][SSAO::REGIME_TIME_COARSE_AO], - GFSDK::SSAO::D3D11::Renderer::s_RenderTimes.GPUTimeMS[PassIndex][SSAO::REGIME_TIME_INTERLEAVE_AO], - // Blur - GFSDK::SSAO::D3D11::Renderer::s_RenderTimes.GPUTimeMS[PassIndex][SSAO::REGIME_TIME_BLURX], - GFSDK::SSAO::D3D11::Renderer::s_RenderTimes.GPUTimeMS[PassIndex][SSAO::REGIME_TIME_BLURY]); - } - - g_pTxtHelper->DrawFormattedTextLine(L"CPU Time (us): PreCreateRTs{%d} RenderAO{%d}", int(g_CPUTimePreCreateRTs), int(g_CPUTimeRenderAO)); -#else - g_pTxtHelper->DrawFormattedTextLine(L"HBAO+ GPU Time: %0.2f ms", - GFSDK::SSAO::D3D11::Renderer::s_RenderTimes.GPUTimeMS[SSAO::REGIME_TIME_TOTAL]); -#endif -#endif - - g_pTxtHelper->DrawFormattedTextLine(L"Allocated Video Memory: %d MB\n", g_pAOContext->GetAllocatedVideoMemoryBytes() / (1024*1024)); - -#if ENABLE_NVAPI - if (g_MonitorAvailableVidMem) - { - NvApiWrapper::MemInfo MemInfo = { 0 }; - g_NvApiWrapper.GetVideoMemoryInfo(&MemInfo); - g_pTxtHelper->DrawFormattedTextLine(L"NVAPI: Current Available Video Memory: %u MB", MemInfo.CurrentAvailableDedicatedVideoMemoryInMB); - } - if (g_MonitorNvGraphicsClock) - { - NvApiWrapper::FrequencyInfo FreqInfo = { 0 }; - g_NvApiWrapper.GetNVGraphicsClockMhz(&FreqInfo); - g_pTxtHelper->DrawFormattedTextLine(L"NVAPI Current NV GPU Graphics Clock: %d", FreqInfo.NvGraphicsClockInMhz); - } -#endif - - g_pTxtHelper->End(); - } - - void OnRender(float fElapsedTime) - { -#if ENABLE_HUD_BACKGROUND - m_BackgroundQuad.OnRender(fElapsedTime); -#endif - - DrawText(); - } - -private: - CDXUTDialog m_BackgroundQuad; -}; -TextRenderer g_TextRenderer; - -//-------------------------------------------------------------------------------------- -struct Cameras -{ - Cameras() - { - // Setup orbital camera - D3DXVECTOR3 vecEye(0.0f, 2.0f, 0.0f); - D3DXVECTOR3 vecAt (0.0f, 0.0f, 0.0f); - Orbital.SetViewParams(&vecEye, &vecAt); - Orbital.SetRadius(1.5f, 0.01f); - Orbital.SetButtonMasks(MOUSE_LEFT_BUTTON, MOUSE_WHEEL, 0); - - // Setup first-person camera - D3DXVECTOR3 sibenikVecEye(0.0960150138f, 0.0273544509f, -0.0185411610f); - D3DXVECTOR3 sibenikVecAt (-0.623801112f, -0.649074197f, -0.174454257f); - FirstPerson.SetViewParams(&sibenikVecEye, &sibenikVecAt); - FirstPerson.SetEnablePositionMovement(1); - FirstPerson.SetScalers(0.001f, 0.05f); - FirstPerson.SetRotateButtons( 1, 1, 1 ); - } - - void SetProjParameters(SceneRTs *pRTs) - { - float Fovy = 2.f * atanf( tanf(FOVY * 0.5f) * (1.f + float(pRTs->BorderPixels) / (0.5f * float(pRTs->OutputHeight)) ) ); - float AspectRatio = float(pRTs->OutputWidth + pRTs->BorderPixels * 2) / float(pRTs->OutputHeight + pRTs->BorderPixels * 2); - - Orbital.SetProjParams (Fovy, AspectRatio, ZNEAR, ZFAR); - Orbital.SetWindow (pRTs->OutputWidth, pRTs->OutputHeight); - FirstPerson.SetProjParams (Fovy, AspectRatio, ZNEAR, ZFAR); - -#if TEST_REVERSED_DEPTH_TEST - D3DXMatrixPerspectiveFovLH(&ProjectionMatrix, Fovy, AspectRatio, FLT_MAX, ZNEAR); - ProjectionMatrix._33 = 0.f; -#endif - } - - CFirstPersonCamera FirstPerson; - CModelViewerCamera Orbital; -#if TEST_REVERSED_DEPTH_TEST - D3DXMATRIX ProjectionMatrix; -#endif -}; -Cameras g_Cameras; - -//-------------------------------------------------------------------------------------- -void GetAdapterDesc(ID3D11Device* pd3dDevice, DXGI_ADAPTER_DESC* pDesc) -{ - IDXGIDevice *pDXGIDevice = NULL; - pd3dDevice->QueryInterface(__uuidof(IDXGIDevice), (void **)&pDXGIDevice); - - IDXGIAdapter *pDXGIAdapter = NULL; - pDXGIDevice->GetParent(__uuidof(IDXGIAdapter), (void **)&pDXGIAdapter); - - pDXGIAdapter->GetDesc(pDesc); - - SAFE_RELEASE(pDXGIAdapter); - SAFE_RELEASE(pDXGIDevice); -} - -//-------------------------------------------------------------------------------------- -char* GetOutputFilename(ID3D11Device* pd3dDevice, char *FileExtension) -{ - static DXGI_ADAPTER_DESC AdapterDesc; - if (AdapterDesc.DeviceId == 0) - { - GetAdapterDesc(pd3dDevice, &AdapterDesc); - } - - static char FilePath[256]; - sprintf_s(FilePath, sizeof(FilePath), "..\\..\\Bin\\D3D11\\D3D11_%S_%dx%d.%s", - AdapterDesc.Description, - g_pSceneRTs->Width, - g_pSceneRTs->Height, - FileExtension - ); - - return FilePath; -} - -//-------------------------------------------------------------------------------------- -void InitAOParams(GFSDK_SSAO_Parameters &AOParams) -{ - AOParams = GFSDK_SSAO_Parameters(); - AOParams.Radius = 2.f; - AOParams.Bias = 0.2f; -#if ENABLE_SMALL_SCALE_AO - AOParams.SmallScaleAO = 1.f; -#endif -#if ENABLE_LARGE_SCALE_AO - AOParams.LargeScaleAO = 1.f; -#endif - AOParams.PowerExponent = 2.f; - AOParams.Blur.Enable = g_BlurAO; - AOParams.Blur.Sharpness = 16.f; -#if ENABLE_BLUR_RADIUS - AOParams.Blur.Radius = GFSDK_SSAO_BLUR_RADIUS_4; -#endif -#if ENABLE_BLUR_SHARPNESS_PROFILE - AOParams.Blur.SharpnessProfile.Enable = TRUE; - AOParams.Blur.SharpnessProfile.ForegroundSharpnessScale = 16.f; - AOParams.Blur.SharpnessProfile.ForegroundViewDepth = 4.f; - AOParams.Blur.SharpnessProfile.BackgroundViewDepth = 5.f; -#endif -#if ENABLE_VIEW_DEPTH_THRESHOLD - AOParams.DepthThreshold.Enable = TRUE; - AOParams.DepthThreshold.MaxViewDepth = MAX_DEPTH_THRESHOLD; - AOParams.DepthThreshold.Sharpness = MAX_DEPTH_SHARPNESS; -#endif -#if ENABLE_BACKGROUND_AO - AOParams.BackgroundAO.Enable = TRUE; - AOParams.BackgroundAO.BackgroundViewDepth = MAX_BACKGROUND_DEPTH; -#endif -#if ENABLE_FOREGROUND_AO - AOParams.ForegroundAO.Enable = TRUE; - AOParams.ForegroundAO.ForegroundViewDepth = 0.f; -#endif -} - -//-------------------------------------------------------------------------------------- -// -//-------------------------------------------------------------------------------------- -void ReallocateSceneRTs(ID3D11Device* pd3dDevice) -{ - { - SceneRTs::Desc desc; - desc.OutputWidth = RENDER_AO_WIDTH; - desc.OutputHeight = RENDER_AO_HEIGHT; - desc.BorderPixels = g_BorderPixels; - desc.SampleCount = g_MSAADesc[g_MSAACurrentSettings].SampleCount; - - SAFE_DELETE(g_pSceneRTs); - g_pSceneRTs = new SceneRTs(pd3dDevice, desc); - - g_Cameras.SetProjParameters(g_pSceneRTs); - } - -#if TEST_PRE_CREATE_RTS - { - CPUTimer timer(&g_CPUTimePreCreateRTs); - GFSDK_SSAO_Status status; - status = g_pAOContext->PreCreateRTs(g_AOParams, g_BackBufferWidth, g_BackBufferHeight); - assert(status == GFSDK_SSAO_OK); - } -#endif -} - -//-------------------------------------------------------------------------------------- -// 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 CreateDevice() will fail. -//-------------------------------------------------------------------------------------- -bool CALLBACK ModifyDeviceSettings(DXUTDeviceSettings* pDeviceSettings, void* pUserContext) -{ - assert(pDeviceSettings->ver == DXUT_D3D11_DEVICE); - - // Disable VSync - pDeviceSettings->d3d11.SyncInterval = 0; - - // Do not allocate any depth buffer in DXUT - pDeviceSettings->d3d11.AutoCreateDepthStencil = false; - -#if defined(DEBUG) - pDeviceSettings->d3d11.CreateFlags |= D3D11_CREATE_DEVICE_DEBUG; -#endif - - // For the first device created if it is a REF device, optionally display a warning dialog box - static bool s_bFirstTime = true; - if (s_bFirstTime) - { - s_bFirstTime = false; - if ((DXUT_D3D9_DEVICE == pDeviceSettings->ver && pDeviceSettings->d3d9.DeviceType == D3DDEVTYPE_REF) || - (DXUT_D3D11_DEVICE == pDeviceSettings->ver && - pDeviceSettings->d3d11.DriverType == D3D_DRIVER_TYPE_REFERENCE)) - { - DXUTDisplaySwitchingToREFWarning(pDeviceSettings->ver); - } - } - - return true; -} - -//-------------------------------------------------------------------------------------- -// Reject any D3D11 devices that aren't acceptable by returning false -//-------------------------------------------------------------------------------------- -bool CALLBACK IsD3D11DeviceAcceptable(const CD3D11EnumAdapterInfo *AdapterInfo, UINT Output, const CD3D11EnumDeviceInfo *DeviceInfo, - DXGI_FORMAT BackBufferFormat, bool bWindowed, void* pUserContext) -{ - return true; -} - -//-------------------------------------------------------------------------------------- -// -//-------------------------------------------------------------------------------------- -void LoadScenes(ID3D11Device* pd3dDevice) -{ - int SceneId = 0; - -#if ENABLE_MESHES - // Load the sdkmesh data files - for (int i = 0; i < SIZEOF_ARRAY(g_MeshDesc); ++i) - { - if (FAILED(g_SceneMeshes[i].OnCreateDevice(pd3dDevice, g_MeshDesc[i]))) - { - MessageBox(NULL, L"Unable to create mesh", L"ERROR", MB_OK|MB_SETFOREGROUND|MB_TOPMOST); - PostQuitMessage(0); - } - g_Scenes[SceneId++].pMesh = &g_SceneMeshes[i]; - } -#endif -} - -//-------------------------------------------------------------------------------------- -#if TEST_TWO_PASS_BLEND -void CreateCustomBlendState(ID3D11Device* pd3dDevice) -{ - HRESULT hr; - - D3D11_BLEND_DESC BlendStateDesc; - BlendStateDesc.AlphaToCoverageEnable = FALSE; - BlendStateDesc.IndependentBlendEnable = TRUE; - - for (UINT i = 0; i < SIZEOF_ARRAY(BlendStateDesc.RenderTarget); ++i) - { - BlendStateDesc.RenderTarget[i].BlendEnable = FALSE; - BlendStateDesc.RenderTarget[i].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; - } - - BlendStateDesc.RenderTarget[0].BlendEnable = TRUE; - BlendStateDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_RED | D3D11_COLOR_WRITE_ENABLE_GREEN | D3D11_COLOR_WRITE_ENABLE_BLUE; - - BlendStateDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_ONE; - BlendStateDesc.RenderTarget[0].DestBlend = D3D11_BLEND_ONE; - BlendStateDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_MIN; - - BlendStateDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ZERO; - BlendStateDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ONE; - BlendStateDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; - - V( pd3dDevice->CreateBlendState(&BlendStateDesc, &g_pMinBlendState) ); -} -#endif - -//-------------------------------------------------------------------------------------- -#if TEST_TWO_PASS_BLEND -void CreateCustomDepthStencilState(ID3D11Device* pd3dDevice) -{ - HRESULT hr; - - static D3D11_DEPTH_STENCIL_DESC DepthStencilStateDesc = - { - FALSE, //DepthEnable - D3D11_DEPTH_WRITE_MASK_ZERO, //DepthWriteMask - D3D11_COMPARISON_NEVER, //DepthFunc - TRUE, //StencilEnable - 0xFF, //StencilReadMask - 0, //StencilWriteMask - - { D3D11_STENCIL_OP_KEEP, //StencilFailOp - D3D11_STENCIL_OP_KEEP, //StencilDepthFailOp - D3D11_STENCIL_OP_KEEP, //StencilPassOp - D3D11_COMPARISON_EQUAL //StencilFunc - }, //FrontFace - - { D3D11_STENCIL_OP_KEEP, //StencilFailOp - D3D11_STENCIL_OP_KEEP, //StencilDepthFailOp - D3D11_STENCIL_OP_KEEP, //StencilPassOp - D3D11_COMPARISON_EQUAL //StencilFunc - } //BackFace - }; - - V(pd3dDevice->CreateDepthStencilState(&DepthStencilStateDesc, &g_pStencilEqualState)); -} -#endif - -//-------------------------------------------------------------------------------------- -// Create any D3D11 resources that aren't dependant on the back buffer -//-------------------------------------------------------------------------------------- -HRESULT CALLBACK OnD3D11CreateDevice(ID3D11Device* pD3D11Device, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext) -{ - HRESULT hr; - - DXUTTRACE(L"OnD3D11CreateDevice called\n"); - - SetCursor(LoadCursor(0, IDC_ARROW)); - - ID3D11DeviceContext* pd3dImmediateContext = DXUTGetD3D11DeviceContext(); // does not addref - V_RETURN( g_DialogResourceManager.OnD3D11CreateDevice(pD3D11Device, pd3dImmediateContext) ); - V_RETURN( g_SettingsDlg.OnD3D11CreateDevice(pD3D11Device) ); - g_pTxtHelper = new CDXUTTextHelper(pD3D11Device, pd3dImmediateContext, &g_DialogResourceManager, g_TextLineHeight); - g_pSceneRenderer.OnCreateDevice(pD3D11Device, TEST_REVERSED_DEPTH_TEST); - - // Load meshes and bin files - LoadScenes(pD3D11Device); - - GFSDK_SSAO_CustomHeap CustomHeap; - CustomHeap.new_ = ::operator new; - CustomHeap.delete_ = ::operator delete; - - GFSDK_SSAO_Status status; - status = GFSDK_SSAO_CreateContext_D3D11(pD3D11Device, &g_pAOContext, &CustomHeap); - assert(status == GFSDK_SSAO_OK); - -#if TEST_TWO_PASS_BLEND - CreateCustomBlendState(pD3D11Device); - CreateCustomDepthStencilState(pD3D11Device); -#endif - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -// SwapChain has changed and may have new attributes such as size. -// 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; - - DXUTTRACE(L"OnD3D11ResizedSwapChain called\n"); - - V_RETURN( g_DialogResourceManager.OnD3D11ResizedSwapChain(pd3dDevice, pBackBufferSurfaceDesc) ); - V_RETURN( g_SettingsDlg.OnD3D11ResizedSwapChain(pd3dDevice, pBackBufferSurfaceDesc) ); - - g_BackBufferWidth = pBackBufferSurfaceDesc->Width; - g_BackBufferHeight = pBackBufferSurfaceDesc->Height; - - g_BackBufferViewport.TopLeftX = 0.f; - g_BackBufferViewport.TopLeftY = 0.f; - g_BackBufferViewport.MinDepth = 0.f; - g_BackBufferViewport.MaxDepth = 1.f; - g_BackBufferViewport.Width = (FLOAT)g_BackBufferWidth; - g_BackBufferViewport.Height = (FLOAT)g_BackBufferHeight; - - UINT HudWidth = 256; - float HudOpacity = 0.32f; - g_HUD.SetLocation(g_BackBufferWidth - HudWidth, 0); - g_HUD.SetSize (HudWidth, g_BackBufferHeight); - g_HUD.SetBackgroundColors(D3DCOLOR_COLORVALUE(0,0,0,HudOpacity)); - - ReallocateSceneRTs(pd3dDevice); - - return hr; -} - -//-------------------------------------------------------------------------------------- -// Handle updates to the scene. This is called regardless of which D3D API is used -//-------------------------------------------------------------------------------------- -void CALLBACK OnFrameMove(double fTime, float fElapsedTime, void* pUserContext) -{ - SceneMesh *pSceneMesh = g_Scenes[g_CurrentSceneId].pMesh; - g_UseOrbitalCamera = pSceneMesh && pSceneMesh->UseOrbitalCamera(); - - if (g_UseOrbitalCamera) - { - g_Cameras.Orbital.FrameMove(fElapsedTime); - } - else - { - g_Cameras.FirstPerson.FrameMove(fElapsedTime); - } -} - -//-------------------------------------------------------------------------------------- -void InitSceneViewInfo(SceneViewInfo &ViewInfo, UINT PassIndex) -{ - // PassIndex==0 is drawing the ground plane and the background mesh - // PassIndex==1 is drawing the foreground mesh only - ViewInfo.UseGBufferNormals = g_UseGBufferNormals; - ViewInfo.AllowGroundPlane = PassIndex == 0; - ViewInfo.StencilRef = PassIndex == 0 ? 1 : 2; - - if (g_UseOrbitalCamera) - { - const float TranslationZ = PassIndex == 1 ? 0.f : 0.4f; - D3DXMATRIX TranslationMatrix; - D3DXMatrixTranslation(&TranslationMatrix, 0.f, 0.f, TranslationZ); - - ViewInfo.WorldViewMatrix = TranslationMatrix * (*g_Cameras.Orbital.GetWorldMatrix()) * (*g_Cameras.Orbital.GetViewMatrix()); - ViewInfo.ProjectionMatrix = *g_Cameras.Orbital.GetProjMatrix(); - } - else - { - D3DXMATRIX WorldMatrix; - D3DXMatrixRotationX(&WorldMatrix, -D3DX_PI * 0.5f); - ViewInfo.WorldViewMatrix = WorldMatrix * (*g_Cameras.FirstPerson.GetViewMatrix()); - ViewInfo.ProjectionMatrix = *g_Cameras.FirstPerson.GetProjMatrix(); - } - -#if TEST_REVERSED_DEPTH_TEST - ViewInfo.ProjectionMatrix = g_Cameras.ProjectionMatrix; -#endif -} - -//-------------------------------------------------------------------------------------- -void RenderAOFromMesh(ID3D11Device* pd3dDevice, - ID3D11DeviceContext* pd3dImmediateContext, - ID3D11RenderTargetView* pBackBufferRTV, - SceneMesh *pMesh) -{ - //-------------------------------------------------------------------------------------- - // Set viewport - //-------------------------------------------------------------------------------------- - D3D11_VIEWPORT Viewport; - Viewport.TopLeftX = 0.f; - Viewport.TopLeftY = 0.f; - Viewport.MinDepth = 0.f; - Viewport.MaxDepth = 1.f; - Viewport.Width = FLOAT(g_pSceneRTs->Width); - Viewport.Height = FLOAT(g_pSceneRTs->Height); - -#if TEST_PARTIAL_VIEWPORT_DEPTH_RANGE - Viewport.MinDepth = 0.2f; - Viewport.MaxDepth = 0.8f; -#endif - - pd3dImmediateContext->RSSetViewports(1, &Viewport); - -#if TEST_PARTIAL_VIEWPORT_DIMENSIONS - if (g_TestSmallViewport) - { - Viewport.TopLeftX = 100.f; - Viewport.TopLeftY = 100.f; - Viewport.Width -= 200.f; - Viewport.Height -= 200.f; - } -#endif - - //-------------------------------------------------------------------------------------- - // Clear output AO render target - //-------------------------------------------------------------------------------------- - float ClearColor[4] = { 1.f, 1.f, 1.f, 0.f }; - pd3dImmediateContext->ClearRenderTargetView(g_pSceneRTs->ColorRTV, ClearColor); - - //-------------------------------------------------------------------------------------- - // Clear scene depth-stencil buffer - //-------------------------------------------------------------------------------------- -#if TEST_REVERSED_DEPTH_TEST - pd3dImmediateContext->ClearDepthStencilView(g_pSceneRTs->DepthStencilDSV, D3D11_CLEAR_DEPTH, 0.0, 0); -#else - pd3dImmediateContext->ClearDepthStencilView(g_pSceneRTs->DepthStencilDSV, D3D11_CLEAR_DEPTH, 1.0, 0); -#endif - -#if TEST_TWO_PASS_BLEND - for (UINT PassIndex = 0; PassIndex < 2; ++PassIndex) - { - GFSDK::SSAO::RenderTimes::CurrentPassIndex = (GFSDK::SSAO::GpuTimeRenderPassIndex)PassIndex; -#else - UINT PassIndex = 0; -#endif - - SceneViewInfo ViewInfo; - InitSceneViewInfo(ViewInfo, PassIndex); - - //-------------------------------------------------------------------------------------- - // Render depth with the Scene3D class - //-------------------------------------------------------------------------------------- - if (ViewInfo.UseGBufferNormals) - { - ID3D11RenderTargetView* pMRTs[] = { NULL, g_pSceneRTs->NormalRTV }; - pd3dImmediateContext->OMSetRenderTargets(SIZEOF_ARRAY(pMRTs), pMRTs, g_pSceneRTs->DepthStencilDSV); - } - else - { - pd3dImmediateContext->OMSetRenderTargets(0, NULL, g_pSceneRTs->DepthStencilDSV); - } - - g_pSceneRenderer.RenderMesh(pd3dImmediateContext, &ViewInfo, pMesh); - - //-------------------------------------------------------------------------------------- - // Render the SSAO - //-------------------------------------------------------------------------------------- - if (g_ShowAO) - { - GFSDK_SSAO_InputData_D3D11 Input; - -#if TEST_PARTIAL_VIEWPORT_DEPTH_RANGE - Input.DepthData.DepthTextureType = GFSDK_SSAO_HARDWARE_DEPTHS_SUB_RANGE; -#else - Input.DepthData.DepthTextureType = GFSDK_SSAO_HARDWARE_DEPTHS; -#endif - Input.DepthData.pFullResDepthTextureSRV = g_pSceneRTs->DepthStencilSRV; - Input.DepthData.ProjectionMatrix.Data = GFSDK_SSAO_Float4x4((CONST FLOAT*)ViewInfo.ProjectionMatrix); - Input.DepthData.ProjectionMatrix.Layout = GFSDK_SSAO_ROW_MAJOR_ORDER; - Input.DepthData.MetersToViewSpaceUnits = pMesh->GetSceneScale(); - -#if TEST_PARTIAL_VIEWPORT_DIMENSIONS - Input.DepthData.Viewport.Enable = TRUE; - Input.DepthData.Viewport.TopLeftX = (GFSDK_SSAO_UINT)Viewport.TopLeftX; - Input.DepthData.Viewport.TopLeftY = (GFSDK_SSAO_UINT)Viewport.TopLeftY; - Input.DepthData.Viewport.Width = (GFSDK_SSAO_UINT)Viewport.Width; - Input.DepthData.Viewport.Height = (GFSDK_SSAO_UINT)Viewport.Height; - Input.DepthData.Viewport.MinDepth = Viewport.MinDepth; - Input.DepthData.Viewport.MaxDepth = Viewport.MaxDepth; -#endif - - if (ViewInfo.UseGBufferNormals) - { - Input.NormalData.Enable = TRUE; - Input.NormalData.pFullResNormalTextureSRV = g_pSceneRTs->NormalSRV; - Input.NormalData.WorldToViewMatrix.Data = GFSDK_SSAO_Float4x4((CONST FLOAT*)ViewInfo.WorldViewMatrix); - Input.NormalData.WorldToViewMatrix.Layout = GFSDK_SSAO_ROW_MAJOR_ORDER; - Input.NormalData.DecodeScale = 2.f; - Input.NormalData.DecodeBias = -1.f; - } - - GFSDK_SSAO_Output_D3D11 Output; - Output.pRenderTargetView = g_pSceneRTs->ColorRTV; - Output.Blend.Mode = GFSDK_SSAO_OVERWRITE_RGB; - -#if TEST_TWO_PASS_BLEND - if (PassIndex == 1) - { - Output.TwoPassBlend.Enable = g_EnableTwoPassBlend; - Output.TwoPassBlend.pDepthStencilView = g_pSceneRTs->DepthStencilDSV; - - // No blending for stencil == 2 (foreground mesh, rendered last) - Output.TwoPassBlend.FirstPass.Blend.Mode = GFSDK_SSAO_OVERWRITE_RGB; - Output.TwoPassBlend.FirstPass.DepthStencil.Mode = GFSDK_SSAO_CUSTOM_DEPTH_STENCIL; - Output.TwoPassBlend.FirstPass.DepthStencil.CustomState.pDepthStencilState = g_pStencilEqualState; - Output.TwoPassBlend.FirstPass.DepthStencil.CustomState.StencilRef = 2; - - // MIN blending for stencil == 1 - Output.TwoPassBlend.SecondPass.Blend.Mode = GFSDK_SSAO_CUSTOM_BLEND; - Output.TwoPassBlend.SecondPass.Blend.CustomState.pBlendState = g_pMinBlendState; - Output.TwoPassBlend.SecondPass.DepthStencil.Mode = GFSDK_SSAO_CUSTOM_DEPTH_STENCIL; - Output.TwoPassBlend.SecondPass.DepthStencil.CustomState.pDepthStencilState = g_pStencilEqualState; - Output.TwoPassBlend.SecondPass.DepthStencil.CustomState.StencilRef = 1; - } -#endif - - { - CPUTimer timer(&g_CPUTimeRenderAO); - GFSDK_SSAO_Status status; - status = g_pAOContext->RenderAO(pd3dImmediateContext, Input, g_AOParams, Output, g_RenderMask); - assert(status == GFSDK_SSAO_OK); - } - - { - GFSDK_SSAO_Status status; - status = g_pAOContext->GetProjectionMatrixDepthRange(Input, g_ProjectionMatrixDepthRange); - assert(status == GFSDK_SSAO_OK); - } - } - -#if TEST_TWO_PASS_BLEND - } -#endif - - //-------------------------------------------------------------------------------------- - // Copy/resolve colors - //-------------------------------------------------------------------------------------- - - D3D11_BOX SrcBox; - SrcBox.left = g_BorderPixels; - SrcBox.right = g_pSceneRTs->OutputWidth + g_BorderPixels; - SrcBox.top = g_BorderPixels; - SrcBox.bottom = g_pSceneRTs->OutputHeight + g_BorderPixels; - SrcBox.front = 0; - SrcBox.back = 1; - - if (g_pSceneRTs->SampleCount > 1) - { - pd3dImmediateContext->ResolveSubresource(g_pSceneRTs->ResolvedColorTexture, 0, g_pSceneRTs->ColorTexture, 0, DXGI_FORMAT_R8G8B8A8_UNORM); - pd3dImmediateContext->CopySubresourceRegion(g_pSceneRTs->OutputTexture, 0, 0, 0, 0, g_pSceneRTs->ResolvedColorTexture, 0, &SrcBox); - } - else - { - pd3dImmediateContext->CopySubresourceRegion(g_pSceneRTs->OutputTexture, 0, 0, 0, 0, g_pSceneRTs->ColorTexture, 0, &SrcBox); - } - - //-------------------------------------------------------------------------------------- - // Dump screenshot on first frame - //-------------------------------------------------------------------------------------- - - static bool DumpedShot = false; - if (!DumpedShot) - { - DumpedShot = true; - - HRESULT hr; - hr = D3DX11SaveTextureToFileA(pd3dImmediateContext, g_pSceneRTs->OutputTexture, D3DX11_IFF_BMP, GetOutputFilename(pd3dDevice,"bmp")); - assert(hr == S_OK); - } - - //-------------------------------------------------------------------------------------- - // Copy/stretch the output colors to the backbuffer - //-------------------------------------------------------------------------------------- - - pd3dImmediateContext->OMSetRenderTargets(1, &pBackBufferRTV, NULL); - pd3dImmediateContext->RSSetViewports(1, &g_BackBufferViewport); - g_pSceneRenderer.CopyColors(pd3dImmediateContext, g_pSceneRTs->OutputSRV); -} - -//-------------------------------------------------------------------------------------- -// Callback function that renders the frame. This function sets up the rendering -// matrices and renders the scene and UI. -//-------------------------------------------------------------------------------------- -void CALLBACK OnD3D11FrameRender(ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext, - double fTime, float fElapsedTime, void* pUserContext) -{ - // 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; - } - - // Reallocate the render targets and depth buffer if the MSAA mode has been changed in the GUI. - int SelectedId = g_HUD.GetComboBox(IDC_CHANGEMSAA)->GetSelectedIndex(); - if (g_MSAACurrentSettings != SelectedId) - { - g_MSAACurrentSettings = SelectedId; - ReallocateSceneRTs(pd3dDevice); - } - - if (g_BorderPixels != g_pSceneRTs->BorderPixels) - { - ReallocateSceneRTs(pd3dDevice); - } - - SceneMesh *pMesh = g_Scenes[g_CurrentSceneId].pMesh; - - // These have no effect if the mesh is not rendered - g_HUD.GetComboBox(IDC_CHANGEMSAA)->SetVisible(pMesh != NULL); - -#if ENABLE_BLUR_RADIUS - g_HUD.GetStatic(IDC_BLUR_SHARPNESS_STATIC)->SetVisible(g_BlurAO); - g_HUD.GetSlider(IDC_BLUR_SHARPNESS_SLIDER)->SetVisible(g_BlurAO); -#endif - - g_AOParams.Blur.Enable = g_BlurAO; - g_RenderMask = g_DebugNormals ? GFSDK_SSAO_RENDER_DEBUG_NORMAL : GFSDK_SSAO_RENDER_AO; - - ID3D11RenderTargetView* pBackBufferRTV = DXUTGetD3D11RenderTargetView(); // does not addref - - if (pMesh) - { - RenderAOFromMesh(pd3dDevice, - pd3dImmediateContext, - pBackBufferRTV, - pMesh); - } - - pd3dImmediateContext->RSSetViewports(1, &g_BackBufferViewport); - - if (!g_ShowColors && !g_ShowAO) - { - // If both "Show Colors" and "Show AO" are disabled in the GUI - float ClearColor[4] = { 0.0f, 0.0f, 0.0f }; - pd3dImmediateContext->ClearRenderTargetView(pBackBufferRTV, ClearColor); - } - - //-------------------------------------------------------------------------------------- - // Render the GUI - //-------------------------------------------------------------------------------------- - if (g_DrawUI && !g_GPUProfiler.IsProfiling()) - { - g_HUD.OnRender(fElapsedTime); - g_TextRenderer.OnRender(fElapsedTime); - } - - g_GPUProfiler.Tick(GFSDK::SSAO::D3D11::Renderer::s_RenderTimes, GetOutputFilename(pd3dDevice,"csv")); -} - -//-------------------------------------------------------------------------------------- -// Release D3D11 resources created in OnD3D11ResizedSwapChain -//-------------------------------------------------------------------------------------- -void CALLBACK OnD3D11ReleasingSwapChain(void* pUserContext) -{ - DXUTTRACE(L"OnD3D11ReleasingSwapChain called\n"); - - g_DialogResourceManager.OnD3D11ReleasingSwapChain(); -} - -//-------------------------------------------------------------------------------------- -// This callback function will be called immediately after the Direct3D device has -// been destroyed, which generally happens as a result of application termination or -// windowed/full screen toggles. -//-------------------------------------------------------------------------------------- -void CALLBACK OnD3D11DestroyDevice(void* pUserContext) -{ - DXUTTRACE(L"OnD3D11DestroyDevice called\n"); - - g_DialogResourceManager.OnD3D11DestroyDevice(); - g_SettingsDlg.OnD3D11DestroyDevice(); - DXUTGetGlobalResourceCache().OnDestroyDevice(); - SAFE_DELETE(g_pTxtHelper); - - g_pSceneRenderer.OnDestroyDevice(); - -#if ENABLE_MESHES - for (int i = 0; i < SIZEOF_ARRAY(g_MeshDesc); i++) - { - g_SceneMeshes[i].OnDestroyDevice(); - } -#endif - - SAFE_DELETE(g_pSceneRTs); - -#if TEST_TWO_PASS_BLEND - SAFE_RELEASE(g_pMinBlendState); - SAFE_RELEASE(g_pStencilEqualState); -#endif - - SAFE_RELEASE(g_pAOContext); -} - -//-------------------------------------------------------------------------------------- -// Handle messages to the application -//-------------------------------------------------------------------------------------- -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; - } - - // Pass all windows messages to camera so it can respond to user input - if (g_UseOrbitalCamera) - { - g_Cameras.Orbital.HandleMessages(hWnd, uMsg, wParam, lParam); - } - else - { - g_Cameras.FirstPerson.HandleMessages(hWnd, uMsg, wParam, lParam); - } - - return 0; -} - -//-------------------------------------------------------------------------------------- -// 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_CHANGESCENE: - { - CDXUTComboBox* pComboBox = (CDXUTComboBox*) pControl; - g_CurrentSceneId = pComboBox->GetSelectedIndex(); - break; - } -#if ENABLE_SHOW_COLORS - case IDC_SHOW_COLORS: - { - g_ShowColors = g_HUD.GetCheckBox(IDC_SHOW_COLORS)->GetChecked(); - break; - } - case IDC_SHOW_AO: - { - g_ShowAO = g_HUD.GetCheckBox(IDC_SHOW_AO)->GetChecked(); - break; - } -#endif -#if ENABLE_GBUFFER_NORMALS - case IDC_USE_GBUFFER_NORMALS: - { - g_UseGBufferNormals = g_HUD.GetCheckBox(IDC_USE_GBUFFER_NORMALS)->GetChecked(); - break; - } -#endif -#if ENABLE_DEBUG_NORMALS - case IDC_DEBUG_NORMALS: - { - g_DebugNormals = g_HUD.GetCheckBox(IDC_DEBUG_NORMALS)->GetChecked(); - break; - } -#endif - case IDC_RADIUS_SLIDER: - { - g_AOParams.Radius = (float) g_HUD.GetSlider(IDC_RADIUS_SLIDER)->GetValue() * MAX_RADIUS_MULT / 100.0f; - - WCHAR sz[100]; - StringCchPrintf(sz, 100, UI_RADIUS_MULT L"%0.2f", g_AOParams.Radius); - g_HUD.GetStatic(IDC_RADIUS_STATIC)->SetText(sz); - - break; - } -#if ENABLE_BACKGROUND_AO - case IDC_BACKGROUND_DEPTH_SLIDER: - { - g_AOParams.BackgroundAO.BackgroundViewDepth = (float) g_HUD.GetSlider(IDC_BACKGROUND_DEPTH_SLIDER)->GetValue() * MAX_BACKGROUND_DEPTH / 10000.0f; - - WCHAR sz[100]; - StringCchPrintf(sz, 100, UI_BACKGROUND_DEPTH L"%0.2f", g_AOParams.BackgroundAO.BackgroundViewDepth); - g_HUD.GetStatic(IDC_BACKGROUND_DEPTH_STATIC)->SetText(sz); - - break; - } -#endif -#if ENABLE_FOREGROUND_AO - case IDC_FOREGROUND_DEPTH_SLIDER: - { - g_AOParams.ForegroundAO.ForegroundViewDepth = (float)g_HUD.GetSlider(IDC_FOREGROUND_DEPTH_SLIDER)->GetValue() * MAX_BACKGROUND_DEPTH / 10000.0f; - - WCHAR sz[100]; - StringCchPrintf(sz, 100, UI_FOREGROUND_DEPTH L"%0.2f", g_AOParams.ForegroundAO.ForegroundViewDepth); - g_HUD.GetStatic(IDC_FOREGROUND_DEPTH_STATIC)->SetText(sz); - - break; - } -#endif -#if ENABLE_VIEW_DEPTH_THRESHOLD - case IDC_DEPTH_THRESHOLD_SLIDER: - { - g_AOParams.DepthThreshold.MaxViewDepth = (float) g_HUD.GetSlider(IDC_DEPTH_THRESHOLD_SLIDER)->GetValue() * MAX_DEPTH_THRESHOLD / 10000.0f; - - WCHAR sz[100]; - StringCchPrintf(sz, 100, UI_DEPTH_THRESHOLD L"%0.2f", g_AOParams.DepthThreshold.MaxViewDepth); - g_HUD.GetStatic(IDC_DEPTH_THRESHOLD_STATIC)->SetText(sz); - - break; - } - case IDC_DEPTH_SHARPNESS_SLIDER: - { - g_AOParams.DepthThreshold.Sharpness = (float) g_HUD.GetSlider(IDC_DEPTH_SHARPNESS_SLIDER)->GetValue() * MAX_DEPTH_SHARPNESS / 10000.0f; - - WCHAR sz[100]; - StringCchPrintf(sz, 100, UI_DEPTH_SHARPNESS L"%0.1f", g_AOParams.DepthThreshold.Sharpness); - g_HUD.GetStatic(IDC_DEPTH_SHARPNESS_STATIC)->SetText(sz); - - break; - } -#endif - case IDC_BIAS_SLIDER: - { - g_AOParams.Bias = (float) g_HUD.GetSlider(IDC_BIAS_SLIDER)->GetValue() / 1000.f; - - WCHAR sz[100]; - StringCchPrintf(sz, 100, UI_AO_BIAS L"%g", g_AOParams.Bias); - g_HUD.GetStatic(IDC_BIAS_STATIC)->SetText(sz); - - break; - } -#if ENABLE_SMALL_SCALE_AO - case IDC_SMALL_SCALE_AO_SLIDER: - { - g_AOParams.SmallScaleAO = (float)g_HUD.GetSlider(IDC_SMALL_SCALE_AO_SLIDER)->GetValue() / 100.0f; - - WCHAR sz[100]; - StringCchPrintf(sz, 100, UI_SMALL_SCALE_AO L"%0.2f", g_AOParams.SmallScaleAO); - g_HUD.GetStatic(IDC_SMALL_SCALE_AO_STATIC)->SetText(sz); - - break; - } -#endif -#if ENABLE_LARGE_SCALE_AO - case IDC_LARGE_SCALE_AO_SLIDER: - { - g_AOParams.LargeScaleAO = (float)g_HUD.GetSlider(IDC_LARGE_SCALE_AO_SLIDER)->GetValue() / 100.0f; - - WCHAR sz[100]; - StringCchPrintf(sz, 100, UI_LARGE_SCALE_AO L"%0.2f", g_AOParams.LargeScaleAO); - g_HUD.GetStatic(IDC_LARGE_SCALE_AO_STATIC)->SetText(sz); - - break; - } -#endif - case IDC_EXPONENT_SLIDER: - { - g_AOParams.PowerExponent = (float)g_HUD.GetSlider(IDC_EXPONENT_SLIDER)->GetValue() / 100.0f; - - WCHAR sz[100]; - StringCchPrintf(sz, 100, UI_POW_EXPONENT L"%0.2f", g_AOParams.PowerExponent); - g_HUD.GetStatic(IDC_EXPONENT_STATIC)->SetText(sz); - - break; - } -#if ENABLE_BLUR_RADIUS - case IDC_BLUR_DISABLED: - { - g_BlurAO = false; - break; - } - case IDC_BLUR_RADIUS_2: - { - g_BlurAO = true; - g_AOParams.Blur.Radius = GFSDK_SSAO_BLUR_RADIUS_2; - break; - } - case IDC_BLUR_RADIUS_4: - { - g_BlurAO = true; - g_AOParams.Blur.Radius = GFSDK_SSAO_BLUR_RADIUS_4; - break; - } -#endif -#if ENABLE_BORDER_PIXELS - case IDC_BORDER_PIXELS_0: - { - g_BorderPixels = 0; - break; - } - case IDC_BORDER_PIXELS_64: - { - g_BorderPixels = 64; - break; - } - case IDC_BORDER_PIXELS_128: - { - g_BorderPixels = 128; - break; - } -#endif -#if ENABLE_BLUR_SHARPNESS - case IDC_BLUR_SHARPNESS_SLIDER: - { - g_AOParams.Blur.Sharpness = (float)g_HUD.GetSlider(IDC_BLUR_SHARPNESS_SLIDER)->GetValue() * MAX_BLUR_SHARPNESS / 10000.0f; - - WCHAR sz[100]; - StringCchPrintf(sz, 100, UI_BLUR_SHARPNESS L"%0.2f", g_AOParams.Blur.Sharpness); - g_HUD.GetStatic(IDC_BLUR_SHARPNESS_STATIC)->SetText(sz); - - break; - } -#endif -#if ENABLE_FP16_VIEW_DEPTHS - case IDC_DEPTH_STORAGE_TYPE_FP16: - { - g_AOParams.DepthStorage = GFSDK_SSAO_FP16_VIEW_DEPTHS; - break; - } - case IDC_DEPTH_STORAGE_TYPE_FP32: - { - g_AOParams.DepthStorage = GFSDK_SSAO_FP32_VIEW_DEPTHS; - break; - } -#endif -#if ENABLE_DEPTH_CLAMP_MODES - case IDC_DEPTH_CLAMP_TO_EDGE: - { - g_AOParams.DepthClampMode = GFSDK_SSAO_CLAMP_TO_EDGE; - break; - } - case IDC_DEPTH_CLAMP_TO_BORDER: - { - g_AOParams.DepthClampMode = GFSDK_SSAO_CLAMP_TO_BORDER; - break; - } -#endif -#if ENABLE_DEBUG_MODES - case IDC_SHADER_TYPE_HBAO_PLUS: - { - GFSDK::SSAO::D3D11::Renderer::s_AOShaderType = GFSDK::SSAO::D3D11::Renderer::NVSDK_HBAO_PLUS_PS; - break; - } - case IDC_SHADER_TYPE_DEBUG_HBAO_PLUS: - { - GFSDK::SSAO::D3D11::Renderer::s_AOShaderType = GFSDK::SSAO::D3D11::Renderer::NVSDK_DEBUG_HBAO_PLUS_PS; - break; - } -#endif - } -} - -//-------------------------------------------------------------------------------------- -// Handle key presses -//-------------------------------------------------------------------------------------- -void CALLBACK OnKeyboard(UINT nChar, bool bKeyDown, bool bAltDown, void* pUserContext) -{ - if (bKeyDown) - { - switch (nChar) - { -#if TEST_PARTIAL_VIEWPORT_DIMENSIONS - case 'V': - g_TestSmallViewport = !g_TestSmallViewport; - break; -#endif -#if ENABLE_NVAPI - case 'M': - g_MonitorAvailableVidMem = !g_MonitorAvailableVidMem; - break; - case 'C': - g_MonitorNvGraphicsClock = !g_MonitorNvGraphicsClock; - break; -#endif - case 'U': - g_DrawUI = !g_DrawUI; - break; - case 'P': - g_GPUProfiler.StartProfiling(); - break; -#if TEST_TWO_PASS_BLEND - case 'T': - g_EnableTwoPassBlend = !g_EnableTwoPassBlend; - break; -#endif - } - } -} - -//-------------------------------------------------------------------------------------- -// Handle mouse button presses -//-------------------------------------------------------------------------------------- -void CALLBACK OnMouse(bool bLeftButtonDown, bool bRightButtonDown, bool bMiddleButtonDown, - bool bSideButton1Down, bool bSideButton2Down, int nMouseWheelDelta, - int xPos, int yPos, void* pUserContext) -{ -} - -//-------------------------------------------------------------------------------------- -// Call if device was removed. Return true to find a new device, false to quit -//-------------------------------------------------------------------------------------- -bool CALLBACK OnDeviceRemoved(void* pUserContext) -{ - return true; -} - -//-------------------------------------------------------------------------------------- -// -//-------------------------------------------------------------------------------------- -void InitGUI() -{ - // Initialize dialogs - g_SettingsDlg.Init(&g_DialogResourceManager); - g_HUD.Init(&g_DialogResourceManager); - g_HUD.SetCallback(OnGUIEvent); - g_TextRenderer.Init(&g_DialogResourceManager); - - int iY = 10; - g_HUD.AddButton (IDC_TOGGLEFULLSCREEN, L"Toggle full screen" , 35, iY, 160, 22); - g_HUD.AddButton (IDC_TOGGLEREF, L"Toggle REF (F3)" , 35, iY += 24, 160, 22, VK_F3); - g_HUD.AddButton (IDC_CHANGEDEVICE, L"Change device (F2)" , 35, iY += 24, 160, 22, VK_F2); - iY += 20; - -#if ENABLE_SHOW_COLORS - g_HUD.AddCheckBox(IDC_SHOW_COLORS, L"Show Colors", 35, iY += 26, 125, 22, g_ShowColors); - g_HUD.AddCheckBox(IDC_SHOW_AO, L"Show HBAO+", 35, iY += 26, 125, 22, g_ShowAO); -#endif -#if ENABLE_DEBUG_NORMALS - g_HUD.AddCheckBox(IDC_DEBUG_NORMALS, L"Debug Normals", 35, iY += 26, 125, 22, g_DebugNormals); -#endif -#if ENABLE_GBUFFER_NORMALS - g_HUD.AddCheckBox(IDC_USE_GBUFFER_NORMALS, L"GBuffer Normals", 35, iY += 26, 125, 22, g_UseGBufferNormals); -#endif - iY += 20; - - CDXUTComboBox *pComboBox; - g_HUD.AddComboBox(IDC_CHANGESCENE, 35, iY += 24, 160, 22, 'S', false, &pComboBox); -#if ENABLE_MESHES - for (int i = 0; i < SIZEOF_ARRAY(g_MeshDesc); i++) - { - pComboBox->AddItem(g_MeshDesc[i].Name, NULL); - } -#endif - - g_HUD.AddComboBox(IDC_CHANGEMSAA, 35, iY += 24, 160, 22, 'N', false, &pComboBox); - for (int i = 0; g_MSAADesc[i].SampleCount != 0; i++) - { - pComboBox->AddItem(g_MSAADesc[i].Name, (void*)i); - } - pComboBox->SetSelectedByIndex(g_MSAACurrentSettings); - iY += 20; - - WCHAR sz[100]; - int dy = 20; - StringCchPrintf(sz, 100, UI_RADIUS_MULT L"%0.2f", g_AOParams.Radius); - g_HUD.AddStatic(IDC_RADIUS_STATIC, sz, 35, iY += dy, 125, 22); - g_HUD.AddSlider(IDC_RADIUS_SLIDER, 50, iY += dy, 100, 22, 0, 100, int(g_AOParams.Radius / MAX_RADIUS_MULT * 100)); - -#if ENABLE_VIEW_DEPTH_THRESHOLD - StringCchPrintf(sz, 100, UI_DEPTH_THRESHOLD L"%0.2f", g_AOParams.DepthThreshold.MaxViewDepth); - g_HUD.AddStatic(IDC_DEPTH_THRESHOLD_STATIC, sz, 35, iY += dy, 125, 22); - g_HUD.AddSlider(IDC_DEPTH_THRESHOLD_SLIDER, 50, iY += dy, 100, 22, 0, 10000, int(g_AOParams.DepthThreshold.MaxViewDepth / MAX_DEPTH_THRESHOLD * 10000)); - - StringCchPrintf(sz, 100, UI_DEPTH_SHARPNESS L"%0.1f", g_AOParams.DepthThreshold.Sharpness); - g_HUD.AddStatic(IDC_DEPTH_SHARPNESS_STATIC, sz, 35, iY += dy, 125, 22); - g_HUD.AddSlider(IDC_DEPTH_SHARPNESS_SLIDER, 50, iY += dy, 100, 22, 0, 10000, int(g_AOParams.DepthThreshold.Sharpness / MAX_DEPTH_SHARPNESS * 10000)); -#endif - -#if ENABLE_BACKGROUND_AO - StringCchPrintf(sz, 100, UI_BACKGROUND_DEPTH L"%0.2f", g_AOParams.BackgroundAO.BackgroundViewDepth); - g_HUD.AddStatic(IDC_BACKGROUND_DEPTH_STATIC, sz, 35, iY += dy, 125, 22); - g_HUD.AddSlider(IDC_BACKGROUND_DEPTH_SLIDER, 50, iY += dy, 100, 22, 1000, 10000, int(g_AOParams.BackgroundAO.BackgroundViewDepth / MAX_BACKGROUND_DEPTH * 10000)); -#endif - -#if ENABLE_FOREGROUND_AO - StringCchPrintf(sz, 100, UI_FOREGROUND_DEPTH L"%0.2f", g_AOParams.ForegroundAO.ForegroundViewDepth); - g_HUD.AddStatic(IDC_FOREGROUND_DEPTH_STATIC, sz, 35, iY += dy, 125, 22); - g_HUD.AddSlider(IDC_FOREGROUND_DEPTH_SLIDER, 50, iY += dy, 100, 22, 1000, 10000, int(g_AOParams.ForegroundAO.ForegroundViewDepth / MAX_BACKGROUND_DEPTH * 10000)); -#endif - - StringCchPrintf(sz, 100, UI_AO_BIAS L"%g", g_AOParams.Bias); - g_HUD.AddStatic(IDC_BIAS_STATIC, sz, 35, iY += dy, 125, 22); - g_HUD.AddSlider(IDC_BIAS_SLIDER, 50, iY += dy, 100, 22, 0, 500, int(g_AOParams.Bias * 1000)); - -#if ENABLE_SMALL_SCALE_AO - StringCchPrintf(sz, 100, UI_SMALL_SCALE_AO L"%0.2f", g_AOParams.SmallScaleAO); - g_HUD.AddStatic(IDC_SMALL_SCALE_AO_STATIC, sz, 35, iY += dy, 125, 22); - g_HUD.AddSlider(IDC_SMALL_SCALE_AO_SLIDER, 50, iY += dy, 100, 22, 0, 200, (int)(100.0f*g_AOParams.SmallScaleAO)); -#endif - -#if ENABLE_LARGE_SCALE_AO - StringCchPrintf(sz, 100, UI_LARGE_SCALE_AO L"%0.2f", g_AOParams.LargeScaleAO); - g_HUD.AddStatic(IDC_LARGE_SCALE_AO_STATIC, sz, 35, iY += dy, 125, 22); - g_HUD.AddSlider(IDC_LARGE_SCALE_AO_SLIDER, 50, iY += dy, 100, 22, 0, 200, (int)(100.0f*g_AOParams.LargeScaleAO)); -#endif - - StringCchPrintf(sz, 100, UI_POW_EXPONENT L"%0.2f", g_AOParams.PowerExponent); - g_HUD.AddStatic(IDC_EXPONENT_STATIC, sz, 35, iY += dy, 125, 22); - g_HUD.AddSlider(IDC_EXPONENT_SLIDER, 50, iY += dy, 100, 22, 0, 400, (int)(100.0f*g_AOParams.PowerExponent)); - -#if ENABLE_BLUR_SHARPNESS - StringCchPrintf(sz, 100, UI_BLUR_SHARPNESS L"%0.2f", g_AOParams.Blur.Sharpness); - g_HUD.AddStatic(IDC_BLUR_SHARPNESS_STATIC, sz, 35, iY += dy, 125, 22); - g_HUD.AddSlider(IDC_BLUR_SHARPNESS_SLIDER, 50, iY += dy, 100, 22, 0, 10000, int(g_AOParams.Blur.Sharpness / MAX_DEPTH_SHARPNESS * 10000)); -#endif - - UINT ButtonGroup = 0; - -#if ENABLE_DEBUG_MODES - ButtonGroup++; - iY += 20; - g_HUD.AddRadioButton( IDC_SHADER_TYPE_HBAO_PLUS, ButtonGroup, L"HBAO+", 35, iY += 24, 125, 22, (GFSDK::SSAO::D3D11::Renderer::s_AOShaderType == GFSDK::SSAO::D3D11::Renderer::NVSDK_HBAO_PLUS_PS) ); - g_HUD.AddRadioButton( IDC_SHADER_TYPE_DEBUG_HBAO_PLUS, ButtonGroup, L"DEBUG_HBAO+", 35, iY += 24, 125, 22, (GFSDK::SSAO::D3D11::Renderer::s_AOShaderType == GFSDK::SSAO::D3D11::Renderer::NVSDK_DEBUG_HBAO_PLUS_PS) ); -#endif - -#if ENABLE_BLUR_RADIUS - ButtonGroup++; - iY += 20; - g_HUD.AddRadioButton( IDC_BLUR_DISABLED, ButtonGroup, L"BLUR_DISABLED", 35, iY += 24, 125, 22, !g_BlurAO ); - g_HUD.AddRadioButton( IDC_BLUR_RADIUS_2, ButtonGroup, L"BLUR_RADIUS_2", 35, iY += 24, 125, 22, g_BlurAO && (g_AOParams.Blur.Radius == GFSDK_SSAO_BLUR_RADIUS_2) ); - g_HUD.AddRadioButton( IDC_BLUR_RADIUS_4, ButtonGroup, L"BLUR_RADIUS_4", 35, iY += 24, 125, 22, g_BlurAO && (g_AOParams.Blur.Radius == GFSDK_SSAO_BLUR_RADIUS_4) ); -#endif - -#if ENABLE_FP16_VIEW_DEPTHS - ButtonGroup++; - iY += 20; - g_HUD.AddRadioButton( IDC_DEPTH_STORAGE_TYPE_FP16, ButtonGroup, L"FP16_VIEW_DEPTHS", 35, iY += 24, 125, 22, (g_AOParams.DepthStorage == GFSDK_SSAO_FP16_VIEW_DEPTHS) ); - g_HUD.AddRadioButton( IDC_DEPTH_STORAGE_TYPE_FP32, ButtonGroup, L"FP32_VIEW_DEPTHS", 35, iY += 24, 125, 22, (g_AOParams.DepthStorage == GFSDK_SSAO_FP32_VIEW_DEPTHS) ); -#endif - -#if ENABLE_DEPTH_CLAMP_MODES - ButtonGroup++; - iY += 20; - g_HUD.AddRadioButton( IDC_DEPTH_CLAMP_TO_EDGE, ButtonGroup, L"CLAMP_TO_EDGE", 35, iY += 24, 125, 22, (g_AOParams.DepthClampMode == GFSDK_SSAO_CLAMP_TO_EDGE) ); - g_HUD.AddRadioButton( IDC_DEPTH_CLAMP_TO_BORDER, ButtonGroup, L"CLAMP_TO_BORDER", 35, iY += 24, 125, 22, (g_AOParams.DepthClampMode == GFSDK_SSAO_CLAMP_TO_BORDER) ); -#endif - -#if ENABLE_BORDER_PIXELS - ButtonGroup++; - iY += 20; - g_HUD.AddRadioButton( IDC_BORDER_PIXELS_0, ButtonGroup, L"BORDER_PIXELS_0", 35, iY += 24, 125, 22, (g_BorderPixels == 0) ); - g_HUD.AddRadioButton( IDC_BORDER_PIXELS_64, ButtonGroup, L"BORDER_PIXELS_64", 35, iY += 24, 125, 22, (g_BorderPixels == 64) ); - g_HUD.AddRadioButton( IDC_BORDER_PIXELS_128, ButtonGroup, L"BORDER_PIXELS_128", 35, iY += 24, 125, 22, (g_BorderPixels == 128) ); -#endif -} - -//-------------------------------------------------------------------------------------- -// Initialize everything and go into a render loop -//-------------------------------------------------------------------------------------- -int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) -{ - HRESULT hr; - V_RETURN(DXUTSetMediaSearchPath(L"..\\..\\assets")); - - // Enable run-time memory check for debug builds. -#if defined(DEBUG) && defined (DEBUG_CRT) - _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); -#endif - - // Set general DXUT callbacks - DXUTSetCallbackFrameMove(OnFrameMove); - DXUTSetCallbackKeyboard(OnKeyboard); - DXUTSetCallbackMouse(OnMouse); - DXUTSetCallbackMsgProc(MsgProc); - DXUTSetCallbackDeviceChanging(ModifyDeviceSettings); - DXUTSetCallbackDeviceRemoved(OnDeviceRemoved); - - // Set the D3D11 DXUT callbacks - DXUTSetCallbackD3D11DeviceAcceptable (IsD3D11DeviceAcceptable); - DXUTSetCallbackD3D11DeviceCreated (OnD3D11CreateDevice); - DXUTSetCallbackD3D11SwapChainResized (OnD3D11ResizedSwapChain); - DXUTSetCallbackD3D11FrameRender (OnD3D11FrameRender); - DXUTSetCallbackD3D11SwapChainReleasing(OnD3D11ReleasingSwapChain); - DXUTSetCallbackD3D11DeviceDestroyed (OnD3D11DestroyDevice); - - // Perform any application-level initialization here - InitAOParams(g_AOParams); - InitGUI(); - - UINT Width = 1280; - UINT Height = 720; - - DXUTInit(true, true, NULL); // Parse the command line, show msgboxes on error, no extra command line params - DXUTSetCursorSettings(true, true); // Show the cursor and clip it when in full screen - DXUTSetIsInGammaCorrectMode(false); // Do not use a SRGB back buffer for this sample - DXUTCreateWindow(L"NVIDIA HBAO+"); - DXUTCreateDevice(D3D_FEATURE_LEVEL_11_0, true, Width, Height); - //DXUTToggleFullScreen(); - - DXUTMainLoop(); // Enter into the DXUT render loop - - // Perform any application-level cleanup here - - return DXUTGetExitCode(); -} |