diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2017-11-13 04:14:15 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2017-11-13 04:14:15 +0000 |
| commit | 1b2530749ea3dc4937cdd7aa37e5a144e6d10183 (patch) | |
| tree | de2a77d6c8ce8a33c2b3070c66549f429e43a017 /Projects | |
| parent | Updated submodules (diff) | |
| download | DiligentEngine-1b2530749ea3dc4937cdd7aa37e5a144e6d10183.tar.gz DiligentEngine-1b2530749ea3dc4937cdd7aa37e5a144e6d10183.zip | |
Updated to version 2.1
Diffstat (limited to 'Projects')
| -rw-r--r-- | Projects/Asteroids/Screenshot.png | bin | 0 -> 698187 bytes | |||
| -rw-r--r-- | Projects/Asteroids/asteroids.vcxproj | 6 | ||||
| -rw-r--r-- | Projects/Asteroids/src/WinWrapper.cpp | 28 | ||||
| -rw-r--r-- | Projects/Asteroids/src/asteroids_DE.cpp | 50 | ||||
| -rw-r--r-- | Projects/Asteroids/src/asteroids_DE.h | 11 | ||||
| -rw-r--r-- | Projects/Asteroids/src/settings.h | 2 |
6 files changed, 59 insertions, 38 deletions
diff --git a/Projects/Asteroids/Screenshot.png b/Projects/Asteroids/Screenshot.png Binary files differnew file mode 100644 index 0000000..8dba7fd --- /dev/null +++ b/Projects/Asteroids/Screenshot.png diff --git a/Projects/Asteroids/asteroids.vcxproj b/Projects/Asteroids/asteroids.vcxproj index 4239f13..fe3fe14 100644 --- a/Projects/Asteroids/asteroids.vcxproj +++ b/Projects/Asteroids/asteroids.vcxproj @@ -52,7 +52,7 @@ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ClCompile> <PreprocessorDefinitions>WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;ENGINE_DLL;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>SDK\Include;$(IntDir);..\..\diligentcore\Graphics\GraphicsEngine\interface;..\..\diligentcore\Graphics\GraphicsEngineD3D11\interface;..\..\diligentcore\Graphics\GraphicsEngineD3D12\interface;..\..\diligentcore\Graphics\GraphicsEngineOpenGl\interface;..\..\diligentcore\Graphics\GraphicsTools\include;..\..\diligentcore\Platforms\interface;..\..\diligenttools\RenderScript\include;..\..\diligenttools\TextureLoader\interface;..\..\diligentcore\Common\interface;..\..\diligentcore\Common\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>SDK\Include;$(IntDir);..\..\diligentcore\Graphics\GraphicsEngine\interface;..\..\diligentcore\Graphics\GraphicsEngineD3D11\interface;..\..\diligentcore\Graphics\GraphicsEngineD3D12\interface;..\..\diligentcore\Graphics\GraphicsEngineOpenGl\interface;..\..\diligentcore\Graphics\GraphicsTools\include;..\..\diligentcore\Graphics\HLSL2GLSLConverterLib\interface;..\..\diligentcore\Platforms\interface;..\..\diligenttools\RenderScript\include;..\..\diligenttools\TextureLoader\interface;..\..\diligentcore\Common\interface;..\..\diligentcore\Common\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <WarningLevel>Level3</WarningLevel> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> @@ -81,7 +81,7 @@ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ClCompile> <PreprocessorDefinitions>WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;ENGINE_DLL;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>SDK\Include;$(IntDir);..\..\diligentcore\Graphics\GraphicsEngine\interface;..\..\diligentcore\Graphics\GraphicsEngineD3D11\interface;..\..\diligentcore\Graphics\GraphicsEngineD3D12\interface;..\..\diligentcore\Graphics\GraphicsEngineOpenGl\interface;..\..\diligentcore\Graphics\GraphicsTools\include;..\..\diligentcore\Platforms\interface;..\..\diligenttools\RenderScript\include;..\..\diligenttools\TextureLoader\interface;..\..\diligentcore\Common\interface;..\..\diligentcore\Common\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>SDK\Include;$(IntDir);..\..\diligentcore\Graphics\GraphicsEngine\interface;..\..\diligentcore\Graphics\GraphicsEngineD3D11\interface;..\..\diligentcore\Graphics\GraphicsEngineD3D12\interface;..\..\diligentcore\Graphics\GraphicsEngineOpenGl\interface;..\..\diligentcore\Graphics\GraphicsTools\include;..\..\diligentcore\Graphics\HLSL2GLSLConverterLib\interface;..\..\diligentcore\Platforms\interface;..\..\diligenttools\RenderScript\include;..\..\diligenttools\TextureLoader\interface;..\..\diligentcore\Common\interface;..\..\diligentcore\Common\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <WarningLevel>Level3</WarningLevel> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> @@ -236,7 +236,7 @@ copy "%(RelativeDir)%(Filename).pdb" "$(TargetDir)"</Command> <ProjectReference Include="..\..\diligentcore\Common\build\Win32\Common.vcxproj"> <Project>{7380f7e6-315f-4b4e-92eb-e6aeee865298}</Project> </ProjectReference> - <ProjectReference Include="..\..\diligentcore\External\glew-1.10.0\build\Win32\glew_static.vcxproj"> + <ProjectReference Include="..\..\diligentcore\External\glew\build\Win32\glew_static.vcxproj"> <Project>{664e6f0d-6784-4760-9565-d54f8eb1edf4}</Project> </ProjectReference> <ProjectReference Include="..\..\diligentcore\Graphics\GraphicsEngineD3D11\build\Win32\GraphicsEngineD3D11.vcxproj"> diff --git a/Projects/Asteroids/src/WinWrapper.cpp b/Projects/Asteroids/src/WinWrapper.cpp index 2771709..9fabd17 100644 --- a/Projects/Asteroids/src/WinWrapper.cpp +++ b/Projects/Asteroids/src/WinWrapper.cpp @@ -201,6 +201,12 @@ LRESULT CALLBACK WindowProc( gSettings.submitRendering = !gSettings.submitRendering; std::cout << "Submit Rendering: " << gSettings.submitRendering << std::endl; return 0; + case 'B': + if (gSettings.mode == Settings::RenderMode::DiligentD3D12) { + gSettings.resourceBindingMode = (gSettings.resourceBindingMode + 1) % 3; + gLastFrameRenderMode = static_cast<Settings::RenderMode>(-1); + } + return 0; case VK_ADD: case VK_OEM_PLUS: @@ -217,7 +223,7 @@ LRESULT CALLBACK WindowProc( case '2': gSettings.mode = gd3d12Available ? Settings::RenderMode::NativeD3D12 : gSettings.mode; return 0; case '3': gSettings.mode = gd3d11Available ? Settings::RenderMode::DiligentD3D11 : gSettings.mode; return 0; case '4': gSettings.mode = gd3d12Available ? Settings::RenderMode::DiligentD3D12 : gSettings.mode; return 0; - //case '5': gSettings.mode = Settings::RenderMode::DiligentGL; return 0; + case '5': gSettings.mode = Settings::RenderMode::DiligentGL; return 0; case VK_ESCAPE: SendMessage(hWnd, WM_CLOSE, 0, 0); @@ -325,15 +331,15 @@ int InitWorkload(HWND hWnd, AsteroidsSimulation &asteroids) break; case Settings::RenderMode::DiligentD3D11: - gWorkloadDE = new AsteroidsDE::Asteroids(gSettings.numThreads, &asteroids, &gGUI, hWnd, Diligent::DeviceType::D3D11); + gWorkloadDE = new AsteroidsDE::Asteroids(gSettings, &asteroids, &gGUI, hWnd, Diligent::DeviceType::D3D11); break; case Settings::RenderMode::DiligentD3D12: - gWorkloadDE = new AsteroidsDE::Asteroids(gSettings.numThreads, &asteroids, &gGUI, hWnd, Diligent::DeviceType::D3D12); + gWorkloadDE = new AsteroidsDE::Asteroids(gSettings, &asteroids, &gGUI, hWnd, Diligent::DeviceType::D3D12); break; case Settings::RenderMode::DiligentGL: - gWorkloadDE = new AsteroidsDE::Asteroids(gSettings.numThreads, &asteroids, &gGUI, hWnd, Diligent::DeviceType::OpenGL); + gWorkloadDE = new AsteroidsDE::Asteroids(gSettings, &asteroids, &gGUI, hWnd, Diligent::DeviceType::OpenGL); break; } @@ -363,6 +369,8 @@ int main(int argc, char** argv) gSettings.closeAfterSeconds = atof(argv[++a]); } else if (_stricmp(argv[a], "-nod3d11") == 0) { gd3d11Available = false; + } else if (_stricmp(argv[a], "-singlethreaded") == 0) { + gSettings.multithreadedRendering = false; } else if (_stricmp(argv[a], "-warp") == 0) { gSettings.warp = true; } else if (_stricmp(argv[a], "-nod3d12") == 0) { @@ -522,6 +530,7 @@ int main(int argc, char** argv) // Update GUI { const char *ModeStr = nullptr; + const char *resBindModeStr = ""; float updateTime = 0; float renderTime = 0; switch (gSettings.mode) @@ -544,6 +553,12 @@ int main(int argc, char** argv) case Settings::RenderMode::DiligentD3D12: ModeStr = "Diligent D3D12"; gWorkloadDE->GetPerfCounters(updateTime, renderTime); + switch (gSettings.resourceBindingMode) + { + case 0: resBindModeStr = "-d";break; + case 1: resBindModeStr = "-m";break; + case 2: resBindModeStr = "-tm";break; + } break; case Settings::RenderMode::DiligentGL: @@ -551,13 +566,14 @@ int main(int argc, char** argv) gWorkloadDE->GetPerfCounters(updateTime, renderTime); break; } - float filterScale = 0.05f; + + float filterScale = 0.02f; filteredUpdateTime = filteredUpdateTime * (1.f - filterScale) + filterScale * updateTime; filteredRenderTime = filteredRenderTime * (1.f - filterScale) + filterScale * renderTime; filteredFrameTime = filteredFrameTime * (1.f - filterScale) + filterScale * (float)frameTime; char buffer[256]; - sprintf(buffer, "Asteroids %s (%dt) - %4.2f ms (%4.2f ms / %4.2f ms)", ModeStr, gSettings.multithreadedRendering ? gSettings.numThreads : 1, + sprintf(buffer, "Asteroids %s%s (%dt) - %4.2f ms (%4.2f ms / %4.2f ms)", ModeStr, resBindModeStr, gSettings.multithreadedRendering ? gSettings.numThreads : 1, 1000.f * filteredFrameTime, 1000.f * filteredUpdateTime, 1000.f * filteredRenderTime); SetWindowText(hWnd, buffer); diff --git a/Projects/Asteroids/src/asteroids_DE.cpp b/Projects/Asteroids/src/asteroids_DE.cpp index 0cb3ddf..a657881 100644 --- a/Projects/Asteroids/src/asteroids_DE.cpp +++ b/Projects/Asteroids/src/asteroids_DE.cpp @@ -39,13 +39,9 @@ using namespace Diligent; namespace Diligent { #ifdef ENGINE_DLL - CreateDeviceAndContextsD3D11Type CreateDeviceAndContextsD3D11 = nullptr; - CreateSwapChainD3D11Type CreateSwapChainD3D11 = nullptr; - - CreateDeviceAndContextsD3D12Type CreateDeviceAndContextsD3D12 = nullptr; - CreateSwapChainD3D12Type CreateSwapChainD3D12 = nullptr; - - CreateDeviceAndSwapChainGLType CreateDeviceAndSwapChainGL = nullptr; + GetEngineFactoryD3D11Type GetEngineFactoryD3D11 = nullptr; + GetEngineFactoryD3D12Type GetEngineFactoryD3D12 = nullptr; + GetEngineFactoryOpenGLType GetEngineFactoryOpenGL = nullptr; #endif } @@ -76,11 +72,12 @@ void Asteroids::InitDevice(HWND hWnd, DeviceType DevType) (Uint32)EngineD3D11DebugFlags::VerifyCommittedResourceRelevance; #ifdef ENGINE_DLL - if(!CreateDeviceAndContextsD3D11 || !CreateSwapChainD3D11) - LoadGraphicsEngineD3D11(CreateDeviceAndContextsD3D11, CreateSwapChainD3D11); + if(!GetEngineFactoryD3D11) + LoadGraphicsEngineD3D11(GetEngineFactoryD3D11); #endif - CreateDeviceAndContextsD3D11( DeviceAttribs, &mDevice, ppContexts.data(), mNumSubsets-1 ); - CreateSwapChainD3D11( mDevice, ppContexts[0], SwapChainDesc, hWnd, &mSwapChain ); + auto *pFactoryD3D11 = GetEngineFactoryD3D11(); + pFactoryD3D11->CreateDeviceAndContextsD3D11( DeviceAttribs, &mDevice, ppContexts.data(), mNumSubsets-1 ); + pFactoryD3D11->CreateSwapChainD3D11( mDevice, ppContexts[0], SwapChainDesc, hWnd, &mSwapChain ); } else { @@ -91,11 +88,12 @@ void Asteroids::InitDevice(HWND hWnd, DeviceType DevType) Attribs.DynamicDescriptorAllocationChunkSize[0] = 4*2048; #endif #ifdef ENGINE_DLL - if(!CreateDeviceAndContextsD3D12 || !CreateSwapChainD3D12) - LoadGraphicsEngineD3D12(CreateDeviceAndContextsD3D12, CreateSwapChainD3D12); + if(!GetEngineFactoryD3D12) + LoadGraphicsEngineD3D12(GetEngineFactoryD3D12); #endif - CreateDeviceAndContextsD3D12( Attribs, &mDevice, ppContexts.data(), mNumSubsets-1 ); - CreateSwapChainD3D12( mDevice, ppContexts[0], SwapChainDesc, hWnd, &mSwapChain ); + auto *pFactoryD3D12 = GetEngineFactoryD3D12(); + pFactoryD3D12->CreateDeviceAndContextsD3D12( Attribs, &mDevice, ppContexts.data(), mNumSubsets-1 ); + pFactoryD3D12->CreateSwapChainD3D12( mDevice, ppContexts[0], SwapChainDesc, hWnd, &mSwapChain ); } mDeviceCtxt.Attach(ppContexts[0]); @@ -107,10 +105,12 @@ void Asteroids::InitDevice(HWND hWnd, DeviceType DevType) case DeviceType::OpenGL: #ifdef ENGINE_DLL - if(!CreateDeviceAndSwapChainGL) - LoadGraphicsEngineOpenGL(CreateDeviceAndSwapChainGL); + if(GetEngineFactoryOpenGL == nullptr) + { + LoadGraphicsEngineOpenGL(GetEngineFactoryOpenGL); + } #endif - CreateDeviceAndSwapChainGL( + GetEngineFactoryOpenGL()->CreateDeviceAndSwapChainGL( EngineCreationAttribs, &mDevice, &mDeviceCtxt, SwapChainDesc, hWnd, &mSwapChain ); break; @@ -120,14 +120,16 @@ void Asteroids::InitDevice(HWND hWnd, DeviceType DevType) } } -Asteroids::Asteroids(UINT NumThreads, AsteroidsSimulation* asteroids, GUI* gui, HWND hWnd, Diligent::DeviceType DevType) +Asteroids::Asteroids(const Settings &settings, AsteroidsSimulation* asteroids, GUI* gui, HWND hWnd, Diligent::DeviceType DevType) : mAsteroids(asteroids) , mGUI(gui) { QueryPerformanceFrequency((LARGE_INTEGER*)&mPerfCounterFreq); - mNumSubsets = std::max(NumThreads,1u); - mNumSubsets = std::min(NumThreads,32u); + mNumSubsets = std::max(settings.numThreads,1); + mNumSubsets = std::min(settings.numThreads,32); + + m_BindingMode = static_cast<BindingMode>(settings.resourceBindingMode); InitDevice(hWnd, DevType); @@ -675,7 +677,7 @@ void Asteroids::RenderSubset(Diligent::Uint32 SubsetNum, auto dynamicData = &dynamicAsteroidData[drawIdx]; { - MapHelper<DrawConstantBuffer> drawConstants(pCtx, mDrawConstantBuffer, MAP_WRITE_DISCARD, 0); + MapHelper<DrawConstantBuffer> drawConstants(pCtx, mDrawConstantBuffer, MAP_WRITE, MAP_FLAG_DISCARD); XMStoreFloat4x4(&drawConstants->mWorld, dynamicData->world); XMStoreFloat4x4(&drawConstants->mViewProjection, viewProjection); drawConstants->mSurfaceColor = staticData->surfaceColor; @@ -794,7 +796,7 @@ void Asteroids::Render(float frameTime, const OrbitCamera& camera, const Setting // Draw skybox { { - MapHelper<SkyboxConstantBuffer> skyboxConstants(mDeviceCtxt, mSkyboxConstantBuffer, MAP_WRITE_DISCARD, 0); + MapHelper<SkyboxConstantBuffer> skyboxConstants(mDeviceCtxt, mSkyboxConstantBuffer, MAP_WRITE, MAP_FLAG_DISCARD); XMStoreFloat4x4(&skyboxConstants->mViewProjection, camera.ViewProjection()); } @@ -819,7 +821,7 @@ void Asteroids::Render(float frameTime, const OrbitCamera& camera, const Setting controlVertices.reserve(mGUI->size()); { - MapHelper<SpriteVertex> vertexBase(mDeviceCtxt, mSpriteVertexBuffer, MAP_WRITE_DISCARD, 0); + MapHelper<SpriteVertex> vertexBase(mDeviceCtxt, mSpriteVertexBuffer, MAP_WRITE, MAP_FLAG_DISCARD); auto vertexEnd = (SpriteVertex*)vertexBase; for (int i = -1; i < (int)mGUI->size(); ++i) { diff --git a/Projects/Asteroids/src/asteroids_DE.h b/Projects/Asteroids/src/asteroids_DE.h index 271d511..7507097 100644 --- a/Projects/Asteroids/src/asteroids_DE.h +++ b/Projects/Asteroids/src/asteroids_DE.h @@ -13,6 +13,7 @@ #include "RenderDevice.h" #include "SwapChain.h" #include "DeviceContext.h" +#include "RefCntAutoPtr.h" #include <map> #include <mutex> #include <atomic> @@ -22,7 +23,7 @@ #include "simulation.h" #include "util.h" #include "gui.h" -#include "RefCntAutoPtr.h" + namespace AsteroidsDE { @@ -41,7 +42,7 @@ struct SkyboxConstantBuffer { class Asteroids { public: - Asteroids(UINT NumThreads, AsteroidsSimulation* asteroids, GUI* gui, HWND hWnd, Diligent::DeviceType DevType); + Asteroids(const Settings &settings, AsteroidsSimulation* asteroids, GUI* gui, HWND hWnd, Diligent::DeviceType DevType); ~Asteroids(); void Render(float frameTime, const OrbitCamera& camera, const Settings& settings); @@ -59,9 +60,9 @@ private: enum class BindingMode { - Dynamic = 1, - Mutable = 2, - TextureMutable = 3 + Dynamic = 0, + Mutable = 1, + TextureMutable = 2 }m_BindingMode = BindingMode::TextureMutable; AsteroidsSimulation* mAsteroids = nullptr; diff --git a/Projects/Asteroids/src/settings.h b/Projects/Asteroids/src/settings.h index d130eca..5ca7d2a 100644 --- a/Projects/Asteroids/src/settings.h +++ b/Projects/Asteroids/src/settings.h @@ -76,6 +76,8 @@ struct Settings DiligentGL }mode = DiligentD3D11; + int resourceBindingMode = 2; // Only for DiligentD3D12 mode + bool lockFrameRate = false; bool animate = true; |
