diff --git a/Code/DanBias.sln b/Code/DanBias.sln index a8d583d8..f2bf5f98 100644 --- a/Code/DanBias.sln +++ b/Code/DanBias.sln @@ -5,14 +5,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OysterGraphics", "OysterGra EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OysterMath", "OysterMath\OysterMath.vcxproj", "{F10CBC03-9809-4CBA-95D8-327C287B18EE}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OysterPhysics3D", "OysterPhysics3D\OysterPhysics3D.vcxproj", "{4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Sound", "Sound\Sound.vcxproj", "{34D6295A-00DD-4B1A-8258-97DA2818EC26}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WindowManager", "WindowManager\WindowManager.vcxproj", "{35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Input", "Input\Input.vcxproj", "{7E3990D2-3D94-465C-B58D-64A74B3ECF9B}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Misc", "Misc\Misc.vcxproj", "{2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Network", "Network", "{C27B926E-B3EF-4990-8822-47580E43A0BE}" @@ -23,25 +15,35 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OysterNetworkServer", "Netw EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NetworkDependencies", "Network\NetworkDependencies\NetworkDependencies.vcxproj", "{C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GamePhysics", "GamePhysics\GamePhysics.vcxproj", "{104FA3E9-94D9-4E1D-A941-28A03BC8A095}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tester", "Tester\Tester.vcxproj", "{1B3BEA4C-CF75-438A-9693-60FB8444BBF3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Game", "Game", "{B0AFF0DC-5C7E-43DC-9586-CD4E38EB037B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aDanBiasGameLauncher", "Game\aDanBiasGameLauncher\aDanBiasGameLauncher.vcxproj", "{666FEA52-975F-41CD-B224-B19AF3C0ABBA}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DanBiasGame", "Game\DanBiasGame\DanBiasGame.vcxproj", "{2A1BC987-AF42-4500-802D-89CD32FC1309}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Game", "Game", "{20720CA7-795C-45AD-A302-9383A6DD503A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GameLogic", "Game\GameLogic\GameLogic.vcxproj", "{B1195BB9-B3A5-47F0-906C-8DEA384D1520}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DanBiasLauncher", "Game\DanBiasLauncher\DanBiasLauncher.vcxproj", "{8690FDDF-C5B7-4C42-A337-BD5243F29B85}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NetworkAPI", "Network\NetworkAPI\NetworkAPI.vcxproj", "{460D625F-2AC9-4559-B809-0BA89CEAEDF4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GameProtocols", "Game\GameProtocols\GameProtocols.vcxproj", "{DA2AA800-ED64-4649-8B3B-E7F1E3968B78}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DanBiasServerLauncher", "Game\DanBiasServerLauncher\DanBiasServerLauncher.vcxproj", "{060B1890-CBF3-4808-BA99-A4776222093B}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GameLogic", "Game\GameLogic\GameLogic.vcxproj", "{B1195BB9-B3A5-47F0-906C-8DEA384D1520}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GameProtocols", "Game\GameProtocols\GameProtocols.vcxproj", "{DA2AA800-ED64-4649-8B3B-E7F1E3968B78}" +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GameServer", "Game\GameServer\GameServer.vcxproj", "{143BD516-20A1-4890-A3E4-F8BFD02220E7}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aDanBiasGameLauncher", "Game\aDanBiasGameLauncher\aDanBiasGameLauncher.vcxproj", "{666FEA52-975F-41CD-B224-B19AF3C0ABBA}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NetworkAPI", "Network\NetworkAPI\NetworkAPI.vcxproj", "{460D625F-2AC9-4559-B809-0BA89CEAEDF4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GamePhysics", "GamePhysics\GamePhysics.vcxproj", "{104FA3E9-94D9-4E1D-A941-28A03BC8A095}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Input", "Input\Input.vcxproj", "{7E3990D2-3D94-465C-B58D-64A74B3ECF9B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OysterPhysics3D", "OysterPhysics3D\OysterPhysics3D.vcxproj", "{4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Sound", "Sound\Sound.vcxproj", "{34D6295A-00DD-4B1A-8258-97DA2818EC26}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WindowManager", "WindowManager\WindowManager.vcxproj", "{35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Physics", "Physics", "{0D86E569-9C74-47F0-BDB2-390C0C9A084B}" EndProject @@ -61,20 +63,21 @@ Global RelWithDebInfo|x64 = RelWithDebInfo|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|Mixed Platforms.ActiveCfg = Release|x64 + {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|Mixed Platforms.Build.0 = Release|x64 {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|Win32.ActiveCfg = Debug|Win32 {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|Win32.Build.0 = Debug|Win32 - {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|x64.ActiveCfg = Debug|x64 - {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|x64.Build.0 = Debug|x64 + {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|Win32.Deploy.0 = Debug|Win32 + {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|x64.ActiveCfg = Release|x64 + {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|x64.Build.0 = Release|x64 {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.MinSizeRel|Win32.ActiveCfg = Release|Win32 {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.MinSizeRel|Win32.Build.0 = Release|Win32 {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.MinSizeRel|x64.ActiveCfg = Release|x64 {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.MinSizeRel|x64.Build.0 = Release|x64 - {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|Mixed Platforms.Build.0 = Release|Win32 + {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|Mixed Platforms.Build.0 = Release|x64 {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|Win32.ActiveCfg = Release|Win32 {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|Win32.Build.0 = Release|Win32 {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|x64.ActiveCfg = Release|x64 @@ -85,20 +88,21 @@ Global {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.RelWithDebInfo|Win32.Build.0 = Release|Win32 {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.RelWithDebInfo|x64.ActiveCfg = Release|x64 {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.RelWithDebInfo|x64.Build.0 = Release|x64 - {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|Mixed Platforms.ActiveCfg = Release|x64 + {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|Mixed Platforms.Build.0 = Release|x64 {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|Win32.ActiveCfg = Debug|Win32 {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|Win32.Build.0 = Debug|Win32 - {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|x64.ActiveCfg = Debug|x64 - {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|x64.Build.0 = Debug|x64 + {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|Win32.Deploy.0 = Debug|Win32 + {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|x64.ActiveCfg = Release|x64 + {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|x64.Build.0 = Release|x64 {F10CBC03-9809-4CBA-95D8-327C287B18EE}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 {F10CBC03-9809-4CBA-95D8-327C287B18EE}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 {F10CBC03-9809-4CBA-95D8-327C287B18EE}.MinSizeRel|Win32.ActiveCfg = Release|Win32 {F10CBC03-9809-4CBA-95D8-327C287B18EE}.MinSizeRel|Win32.Build.0 = Release|Win32 {F10CBC03-9809-4CBA-95D8-327C287B18EE}.MinSizeRel|x64.ActiveCfg = Release|x64 {F10CBC03-9809-4CBA-95D8-327C287B18EE}.MinSizeRel|x64.Build.0 = Release|x64 - {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|Mixed Platforms.Build.0 = Release|Win32 + {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|Mixed Platforms.Build.0 = Release|x64 {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|Win32.ActiveCfg = Release|Win32 {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|Win32.Build.0 = Release|Win32 {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|x64.ActiveCfg = Release|x64 @@ -109,6 +113,343 @@ Global {F10CBC03-9809-4CBA-95D8-327C287B18EE}.RelWithDebInfo|Win32.Build.0 = Release|Win32 {F10CBC03-9809-4CBA-95D8-327C287B18EE}.RelWithDebInfo|x64.ActiveCfg = Release|x64 {F10CBC03-9809-4CBA-95D8-327C287B18EE}.RelWithDebInfo|x64.Build.0 = Release|x64 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Mixed Platforms.ActiveCfg = Release|x64 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Mixed Platforms.Build.0 = Release|x64 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Win32.ActiveCfg = Debug|Win32 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Win32.Build.0 = Debug|Win32 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Win32.Deploy.0 = Debug|Win32 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|x64.ActiveCfg = Release|x64 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|x64.Build.0 = Release|x64 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.MinSizeRel|Win32.Build.0 = Release|Win32 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.MinSizeRel|x64.ActiveCfg = Release|x64 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.MinSizeRel|x64.Build.0 = Release|x64 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|Mixed Platforms.Build.0 = Release|x64 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|Win32.ActiveCfg = Release|Win32 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|Win32.Build.0 = Release|Win32 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|x64.ActiveCfg = Release|x64 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|x64.Build.0 = Release|x64 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.RelWithDebInfo|Win32.Build.0 = Release|Win32 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.RelWithDebInfo|x64.Build.0 = Release|x64 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|Mixed Platforms.ActiveCfg = Release|x64 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|Mixed Platforms.Build.0 = Release|x64 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|Win32.ActiveCfg = Debug|Win32 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|Win32.Build.0 = Debug|Win32 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|x64.ActiveCfg = Release|x64 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|x64.Build.0 = Release|x64 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.MinSizeRel|x64.ActiveCfg = Release|x64 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|Mixed Platforms.Build.0 = Release|x64 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|Win32.ActiveCfg = Release|Win32 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|Win32.Build.0 = Release|Win32 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|x64.ActiveCfg = Release|x64 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|x64.Build.0 = Release|x64 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|Mixed Platforms.ActiveCfg = Release|x64 + {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|Mixed Platforms.Build.0 = Release|x64 + {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|Win32.ActiveCfg = Debug|Win32 + {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|Win32.Build.0 = Debug|Win32 + {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|x64.ActiveCfg = Release|x64 + {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|x64.Build.0 = Release|x64 + {6A066806-F43F-4B31-A4E3-57179674F460}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {6A066806-F43F-4B31-A4E3-57179674F460}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {6A066806-F43F-4B31-A4E3-57179674F460}.MinSizeRel|x64.ActiveCfg = Release|x64 + {6A066806-F43F-4B31-A4E3-57179674F460}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {6A066806-F43F-4B31-A4E3-57179674F460}.Release|Mixed Platforms.Build.0 = Release|x64 + {6A066806-F43F-4B31-A4E3-57179674F460}.Release|Win32.ActiveCfg = Release|Win32 + {6A066806-F43F-4B31-A4E3-57179674F460}.Release|Win32.Build.0 = Release|Win32 + {6A066806-F43F-4B31-A4E3-57179674F460}.Release|x64.ActiveCfg = Release|x64 + {6A066806-F43F-4B31-A4E3-57179674F460}.Release|x64.Build.0 = Release|x64 + {6A066806-F43F-4B31-A4E3-57179674F460}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {6A066806-F43F-4B31-A4E3-57179674F460}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {6A066806-F43F-4B31-A4E3-57179674F460}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|Mixed Platforms.ActiveCfg = Release|x64 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|Mixed Platforms.Build.0 = Release|x64 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|Win32.ActiveCfg = Debug|Win32 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|Win32.Build.0 = Debug|Win32 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|x64.ActiveCfg = Release|x64 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|x64.Build.0 = Release|x64 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.MinSizeRel|x64.ActiveCfg = Release|x64 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|Mixed Platforms.Build.0 = Release|x64 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|Win32.ActiveCfg = Release|Win32 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|Win32.Build.0 = Release|Win32 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|x64.ActiveCfg = Release|x64 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|x64.Build.0 = Release|x64 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Debug|Mixed Platforms.ActiveCfg = Release|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Debug|Mixed Platforms.Build.0 = Release|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Debug|Win32.ActiveCfg = Debug|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Debug|Win32.Build.0 = Debug|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Debug|x64.ActiveCfg = Release|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Debug|x64.Build.0 = Release|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.MinSizeRel|Mixed Platforms.ActiveCfg = Debug|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.MinSizeRel|Win32.ActiveCfg = Debug|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.MinSizeRel|x64.ActiveCfg = Debug|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Release|Mixed Platforms.Build.0 = Release|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Release|Win32.ActiveCfg = Release|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Release|Win32.Build.0 = Release|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Release|x64.ActiveCfg = Release|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.Release|x64.Build.0 = Release|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {1B3BEA4C-CF75-438A-9693-60FB8444BBF3}.RelWithDebInfo|x64.ActiveCfg = Release|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Debug|Win32.ActiveCfg = Debug|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Debug|Win32.Build.0 = Debug|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Debug|x64.ActiveCfg = Debug|x64 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Debug|x64.Build.0 = Debug|x64 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.MinSizeRel|Win32.Build.0 = Release|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.MinSizeRel|x64.ActiveCfg = Release|x64 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.MinSizeRel|x64.Build.0 = Release|x64 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Release|Mixed Platforms.Build.0 = Release|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Release|Win32.ActiveCfg = Release|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Release|Win32.Build.0 = Release|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Release|x64.ActiveCfg = Release|x64 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Release|x64.Build.0 = Release|x64 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.RelWithDebInfo|Win32.Build.0 = Release|Win32 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.RelWithDebInfo|x64.Build.0 = Release|x64 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|Win32.ActiveCfg = Debug|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|Win32.Build.0 = Debug|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|x64.ActiveCfg = Debug|x64 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|x64.Build.0 = Debug|x64 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.MinSizeRel|Win32.Build.0 = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.MinSizeRel|x64.ActiveCfg = Release|x64 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.MinSizeRel|x64.Build.0 = Release|x64 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|Mixed Platforms.Build.0 = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|Win32.ActiveCfg = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|Win32.Build.0 = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|x64.ActiveCfg = Release|x64 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|x64.Build.0 = Release|x64 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.RelWithDebInfo|Win32.Build.0 = Release|Win32 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {2A1BC987-AF42-4500-802D-89CD32FC1309}.RelWithDebInfo|x64.Build.0 = Release|x64 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Debug|Win32.ActiveCfg = Debug|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Debug|Win32.Build.0 = Debug|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Debug|x64.ActiveCfg = Debug|x64 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Debug|x64.Build.0 = Debug|x64 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.MinSizeRel|Win32.Build.0 = Release|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.MinSizeRel|x64.ActiveCfg = Release|x64 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.MinSizeRel|x64.Build.0 = Release|x64 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Release|Mixed Platforms.Build.0 = Release|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Release|Win32.ActiveCfg = Release|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Release|Win32.Build.0 = Release|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Release|x64.ActiveCfg = Release|x64 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Release|x64.Build.0 = Release|x64 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.RelWithDebInfo|Win32.Build.0 = Release|Win32 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.RelWithDebInfo|x64.Build.0 = Release|x64 + {060B1890-CBF3-4808-BA99-A4776222093B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.Debug|Win32.ActiveCfg = Debug|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.Debug|Win32.Build.0 = Debug|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.Debug|x64.ActiveCfg = Debug|x64 + {060B1890-CBF3-4808-BA99-A4776222093B}.Debug|x64.Build.0 = Debug|x64 + {060B1890-CBF3-4808-BA99-A4776222093B}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.MinSizeRel|Win32.Build.0 = Release|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.MinSizeRel|x64.ActiveCfg = Release|x64 + {060B1890-CBF3-4808-BA99-A4776222093B}.MinSizeRel|x64.Build.0 = Release|x64 + {060B1890-CBF3-4808-BA99-A4776222093B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.Release|Mixed Platforms.Build.0 = Release|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.Release|Win32.ActiveCfg = Release|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.Release|Win32.Build.0 = Release|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.Release|x64.ActiveCfg = Release|x64 + {060B1890-CBF3-4808-BA99-A4776222093B}.Release|x64.Build.0 = Release|x64 + {060B1890-CBF3-4808-BA99-A4776222093B}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.RelWithDebInfo|Win32.Build.0 = Release|Win32 + {060B1890-CBF3-4808-BA99-A4776222093B}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {060B1890-CBF3-4808-BA99-A4776222093B}.RelWithDebInfo|x64.Build.0 = Release|x64 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Debug|Win32.ActiveCfg = Debug|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Debug|Win32.Build.0 = Debug|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Debug|x64.ActiveCfg = Debug|x64 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Debug|x64.Build.0 = Debug|x64 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.MinSizeRel|Win32.Build.0 = Release|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.MinSizeRel|x64.ActiveCfg = Release|x64 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.MinSizeRel|x64.Build.0 = Release|x64 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Release|Mixed Platforms.Build.0 = Release|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Release|Win32.ActiveCfg = Release|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Release|Win32.Build.0 = Release|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Release|x64.ActiveCfg = Release|x64 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Release|x64.Build.0 = Release|x64 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.RelWithDebInfo|Win32.Build.0 = Release|Win32 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.RelWithDebInfo|x64.Build.0 = Release|x64 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Debug|Win32.ActiveCfg = Debug|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Debug|Win32.Build.0 = Debug|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Debug|x64.ActiveCfg = Debug|x64 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Debug|x64.Build.0 = Debug|x64 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.MinSizeRel|Win32.Build.0 = Release|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.MinSizeRel|x64.ActiveCfg = Release|x64 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.MinSizeRel|x64.Build.0 = Release|x64 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|Mixed Platforms.Build.0 = Release|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|Win32.ActiveCfg = Release|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|Win32.Build.0 = Release|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|x64.ActiveCfg = Release|x64 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|x64.Build.0 = Release|x64 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.RelWithDebInfo|Win32.Build.0 = Release|Win32 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.RelWithDebInfo|x64.Build.0 = Release|x64 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Debug|Win32.ActiveCfg = Debug|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Debug|Win32.Build.0 = Debug|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Debug|x64.ActiveCfg = Debug|x64 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Debug|x64.Build.0 = Debug|x64 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.MinSizeRel|Win32.Build.0 = Release|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.MinSizeRel|x64.ActiveCfg = Release|x64 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.MinSizeRel|x64.Build.0 = Release|x64 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Release|Mixed Platforms.Build.0 = Release|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Release|Win32.ActiveCfg = Release|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Release|Win32.Build.0 = Release|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Release|x64.ActiveCfg = Release|x64 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Release|x64.Build.0 = Release|x64 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.RelWithDebInfo|Win32.Build.0 = Release|Win32 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {143BD516-20A1-4890-A3E4-F8BFD02220E7}.RelWithDebInfo|x64.Build.0 = Release|x64 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Debug|Win32.ActiveCfg = Debug|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Debug|Win32.Build.0 = Debug|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Debug|x64.ActiveCfg = Debug|x64 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Debug|x64.Build.0 = Debug|x64 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.MinSizeRel|Win32.Build.0 = Release|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.MinSizeRel|x64.ActiveCfg = Release|x64 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.MinSizeRel|x64.Build.0 = Release|x64 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Release|Mixed Platforms.Build.0 = Release|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Release|Win32.ActiveCfg = Release|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Release|Win32.Build.0 = Release|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Release|x64.ActiveCfg = Release|x64 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Release|x64.Build.0 = Release|x64 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.RelWithDebInfo|Win32.Build.0 = Release|Win32 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.RelWithDebInfo|x64.Build.0 = Release|x64 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|Win32.ActiveCfg = Debug|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|Win32.Build.0 = Debug|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|x64.ActiveCfg = Debug|x64 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|x64.Build.0 = Debug|x64 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.MinSizeRel|Win32.Build.0 = Release|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.MinSizeRel|x64.ActiveCfg = Release|x64 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.MinSizeRel|x64.Build.0 = Release|x64 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|Mixed Platforms.Build.0 = Release|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|Win32.ActiveCfg = Release|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|Win32.Build.0 = Release|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|x64.ActiveCfg = Release|x64 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|x64.Build.0 = Release|x64 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.RelWithDebInfo|Win32.Build.0 = Release|Win32 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.RelWithDebInfo|x64.Build.0 = Release|x64 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|Win32.ActiveCfg = Debug|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|Win32.Build.0 = Debug|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|x64.ActiveCfg = Debug|x64 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|x64.Build.0 = Debug|x64 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.MinSizeRel|Win32.ActiveCfg = Release|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.MinSizeRel|Win32.Build.0 = Release|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.MinSizeRel|x64.ActiveCfg = Release|x64 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.MinSizeRel|x64.Build.0 = Release|x64 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|Mixed Platforms.Build.0 = Release|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|Win32.ActiveCfg = Release|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|Win32.Build.0 = Release|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|x64.ActiveCfg = Release|x64 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|x64.Build.0 = Release|x64 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.RelWithDebInfo|Win32.Build.0 = Release|Win32 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.RelWithDebInfo|x64.Build.0 = Release|x64 {4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 {4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Debug|Win32.ActiveCfg = Debug|Win32 @@ -181,324 +522,6 @@ Global {35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.RelWithDebInfo|Win32.Build.0 = Release|Win32 {35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.RelWithDebInfo|x64.ActiveCfg = Release|x64 {35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.RelWithDebInfo|x64.Build.0 = Release|x64 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|Win32.ActiveCfg = Debug|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|Win32.Build.0 = Debug|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|x64.ActiveCfg = Debug|x64 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|x64.Build.0 = Debug|x64 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.MinSizeRel|Win32.Build.0 = Release|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.MinSizeRel|x64.ActiveCfg = Release|x64 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.MinSizeRel|x64.Build.0 = Release|x64 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|Mixed Platforms.Build.0 = Release|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|Win32.ActiveCfg = Release|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|Win32.Build.0 = Release|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|x64.ActiveCfg = Release|x64 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|x64.Build.0 = Release|x64 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.RelWithDebInfo|Win32.Build.0 = Release|Win32 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.RelWithDebInfo|x64.Build.0 = Release|x64 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Win32.ActiveCfg = Debug|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Win32.Build.0 = Debug|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|x64.ActiveCfg = Debug|x64 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|x64.Build.0 = Debug|x64 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.MinSizeRel|Win32.Build.0 = Release|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.MinSizeRel|x64.ActiveCfg = Release|x64 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.MinSizeRel|x64.Build.0 = Release|x64 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|Mixed Platforms.Build.0 = Release|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|Win32.ActiveCfg = Release|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|Win32.Build.0 = Release|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|x64.ActiveCfg = Release|x64 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|x64.Build.0 = Release|x64 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.RelWithDebInfo|Win32.Build.0 = Release|Win32 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.RelWithDebInfo|x64.Build.0 = Release|x64 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|Win32.ActiveCfg = Debug|Win32 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|Win32.Build.0 = Debug|Win32 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|x64.ActiveCfg = Debug|x64 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|x64.Build.0 = Debug|x64 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.MinSizeRel|x64.ActiveCfg = Release|x64 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|Mixed Platforms.Build.0 = Release|Win32 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|Win32.ActiveCfg = Release|Win32 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|Win32.Build.0 = Release|Win32 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|x64.ActiveCfg = Release|x64 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|x64.Build.0 = Release|x64 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|Win32.ActiveCfg = Debug|Win32 - {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|Win32.Build.0 = Debug|Win32 - {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|x64.ActiveCfg = Debug|x64 - {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|x64.Build.0 = Debug|x64 - {6A066806-F43F-4B31-A4E3-57179674F460}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 - {6A066806-F43F-4B31-A4E3-57179674F460}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {6A066806-F43F-4B31-A4E3-57179674F460}.MinSizeRel|x64.ActiveCfg = Release|x64 - {6A066806-F43F-4B31-A4E3-57179674F460}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {6A066806-F43F-4B31-A4E3-57179674F460}.Release|Mixed Platforms.Build.0 = Release|Win32 - {6A066806-F43F-4B31-A4E3-57179674F460}.Release|Win32.ActiveCfg = Release|Win32 - {6A066806-F43F-4B31-A4E3-57179674F460}.Release|Win32.Build.0 = Release|Win32 - {6A066806-F43F-4B31-A4E3-57179674F460}.Release|x64.ActiveCfg = Release|x64 - {6A066806-F43F-4B31-A4E3-57179674F460}.Release|x64.Build.0 = Release|x64 - {6A066806-F43F-4B31-A4E3-57179674F460}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 - {6A066806-F43F-4B31-A4E3-57179674F460}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {6A066806-F43F-4B31-A4E3-57179674F460}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|Win32.ActiveCfg = Debug|Win32 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|Win32.Build.0 = Debug|Win32 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|x64.ActiveCfg = Debug|x64 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|x64.Build.0 = Debug|x64 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.MinSizeRel|x64.ActiveCfg = Release|x64 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|Mixed Platforms.Build.0 = Release|Win32 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|Win32.ActiveCfg = Release|Win32 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|Win32.Build.0 = Release|Win32 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|x64.ActiveCfg = Release|x64 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|x64.Build.0 = Release|x64 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|Win32.ActiveCfg = Debug|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|Win32.Build.0 = Debug|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|x64.ActiveCfg = Debug|x64 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Debug|x64.Build.0 = Debug|x64 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.MinSizeRel|Win32.Build.0 = Release|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.MinSizeRel|x64.ActiveCfg = Release|x64 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.MinSizeRel|x64.Build.0 = Release|x64 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|Mixed Platforms.Build.0 = Release|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|Win32.ActiveCfg = Release|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|Win32.Build.0 = Release|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|x64.ActiveCfg = Release|x64 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.Release|x64.Build.0 = Release|x64 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.RelWithDebInfo|Win32.Build.0 = Release|Win32 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {104FA3E9-94D9-4E1D-A941-28A03BC8A095}.RelWithDebInfo|x64.Build.0 = Release|x64 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|Win32.ActiveCfg = Debug|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|Win32.Build.0 = Debug|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|x64.ActiveCfg = Debug|x64 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.Debug|x64.Build.0 = Debug|x64 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.MinSizeRel|Win32.Build.0 = Release|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.MinSizeRel|x64.ActiveCfg = Release|x64 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.MinSizeRel|x64.Build.0 = Release|x64 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|Mixed Platforms.Build.0 = Release|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|Win32.ActiveCfg = Release|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|Win32.Build.0 = Release|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|x64.ActiveCfg = Release|x64 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.Release|x64.Build.0 = Release|x64 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.RelWithDebInfo|Win32.Build.0 = Release|Win32 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {2A1BC987-AF42-4500-802D-89CD32FC1309}.RelWithDebInfo|x64.Build.0 = Release|x64 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Debug|Win32.ActiveCfg = Debug|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Debug|Win32.Build.0 = Debug|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Debug|x64.ActiveCfg = Debug|x64 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Debug|x64.Build.0 = Debug|x64 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.MinSizeRel|Win32.Build.0 = Release|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.MinSizeRel|x64.ActiveCfg = Release|x64 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.MinSizeRel|x64.Build.0 = Release|x64 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Release|Mixed Platforms.Build.0 = Release|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Release|Win32.ActiveCfg = Release|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Release|Win32.Build.0 = Release|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Release|x64.ActiveCfg = Release|x64 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.Release|x64.Build.0 = Release|x64 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.RelWithDebInfo|Win32.Build.0 = Release|Win32 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {B1195BB9-B3A5-47F0-906C-8DEA384D1520}.RelWithDebInfo|x64.Build.0 = Release|x64 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Debug|Win32.ActiveCfg = Debug|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Debug|Win32.Build.0 = Debug|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Debug|x64.ActiveCfg = Debug|x64 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Debug|x64.Build.0 = Debug|x64 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.MinSizeRel|Win32.Build.0 = Release|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.MinSizeRel|x64.ActiveCfg = Release|x64 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.MinSizeRel|x64.Build.0 = Release|x64 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Release|Mixed Platforms.Build.0 = Release|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Release|Win32.ActiveCfg = Release|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Release|Win32.Build.0 = Release|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Release|x64.ActiveCfg = Release|x64 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.Release|x64.Build.0 = Release|x64 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.RelWithDebInfo|Win32.Build.0 = Release|Win32 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {8690FDDF-C5B7-4C42-A337-BD5243F29B85}.RelWithDebInfo|x64.Build.0 = Release|x64 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Debug|Win32.ActiveCfg = Debug|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Debug|Win32.Build.0 = Debug|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Debug|x64.ActiveCfg = Debug|x64 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Debug|x64.Build.0 = Debug|x64 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.MinSizeRel|Win32.Build.0 = Release|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.MinSizeRel|x64.ActiveCfg = Release|x64 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.MinSizeRel|x64.Build.0 = Release|x64 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Release|Mixed Platforms.Build.0 = Release|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Release|Win32.ActiveCfg = Release|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Release|Win32.Build.0 = Release|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Release|x64.ActiveCfg = Release|x64 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.Release|x64.Build.0 = Release|x64 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.RelWithDebInfo|Win32.Build.0 = Release|Win32 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {460D625F-2AC9-4559-B809-0BA89CEAEDF4}.RelWithDebInfo|x64.Build.0 = Release|x64 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Debug|Win32.ActiveCfg = Debug|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Debug|Win32.Build.0 = Debug|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Debug|x64.ActiveCfg = Debug|x64 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Debug|x64.Build.0 = Debug|x64 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.MinSizeRel|Win32.Build.0 = Release|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.MinSizeRel|x64.ActiveCfg = Release|x64 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.MinSizeRel|x64.Build.0 = Release|x64 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|Mixed Platforms.Build.0 = Release|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|Win32.ActiveCfg = Release|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|Win32.Build.0 = Release|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|x64.ActiveCfg = Release|x64 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|x64.Build.0 = Release|x64 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.RelWithDebInfo|Win32.Build.0 = Release|Win32 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.RelWithDebInfo|x64.Build.0 = Release|x64 - {060B1890-CBF3-4808-BA99-A4776222093B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.Debug|Win32.ActiveCfg = Debug|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.Debug|Win32.Build.0 = Debug|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.Debug|x64.ActiveCfg = Debug|x64 - {060B1890-CBF3-4808-BA99-A4776222093B}.Debug|x64.Build.0 = Debug|x64 - {060B1890-CBF3-4808-BA99-A4776222093B}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.MinSizeRel|Win32.Build.0 = Release|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.MinSizeRel|x64.ActiveCfg = Release|x64 - {060B1890-CBF3-4808-BA99-A4776222093B}.MinSizeRel|x64.Build.0 = Release|x64 - {060B1890-CBF3-4808-BA99-A4776222093B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.Release|Mixed Platforms.Build.0 = Release|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.Release|Win32.ActiveCfg = Release|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.Release|Win32.Build.0 = Release|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.Release|x64.ActiveCfg = Release|x64 - {060B1890-CBF3-4808-BA99-A4776222093B}.Release|x64.Build.0 = Release|x64 - {060B1890-CBF3-4808-BA99-A4776222093B}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.RelWithDebInfo|Win32.Build.0 = Release|Win32 - {060B1890-CBF3-4808-BA99-A4776222093B}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {060B1890-CBF3-4808-BA99-A4776222093B}.RelWithDebInfo|x64.Build.0 = Release|x64 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Debug|Win32.ActiveCfg = Debug|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Debug|Win32.Build.0 = Debug|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Debug|x64.ActiveCfg = Debug|x64 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Debug|x64.Build.0 = Debug|x64 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.MinSizeRel|Win32.Build.0 = Release|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.MinSizeRel|x64.ActiveCfg = Release|x64 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.MinSizeRel|x64.Build.0 = Release|x64 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Release|Mixed Platforms.Build.0 = Release|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Release|Win32.ActiveCfg = Release|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Release|Win32.Build.0 = Release|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Release|x64.ActiveCfg = Release|x64 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.Release|x64.Build.0 = Release|x64 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.RelWithDebInfo|Win32.Build.0 = Release|Win32 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {143BD516-20A1-4890-A3E4-F8BFD02220E7}.RelWithDebInfo|x64.Build.0 = Release|x64 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Debug|Win32.ActiveCfg = Debug|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Debug|Win32.Build.0 = Debug|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Debug|x64.ActiveCfg = Debug|x64 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Debug|x64.Build.0 = Debug|x64 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.MinSizeRel|Mixed Platforms.ActiveCfg = Release|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.MinSizeRel|Mixed Platforms.Build.0 = Release|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.MinSizeRel|Win32.ActiveCfg = Release|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.MinSizeRel|Win32.Build.0 = Release|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.MinSizeRel|x64.ActiveCfg = Release|x64 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.MinSizeRel|x64.Build.0 = Release|x64 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Release|Mixed Platforms.Build.0 = Release|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Release|Win32.ActiveCfg = Release|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Release|Win32.Build.0 = Release|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Release|x64.ActiveCfg = Release|x64 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.Release|x64.Build.0 = Release|x64 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.RelWithDebInfo|Mixed Platforms.ActiveCfg = Release|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.RelWithDebInfo|Mixed Platforms.Build.0 = Release|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.RelWithDebInfo|Win32.ActiveCfg = Release|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.RelWithDebInfo|Win32.Build.0 = Release|Win32 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {666FEA52-975F-41CD-B224-B19AF3C0ABBA}.RelWithDebInfo|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -508,12 +531,12 @@ Global {6A066806-F43F-4B31-A4E3-57179674F460} = {C27B926E-B3EF-4990-8822-47580E43A0BE} {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50} = {C27B926E-B3EF-4990-8822-47580E43A0BE} {460D625F-2AC9-4559-B809-0BA89CEAEDF4} = {C27B926E-B3EF-4990-8822-47580E43A0BE} - {2A1BC987-AF42-4500-802D-89CD32FC1309} = {20720CA7-795C-45AD-A302-9383A6DD503A} - {B1195BB9-B3A5-47F0-906C-8DEA384D1520} = {20720CA7-795C-45AD-A302-9383A6DD503A} - {8690FDDF-C5B7-4C42-A337-BD5243F29B85} = {20720CA7-795C-45AD-A302-9383A6DD503A} - {DA2AA800-ED64-4649-8B3B-E7F1E3968B78} = {20720CA7-795C-45AD-A302-9383A6DD503A} - {060B1890-CBF3-4808-BA99-A4776222093B} = {20720CA7-795C-45AD-A302-9383A6DD503A} - {143BD516-20A1-4890-A3E4-F8BFD02220E7} = {20720CA7-795C-45AD-A302-9383A6DD503A} - {666FEA52-975F-41CD-B224-B19AF3C0ABBA} = {20720CA7-795C-45AD-A302-9383A6DD503A} + {666FEA52-975F-41CD-B224-B19AF3C0ABBA} = {B0AFF0DC-5C7E-43DC-9586-CD4E38EB037B} + {2A1BC987-AF42-4500-802D-89CD32FC1309} = {B0AFF0DC-5C7E-43DC-9586-CD4E38EB037B} + {8690FDDF-C5B7-4C42-A337-BD5243F29B85} = {B0AFF0DC-5C7E-43DC-9586-CD4E38EB037B} + {060B1890-CBF3-4808-BA99-A4776222093B} = {B0AFF0DC-5C7E-43DC-9586-CD4E38EB037B} + {B1195BB9-B3A5-47F0-906C-8DEA384D1520} = {B0AFF0DC-5C7E-43DC-9586-CD4E38EB037B} + {DA2AA800-ED64-4649-8B3B-E7F1E3968B78} = {B0AFF0DC-5C7E-43DC-9586-CD4E38EB037B} + {143BD516-20A1-4890-A3E4-F8BFD02220E7} = {B0AFF0DC-5C7E-43DC-9586-CD4E38EB037B} EndGlobalSection EndGlobal diff --git a/Code/Game/DanBiasGame/DanBiasGame_Impl.cpp b/Code/Game/DanBiasGame/DanBiasGame_Impl.cpp index e987edc0..587a3df1 100644 --- a/Code/Game/DanBiasGame/DanBiasGame_Impl.cpp +++ b/Code/Game/DanBiasGame/DanBiasGame_Impl.cpp @@ -93,8 +93,9 @@ namespace DanBias m_data->recieverObj->Update(); capFrame += dt; - if(capFrame > 0.03) + //if(capFrame > 0.03) { + Oyster::Graphics::API::Update(dt); if(Update(dt) != S_OK) return DanBiasClientReturn_Error; if(Render(dt) != S_OK) @@ -116,12 +117,12 @@ namespace DanBias //-------------------------------------------------------------------------------------- HRESULT DanBiasGame::InitDirect3D() { - if(Oyster::Graphics::API::Init(m_data->window->GetHWND(), false, false, Oyster::Math::Float2( 1024, 768)) != Oyster::Graphics::API::Sucsess) - return E_FAIL; Oyster::Graphics::API::Option p; p.modelPath = L"..\\Content\\Models\\"; p.texturePath = L"..\\Content\\Textures\\"; Oyster::Graphics::API::SetOptions(p); + if(Oyster::Graphics::API::Init(m_data->window->GetHWND(), false, false, Oyster::Math::Float2( 1024, 768)) != Oyster::Graphics::API::Sucsess) + return E_FAIL; return S_OK; } @@ -193,10 +194,7 @@ namespace DanBias HRESULT DanBiasGame::Render(float deltaTime) { - - - m_data->recieverObj->gameClientState->Render(); - + m_data->recieverObj->gameClientState->Render(deltaTime); return S_OK; } diff --git a/Code/Game/DanBiasGame/GameClientState/C_Object.cpp b/Code/Game/DanBiasGame/GameClientState/C_Object.cpp index c5078224..3f9e08c1 100644 --- a/Code/Game/DanBiasGame/GameClientState/C_Object.cpp +++ b/Code/Game/DanBiasGame/GameClientState/C_Object.cpp @@ -79,7 +79,7 @@ int C_Object::GetId() const } void C_Object::Render() { - Oyster::Graphics::API::RenderModel(*(model)); + Oyster::Graphics::API::RenderModel(model); } void C_Object::Release() { diff --git a/Code/Game/DanBiasGame/GameClientState/C_Object.h b/Code/Game/DanBiasGame/GameClientState/C_Object.h index 9c06d2da..f926a08a 100644 --- a/Code/Game/DanBiasGame/GameClientState/C_Object.h +++ b/Code/Game/DanBiasGame/GameClientState/C_Object.h @@ -23,9 +23,11 @@ private: Oyster::Math::Float3 position; Oyster::Math::Quaternion rotation; Oyster::Math::Float3 scale; - Oyster::Graphics::Model::Model *model; + int id; void updateWorld(); +protected: + Oyster::Graphics::Model::Model *model; public: virtual void Init(ModelInitData modelInit); diff --git a/Code/Game/DanBiasGame/GameClientState/C_obj/C_Player.cpp b/Code/Game/DanBiasGame/GameClientState/C_obj/C_Player.cpp index 02cc58fc..a75785a6 100644 --- a/Code/Game/DanBiasGame/GameClientState/C_obj/C_Player.cpp +++ b/Code/Game/DanBiasGame/GameClientState/C_obj/C_Player.cpp @@ -16,4 +16,6 @@ C_Player::~C_Player(void) void C_Player::Init(ModelInitData modelInit) { C_Object::Init(modelInit); + Oyster::Graphics::API::PlayAnimation(model, L"movement"); + //Oyster::Graphics::API::Update(0.002f); } diff --git a/Code/Game/DanBiasGame/GameClientState/GameClientState.h b/Code/Game/DanBiasGame/GameClientState/GameClientState.h index 378eeefc..8e79cab3 100644 --- a/Code/Game/DanBiasGame/GameClientState/GameClientState.h +++ b/Code/Game/DanBiasGame/GameClientState/GameClientState.h @@ -64,7 +64,7 @@ public: virtual ~GameClientState(void); virtual bool Init(Oyster::Network::NetworkClient* nwClient) = 0; virtual ClientState Update(float deltaTime, InputClass* KeyInput) = 0; - virtual bool Render() = 0; + virtual bool Render(float dt) = 0; virtual bool Release() = 0; virtual void Protocol(ProtocolStruct* protocolStruct) = 0; diff --git a/Code/Game/DanBiasGame/GameClientState/GameState.cpp b/Code/Game/DanBiasGame/GameClientState/GameState.cpp index 2d49da99..cfc07fc9 100644 --- a/Code/Game/DanBiasGame/GameClientState/GameState.cpp +++ b/Code/Game/DanBiasGame/GameClientState/GameState.cpp @@ -49,33 +49,33 @@ bool GameState::Init(Oyster::Network::NetworkClient* nwClient) } GameState::gameStateState GameState::LoadGame() { - Oyster::Graphics::Definitions::Pointlight plight; - plight.Pos = Float3(315, 0 ,5); - plight.Color = Float3(0.9f,0.7f,0.2f); - plight.Radius = 100; - plight.Bright = 0.9f; - Oyster::Graphics::API::AddLight(plight); - plight.Pos = Float3(10,350,5); + Oyster::Graphics::Definitions::Pointlight plight; + plight.Pos = Float3(315, 0 ,5); + plight.Color = Float3(0.9f,0.7f,0.2f); + plight.Radius = 10; + plight.Bright = 0.5f; + //Oyster::Graphics::API::AddLight(plight); + plight.Pos = Float3(10,800,5); plight.Color = Float3(0.9f,0.7f,0.3f); - plight.Radius = 200; - plight.Bright = 0.7f; + plight.Radius = 300; + plight.Bright = 0.5f; Oyster::Graphics::API::AddLight(plight); - plight.Pos = Float3(350,350,5); - plight.Color = Float3(0.9f,0.7f,0.3f); - plight.Radius = 200; - plight.Bright = 0.7f; - Oyster::Graphics::API::AddLight(plight); - plight.Pos = Float3(10,350,350); - plight.Color = Float3(0.9f,0.7f,0.3f); - plight.Radius = 200; - plight.Bright = 0.7f; - Oyster::Graphics::API::AddLight(plight); - plight.Pos = Float3(10,-15,5); - plight.Color = Float3(0,0,1); - plight.Radius = 50; - plight.Bright = 2; + //plight.Pos = Float3(350,350,5); + //plight.Color = Float3(0.9f,0.7f,0.3f); + //plight.Radius = 200; + //plight.Bright = 0.7f; + //Oyster::Graphics::API::AddLight(plight); + //plight.Pos = Float3(10,350,350); + //plight.Color = Float3(0.9f,0.7f,0.3f); + //plight.Radius = 200; + //plight.Bright = 0.7f; + //Oyster::Graphics::API::AddLight(plight); + //plight.Pos = Float3(10,-15,5); + //plight.Color = Float3(0,0,1); + //plight.Radius = 50; + //plight.Bright = 0.5f; - Oyster::Graphics::API::AddLight(plight); + //Oyster::Graphics::API::AddLight(plight); // use level loader //LoadModels("3bana.bias"); // hardcoded objects @@ -293,7 +293,7 @@ void GameState::InitiatePlayer(int id, std::wstring modelName, Oyster::Math::Flo obj = new C_Player(); this->dynamicObjects.Push(obj); this->dynamicObjects[this->dynamicObjects.Size() -1 ]->Init(modelData); - + Oyster::Math::Float3 right = Oyster::Math::Float3(world[0], world[1], world[2]); Oyster::Math::Float3 up = Oyster::Math::Float3(world[4], world[5], world[6]); @@ -357,7 +357,7 @@ GameClientState::ClientState GameState::Update(float deltaTime, InputClass* KeyI // send key input to server. return ClientState_Same; } -bool GameState::Render() +bool GameState::Render(float dt) { Oyster::Graphics::API::SetView(camera->View()); @@ -370,6 +370,11 @@ bool GameState::Render() { dynamicObjects[i]->Render(); } + Oyster::Graphics::API::StartTextRender(); + std::wstring fps; + float f = 1/dt; + fps = std::to_wstring(f); + Oyster::Graphics::API::RenderText(fps,Oyster::Math::Float2(0.5f,0.1f),Oyster::Math::Float2(0.05f,0.08f)); Oyster::Graphics::API::EndFrame(); return true; diff --git a/Code/Game/DanBiasGame/GameClientState/GameState.h b/Code/Game/DanBiasGame/GameClientState/GameState.h index 3f182b2a..5935398d 100644 --- a/Code/Game/DanBiasGame/GameClientState/GameState.h +++ b/Code/Game/DanBiasGame/GameClientState/GameState.h @@ -49,7 +49,7 @@ public: void InitiatePlayer(int id, std::wstring modelName, Oyster::Math::Float4x4 world); gameStateState LoadGame(); void readKeyInput(InputClass* KeyInput); - bool Render()override; + bool Render(float dt)override; bool Release()override; void Protocol(ProtocolStruct* pos)override; diff --git a/Code/Game/DanBiasGame/GameClientState/LanMenuState.cpp b/Code/Game/DanBiasGame/GameClientState/LanMenuState.cpp index 092307af..35fd95a7 100644 --- a/Code/Game/DanBiasGame/GameClientState/LanMenuState.cpp +++ b/Code/Game/DanBiasGame/GameClientState/LanMenuState.cpp @@ -169,7 +169,7 @@ GameClientState::ClientState LanMenuState::ChangeState(InputClass* KeyInput) return ClientState_Same; } -bool LanMenuState::Render() +bool LanMenuState::Render(float dt) { Oyster::Graphics::API::SetView(privData->view); Oyster::Graphics::API::SetProjection( privData->proj); diff --git a/Code/Game/DanBiasGame/GameClientState/LanMenuState.h b/Code/Game/DanBiasGame/GameClientState/LanMenuState.h index 6b11fd20..92274a06 100644 --- a/Code/Game/DanBiasGame/GameClientState/LanMenuState.h +++ b/Code/Game/DanBiasGame/GameClientState/LanMenuState.h @@ -22,7 +22,7 @@ namespace DanBias bool LoadModels(std::wstring file); bool InitCamera(Oyster::Math::Float3 startPos); - virtual bool Render(); + virtual bool Render(float dt); virtual bool Release(); virtual void Protocol(ProtocolStruct* protocolStruct); diff --git a/Code/Game/DanBiasGame/GameClientState/LobbyState.cpp b/Code/Game/DanBiasGame/GameClientState/LobbyState.cpp index 3d5eae26..d54f2363 100644 --- a/Code/Game/DanBiasGame/GameClientState/LobbyState.cpp +++ b/Code/Game/DanBiasGame/GameClientState/LobbyState.cpp @@ -103,7 +103,7 @@ GameClientState::ClientState LobbyState::Update(float deltaTime, InputClass* Key return ClientState_Same; } -bool LobbyState::Render() +bool LobbyState::Render(float dt) { Oyster::Graphics::API::SetView(privData->view); @@ -126,6 +126,7 @@ bool LobbyState::Render() } bool LobbyState::Release() { + Oyster::Graphics::API::ClearLights(); for (int i = 0; i < privData->modelCount; i++) { privData->object[i]->Release(); diff --git a/Code/Game/DanBiasGame/GameClientState/LobbyState.h b/Code/Game/DanBiasGame/GameClientState/LobbyState.h index 6a8d9772..0ba668c9 100644 --- a/Code/Game/DanBiasGame/GameClientState/LobbyState.h +++ b/Code/Game/DanBiasGame/GameClientState/LobbyState.h @@ -32,7 +32,7 @@ public: // chat // kick - bool Render(); + bool Render(float dt); bool Release(); void Protocol(ProtocolStruct* protocol)override; void PlayerJoinProtocol(PlayerName* name); diff --git a/Code/Game/DanBiasGame/GameClientState/LoginState.cpp b/Code/Game/DanBiasGame/GameClientState/LoginState.cpp index 05c766b9..a2f5a197 100644 --- a/Code/Game/DanBiasGame/GameClientState/LoginState.cpp +++ b/Code/Game/DanBiasGame/GameClientState/LoginState.cpp @@ -84,7 +84,7 @@ bool LoginState::LoadModels(std::wstring file) { Oyster::Graphics::Definitions::Pointlight plight; plight.Pos = Oyster::Math::Float3(0,0,5); - plight.Color = Oyster::Math::Float3(1,1,1); + plight.Color = Oyster::Math::Float3(1,0,1); plight.Radius = 100; plight.Bright = 1; Oyster::Graphics::API::AddLight(plight); @@ -163,7 +163,7 @@ GameClientState::ClientState LoginState::Update(float deltaTime, InputClass* Key } return ClientState_Same; } -bool LoginState::Render() +bool LoginState::Render(float dt) { Oyster::Graphics::API::SetView(privData->view); @@ -188,6 +188,7 @@ bool LoginState::Render() } bool LoginState::Release() { + Oyster::Graphics::API::ClearLights(); for (int i = 0; i < privData->modelCount; i++) { privData->object[i]->Release(); diff --git a/Code/Game/DanBiasGame/GameClientState/LoginState.h b/Code/Game/DanBiasGame/GameClientState/LoginState.h index 280012a9..a2079835 100644 --- a/Code/Game/DanBiasGame/GameClientState/LoginState.h +++ b/Code/Game/DanBiasGame/GameClientState/LoginState.h @@ -28,7 +28,7 @@ namespace DanBias static void ButtonCallback(Oyster::Event::ButtonEvent& e); - bool Render(); + bool Render(float dt); bool Release(); void Protocol(ProtocolStruct* protocol)override; void PlayerJoinProtocol(PlayerName* name); diff --git a/Code/OysterGraphics/Core/Buffer.cpp b/Code/OysterGraphics/Core/Buffer.cpp index d6994554..6cef2b17 100644 --- a/Code/OysterGraphics/Core/Buffer.cpp +++ b/Code/OysterGraphics/Core/Buffer.cpp @@ -155,6 +155,10 @@ HRESULT Core::Buffer::Init(const BUFFER_INIT_DESC& initDesc) { //MessageBox(NULL, L"Unable to create buffer.", L"Slenda Error", MB_ICONERROR | MB_OK); } + else + { + Core::UsedMem += bufferDesc.ByteWidth; + } return hr; } diff --git a/Code/OysterGraphics/Core/Core.cpp b/Code/OysterGraphics/Core/Core.cpp index f2392f4c..8cb4c5e0 100644 --- a/Code/OysterGraphics/Core/Core.cpp +++ b/Code/OysterGraphics/Core/Core.cpp @@ -33,4 +33,6 @@ Oyster::Math::Float2 Core::resolution = Oyster::Math::Float2::null; ID3D11ShaderResourceView* Core::srvNULL[16] = {0}; ID3D11RenderTargetView* Core::rtvNULL[8] = {0}; -ID3D11UnorderedAccessView* Core::uavNULL[8] = {0}; \ No newline at end of file +ID3D11UnorderedAccessView* Core::uavNULL[8] = {0}; + +int Core::UsedMem = 0; diff --git a/Code/OysterGraphics/Core/Core.h b/Code/OysterGraphics/Core/Core.h index 050d54c5..644d9f0d 100644 --- a/Code/OysterGraphics/Core/Core.h +++ b/Code/OysterGraphics/Core/Core.h @@ -7,7 +7,8 @@ #include "Dx11Includes.h" #include #include "OysterMath.h" -#include "../Misc/Resource/ResourceManager.h" +//#include "../Misc/Resource/ResourceManager.h" +#include "../../Misc/Resource/ResourceManager.h" //#include namespace Oyster @@ -46,6 +47,8 @@ namespace Oyster static ID3D11RenderTargetView* rtvNULL[8]; static ID3D11UnorderedAccessView* uavNULL[8]; + static int UsedMem; + class Buffer { public: diff --git a/Code/OysterGraphics/Core/Init.cpp b/Code/OysterGraphics/Core/Init.cpp index 05a91a59..47731dbf 100644 --- a/Code/OysterGraphics/Core/Init.cpp +++ b/Code/OysterGraphics/Core/Init.cpp @@ -33,7 +33,7 @@ namespace Oyster createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; #endif - createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; + //createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; D3D_FEATURE_LEVEL featureLevelsToTry[] = { @@ -110,6 +110,7 @@ namespace Oyster if(Core::swapChain) { Core::swapChain->Release(); + Core::UsedMem -= desc.BufferDesc.Height * desc.BufferDesc.Width * 16; delete Core::swapChain; } @@ -167,7 +168,7 @@ namespace Oyster } dxgiFactory->Release(); - + Core::UsedMem += desc.BufferDesc.Height * desc.BufferDesc.Width * 16; return Init::Success; } @@ -187,6 +188,7 @@ namespace Oyster if(Core::depthStencil) { Core::depthStencil->Release(); + Core::UsedMem -= desc.Height * desc.Width * 4; delete Core::depthStencil; } @@ -214,6 +216,7 @@ namespace Oyster { return Init::Fail; } + Core::UsedMem += desc.Height * desc.Width * 4; D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc; dsvDesc.Format = DXGI_FORMAT_D32_FLOAT; dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; @@ -382,6 +385,9 @@ namespace Oyster if(FAILED(Core::device->CreateTexture2D(&texDesc,NULL,&tex))) return State::Fail; + + Core::UsedMem += texDesc.Height*texDesc.Width*16; + if(rtv) { D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; diff --git a/Code/OysterGraphics/Definitions/GraphicalDefinition.h b/Code/OysterGraphics/Definitions/GraphicalDefinition.h index d84f7506..0b30ee76 100644 --- a/Code/OysterGraphics/Definitions/GraphicalDefinition.h +++ b/Code/OysterGraphics/Definitions/GraphicalDefinition.h @@ -18,6 +18,8 @@ namespace Oyster { Math::Matrix WV; Math::Matrix WVP; + int Animated; + Math::Float3 Pad; }; struct FinalVertex @@ -51,11 +53,26 @@ namespace Oyster struct AnimationData { - Math::Float4x4 animatedData[100]; - int Animated; - Math::Float3 Pad; + Math::Float4x4 AnimatedData[100]; }; + struct GuiData + { + Math::Matrix Translation; + }; + + struct PostData + { + int x; + int y; + }; + + struct Text2D + { + float pos; + int offset; + float coff; + }; } } } \ No newline at end of file diff --git a/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp b/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp index 2d9c3dc6..a175aa58 100644 --- a/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp +++ b/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp @@ -1,13 +1,12 @@ #include "GFXAPI.h" #include "../Core/Core.h" -#include "../Render/Resources/Debug.h" -#include "../Render/Resources/Deffered.h" -#include "../Render/Rendering/Render.h" +#include "../Render/Resources.h" +#include "../Render/DefaultRenderer.h" #include "../FileLoader/ObjReader.h" -//#include "../../Misc/Resource/OysterResource.h" #include "../../Misc/Resource/ResourceManager.h" #include "../FileLoader/GeneralLoader.h" #include "../Model/ModelInfo.h" +#include "../Render/GuiRenderer.h" #include namespace Oyster @@ -19,6 +18,7 @@ namespace Oyster Math::Float4x4 View; Math::Float4x4 Projection; std::vector Lights; + float deltaTime; } API::State API::Init(HWND Window, bool MSAA_Quality, bool Fullscreen, Math::Float2 resulotion) @@ -29,18 +29,19 @@ namespace Oyster { return API::Fail; } - Render::Resources::Deffered::Init(); + Render::Resources::Gui::Text::Font = (ID3D11ShaderResourceView*)API::CreateTexture(L"font_generic.png"); + Render::Resources::Init(); Render::Preparations::Basic::SetViewPort(); return API::Sucsess; } - void API::SetProjection(Math::Float4x4& projection) + void API::SetProjection(const Math::Float4x4& projection) { Projection = projection; } - void API::SetView(Math::Float4x4& view) + void API::SetView(const Math::Float4x4& view) { View = view; } @@ -49,27 +50,27 @@ namespace Oyster { if(Lights.size()) { - Render::Rendering::Basic::NewFrame(View, Projection, &Lights[0], (int)Lights.size()); + Render::DefaultRenderer::NewFrame(View, Projection, Lights[0], (int)Lights.size()); } else { - Render::Rendering::Basic::NewFrame(View, Projection, NULL, 0); + Render::DefaultRenderer::NewFrame(View, Projection, Definitions::Pointlight(), 0); } } void API::RenderScene(Model::Model models[], int count) { - Render::Rendering::Basic::RenderScene(models,count, View, Projection); + Render::DefaultRenderer::RenderScene(models,count, View, Projection, deltaTime); } - void API::RenderModel(Model::Model& m) + void API::RenderModel(Model::Model* m) { - Render::Rendering::Basic::RenderScene(&m,1, View, Projection); + Render::DefaultRenderer::RenderScene(m,1, View, Projection, deltaTime); } void API::EndFrame() { - Render::Rendering::Basic::EndFrame(); + Render::DefaultRenderer::EndFrame(); } API::State API::SetOptions(API::Option option) @@ -85,7 +86,7 @@ namespace Oyster Model::Model* m = new Model::Model(); m->WorldMatrix = Oyster::Math::Float4x4::identity; m->Visible = true; - m->AnimationPlaying = -1; + m->Animation.AnimationPlaying = NULL; m->info = (Model::ModelInfo*)Core::loader.LoadResource((Core::modelPath + filename).c_str(),Oyster::Graphics::Loading::LoadDAN, Oyster::Graphics::Loading::UnloadDAN); Model::ModelInfo* mi = (Model::ModelInfo*)m->info; @@ -109,10 +110,11 @@ namespace Oyster void API::Clean() { + DeleteTexture(Render::Resources::Gui::Text::Font); SAFE_DELETE(Core::viewPort); Core::loader.Clean(); Oyster::Graphics::Core::PipelineManager::Clean(); - Oyster::Graphics::Render::Resources::Deffered::Clean(); + Oyster::Graphics::Render::Resources::Clean(); SAFE_RELEASE(Core::depthStencil); SAFE_RELEASE(Core::depthStencilUAV); @@ -137,9 +139,61 @@ namespace Oyster #ifdef _DEBUG API::State API::ReloadShaders() { - Render::Resources::Deffered::InitShaders(); + Render::Resources::InitShaders(); return State::Sucsess; } #endif + + API::Option API::GetOption() + { + Option o; + o.BytesUsed = Core::UsedMem; + o.modelPath = Core::modelPath; + o.texturePath = Core::texturePath; + return o; + } + + void API::StartGuiRender() + { + Render::Gui::Begin2DRender(); + } + + void API::RenderGuiElement(API::Texture tex, Math::Float2 pos, Math::Float2 size) + { + Render::Gui::Render((ID3D11ShaderResourceView*)tex,pos,size); + } + + API::Texture API::CreateTexture(std::wstring filename) + { + return Core::loader.LoadResource((Core::texturePath + filename).c_str(),Oyster::Graphics::Loading::LoadTexture, Oyster::Graphics::Loading::UnloadTexture); + } + + void API::DeleteTexture(API::Texture tex) + { + Core::loader.ReleaseResource(tex); + } + + float API::PlayAnimation(Model::Model* m, std::wstring name,bool looping) + { + m->Animation.AnimationPlaying = &(*m->info->Animations.find(name)).second; + m->Animation.AnimationTime=0; + m->Animation.LoopAnimation = looping; + return m->Animation.AnimationPlaying->duration; + } + + void API::Update(float dt) + { + deltaTime = dt; + } + + void API::StartTextRender() + { + Render::Gui::Begin2DTextRender(); + } + + void API::RenderText(std::wstring text, Math::Float2 Pos, Math::Float2 Size) + { + Render::Gui::RenderText(text,Pos,Size); + } } } \ No newline at end of file diff --git a/Code/OysterGraphics/DllInterfaces/GFXAPI.h b/Code/OysterGraphics/DllInterfaces/GFXAPI.h index 81a3bedc..6511fc4d 100644 --- a/Code/OysterGraphics/DllInterfaces/GFXAPI.h +++ b/Code/OysterGraphics/DllInterfaces/GFXAPI.h @@ -27,7 +27,9 @@ namespace Oyster struct Option { std::wstring modelPath, texturePath; + int BytesUsed; }; + typedef void* Texture; static State Init(HWND Window, bool MSAA_Quality, bool Fullscreen, Oyster::Math::Float2 StartResulotion); #ifdef _DEBUG @@ -40,16 +42,29 @@ namespace Oyster static void Clean(); //! @brief Sets the view matrix to use next frame - static void SetView(Oyster::Math::Float4x4& View); + static void SetView(const Oyster::Math::Float4x4& View); //! @brief Sets the projection matrix to use next frame - static void SetProjection(Oyster::Math::Float4x4& Projection); + static void SetProjection(const Oyster::Math::Float4x4& Projection); //! @brief will internally use last values from SetView and SetProjection static void NewFrame(); //! @brief Renders a list of models static void RenderScene(Oyster::Graphics::Model::Model models[], int count); //! @brief Renders a single model - static void RenderModel(Oyster::Graphics::Model::Model& model); + static void RenderModel(Oyster::Graphics::Model::Model* model); + + //! @brief Configures Renderer to process 2D graphics, data will be passed in to EndFrame() + static void StartGuiRender(); + + //! @brief Renders a single GUI element using the texture provided and the Pos in the center, %based system + static void RenderGuiElement(Texture, Math::Float2 Pos, Math::Float2 Size); + + //! @brief Configures Renderer to process 2D Text, data will be passed in to EndFrame() + static void StartTextRender(); + + //! @brief Renders a single GUI string using the texture provided and the Pos in the center, %based system + static void RenderText(std::wstring, Math::Float2 Pos, Math::Float2 Size); + //! @brief Performs light calculations, post effects and presents the scene static void EndFrame(); @@ -58,13 +73,25 @@ namespace Oyster //! @brief deletes a model and relases the models resources static void DeleteModel(Oyster::Graphics::Model::Model* model); + static Texture CreateTexture(std::wstring filename); + static void DeleteTexture(Texture); + //! @brief adds a light to the scene - static void AddLight(Definitions::Pointlight light); + static void AddLight(const Definitions::Pointlight light); //! @brief removes all lights from the scene static void ClearLights(); - //! @brief Sets Options to the graphics, note: currently unused + //! @brief Sets Options to the graphics static State SetOptions(Option); + + //! @brief Gets Options from the graphics + static Option GetOption(); + + //! @brief Starts an animation and returns the time of the animation + static float PlayAnimation(Model::Model* model, std::wstring name, bool looping = false); + + //! @brief Moves all animating models forward the specified time; + static void Update(float deltaTime); }; } } diff --git a/Code/OysterGraphics/FileLoader/DanLoader.cpp b/Code/OysterGraphics/FileLoader/DanLoader.cpp index 0eff143a..99302266 100644 --- a/Code/OysterGraphics/FileLoader/DanLoader.cpp +++ b/Code/OysterGraphics/FileLoader/DanLoader.cpp @@ -135,22 +135,23 @@ void Oyster::Graphics::Loading::UnloadDAN(void* data) if(info->Animated) { //clean animation - delete[] info->bones; - for(int a = 0; a < info->AnimationCount; ++a) + for(auto a = info->Animations.begin(); a != info->Animations.end(); ++a) { - for(int x = 0; x < info->Animations[a].Bones; ++x) + for(int x = 0; x < (*a).second.Bones; ++x) { - delete[] info->Animations[a].Keyframes[x]; + delete[] (*a).second.Keyframes[x]; } - delete[] info->Animations[a].Frames; - delete[] info->Animations[a].Keyframes; + delete[] (*a).second.Frames; + delete[] (*a).second.Keyframes; } - delete[] info->Animations; + info->Animations.clear(); } - for(int i =0;iMaterial.size();++i) + for(UINT i =0;iMaterial.size();++i) { Core::loader.ReleaseResource(info->Material[i]); } + if(info->BoneCount>0) + delete[] info->bones; delete info; } @@ -179,6 +180,7 @@ void* Oyster::Graphics::Loading::LoadDAN(const wchar_t filename[]) Oyster::Graphics::Model::ModelInfo* modelInfo = new Oyster::Graphics::Model::ModelInfo(); modelInfo->Indexed = false; modelInfo->Animated = false; + modelInfo->BoneCount = 0; // Open file in binary mode std::ifstream danFile; danFile.open(filename, std::ios::binary); @@ -349,7 +351,7 @@ void* Oyster::Graphics::Loading::LoadDAN(const wchar_t filename[]) Oyster::Graphics::Model::Animation* anims = new Oyster::Graphics::Model::Animation[animationHeader.numAnims]; - for(int a = 0; a < animationHeader.numAnims; ++a) + for(UINT a = 0; a < animationHeader.numAnims; ++a) { //read name of animation int nameLength; @@ -362,9 +364,6 @@ void* Oyster::Graphics::Loading::LoadDAN(const wchar_t filename[]) name[nameLength] = 0; wchar_t* wName = charToWChar(name); - anims[a].name = std::wstring(wName); - delete[] wName; - delete name; //read nr of bones in animation ReadData(&anims[a].Bones,danFile,4); @@ -397,17 +396,18 @@ void* Oyster::Graphics::Loading::LoadDAN(const wchar_t filename[]) anims[a].Keyframes[b][f].bone.Parent = boneIndex; //read bone transform - ReadData(&anims[a].Keyframes[b][f].bone.Transform,danFile,sizeof(Oyster::Math::Matrix)); - + ReadData(&anims[a].Keyframes[b][f].bone.Relative, danFile, sizeof(Math::Matrix)); ReadData(&anims[a].Keyframes[b][f].time,danFile,sizeof(double)); } } - } - modelInfo->AnimationCount = animationHeader.numAnims; - modelInfo->Animations = anims; - modelInfo->Animated = true; + modelInfo->Animations.insert(std::pair(std::wstring(wName), anims[a])); + delete[] wName; + delete name; + } + modelInfo->Animated = true; + delete[] anims; break; } } diff --git a/Code/OysterGraphics/FileLoader/ModelLoader.cpp b/Code/OysterGraphics/FileLoader/ModelLoader.cpp index b7b8b09a..96fa0362 100644 --- a/Code/OysterGraphics/FileLoader/ModelLoader.cpp +++ b/Code/OysterGraphics/FileLoader/ModelLoader.cpp @@ -70,7 +70,7 @@ void Oyster::Graphics::Loading::UnloadOBJ(void* data) { SAFE_DELETE(info->Indecies); } - for(int i =0;iMaterial.size();++i) + for(UINT i =0;iMaterial.size();++i) { Core::loader.ReleaseResource(info->Material[i]); } @@ -690,6 +690,7 @@ static HRESULT CreateTextureFromWIC( _In_ ID3D11Device* d3dDevice, SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; SRVDesc.Texture2D.MipLevels = (autogen) ? -1 : 1; + //TODO calc mipmap data hr = d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); if ( FAILED(hr) ) @@ -697,6 +698,9 @@ static HRESULT CreateTextureFromWIC( _In_ ID3D11Device* d3dDevice, tex->Release(); return hr; } + //todo check calc + int TexSize = twidth * theight * bpp; + Oyster::Graphics::Core::UsedMem += TexSize; if ( autogen ) { diff --git a/Code/OysterGraphics/FileLoader/ShaderLoader.cpp b/Code/OysterGraphics/FileLoader/ShaderLoader.cpp index 5edc86dd..033be403 100644 --- a/Code/OysterGraphics/FileLoader/ShaderLoader.cpp +++ b/Code/OysterGraphics/FileLoader/ShaderLoader.cpp @@ -146,6 +146,7 @@ namespace Oyster return NULL; } #endif + Core::UsedMem += data.size; return Core::PipelineManager::CreateShader(data, Core::PipelineManager::ShaderType(type)); } } diff --git a/Code/OysterGraphics/Model/Model.h b/Code/OysterGraphics/Model/Model.h index f4639c74..590d7d6a 100644 --- a/Code/OysterGraphics/Model/Model.h +++ b/Code/OysterGraphics/Model/Model.h @@ -10,13 +10,21 @@ namespace Oyster namespace Model { struct ModelInfo; + + struct Animation; + + struct AnimationData + { + Animation* AnimationPlaying; + float AnimationTime; + bool LoopAnimation; + }; struct Model { ModelInfo* info; Oyster::Math::Float4x4 WorldMatrix; - bool Visible, LoopAnimation; - int AnimationPlaying; - float AnimationTime; + bool Visible; + AnimationData Animation; }; } diff --git a/Code/OysterGraphics/Model/ModelInfo.h b/Code/OysterGraphics/Model/ModelInfo.h index 3a184f65..a53bcb23 100644 --- a/Code/OysterGraphics/Model/ModelInfo.h +++ b/Code/OysterGraphics/Model/ModelInfo.h @@ -13,7 +13,8 @@ namespace Oyster { struct Bone { - Math::Float4x4 Transform; + Math::Matrix Relative; + Math::Matrix Absolute; int Parent; }; struct Frame @@ -23,7 +24,6 @@ namespace Oyster }; struct Animation { - std::wstring name; int Bones; int* Frames; //! Bone as index Frame** Keyframes; //! @brief [Bone][Frame] @@ -36,7 +36,7 @@ namespace Oyster bool Indexed, Animated; int VertexCount, IndexCount, BoneCount, AnimationCount; Bone* bones; - Animation* Animations; + std::map Animations; }; } } diff --git a/Code/OysterGraphics/OldRender/TextBox.h b/Code/OysterGraphics/OldRender/TextBox.h index 6b95dce7..40046210 100644 --- a/Code/OysterGraphics/OldRender/TextBox.h +++ b/Code/OysterGraphics/OldRender/TextBox.h @@ -10,31 +10,6 @@ struct Text2D int offset; float coff; }; -/*struct TextInstanceData -{ - Oyster::Buffer InstanceBuffer; - bool Visible; - int NumLetters; - Oyster::Math::Float4x4 World; -};*/ -/*struct TextData -{ - Oyster::Math::Float3 pos; - Oyster::Math::Float2 uv; -}; - -struct PerCharData -{ - float data; - Oyster::Math::Float3 charOffset; -}; -struct TextInstanceData -{ - Oyster::Buffer InstanceBuffer; - bool Visible; - int NumLetters; - Oyster::Math::Float4x4 World; -};*/ namespace Oyster { @@ -49,9 +24,6 @@ namespace Oyster static HRESULT CreateVertexBuffer(); static HRESULT CreateTextfield(int _id); public: - //static Oyster::Buffer TextBuffer; - //static int NumVertices; - //static std::vector TextInstances; static Buffer TextBuffer; static int NumLetters; static ID3D11ShaderResourceView* Texture; @@ -59,8 +31,10 @@ namespace Oyster static bool Init(); static bool UpdateTextField(std::string _str); static bool SetTexture(const char* _file); + //Updates a textbox with the certain id static void Update(std::string _str, float _scale); + //Removes all old instances and recreates it with the input data static HRESULT Reset(int _count, std::string* _str, Float3* _pos); static void Apply(int _id); diff --git a/Code/OysterGraphics/OldResourses/Buffers.cpp b/Code/OysterGraphics/OldResourses/Buffers.cpp deleted file mode 100644 index e36b3790..00000000 --- a/Code/OysterGraphics/OldResourses/Buffers.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include "Buffers.h" - -namespace Oyster -{ - namespace Resources - { - Buffer Buffers::V2DSprites = Buffer(); - Buffer Buffers::CbufferVS = Buffer(); - Buffer Buffers::CBufferGs = Buffer(); - Buffer Buffers::CBufferPipelineCs = Buffer(); - - void Buffers::Init() - { - Buffer::BUFFER_INIT_DESC desc; - - desc.ElementSize=sizeof(Math::Float2); - desc.NumElements=1; - desc.Type = Buffer::BUFFER_TYPE::VERTEX_BUFFER; - desc.Usage = Buffer::BUFFER_USAGE::BUFFER_DEFAULT; - desc.InitData = &Math::Float2(0,0); - - V2DSprites.Init(desc); - - desc.Type=Buffer::BUFFER_TYPE::CONSTANT_BUFFER_VS; - desc.Usage = Buffer::BUFFER_USAGE::BUFFER_CPU_WRITE_DISCARD; - desc.ElementSize=sizeof(Math::Float4x4); - desc.InitData=0; - - CbufferVS.Init(desc); - - desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_GS; - - CBufferGs.Init(desc); - - desc.ElementSize=sizeof(Oyster::Resources::BufferDefinitions::LightStructureBuffer); - desc.NumElements=1; - desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_CS; - desc.Usage = Buffer::BUFFER_USAGE::BUFFER_CPU_WRITE_DISCARD; - desc.InitData = NULL; - - CBufferPipelineCs.Init(desc); - } - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/OldResourses/Buffers.h b/Code/OysterGraphics/OldResourses/Buffers.h deleted file mode 100644 index ec445b6c..00000000 --- a/Code/OysterGraphics/OldResourses/Buffers.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include "../EngineIncludes.h" - -namespace Oyster -{ - namespace Resources - { - struct Buffers - { - static Buffer V2DSprites; - - static Buffer CbufferVS; - - static Buffer CBufferGs; - - static Buffer CBufferPipelineCs; - - static void Init(); - }; - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/OldResourses/GraphicsDefinitions.h b/Code/OysterGraphics/OldResourses/GraphicsDefinitions.h deleted file mode 100644 index 12a85d5f..00000000 --- a/Code/OysterGraphics/OldResourses/GraphicsDefinitions.h +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - - -#include "..\EngineIncludes.h" - -namespace Oyster -{ - namespace Resources - { - - namespace BufferDefinitions - { - struct LightStructureBuffer - { - ::Oyster::Math::Float4x4 viewMatrix, projectionMatrix; - ::LinearAlgebra::Vector3 numDispatches; - unsigned int reservedPadding; - }; - - struct ScreenTileFrustrum - { - ::Oyster::Math::Float rawElement[6 * 4]; - }; - - class PointLightDescription - { - public: - struct{ ::Oyster::Math::Float3 center; ::Oyster::Math::Float radius; } pos; - ::Oyster::Math::Float3 color; - ::Oyster::Math::Float intensty; - }; - }; - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/OldResourses/Manager.cpp b/Code/OysterGraphics/OldResourses/Manager.cpp deleted file mode 100644 index 47aa5eaf..00000000 --- a/Code/OysterGraphics/OldResourses/Manager.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "Manager.h" - -std::unordered_map< std::string, Oyster::Render::ModelInfo*> Oyster::Resources::Manager::loadedModels = std::unordered_map< std::string, Oyster::Render::ModelInfo*>(); - -Oyster::Render::Model* Oyster::Resources::Manager::LoadModel(std::string Filename, Matrix Scale) -{ - ////TODO: Add redundncy sheck, to ensure not recreating model - - ////Loop to find filename - - ////If found Return Model - - ////else Create Model - - //Oyster::FileLoaders::ObjReader *reader = Oyster::FileLoaders::ObjReader::LoadFile(Filename, Scale); - //Oyster::FileLoaders::ObjReader::Vertex** vertex = new Oyster::FileLoaders::ObjReader::Vertex*[1]; - //int vcount; - //std::map textures; - //reader->GetVertexData( vertex, vcount, textures ); - - //Oyster::Buffer::BUFFER_INIT_DESC desc; - //desc.ElementSize=sizeof(Oyster::FileLoaders::ObjReader::Vertex); - //desc.NumElements = vcount; - //desc.InitData = *vertex; - //desc.Type = Oyster::Buffer::VERTEX_BUFFER; - //desc.Usage = Oyster::Buffer::BUFFER_DEFAULT; - // - //ID3D11ShaderResourceView *srv = textures["Diffuse"]; - - //Oyster::Render::ModelInfo* m = new Oyster::Render::ModelInfo(); - // - //m->Vertices = *(Oyster::Engine::Init::Buffers::CreateBuffer(desc)); - //m->VertexCount = vcount; - //m->Material.push_back(srv); - //srv = textures["Specular"]; - //m->Material.push_back(srv); - //srv = textures["Glow"]; - //m->Material.push_back(srv); - //m->Indexed=false; - // - //Oyster::Render::Model* model = new Oyster::Render::Model(); - //model->info=m; - //model->Visible = true; - //model->World = &Oyster::Math::Float4x4(Oyster::Math::Float4x4::identity); - return NULL; -} - diff --git a/Code/OysterGraphics/OldResourses/Manager.h b/Code/OysterGraphics/OldResourses/Manager.h deleted file mode 100644 index 6de367e3..00000000 --- a/Code/OysterGraphics/OldResourses/Manager.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include "../EngineIncludes.h" -#include - -namespace Oyster -{ - namespace Resources - { - struct Manager - { - //Expects to be deleted either trough manager or after a clean - static Oyster::Render::Model* LoadModel(std::string Filename, Matrix Scale); - static void Clean(); - - private: - static std::unordered_map< std::string, Oyster::Render::ModelInfo*> loadedModels; - }; - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/OldResourses/PipelineResources.cpp b/Code/OysterGraphics/OldResourses/PipelineResources.cpp deleted file mode 100644 index 27947c41..00000000 --- a/Code/OysterGraphics/OldResourses/PipelineResources.cpp +++ /dev/null @@ -1,228 +0,0 @@ -#include "PipelineResources.h" - -using namespace Oyster::Resources; - -ID3D11UnorderedAccessView* PipeLineResourses::TempUav = 0; -ID3D11ShaderResourceView* PipeLineResourses::TempSrv = 0; - -ID3D11ShaderResourceView* PipeLineResourses::GeometryOut[5] = {0}; -ID3D11RenderTargetView* PipeLineResourses::GeometryTarget[5] = {0}; - -ID3D11ShaderResourceView* PipeLineResourses::ComputeResources[4] = {0}; -Oyster::Buffer* PipeLineResourses::Resources[2] = {0}; - -ID3D11ShaderResourceView* PipeLineResourses::LightOut[4] = {0}; -ID3D11UnorderedAccessView* PipeLineResourses::LightTarget[4] = {0}; - -ID3D11RenderTargetView* PipeLineResourses::RtvNulls[16] = {0}; -ID3D11ShaderResourceView* PipeLineResourses::SrvNulls[16] = {0}; -ID3D11UnorderedAccessView* PipeLineResourses::uavNULL[16] = {0}; - -//Oyster::Collision3D::Frustrum* PipeLineResourses::SubFrustrums = 0; -int PipeLineResourses::FrustrumSize = 0; -LinearAlgebra::Vector3 PipeLineResourses::FrustrumDimensions = LinearAlgebra::Vector3(); - -Oyster::Resources::BufferDefinitions::LightStructureBuffer PipeLineResourses::LightData = Oyster::Resources::BufferDefinitions::LightStructureBuffer(); - -void PipeLineResourses::Init(int sizeX, int sizeY) -{ - InitGeometry(sizeX, sizeY); - - InitSSAOData(); - InitSubFrustrums(sizeX, sizeY); - InitPointLights(); - InitLightData(); - - InitLighting(sizeX, sizeY); -} - -void PipeLineResourses::InitGeometry(int sizeX, int sizeY) -{ - D3D11_TEXTURE2D_DESC Tdesc; - Tdesc.Width = sizeX; - Tdesc.Height = sizeY; - Tdesc.MipLevels = Tdesc.ArraySize = 1; - Tdesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT; - Tdesc.SampleDesc.Count = 1; - Tdesc.SampleDesc.Quality=0; - Tdesc.Usage = D3D11_USAGE_DEFAULT; - Tdesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; - Tdesc.CPUAccessFlags = 0; - Tdesc.MiscFlags = 0; - - ID3D11Texture2D *pTexture; - HRESULT hr; - - //Geometry stage resourses - for( int i = 0; i < 5; ++i ) - { - hr = Oyster::Core::Device->CreateTexture2D( &Tdesc, NULL, &pTexture ); - hr = Oyster::Core::Device->CreateShaderResourceView(pTexture,0,&GeometryOut[i]); - hr = Oyster::Core::Device->CreateRenderTargetView(pTexture,0,&GeometryTarget[i]); - pTexture->Release(); - } -} - -void PipeLineResourses::InitSSAOData() -{ - //create Half Spheres and Random Data - - Oyster::Buffer::BUFFER_INIT_DESC desc; - HRESULT hr; - - int NrOfSamples = Oyster::Engine::States::GetNrOfSSAOSamples(); - int SampleSpread = Oyster::Engine::States::GetSSAOSampleSpread(); - - Oyster::Math::Vector3* kernel = new Oyster::Math::Vector3[ NrOfSamples ]; - Oyster::Math::Vector3* random = new Oyster::Math::Vector3[ SampleSpread ]; - - for(int i = 0; i < NrOfSamples; ++i) - { - kernel[i] = Oyster::Math::Vector3::null; - while( kernel[i] == Oyster::Math::Vector3::null ) - { - kernel[i] = Oyster::Math::Vector3( - (float)rand() / (RAND_MAX + 1) * (1 - -1) + -1, - (float)rand() / (RAND_MAX + 1) * (1 - -1) + -1, - (float)rand() / (RAND_MAX + 1) * (1 - 0) + 0); - } - kernel[i].Normalize(); - - float scale = float(i) / float(NrOfSamples); - scale = (0.1f*(1 - scale * scale) + 1.0f *( scale * scale)); - kernel[i] *= scale; - - if( i < SampleSpread) - { - random[i] = Oyster::Math::Vector3::null; - while( random[i] == Oyster::Math::Vector3::null ) - { - random[i] = Oyster::Math::Vector3( - (float)rand() / (RAND_MAX + 1) * (1 - -1)+ -1, - (float)rand() / (RAND_MAX + 1) * (1 - -1)+ -1, - 0.0f); - } - random[i].Normalize(); - } - } - - - D3D11_TEXTURE1D_DESC T1desc; - T1desc.Width = NrOfSamples; - T1desc.MipLevels = T1desc.ArraySize = 1; - T1desc.Format = DXGI_FORMAT_R32G32B32_FLOAT; - T1desc.Usage = D3D11_USAGE_DEFAULT; - T1desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; - T1desc.CPUAccessFlags = 0; - T1desc.MiscFlags = 0; - - D3D11_SUBRESOURCE_DATA sphere; - sphere.pSysMem = kernel; - - D3D11_SUBRESOURCE_DATA rnd; - rnd.pSysMem = random; - - - ID3D11Texture1D *pTexture1[2]; - - hr = Oyster::Core::Device->CreateTexture1D( &T1desc, &sphere, &pTexture1[0] ); - hr = Oyster::Core::Device->CreateShaderResourceView( pTexture1[0], 0, &ComputeResources[3] ); - pTexture1[0]->Release(); - delete[] kernel; - - T1desc.Width = SampleSpread; - hr = Oyster::Core::Device->CreateTexture1D( &T1desc, &rnd, &pTexture1[1] ); - hr = Oyster::Core::Device->CreateShaderResourceView( (pTexture1[1]), 0, &ComputeResources[2] ); - pTexture1[1]->Release(); - delete[] random; -} - -void PipeLineResourses::InitSubFrustrums(int sizeX, int sizeY) -{ - FrustrumDimensions.x = (sizeX + 15U) / 16U; - FrustrumDimensions.y = (sizeY + 15U) / 16U; - FrustrumDimensions.z = 1; - FrustrumSize = FrustrumDimensions.x * FrustrumDimensions.y * FrustrumDimensions.z; - //if(SubFrustrums!=0) - //delete[] SubFrustrums; - //SubFrustrums = new Collision3D::Frustrum[ FrustrumSize ]; - - Oyster::Buffer::BUFFER_INIT_DESC desc; - D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; - - //buffer description for SubFrustrums - desc.Usage = Oyster::Buffer::BUFFER_CPU_WRITE_DISCARD; - desc.Type = Oyster::Buffer::STRUCTURED_BUFFER; - desc.ElementSize = sizeof( ::Oyster::Resources::BufferDefinitions::ScreenTileFrustrum); - desc.NumElements = FrustrumSize; - desc.InitData = NULL; - - //create matching srv - srvDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER; - srvDesc.Format = DXGI_FORMAT_UNKNOWN; - srvDesc.Buffer.FirstElement = 0; - srvDesc.Buffer.NumElements = FrustrumSize; - - PipeLineResourses::Resources[0] = Oyster::Engine::Init::Buffers::CreateBuffer(desc); - - HRESULT hr = Oyster::Core::Device->CreateShaderResourceView( *PipeLineResourses::Resources[0], &srvDesc, &Oyster::Resources::PipeLineResourses::ComputeResources[0] ); -} - -void PipeLineResourses::InitPointLights() -{ - D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; - Oyster::Buffer::BUFFER_INIT_DESC desc; - HRESULT hr; - - //buffer description for pointlight - desc.Usage = Oyster::Buffer::BUFFER_CPU_WRITE_DISCARD; - desc.Type = Oyster::Buffer::STRUCTURED_BUFFER; - desc.ElementSize = sizeof(Oyster::Resources::BufferDefinitions::PointLightDescription); - desc.NumElements = Oyster::Engine::States::GetMaxPointlights(); - desc.InitData = NULL; - - PipeLineResourses::Resources[1] = Oyster::Engine::Init::Buffers::CreateBuffer(desc); - - //create matching srv - srvDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER; - srvDesc.Format = DXGI_FORMAT_UNKNOWN; - srvDesc.Buffer.FirstElement = 0; - srvDesc.Buffer.NumElements = Oyster::Engine::States::GetMaxPointlights(); - - hr = Oyster::Core::Device->CreateShaderResourceView( *PipeLineResourses::Resources[1], &srvDesc, &Oyster::Resources::PipeLineResourses::ComputeResources[1] ); -} - -void PipeLineResourses::InitLightData() -{ - LightData.numDispatches = FrustrumDimensions; -} - -void PipeLineResourses::InitLighting(int sizeX, int sizeY) -{ - D3D11_TEXTURE2D_DESC Tdesc; - Tdesc.Width = sizeX; - Tdesc.Height = sizeY; - Tdesc.MipLevels = Tdesc.ArraySize = 1; - Tdesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT; - Tdesc.SampleDesc.Count = 1; - Tdesc.SampleDesc.Quality=0; - Tdesc.Usage = D3D11_USAGE_DEFAULT; - Tdesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_UNORDERED_ACCESS; - Tdesc.CPUAccessFlags = 0; - Tdesc.MiscFlags = 0; - - ID3D11Texture2D *pTexture; - HRESULT hr; - for(int i = 0; i < 4; ++i ) - { - hr = Oyster::Core::Device->CreateTexture2D( &Tdesc, NULL, &pTexture ); - hr = Oyster::Core::Device->CreateShaderResourceView( pTexture, 0, &(LightOut[i]) ); - hr = Oyster::Core::Device->CreateUnorderedAccessView( pTexture, 0, &(LightTarget[i]) ); - pTexture->Release(); - } - - hr = Oyster::Core::Device->CreateTexture2D( &Tdesc, NULL, &pTexture ); - hr = Oyster::Core::Device->CreateShaderResourceView( pTexture, 0, &TempSrv ); - hr = Oyster::Core::Device->CreateUnorderedAccessView( pTexture, 0, &TempUav ); - pTexture->Release(); -} \ No newline at end of file diff --git a/Code/OysterGraphics/OldResourses/PipelineResources.h b/Code/OysterGraphics/OldResourses/PipelineResources.h deleted file mode 100644 index 47f89c2d..00000000 --- a/Code/OysterGraphics/OldResourses/PipelineResources.h +++ /dev/null @@ -1,66 +0,0 @@ -#pragma once - -#ifndef PipeLineResources_H -#define PipeLineResources_H - -#include "..\EngineIncludes.h" - -namespace Oyster -{ - namespace Resources - { - struct PipeLineResourses - { - //0 = Diffuse - //1 = Specular - //2 = Glow - //3 = Pos - //4 = Normal - static ID3D11ShaderResourceView* GeometryOut[5]; - static ID3D11RenderTargetView* GeometryTarget[5]; - - - //0 = TileBuffer - //1 = PointList - //2 = Random - //3 = Sphere - static ID3D11ShaderResourceView* ComputeResources[4]; - static Oyster::Buffer* Resources[2]; - - - //0 = Diffuse - //1 = Specular - //2 = Glow - //3 = SSAO - static ID3D11ShaderResourceView* LightOut[4]; - static ID3D11UnorderedAccessView* LightTarget[4]; - - //0 = BlurTempStorage - static ID3D11UnorderedAccessView* TempUav; - static ID3D11ShaderResourceView* TempSrv; - - static ID3D11RenderTargetView* RtvNulls[16]; - static ID3D11ShaderResourceView* SrvNulls[16]; - static ID3D11UnorderedAccessView* uavNULL[16]; - - //static Oyster::Collision3D::Frustrum* SubFrustrums; - static int FrustrumSize; - static LinearAlgebra::Vector3 FrustrumDimensions; - - static Oyster::Resources::BufferDefinitions::LightStructureBuffer LightData; - - static void Init(int sizeX, int sizeY); - - static void InitGeometry(int sizeX, int sizeY); - - static void InitSSAOData(); - static void InitSubFrustrums(int sizeX, int sizeY); - static void InitPointLights(); - static void InitLightData(); - - static void InitLighting(int sizeX, int sizeY); - }; - } -} - -#endif \ No newline at end of file diff --git a/Code/OysterGraphics/OldResourses/ShaderEffects.cpp b/Code/OysterGraphics/OldResourses/ShaderEffects.cpp deleted file mode 100644 index 33de3c05..00000000 --- a/Code/OysterGraphics/OldResourses/ShaderEffects.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include "ShaderEffects.h" - -namespace Oyster -{ - namespace Resources - { - Core::ShaderManager::ShaderEffect ShaderEffects::BasicSprite = Core::ShaderManager::ShaderEffect(); - Core::ShaderManager::ShaderEffect ShaderEffects::Text2DEffect = Core::ShaderManager::ShaderEffect(); - Core::ShaderManager::ShaderEffect ShaderEffects::ModelEffect = Core::ShaderManager::ShaderEffect(); - - void ShaderEffects::Init() - { - BasicSprite.IAStage.Topology = D3D11_PRIMITIVE_TOPOLOGY_POINTLIST; - BasicSprite.Shaders.Vertex = Oyster::Core::ShaderManager::Get::Vertex(L"2D"); - BasicSprite.Shaders.Geometry = Oyster::Core::ShaderManager::Get::Geometry(L"2D"); - BasicSprite.Shaders.Pixel = Oyster::Core::ShaderManager::Get::Pixel(L"Texture0"); - - D3D11_BLEND_DESC blendDesc; - blendDesc.AlphaToCoverageEnable=false; - blendDesc.IndependentBlendEnable=false; - blendDesc.RenderTarget[0].BlendEnable=true; - - blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; - blendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; - blendDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; - - blendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; - blendDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ONE; - blendDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_MAX; - - blendDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; - - ID3D11BlendState* blender; - - Oyster::Core::Device->CreateBlendState(&blendDesc,&blender); - - BasicSprite.RenderStates.BlendState = blender; - - ID3D11InputLayout* layout; - - Oyster::Core::ShaderManager::CreateInputLayout(SpriteVertexDesc,1,Oyster::Core::ShaderManager::Get::Vertex(L"2D"),layout); - - BasicSprite.IAStage.Layout = layout; - - Text2DEffect.IAStage.Topology=D3D11_PRIMITIVE_TOPOLOGY_POINTLIST; - Text2DEffect.Shaders.Vertex = Oyster::Core::ShaderManager::Get::Vertex(L"Text"); - Text2DEffect.Shaders.Geometry = Oyster::Core::ShaderManager::Get::Geometry(L"Text"); - Text2DEffect.Shaders.Pixel = Oyster::Core::ShaderManager::Get::Pixel(L"Texture0"); - - Oyster::Core::ShaderManager::CreateInputLayout(Text2DDesc,3,Oyster::Core::ShaderManager::Get::Vertex(L"Text"),layout); - - Text2DEffect.IAStage.Layout = layout; - - blendDesc.AlphaToCoverageEnable = true; - Oyster::Core::Device->CreateBlendState(&blendDesc,&blender); - Text2DEffect.RenderStates.BlendState = blender; - - ModelEffect.IAStage.Topology = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; - Oyster::Core::ShaderManager::CreateInputLayout(ModelDesc,3,Oyster::Core::ShaderManager::Get::Vertex(L"OBJ"),layout); - ModelEffect.IAStage.Layout = layout; - - ModelEffect.Shaders.Vertex = Oyster::Core::ShaderManager::Get::Vertex(L"OBJ"); - ModelEffect.Shaders.Pixel = Oyster::Core::ShaderManager::Get::Pixel(L"OBJDEF"); - - Oyster::Buffer::BUFFER_INIT_DESC desc; - - desc.ElementSize=sizeof(Oyster::Math::Float4x4); - desc.NumElements = 1; - desc.Usage = Oyster::Buffer::BUFFER_CPU_WRITE_DISCARD; - desc.Type = Oyster::Buffer::CONSTANT_BUFFER_VS; - desc.InitData = NULL; - - ModelEffect.CBuffers.Vertex.push_back(Oyster::Engine::Init::Buffers::CreateBuffer(desc)); - ModelEffect.CBuffers.Vertex.push_back(Oyster::Engine::Init::Buffers::CreateBuffer(desc)); - - //use Oyster::Resources::Buffers::CbufferVS for per object data - //perObject = Oyster::Engine::Init::Buffers::CreateBuffer(desc); - - } - - D3D11_INPUT_ELEMENT_DESC ShaderEffects::SpriteVertexDesc[1] = - { - {"POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, - }; - - D3D11_INPUT_ELEMENT_DESC ShaderEffects::Text2DDesc[3] = - { - {"Position",0, DXGI_FORMAT_R32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, - {"Offset",0, DXGI_FORMAT_R32_SINT, 0, 4, D3D11_INPUT_PER_VERTEX_DATA, 0}, - {"CharOffset",0, DXGI_FORMAT_R32_FLOAT, 0, 8, D3D11_INPUT_PER_VERTEX_DATA, 0}, - }; - - D3D11_INPUT_ELEMENT_DESC ShaderEffects::ModelDesc[3] = - { - {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, - {"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0}, - {"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0}, - }; - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/OldResourses/ShaderEffects.h b/Code/OysterGraphics/OldResourses/ShaderEffects.h deleted file mode 100644 index 766d63a9..00000000 --- a/Code/OysterGraphics/OldResourses/ShaderEffects.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include "../Engine.h" -#include "Buffers.h" - -namespace Oyster -{ - namespace Resources - { - struct ShaderEffects - { - static Oyster::Core::ShaderManager::ShaderEffect BasicSprite; - static Oyster::Core::ShaderManager::ShaderEffect Text2DEffect; - static Oyster::Core::ShaderManager::ShaderEffect ModelEffect; - - static void Init(); - - static D3D11_INPUT_ELEMENT_DESC SpriteVertexDesc[1]; - static D3D11_INPUT_ELEMENT_DESC Text2DDesc[3]; - static D3D11_INPUT_ELEMENT_DESC ModelDesc[3]; - }; - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/OysterGraphics.vcxproj b/Code/OysterGraphics/OysterGraphics.vcxproj index e9b8ff72..fc00bde5 100644 --- a/Code/OysterGraphics/OysterGraphics.vcxproj +++ b/Code/OysterGraphics/OysterGraphics.vcxproj @@ -78,6 +78,7 @@ $(ProjectName)_$(PlatformShortName) C:\Program Files (x86)\Visual Leak Detector\include;$(IncludePath) C:\Program Files (x86)\Visual Leak Detector\lib\Win32;$(LibraryPath) + true $(SolutionDir)..\Bin\DLL\ @@ -181,8 +182,9 @@ - - + + + @@ -193,9 +195,10 @@ - + + - + @@ -206,19 +209,57 @@ - + + Geometry + 5.0 + Geometry + 4.0 + Geometry + 4.0 + Geometry + 4.0 + + + Pixel + Pixel + Pixel + Pixel + + + Vertex + Vertex + Vertex + Vertex + + + Geometry + 4.0 + Geometry + 4.0 + Geometry + 4.0 + Geometry + 4.0 + + + Vertex + Vertex + Vertex + Vertex + + Compute Compute Compute Compute - + Pixel Pixel Pixel Pixel - + Compute 5.0 Compute @@ -228,7 +269,27 @@ Compute 5.0 - + + Compute + 5.0 + Compute + 5.0 + Compute + 5.0 + Compute + 5.0 + + + Compute + 5.0 + Compute + 5.0 + Compute + 5.0 + Compute + 5.0 + + Vertex Vertex Vertex @@ -273,12 +334,15 @@ - - - - - + + + + + + + + diff --git a/Code/OysterGraphics/OysterGraphics.vcxproj.filters b/Code/OysterGraphics/OysterGraphics.vcxproj.filters index 11d05dde..d76a066f 100644 --- a/Code/OysterGraphics/OysterGraphics.vcxproj.filters +++ b/Code/OysterGraphics/OysterGraphics.vcxproj.filters @@ -24,9 +24,6 @@ Source Files - - Source Files - Source Files @@ -42,15 +39,21 @@ Source Files - - Source Files - - - Source Files - Source Files + + Source Files + + + Source Files + + + Source Files + + + Source Files + @@ -59,9 +62,6 @@ Header Files - - Header Files - Header Files @@ -83,10 +83,13 @@ Header Files - + Header Files - + + Header Files + + Header Files @@ -95,15 +98,27 @@ - - - + + + + + + + + + + + - - - - + + + + + + + + \ No newline at end of file diff --git a/Code/OysterGraphics/Render/DefaultRenderer.cpp b/Code/OysterGraphics/Render/DefaultRenderer.cpp new file mode 100644 index 00000000..3573ad0a --- /dev/null +++ b/Code/OysterGraphics/Render/DefaultRenderer.cpp @@ -0,0 +1,181 @@ +#include "DefaultRenderer.h" +#include "Resources.h" +#include "../Definitions/GraphicalDefinition.h" +#include "../Model/ModelInfo.h" +#include "../DllInterfaces/GFXAPI.h" +#include +#include + +namespace Oyster +{ + namespace Graphics + { + namespace Render + { + Definitions::Pointlight pl; + + void DefaultRenderer::NewFrame(Oyster::Math::Float4x4 View, Oyster::Math::Float4x4 Projection, Definitions::Pointlight Lights, int numLights) + { + Preparations::Basic::ClearBackBuffer(Oyster::Math::Float4(1,0,0,1)); + Preparations::Basic::ClearRTV(Resources::GBufferRTV,Resources::GBufferSize,Math::Float4(0,0,0,0)); + Core::PipelineManager::SetRenderPass(Graphics::Render::Resources::Gather::Pass); + + void* data; + + Definitions::LightConstants lc; + lc.InvProj = Projection.GetInverse(); + lc.Pixels = Core::resolution; + lc.Lights = numLights; + lc.View = View; + lc.Proj = Projection; + lc.SSAORadius = 3; + + data = Resources::Light::LightConstantsData.Map(); + memcpy(data, &lc, sizeof(Definitions::LightConstants)); + Resources::Light::LightConstantsData.Unmap(); + + data = Resources::Light::PointLightsData.Map(); + memcpy(data, &Lights, sizeof(Definitions::Pointlight) * numLights); + Resources::Light::PointLightsData.Unmap(); + + Definitions::PostData pd; + pd.x = lc.Pixels.x; + pd.y = lc.Pixels.y; + + data = Resources::Post::Data.Map(); + memcpy(data, &pd, sizeof(Definitions::PostData)); + Resources::Post::Data.Unmap(); + } + + void DefaultRenderer::RenderScene(Model::Model* models, int count, Math::Matrix View, Math::Matrix Projection, float deltaTime) + { + for(int i = 0; i < count; ++i) + { + if(&models[i] == NULL) + continue; + if(models[i].Visible) + { + Definitions::PerModel pm; + pm.WV = View * models[i].WorldMatrix; + pm.WVP = Projection * pm.WV; + + Model::ModelInfo* info = models[i].info; + + Definitions::AnimationData am; //final + if(info->Animated && models[i].Animation.AnimationPlaying != NULL) + { + models[i].Animation.AnimationTime += deltaTime; + ////store inverse absolut transform + Math::Matrix SkinTransform[100]; + Math::Matrix BoneAnimated[100]; + Math::Matrix BoneAbsAnimated[100]; + + + + for(int b = 0; b BoneCount; ++b) + { + Model::Bone Bone = info->bones[b]; + SkinTransform[b] = Bone.Absolute.GetInverse(); + BoneAnimated[b] = Bone.Relative; + BoneAbsAnimated[b] = Bone.Absolute; + } + int b = 0; + Model::Animation A = *models[i].Animation.AnimationPlaying; + while(models[i].Animation.AnimationTime>A.duration) + models[i].Animation.AnimationTime -= (float)A.duration; + + float position = models[i].Animation.AnimationTime; + for(int b = 0; b < A.Bones;++b) + { + //find current frame + int nrOfFrames = A.Frames[b]; + Model::Frame PFrame = A.Keyframes[b][nrOfFrames-1]; + Model::Frame NFrame = A.Keyframes[b][nrOfFrames-1]; + bool FrameFound = false; + for (int i = 0; i < nrOfFrames; i++) + { + if(position < A.Keyframes[b][i].time) + { + PFrame = A.Keyframes[b][i-1]; + NFrame = A.Keyframes[b][i]; + break; + } + } + float denominator = (float)(NFrame.time - PFrame.time); + if(denominator == 0) + { + BoneAnimated[PFrame.bone.Parent] = PFrame.bone.Relative; + continue; + } + float inter = (float)((position - PFrame.time) / denominator); + Math3D::InterpolateOrientation_UsingNonRigidNlerp(PFrame.bone.Relative,NFrame.bone.Relative,inter, BoneAnimated[PFrame.bone.Parent]); + } + + ////calculate Absolute Animation Transform + for(int b = 0; b < info->BoneCount; ++b) + { + BoneAbsAnimated[b] = BoneAbsAnimated[info->bones[b].Parent] * BoneAnimated[b]; + } + + //write data to am + for(int b = 0; b < info->BoneCount; ++b) + { + am.AnimatedData[b] = (BoneAbsAnimated[b] * SkinTransform[b]); + } + + + void *data = Resources::Gather::AnimationData.Map(); + memcpy(data,&am,sizeof(Definitions::AnimationData)); + Resources::Gather::AnimationData.Unmap(); + + pm.Animated = 1; + } + else + pm.Animated = 0; + + void* data = Resources::Gather::ModelData.Map(); + memcpy(data,&(pm),sizeof(pm)); + Resources::Gather::ModelData.Unmap(); + + if(info->Material.size()) + { + Core::deviceContext->PSSetShaderResources(0,(UINT)info->Material.size(),&(info->Material[0])); + } + + + info->Vertices->Apply(); + if(info->Indexed) + { + info->Indecies->Apply(); + Oyster::Graphics::Core::deviceContext->DrawIndexed(info->IndexCount,0,0); + } + else + { + Oyster::Graphics::Core::deviceContext->Draw(info->VertexCount,0); + } + } + } + } + + + void DefaultRenderer::EndFrame() + { + Core::PipelineManager::SetRenderPass(Resources::Light::Pass); + + Core::deviceContext->Dispatch((UINT)((Core::resolution.x + 15U) / 16U), (UINT)((Core::resolution.y + 15U) / 16U), 1); + + Core::PipelineManager::SetRenderPass(Resources::Blur::HorPass); + Core::deviceContext->Dispatch((UINT)((Core::resolution.x + 15U) / 16U), (UINT)((Core::resolution.y + 15U) / 16U), 1); + + Core::PipelineManager::SetRenderPass(Resources::Blur::VertPass); + Core::deviceContext->Dispatch((UINT)((Core::resolution.x + 15U) / 16U), (UINT)((Core::resolution.y + 15U) / 16U), 1); + + Core::PipelineManager::SetRenderPass(Resources::Post::Pass); + + Core::deviceContext->Dispatch((UINT)((Core::resolution.x + 15U) / 16U), (UINT)((Core::resolution.y + 15U) / 16U), 1); + + Core::swapChain->Present(0,0); + } + } + } +} \ No newline at end of file diff --git a/Code/OysterGraphics/Render/DefaultRenderer.h b/Code/OysterGraphics/Render/DefaultRenderer.h new file mode 100644 index 00000000..b45f672f --- /dev/null +++ b/Code/OysterGraphics/Render/DefaultRenderer.h @@ -0,0 +1,22 @@ +#pragma once +#include "..\Definitions\GraphicalDefinition.h" +#include "..\Core\Core.h" +#include "Preparations\Preparations.h" +#include "..\Model\Model.h" + +namespace Oyster +{ + namespace Graphics + { + namespace Render + { + class DefaultRenderer + { + public: + static void NewFrame(Oyster::Math::Float4x4 View, Oyster::Math::Float4x4 Projection, Definitions::Pointlight Lights, int numLights); + static void RenderScene(Model::Model* models, int count, Math::Matrix View, Math::Matrix Projection, float DeltaTime = 0); + static void EndFrame(); + }; + } + } +} \ No newline at end of file diff --git a/Code/OysterGraphics/Render/GuiRenderer.cpp b/Code/OysterGraphics/Render/GuiRenderer.cpp new file mode 100644 index 00000000..0fbda1be --- /dev/null +++ b/Code/OysterGraphics/Render/GuiRenderer.cpp @@ -0,0 +1,111 @@ +#include "GuiRenderer.h" +#include "Resources.h" +#include "../Definitions/GraphicalDefinition.h" + +namespace Oyster +{ + namespace Graphics + { + namespace Render + { + const int TEXT_NR_LETTERS=95; + const float TEXT_SIZE=2.5; + + void Gui::Begin2DRender() + { + Core::PipelineManager::SetRenderPass(Render::Resources::Gui::Pass); + } + + void Gui::Render(ID3D11ShaderResourceView* tex,Math::Float2 pos, Math::Float2 size) + { + Core::deviceContext->PSSetShaderResources(0,1,&tex); + + pos *= 2; + pos -= 1; + pos.y *= -1; + + Definitions::GuiData gd; + gd.Translation = Math::Matrix::identity; + gd.Translation.m41 = pos.x; + gd.Translation.m42 = pos.y; + gd.Translation.m11 = size.x; + gd.Translation.m22 = size.y; + + void* data = Render::Resources::Gui::Data.Map(); + memcpy(data,&gd,sizeof(Definitions::GuiData)); + Render::Resources::Gui::Data.Unmap(); + Core::deviceContext->Draw(1,0); + } + + void Gui::Begin2DTextRender() + { + Resources::Gui::Text::Vertex.Apply(); + Core::PipelineManager::SetRenderPass(Resources::Gui::Text::Pass); + } + + void Gui::RenderText(std::wstring text, Math::Float2 pos, Math::Float2 size) + { + //Pos.x -= instance.sizeX/2; + //Pos.x += size.x; + //Pos.y -= instance.sizeY/2; + //Pos.y += size.y; + //Matrix m; + //m = Math::Matrix::identity; + //float width = (1.0f/(instance.sizeX/2.0f)); + //float height = (1.0f/(instance.sizeY/2.0f)); + //m.m41=Pos.x * width; + //m.m42=-Pos.y * height; + //m.m43=Pos.z; + //m.m11=width*size.x; + //m.m22=height*size.y; + //void* dest = Resources::Buffers::CBufferGs.Map(); + //memcpy(dest,&m.GetTranspose(),64); + //Resources::Buffers::CBufferGs.Unmap(); + + //Oyster::Render::Textbox::Update(text, size.x); + //Oyster::Engine::PrepareForRendering::Begin2DTextRender(); + //Oyster::Core::DeviceContext->PSSetShaderResources(0,1,&(Oyster::Render::Textbox::Texture)); + ////Should be able to be outside of the for loop. Keeping it here for now though. + //Oyster::Core::DeviceContext->Draw(Oyster::Render::Textbox::NumLetters, 0); + + pos *= 2; + pos -= 1; + pos.y *= -1; + + Definitions::GuiData gd; + + gd.Translation = Math::Matrix::identity; + gd.Translation.m41 = (pos.x - (size.x/2 * text.length())); + gd.Translation.m42 = pos.y; + gd.Translation.m11 = size.x; + gd.Translation.m22 = size.y; + + + void* data = Render::Resources::Gui::Data.Map(); + memcpy(data,&gd,sizeof(Definitions::GuiData)); + Render::Resources::Gui::Data.Unmap(); + Definitions::Text2D tmpInst; + + void* dest = Resources::Gui::Text::Vertex.Map(); + Definitions::Text2D* dataView = reinterpret_cast(dest); + //tmpInst.charOffset=_pos; + for (unsigned int i=0; iDraw(text.length(), 0); + } + } + } +} \ No newline at end of file diff --git a/Code/OysterGraphics/Render/GuiRenderer.h b/Code/OysterGraphics/Render/GuiRenderer.h new file mode 100644 index 00000000..6d865950 --- /dev/null +++ b/Code/OysterGraphics/Render/GuiRenderer.h @@ -0,0 +1,21 @@ +#pragma once + +#include "../Core/Core.h" + +namespace Oyster +{ + namespace Graphics + { + namespace Render + { + class Gui + { + public: + static void Begin2DRender(); + static void Render(ID3D11ShaderResourceView* tex, Math::Float2 pos, Math::Float2 size); + static void Begin2DTextRender(); + static void RenderText(std::wstring text, Math::Float2 pos, Math::Float2 size); + }; + } + } +} \ No newline at end of file diff --git a/Code/OysterGraphics/Render/Rendering/BasicRender.cpp b/Code/OysterGraphics/Render/Rendering/BasicRender.cpp deleted file mode 100644 index 113d7b6f..00000000 --- a/Code/OysterGraphics/Render/Rendering/BasicRender.cpp +++ /dev/null @@ -1,167 +0,0 @@ -#include "Render.h" -#include "../Resources/Deffered.h" -#include "../../Definitions/GraphicalDefinition.h" -#include "../../Model/ModelInfo.h" -#include -#include - -namespace Oyster -{ - namespace Graphics - { - namespace Render - { - namespace Rendering - { - Definitions::Pointlight pl; - - void Basic::NewFrame(Oyster::Math::Float4x4 View, Oyster::Math::Float4x4 Projection, Definitions::Pointlight* Lights, int numLights) - { - Preparations::Basic::ClearBackBuffer(Oyster::Math::Float4(1,0,0,1)); - Preparations::Basic::ClearRTV(Resources::Deffered::GBufferRTV,Resources::Deffered::GBufferSize,Math::Float4(0,0,0,1)); - Core::PipelineManager::SetRenderPass(Graphics::Render::Resources::Deffered::GeometryPass); - - void* data; - - Definitions::LightConstants lc; - lc.InvProj = Projection.GetInverse(); - lc.Pixels = Core::resolution; - lc.Lights = numLights; - lc.View = View; - lc.Proj = Projection; - lc.SSAORadius = 3; - - data = Resources::Deffered::LightConstantsData.Map(); - memcpy(data, &lc, sizeof(Definitions::LightConstants)); - Resources::Deffered::LightConstantsData.Unmap(); - - data = Resources::Deffered::PointLightsData.Map(); - memcpy(data, Lights, sizeof(Definitions::Pointlight) * numLights); - Resources::Deffered::PointLightsData.Unmap(); - } - - void Basic::RenderScene(Model::Model* models, int count, Math::Matrix View, Math::Matrix Projection) - { - for(int i = 0; i < count; ++i) - { - if(&models[i] == NULL) - continue; - if(models[i].Visible) - { - Definitions::PerModel pm; - pm.WV = View * models[i].WorldMatrix; - pm.WVP = Projection * pm.WV; - - void* data = Resources::Deffered::ModelData.Map(); - memcpy(data,&(pm),sizeof(pm)); - Resources::Deffered::ModelData.Unmap(); - - Model::ModelInfo* info = (Model::ModelInfo*)models[i].info; - - - - Definitions::AnimationData am; - if(info->Animated && models[i].AnimationPlaying != -1) - { - - Definitions::AnimationData am2; - //write default data - for (int b = 0; b < info->BoneCount; b++) - { - am2.animatedData[b] = info->bones[b].Transform; - } - //loop bones in animation - am.Animated = 1; - - - Model::Frame Prev, Next; - - models[i].AnimationTime = fmod(models[i].AnimationTime,info->Animations[models[i].AnimationPlaying].duration); - - for(int x = 0; x < info->Animations[models[i].AnimationPlaying].Bones; ++x) - { - //loop frame per bone - Prev.bone.Parent = 0; - Next = Prev; - for(int y = 0; y < info->Animations[models[i].AnimationPlaying].Frames[x]; ++y) - { - ///TODO replace with binary search? - Model::Frame f = info->Animations[models[i].AnimationPlaying].Keyframes[x][y]; - - //if we hit frame - if(models[i].AnimationTime == f.time) - { - Prev = f; - Next = f; - break; - } - - //if time is larger than frame time, store frames - if(models[i].AnimationTime < f.time) - { - Next = f; - Prev = info->Animations[models[i].AnimationPlaying].Keyframes[x][y-1]; - break; - } - } - - - //calculate interpolated bone position - - //rebase model time to between prev and next - float interpoation =(models[i].AnimationTime - Prev.time) / (Next.time - Prev.time); - - //interpolate - Math::Matrix Interpolated; - Math3D::InterpolateOrientation_UsingNonRigidNlerp(Prev.bone.Transform,Next.bone.Transform,interpoation, Interpolated); - - //write magic to animated data - am2.animatedData[Prev.bone.Parent] = Interpolated * am2.animatedData[info->bones[Prev.bone.Parent].Parent]; - //sneaky write do correct data buffer - am.animatedData[x] = (am2.animatedData[Prev.bone.Parent] * info->bones[Prev.bone.Parent].Transform.GetInverse()); - } - } - else - am.Animated = 0; - - data = Resources::Deffered::AnimationData.Map(); - memcpy(data,&am,sizeof(Definitions::AnimationData)); - Resources::Deffered::AnimationData.Unmap(); - - if(info->Material.size()) - { - Core::deviceContext->PSSetShaderResources(0,(UINT)info->Material.size(),&(info->Material[0])); - } - - - info->Vertices->Apply(); - if(info->Indexed) - { - info->Indecies->Apply(); - Oyster::Graphics::Core::deviceContext->DrawIndexed(info->IndexCount,0,0); - } - else - { - Oyster::Graphics::Core::deviceContext->Draw(info->VertexCount,0); - } - } - } - } - - - void Basic::EndFrame() - { - Core::PipelineManager::SetRenderPass(Resources::Deffered::LightPass); - - Core::deviceContext->Dispatch((UINT)((Core::resolution.x + 15U) / 16U), (UINT)((Core::resolution.y + 15U) / 16U), 1); - - Core::PipelineManager::SetRenderPass(Resources::Deffered::PostPass); - - Core::deviceContext->Dispatch((UINT)((Core::resolution.x + 15U) / 16U), (UINT)((Core::resolution.y + 15U) / 16U), 1); - - Core::swapChain->Present(0,0); - } - } - } - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/Render/Rendering/Render.h b/Code/OysterGraphics/Render/Rendering/Render.h deleted file mode 100644 index 48d153d4..00000000 --- a/Code/OysterGraphics/Render/Rendering/Render.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once -#include "..\..\Definitions\GraphicalDefinition.h" -#include "..\..\Core\Core.h" -#include "..\Preparations\Preparations.h" -#include "..\..\Model\Model.h" - -namespace Oyster -{ - namespace Graphics - { - namespace Render - { - namespace Rendering - { - class Basic - { - public: - - static void NewFrame(Oyster::Math::Float4x4 View, Oyster::Math::Float4x4 Projection, Definitions::Pointlight* Lights, int numLights); - static void RenderScene(Model::Model* models, int count, Math::Matrix View, Math::Matrix Projection); - static void EndFrame(); - }; - } - } - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/Render/Resources.cpp b/Code/OysterGraphics/Render/Resources.cpp new file mode 100644 index 00000000..9f2adbb3 --- /dev/null +++ b/Code/OysterGraphics/Render/Resources.cpp @@ -0,0 +1,494 @@ +#pragma once + +#include "Resources.h" +#include "..\Definitions\GraphicalDefinition.h" + +typedef Oyster::Graphics::Core::PipelineManager::ShaderType ShaderType; +typedef Oyster::Graphics::Core::PipelineManager::Get GetShader; +typedef Oyster::Graphics::Core::PipelineManager Shader; +typedef Oyster::Graphics::Core::Buffer Buffer; + +const std::wstring PathToHLSL = L"..\\..\\Code\\OysterGraphics\\Shader\\Passes\\"; +const std::wstring PathToCSO = L"..\\Content\\Shaders\\"; + +const int KernelSize = 10; +const int SampleSpread = 16; + + +const int MAX_LETTER_COUNT=60; + +namespace Oyster +{ + namespace Graphics + { + namespace Render + { + + ID3D11RenderTargetView* Resources::GBufferRTV[Resources::GBufferSize] = {0}; + ID3D11ShaderResourceView* Resources::GBufferSRV[Resources::GBufferSize] = {0}; + + ID3D11UnorderedAccessView* Resources::LBufferUAV[Resources::LBufferSize] = {0}; + ID3D11ShaderResourceView* Resources::LBufferSRV[Resources::LBufferSize] = {0}; + + ID3D11UnorderedAccessView* Resources::Blur::BufferUAV = {0}; + ID3D11ShaderResourceView* Resources::Blur::BufferSRV = {0}; + + Shader::RenderPass Resources::Gather::Pass; + Shader::RenderPass Resources::Light::Pass; + Shader::RenderPass Resources::Post::Pass; + Shader::RenderPass Resources::Gui::Pass; + Shader::RenderPass Resources::Gui::Text::Pass; + Shader::RenderPass Resources::Blur::VertPass; //Set this pass second when doing a "fullscreen" blur + Shader::RenderPass Resources::Blur::HorPass; //Set this pass first when doing a "fullscreen" blur + + Buffer Resources::Gather::ModelData = Buffer(); + Buffer Resources::Gather::AnimationData = Buffer(); + Buffer Resources::Light::LightConstantsData = Buffer(); + Buffer Resources::Gui::Data = Buffer(); + Buffer Resources::Gui::Text::Vertex = Buffer(); + Buffer Resources::Post::Data = Buffer(); + + Buffer Resources::Light::PointLightsData = Buffer(); + ID3D11ShaderResourceView* Resources::Light::PointLightView = NULL; + + ID3D11ShaderResourceView* Resources::Light::SSAOKernel = NULL; + ID3D11ShaderResourceView* Resources::Light::SSAORandom = NULL; + + ID3D11RasterizerState* Resources::RenderStates::rs = NULL; + ID3D11SamplerState** Resources::RenderStates::ss = new ID3D11SamplerState*[1]; + ID3D11DepthStencilState* Resources::RenderStates::dsState = NULL; + ID3D11BlendState* Resources::RenderStates::bs = NULL; + + ID3D11ShaderResourceView* Resources::Gui::Text::Font = NULL; + + + Core::Init::State Resources::InitShaders() + { +#ifdef _DEBUG + std::wstring path = PathToHLSL+L"Gather\\"; + std::wstring end = L".hlsl"; +#else + std::wstring path = PathToCSO; + std::wstring end = L".cso"; +#endif + //Load Shaders + Core::PipelineManager::Init(path + L"GatherPixel" + end, ShaderType::Pixel, L"Gather"); + Core::PipelineManager::Init(path + L"GatherVertex" + end, ShaderType::Vertex, L"Gather"); +#ifdef _DEBUG + path = PathToHLSL+L"Light\\"; +#endif + Core::PipelineManager::Init(path + L"LightPass" + end, ShaderType::Compute, L"LightPass"); +#ifdef _DEBUG + path = PathToHLSL+L"Post\\"; +#endif + Core::PipelineManager::Init(path + L"PostPass" + end, ShaderType::Compute, L"PostPass"); +#ifdef _DEBUG + path = PathToHLSL+L"Blur\\"; +#endif + Core::PipelineManager::Init(path + L"BlurHor" + end, ShaderType::Compute, L"BlurHor"); + Core::PipelineManager::Init(path + L"BlurVert" + end, ShaderType::Compute, L"BlurVert"); +#ifdef _DEBUG + path = PathToHLSL+L"2D\\"; +#endif + Core::PipelineManager::Init(path + L"2DVertex" + end,ShaderType::Vertex, L"2D"); + Core::PipelineManager::Init(path + L"2DGeometry" + end,ShaderType::Geometry, L"2D"); + Core::PipelineManager::Init(path + L"2DPixel" + end,ShaderType::Pixel, L"2D"); +#ifdef _DEBUG + path = PathToHLSL+L"2D\\Text\\"; +#endif + Core::PipelineManager::Init(path + L"2DTextVertex" + end,ShaderType::Vertex, L"2DText"); + Core::PipelineManager::Init(path + L"2DTextGeometry" + end,ShaderType::Geometry, L"2DText"); + + return Core::Init::State::Success; + } + + Core::Init::State Resources::InitBuffers() + { + //Create Buffers + Buffer::BUFFER_INIT_DESC desc; + desc.ElementSize = sizeof(Definitions::PerModel); + desc.NumElements = 1; + desc.InitData = NULL; + desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_VS; + desc.Usage = Buffer::BUFFER_USAGE::BUFFER_CPU_WRITE_DISCARD; + + Gather::ModelData.Init(desc); + + desc.NumElements = 1; + desc.ElementSize = sizeof(Definitions::AnimationData); + Gather::AnimationData.Init(desc); + + desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_GS; + desc.NumElements = 1; + desc.ElementSize = sizeof(Definitions::GuiData); + Gui::Data.Init(desc); + + desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_CS; + desc.ElementSize = sizeof(Definitions::PostData); + Post::Data.Init(desc); + + desc.ElementSize = sizeof(Definitions::LightConstants); + Light::LightConstantsData.Init(desc); + + desc.ElementSize = sizeof(Definitions::Pointlight); + desc.NumElements = MaxLightSize; + desc.Type = Buffer::STRUCTURED_BUFFER; + Light::PointLightsData.Init(desc); + + desc.Type = Buffer::BUFFER_TYPE::VERTEX_BUFFER; + desc.ElementSize = sizeof(Definitions::Text2D); + desc.NumElements = MAX_LETTER_COUNT; + Gui::Text::Vertex.Init(desc); + + return Core::Init::Success; + } + + Core::Init::State Resources::InitRenderStates() + { + ////Create States + D3D11_RASTERIZER_DESC rdesc; + rdesc.CullMode = D3D11_CULL_BACK; + rdesc.FillMode = D3D11_FILL_SOLID; + rdesc.FrontCounterClockwise = false; + rdesc.DepthBias = 0; + rdesc.DepthBiasClamp = 0; + rdesc.DepthClipEnable = true; + rdesc.SlopeScaledDepthBias = 0; + rdesc.ScissorEnable = false; + rdesc.MultisampleEnable = false; + rdesc.AntialiasedLineEnable = false; + + + Oyster::Graphics::Core::device->CreateRasterizerState(&rdesc,&RenderStates::rs); + + D3D11_SAMPLER_DESC sdesc; + sdesc.Filter = D3D11_FILTER_ANISOTROPIC; + sdesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; + sdesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; + sdesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; + sdesc.MipLODBias = 0; + sdesc.MaxAnisotropy =4; + sdesc.ComparisonFunc = D3D11_COMPARISON_LESS_EQUAL; + *sdesc.BorderColor = *Oyster::Math::Float4(1,1,1,1).element; + sdesc.MinLOD = 0; + sdesc.MaxLOD = D3D11_FLOAT32_MAX; + + + Oyster::Graphics::Core::device->CreateSamplerState(&sdesc,RenderStates::ss); + + D3D11_DEPTH_STENCIL_DESC ddesc; + ddesc.DepthEnable = true; + ddesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL; + ddesc.DepthFunc = D3D11_COMPARISON_LESS; + + ddesc.StencilEnable = true; + ddesc.StencilReadMask = 0xFF; + ddesc.StencilWriteMask = 0xFF; + + ddesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP; + ddesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_INCR; + ddesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; + ddesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS; + + ddesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP; + ddesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_DECR; + ddesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; + ddesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS; + + + Core::device->CreateDepthStencilState(&ddesc,&RenderStates::dsState); + + D3D11_BLEND_DESC bdesc; + bdesc.AlphaToCoverageEnable = true; + bdesc.IndependentBlendEnable = false; + bdesc.RenderTarget[0].BlendEnable = true; + + bdesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; + bdesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; + bdesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; + + bdesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; + bdesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ONE; + bdesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_MAX; + + bdesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; + + Core::device->CreateBlendState(&bdesc,&RenderStates::bs); + return Core::Init::Success; + } + + Core::Init::State Resources::InitViews() + { + //Create Views + for(int i = 0; i< GBufferSize; ++i) + { + Core::Init::CreateLinkedShaderResourceFromTexture(&GBufferRTV[i],&GBufferSRV[i],NULL); + } + + for(int i = 0; i < LBufferSize; ++i) + { + Core::Init::CreateLinkedShaderResourceFromTexture(NULL,&LBufferSRV[i],&LBufferUAV[i]); + } + + Buffer* b = &Light::PointLightsData; + + Core::Init::CreateLinkedShaderResourceFromStructuredBuffer(&b,&Light::PointLightView,NULL); + srand((unsigned int)time(0)); + + //SSAO + Math::Vector3 kernel[KernelSize]; + Math::Vector3 random[SampleSpread]; + for(int i = 0;i < KernelSize; ++i) + { + kernel[i] = Oyster::Math::Vector3::null; + while( kernel[i] == Oyster::Math::Vector3::null ) + { + kernel[i] = Oyster::Math::Vector3( + (float)rand() / (RAND_MAX + 1) * (1 - -1) + -1, + (float)rand() / (RAND_MAX + 1) * (1 - -1) + -1, + (float)rand() / (RAND_MAX + 1) * (1 - 0) + 0); + } + kernel[i].Normalize(); + + float scale = float(i) / float(KernelSize); + + scale = (0.1f*(1 - scale * scale) + 1.0f *( scale * scale)); + kernel[i] *= scale; + + + } + + for( int i = 0; i < SampleSpread; ++i) + { + random[i] = Oyster::Math::Vector3::null; + while( random[i] == Oyster::Math::Vector3::null ) + { + random[i] = Oyster::Math::Vector3( + (float)rand() / (RAND_MAX + 1) * (1 - -1)+ -1, + /*(float)rand() / (RAND_MAX + 1) * (1 - -1)+ -1,*/ + 1.0f, + 0.0f); + } + random[i].Normalize(); + } + + D3D11_TEXTURE1D_DESC T1desc; + T1desc.Width = KernelSize; + T1desc.MipLevels = T1desc.ArraySize = 1; + T1desc.Format = DXGI_FORMAT_R32G32B32_FLOAT; + T1desc.Usage = D3D11_USAGE_DEFAULT; + T1desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; + T1desc.CPUAccessFlags = 0; + T1desc.MiscFlags = 0; + + D3D11_SUBRESOURCE_DATA sphere; + sphere.pSysMem = kernel; + + D3D11_SUBRESOURCE_DATA rnd; + rnd.pSysMem = random; + rnd.SysMemPitch = (UINT)(sqrt(SampleSpread) * sizeof(Oyster::Math::Vector3)); + + ID3D11Texture1D *pTexture1; + + Core::device->CreateTexture1D( &T1desc, &sphere, &pTexture1 ); + Core::device->CreateShaderResourceView( pTexture1, 0, &Light::SSAOKernel ); + pTexture1->Release(); + + D3D11_TEXTURE2D_DESC T2desc; + T2desc.Width = KernelSize; + T2desc.MipLevels = T2desc.ArraySize = 1; + T2desc.Format = DXGI_FORMAT_R32G32B32_FLOAT; + T2desc.Usage = D3D11_USAGE_DEFAULT; + T2desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; + T2desc.CPUAccessFlags = 0; + T2desc.MiscFlags = 0; + T2desc.Height = (UINT)sqrt(SampleSpread); + T2desc.Width = (UINT)(SampleSpread/sqrt(SampleSpread)); + T2desc.SampleDesc.Quality = 0; + T2desc.SampleDesc.Count = 1; + + ID3D11Texture2D *pTexture2; + + Core::device->CreateTexture2D( &T2desc, &rnd, &pTexture2 ); + Core::device->CreateShaderResourceView( (pTexture2), 0, &Light::SSAORandom ); + pTexture2->Release(); + return Core::Init::Success; + } + + Core::Init::State Resources::InitPasses() + { + + ////---------------- Geometry Pass Setup ---------------------------- + Gather::Pass.Shaders.Pixel = GetShader::Pixel(L"Gather"); + Gather::Pass.Shaders.Vertex = GetShader::Vertex(L"Gather"); + + D3D11_INPUT_ELEMENT_DESC indesc[] = + { + { "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 }, + { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 20, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 32, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "BITANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 44, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "BONEINDEX", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 56, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "BONEWEIGHT", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 72, D3D11_INPUT_PER_VERTEX_DATA, 0 } + }; + + Shader::CreateInputLayout(indesc,7,GetShader::Vertex(L"Gather"),Gather::Pass.IAStage.Layout); + Gather::Pass.IAStage.Topology = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + Gather::Pass.CBuffers.Vertex.push_back(Gather::AnimationData); + Gather::Pass.CBuffers.Vertex.push_back(Gather::ModelData); + Gather::Pass.RenderStates.Rasterizer = RenderStates::rs; + Gather::Pass.RenderStates.SampleCount = 1; + Gather::Pass.RenderStates.SampleState = RenderStates::ss; + Gather::Pass.RenderStates.DepthStencil = RenderStates::dsState; + for(int i = 0; i -// /Code/OysterGraphics/Shader/HLSL -const std::wstring PathFromExeToCso = L"..\\Content\\Shaders\\"; -const std::wstring PathFromExeToHlsl = L"..\\..\\Code\\OysterGraphics\\Shader\\HLSL\\"; -const std::wstring VertexTransformDebug = L"TransformDebugVertex"; -const std::wstring VertexDebug = L"DebugVertex"; -const std::wstring PixelRed = L"DebugPixel"; -const std::wstring PixelTexture = L"Texture"; -const std::wstring ComputeDebug = L"Debug"; - -typedef Oyster::Graphics::Core::PipelineManager::ShaderType ShaderType; -typedef Oyster::Graphics::Core::PipelineManager::Get GetShader; -typedef Oyster::Graphics::Core::PipelineManager Shader; -typedef Oyster::Graphics::Core::Buffer Buffer; - -namespace Oyster -{ - namespace Graphics - { - namespace Render - { - //Shader::RenderPass Resources::Debug::obj; - Shader::RenderPass Resources::Debug::debugCompute;// = Shader::ShaderEffect();; - //Buffer Resources::Debug::ModelData = Buffer(); - //Buffer Resources::Debug::VPData = Buffer(); - - //ID3D11ShaderResourceView* Resources::Debug::srv = NULL; - //ID3D11RenderTargetView* Resources::Debug::rtv = NULL; - - Core::Init::State Resources::Debug::Init() - { - -#pragma region LoadShaders - /** Load Compute Shaders for d3dcompile */ - Core::PipelineManager::Init(PathFromExeToHlsl + L"ComputeDebug\\" + L"DebugCompute.hlsl", ShaderType::Compute, ComputeDebug); - -#pragma endregion - return Core::Init::Success; - } - - void Resources::Debug::Clean() - { - - } - } - } -} - -#endif \ No newline at end of file diff --git a/Code/OysterGraphics/Render/Resources/Debug.h b/Code/OysterGraphics/Render/Resources/Debug.h deleted file mode 100644 index 3dc2fae2..00000000 --- a/Code/OysterGraphics/Render/Resources/Debug.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once - -#ifndef Reources_h -#define Reources_h - -#ifdef _DEBUG - -#include "../OysterGraphics/Core/Core.h" - -namespace Oyster -{ - namespace Graphics - { - namespace Render - { - namespace Resources - { - class Debug - { - public: - //static Core::PipelineManager::RenderPass obj; - static Core::PipelineManager::RenderPass debugCompute; - //static Core::Buffer ModelData; - //static Core::Buffer VPData; - - //static ID3D11ShaderResourceView* srv; - //static ID3D11RenderTargetView* rtv; - - static Core::Init::State Init(); - static void Clean(); - }; - } - } - } -} - -#endif - -#endif \ No newline at end of file diff --git a/Code/OysterGraphics/Render/Resources/Deffered.cpp b/Code/OysterGraphics/Render/Resources/Deffered.cpp deleted file mode 100644 index 361a94dd..00000000 --- a/Code/OysterGraphics/Render/Resources/Deffered.cpp +++ /dev/null @@ -1,337 +0,0 @@ -#pragma once - -#include "Deffered.h" -#include "..\..\Definitions\GraphicalDefinition.h" - -typedef Oyster::Graphics::Core::PipelineManager::ShaderType ShaderType; -typedef Oyster::Graphics::Core::PipelineManager::Get GetShader; -typedef Oyster::Graphics::Core::PipelineManager Shader; -typedef Oyster::Graphics::Core::Buffer Buffer; - -const std::wstring PathToHLSL = L"..\\..\\Code\\OysterGraphics\\Shader\\HLSL\\Deffered Shaders\\"; -const std::wstring PathToCSO = L"..\\Content\\Shaders\\"; - -const int KernelSize = 10; -const int SampleSpread = 16; - -namespace Oyster -{ - namespace Graphics - { - namespace Render - { - namespace Resources - { - - ID3D11RenderTargetView* Deffered::GBufferRTV[Deffered::GBufferSize] = {0}; - ID3D11ShaderResourceView* Deffered::GBufferSRV[Deffered::GBufferSize] = {0}; - - ID3D11UnorderedAccessView* Deffered::LBufferUAV[Deffered::LBufferSize] = {0}; - ID3D11ShaderResourceView* Deffered::LBufferSRV[Deffered::LBufferSize] = {0}; - - Shader::RenderPass Deffered::GeometryPass; - Shader::RenderPass Deffered::LightPass; - Shader::RenderPass Deffered::PostPass; - - Buffer Deffered::ModelData = Buffer(); - Buffer Deffered::AnimationData = Buffer(); - Buffer Deffered::LightConstantsData = Buffer(); - - Buffer Deffered::PointLightsData = Buffer(); - ID3D11ShaderResourceView* Deffered::PointLightView = NULL; - - ID3D11ShaderResourceView* Deffered::SSAOKernel = NULL; - ID3D11ShaderResourceView* Deffered::SSAORandom = NULL; - - Core::Init::State Deffered::InitShaders() - { - #ifdef _DEBUG - std::wstring path = PathToHLSL; - std::wstring end = L".hlsl"; -#else - std::wstring path = PathToCSO; - std::wstring end = L".cso"; -#endif - //Load Shaders - Core::PipelineManager::Init(path + L"PixelGatherData" + end, ShaderType::Pixel, L"Geometry"); - Core::PipelineManager::Init(path + L"VertexGatherData" + end, ShaderType::Vertex, L"Geometry"); - Core::PipelineManager::Init(path + L"LightPass" + end, ShaderType::Compute, L"LightPass"); - Core::PipelineManager::Init(path + L"PostPass" + end, ShaderType::Compute, L"PostPass"); - return Core::Init::State::Success; - } - - Core::Init::State Deffered::Init() - { - InitShaders(); - - //Create Buffers - Buffer::BUFFER_INIT_DESC desc; - desc.ElementSize = sizeof(Definitions::PerModel); - desc.NumElements = 1; - desc.InitData = NULL; - desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_VS; - desc.Usage = Buffer::BUFFER_USAGE::BUFFER_CPU_WRITE_DISCARD; - - ModelData.Init(desc); - - desc.NumElements = 1; - desc.ElementSize = sizeof(Definitions::AnimationData); - AnimationData.Init(desc); - - desc.ElementSize = sizeof(Definitions::LightConstants); - desc.NumElements = 1; - desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_CS; - - LightConstantsData.Init(desc); - - desc.ElementSize = sizeof(Definitions::Pointlight); - desc.NumElements = MaxLightSize; - desc.Type = Buffer::STRUCTURED_BUFFER; - PointLightsData.Init(desc); - - ////Create States - D3D11_RASTERIZER_DESC rdesc; - rdesc.CullMode = D3D11_CULL_BACK; - rdesc.FillMode = D3D11_FILL_SOLID; - rdesc.FrontCounterClockwise = false; - rdesc.DepthBias = 0; - rdesc.DepthBiasClamp = 0; - rdesc.DepthClipEnable = true; - rdesc.SlopeScaledDepthBias = 0; - rdesc.ScissorEnable = false; - rdesc.MultisampleEnable = false; - rdesc.AntialiasedLineEnable = false; - - ID3D11RasterizerState* rs = NULL; - Oyster::Graphics::Core::device->CreateRasterizerState(&rdesc,&rs); - - D3D11_SAMPLER_DESC sdesc; - sdesc.Filter = D3D11_FILTER_ANISOTROPIC; - sdesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; - sdesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; - sdesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; - sdesc.MipLODBias = 0; - sdesc.MaxAnisotropy =4; - sdesc.ComparisonFunc = D3D11_COMPARISON_LESS_EQUAL; - *sdesc.BorderColor = *Oyster::Math::Float4(1,1,1,1).element; - sdesc.MinLOD = 0; - sdesc.MaxLOD = D3D11_FLOAT32_MAX; - - ID3D11SamplerState** ss = new ID3D11SamplerState*[1]; - Oyster::Graphics::Core::device->CreateSamplerState(&sdesc,ss); - - D3D11_DEPTH_STENCIL_DESC ddesc; - ddesc.DepthEnable = true; - ddesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL; - ddesc.DepthFunc = D3D11_COMPARISON_LESS; - - ddesc.StencilEnable = true; - ddesc.StencilReadMask = 0xFF; - ddesc.StencilWriteMask = 0xFF; - - ddesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP; - ddesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_INCR; - ddesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; - ddesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS; - - ddesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP; - ddesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_DECR; - ddesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; - ddesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS; - - ID3D11DepthStencilState* dsState; - Core::device->CreateDepthStencilState(&ddesc,&dsState); - - //Create Views - for(int i = 0; i< Resources::Deffered::GBufferSize; ++i) - { - Core::Init::CreateLinkedShaderResourceFromTexture(&GBufferRTV[i],&GBufferSRV[i],NULL); - } - - for(int i = 0; i < Resources::Deffered::LBufferSize; ++i) - { - Core::Init::CreateLinkedShaderResourceFromTexture(NULL,&LBufferSRV[i],&LBufferUAV[i]); - } - - Buffer* b = &PointLightsData; - - Core::Init::CreateLinkedShaderResourceFromStructuredBuffer(&b,&PointLightView,NULL); - srand((unsigned int)time(0)); - - //SSAO - Math::Vector3 kernel[KernelSize]; - Math::Vector3 random[SampleSpread]; - for(int i = 0;i < KernelSize; ++i) - { - kernel[i] = Oyster::Math::Vector3::null; - while( kernel[i] == Oyster::Math::Vector3::null ) - { - kernel[i] = Oyster::Math::Vector3( - (float)rand() / (RAND_MAX + 1) * (1 - -1) + -1, - (float)rand() / (RAND_MAX + 1) * (1 - -1) + -1, - (float)rand() / (RAND_MAX + 1) * (1 - 0) + 0); - } - kernel[i].Normalize(); - - float scale = float(i) / float(KernelSize); - - scale = (0.1f*(1 - scale * scale) + 1.0f *( scale * scale)); - kernel[i] *= scale; - - - } - - for( int i = 0; i < SampleSpread; ++i) - { - random[i] = Oyster::Math::Vector3::null; - while( random[i] == Oyster::Math::Vector3::null ) - { - random[i] = Oyster::Math::Vector3( - (float)rand() / (RAND_MAX + 1) * (1 - -1)+ -1, - /*(float)rand() / (RAND_MAX + 1) * (1 - -1)+ -1,*/ - 1.0f, - 0.0f); - } - random[i].Normalize(); - } - - D3D11_TEXTURE1D_DESC T1desc; - T1desc.Width = KernelSize; - T1desc.MipLevels = T1desc.ArraySize = 1; - T1desc.Format = DXGI_FORMAT_R32G32B32_FLOAT; - T1desc.Usage = D3D11_USAGE_DEFAULT; - T1desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; - T1desc.CPUAccessFlags = 0; - T1desc.MiscFlags = 0; - - D3D11_SUBRESOURCE_DATA sphere; - sphere.pSysMem = kernel; - - D3D11_SUBRESOURCE_DATA rnd; - rnd.pSysMem = random; - rnd.SysMemPitch = sqrt(SampleSpread) * sizeof(Oyster::Math::Vector3); - - ID3D11Texture1D *pTexture1; - - Core::device->CreateTexture1D( &T1desc, &sphere, &pTexture1 ); - Core::device->CreateShaderResourceView( pTexture1, 0, &SSAOKernel ); - pTexture1->Release(); - - D3D11_TEXTURE2D_DESC T2desc; - T2desc.Width = KernelSize; - T2desc.MipLevels = T2desc.ArraySize = 1; - T2desc.Format = DXGI_FORMAT_R32G32B32_FLOAT; - T2desc.Usage = D3D11_USAGE_DEFAULT; - T2desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; - T2desc.CPUAccessFlags = 0; - T2desc.MiscFlags = 0; - T2desc.Height = sqrt(SampleSpread); - T2desc.Width = SampleSpread/sqrt(SampleSpread); - T2desc.SampleDesc.Quality = 0; - T2desc.SampleDesc.Count = 1; - - ID3D11Texture2D *pTexture2; - - Core::device->CreateTexture2D( &T2desc, &rnd, &pTexture2 ); - Core::device->CreateShaderResourceView( (pTexture2), 0, &SSAORandom ); - pTexture2->Release(); - - ////Create ShaderEffects - - ////---------------- Geometry Pass Setup ---------------------------- - GeometryPass.Shaders.Pixel = GetShader::Pixel(L"Geometry"); - GeometryPass.Shaders.Vertex = GetShader::Vertex(L"Geometry"); - - D3D11_INPUT_ELEMENT_DESC indesc[] = - { - { "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 }, - { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 20, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "TANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 32, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "BITANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 44, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "BONEINDEX", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 56, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "BONEWEIGHT", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 72, D3D11_INPUT_PER_VERTEX_DATA, 0 } - }; - - Shader::CreateInputLayout(indesc,7,GetShader::Vertex(L"Geometry"),GeometryPass.IAStage.Layout); - GeometryPass.IAStage.Topology = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; - GeometryPass.CBuffers.Vertex.push_back(AnimationData); - GeometryPass.CBuffers.Vertex.push_back(ModelData); - GeometryPass.RenderStates.Rasterizer = rs; - GeometryPass.RenderStates.SampleCount = 1; - GeometryPass.RenderStates.SampleState = ss; - GeometryPass.RenderStates.DepthStencil = dsState; - for(int i = 0; i Output; - -[numthreads(16, 16, 1)] -void main( uint3 DTid : SV_DispatchThreadID ) -{ - //Output[DTid.xy] = Diffuse[DTid.xy] + Specular[DTid.xy] + Diffuse[DTid.xy] * Ambient[DTid.xy/2].w;// + float4(Ambient[DTid.xy/4].xyz,1); GLOW - //Output[DTid.xy] = Ambient[DTid.xy/2]; - Output[DTid.xy] = Diffuse[DTid.xy] + Specular[DTid.xy]; -} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/VertexGatherData.hlsl b/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/VertexGatherData.hlsl deleted file mode 100644 index 7395e08d..00000000 --- a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/VertexGatherData.hlsl +++ /dev/null @@ -1,24 +0,0 @@ -#include "GBufferHeader.hlsli" - -VertexOut main( VertexIn input ) -{ - VertexOut output; - /*input.pos = ( - (mul(BoneAnimation[input.boneIndex.x], input.pos) * input.boneWeight.x) + - (mul(BoneAnimation[input.boneIndex.y], input.pos) * input.boneWeight.y) + - (mul(BoneAnimation[input.boneIndex.z], input.pos) * input.boneWeight.z) + - (mul(BoneAnimation[input.boneIndex.w], input.pos) * input.boneWeight.w) - * Animated) + input.pos * int(1-Animated);*/ - - input.pos = ( - (mul(BoneAnimation[input.boneIndex.x], input.pos)/* * input.boneWeight.x*/) - * Animated) + input.pos * int(1-Animated); - - //float4x4 m = matrix(float4(1,0,0,0),float4(0,1,0,0), float4(0,0,1,0), float4(0,0,0,1)); - //input.pos = mul(BoneAnimation[0], float4(input.pos,1)); - //input.pos = mul(m, float4(input.pos,1)); - output.pos = mul(WVP, float4(input.pos,1)); - output.normal = mul(WV, float4(input.normal,0)).xyz; - output.UV = input.UV; - return output; -} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/2D/2DGeometry.hlsl b/Code/OysterGraphics/Shader/Passes/2D/2DGeometry.hlsl new file mode 100644 index 00000000..56b6294f --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/2D/2DGeometry.hlsl @@ -0,0 +1,22 @@ +#include "Header.hlsli" + +[maxvertexcount(4)] +void main(point Vertex2DIn input[1],inout TriangleStream Quads) +{ + Pixel2DIn output; + output.Pos = mul(float4(-1,-1,0,1) ,Translation); + output.Uv = float2(0,1); + Quads.Append(output); + + output.Pos = mul(float4(-1,1,0,1), Translation); + output.Uv = float2(0,0); + Quads.Append(output); + + output.Pos = mul(float4(1,-1,0,1), Translation); + output.Uv = float2(1,1); + Quads.Append(output); + + output.Pos = mul(float4(1,1,0,1), Translation); + output.Uv = float2(1,0); + Quads.Append(output); +} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl b/Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl new file mode 100644 index 00000000..a09111b9 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl @@ -0,0 +1,6 @@ +#include "Header.hlsli" + +float4 main(Pixel2DIn input) : SV_Target0 +{ + return Material.Sample(LinearSampler,input.Uv); +} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/2D/2DVertex.hlsl b/Code/OysterGraphics/Shader/Passes/2D/2DVertex.hlsl new file mode 100644 index 00000000..447d3535 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/2D/2DVertex.hlsl @@ -0,0 +1,6 @@ +#include "Header.hlsli" + +Vertex2DIn main(Vertex2DIn input) +{ + return input; +} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/2D/Header.hlsli b/Code/OysterGraphics/Shader/Passes/2D/Header.hlsli new file mode 100644 index 00000000..5a026d34 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/2D/Header.hlsli @@ -0,0 +1,18 @@ +struct Vertex2DIn +{ + float2 Pos : Position; +}; + +cbuffer EveryObject2D : register(c0) +{ + float4x4 Translation; +}; + +struct Pixel2DIn +{ + float4 Pos : SV_Position; + float2 Uv : TEXCOORD; +}; + +Texture2D Material : register(t0); +SamplerState LinearSampler : register(s0); \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/2D/Text/2DTextGeometry.hlsl b/Code/OysterGraphics/Shader/Passes/2D/Text/2DTextGeometry.hlsl new file mode 100644 index 00000000..feefbed7 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/2D/Text/2DTextGeometry.hlsl @@ -0,0 +1,29 @@ +#include "Header.hlsli" + +[maxvertexcount(4)] +void main(point Text2DIn input[1],inout TriangleStream Quads) +{ + float startoff=input[0].off*input[0].coff; + float endoff=startoff+input[0].coff; + Pixel2DIn output; + + output.Pos = mul(float4(-1,-1,0,1), Translation); + output.Pos.x += input[0].Pos; + output.Uv = float2(startoff,1); + Quads.Append(output); + + output.Pos = mul(float4(-1,1,0,1), Translation); + output.Pos.x += input[0].Pos; + output.Uv = float2(startoff,0); + Quads.Append(output); + + output.Pos = mul(float4(1,-1,0,1), Translation); + output.Pos.x += input[0].Pos; + output.Uv = float2(endoff,1); + Quads.Append(output); + + output.Pos = mul(float4(1,1,0,1), Translation); + output.Pos.x += input[0].Pos; + output.Uv = float2(endoff,0); + Quads.Append(output); +} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/2D/Text/2DTextVertex.hlsl b/Code/OysterGraphics/Shader/Passes/2D/Text/2DTextVertex.hlsl new file mode 100644 index 00000000..91497124 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/2D/Text/2DTextVertex.hlsl @@ -0,0 +1,6 @@ +#include "Header.hlsli" + +Text2DIn main(Text2DIn input) +{ + return input; +} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/2D/Text/Header.hlsli b/Code/OysterGraphics/Shader/Passes/2D/Text/Header.hlsli new file mode 100644 index 00000000..7b64fd79 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/2D/Text/Header.hlsli @@ -0,0 +1,20 @@ +#include "../Header.hlsli" +cbuffer TextPerObject : register(c0) +{ + float4x4 gWorld; +}; + +Texture2D g_tex1 : register(t0); + +struct Text2DIn +{ + float Pos : Position; + int off : Offset; + float coff : CharOffset; +}; + +struct TEXT_VS_OUT +{ + float4 pos : SV_POSITION; + float2 texCoord : TEXCOORD; +}; \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/Blur/BlurHor.hlsl b/Code/OysterGraphics/Shader/Passes/Blur/BlurHor.hlsl new file mode 100644 index 00000000..7489cd41 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/Blur/BlurHor.hlsl @@ -0,0 +1,33 @@ +#include "BlurSharedData.hlsli" + +[numthreads(N,1,1)] +void main(int3 ThreadID : SV_DispatchThreadID, int3 gThreadID : SV_GroupThreadID) +{ + + if(gThreadID.x < blurRadius) + { + int x = max(ThreadID.x-blurRadius,0); + gCache[gThreadID.x] = inTex[int2(x,ThreadID.y)]; + } + if(gThreadID.x >= N-blurRadius) + { + int x = min(ThreadID.x+blurRadius,inTex.Length.x-1); + gCache[gThreadID.x+2*blurRadius] = inTex[int2(x,ThreadID.y)]; + } + gCache[gThreadID.x+blurRadius] = inTex[min(ThreadID.xy,inTex.Length.xy-1)]; + + GroupMemoryBarrierWithGroupSync(); + + float4 blurCol = float4(0,0,0,0); + + [unroll] + for(int i = -blurRadius; i <= blurRadius;++i) + { + int k = gThreadID.x + blurRadius + i; + blurCol +=Weights[i + blurRadius] * gCache[k]; + } + + outTex[ThreadID.xy] = blurCol; + //Output[ThreadID.xy] = Diffuse[((ThreadID.xy))]; +} + diff --git a/Code/OysterGraphics/Shader/Passes/Blur/BlurSharedData.hlsli b/Code/OysterGraphics/Shader/Passes/Blur/BlurSharedData.hlsli new file mode 100644 index 00000000..8a7b5fd1 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/Blur/BlurSharedData.hlsli @@ -0,0 +1,35 @@ +#ifndef BLURSHAREDDATA +#define BLURSHAREDDATA + + + +static const float Weights[9] = +{ + 0.05f, 0.05f, 0.1f, 0.15f, 0.3f, 0.15f, 0.1f, 0.05f, 0.05f +}; + +static const int blurRadius = 4; + +#define N 128 +#define gSize (N+2*blurRadius) +groupshared float4 gCache[gSize]; + +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +//cbuffer BlurrData : register(c0) +//{ +// static const int blurRadius = 5; +// static const float Weights[11] = +// { +// 0.05f,0.05f,0.1f,0.1f,0.1f,0.2f,0.1f,0.1f,0.1f,0.05f,0.05f +// }; +//}; + +//[numthreads(16,16,1)] +//void TryCompute(uint3 ThreadID : SV_DispatchThreadID) +//{ +// Output[ThreadID.xy] = Diffuse[ThreadID.xy]*0.5f+Glow[ThreadID.xy]*Glow[ThreadID.xy].w; +//} + +#endif \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/Blur/BlurVert.hlsl b/Code/OysterGraphics/Shader/Passes/Blur/BlurVert.hlsl new file mode 100644 index 00000000..aa5e4a27 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/Blur/BlurVert.hlsl @@ -0,0 +1,32 @@ +#include "BlurSharedData.hlsli" + +[numthreads(1,N,1)] +void main(int3 ThreadID : SV_DispatchThreadID, int3 gThreadID : SV_GroupThreadID) +{ + + if(gThreadID.y < blurRadius) + { + int y = max(ThreadID.y-blurRadius,0); + gCache[gThreadID.y] = inTex[int2(ThreadID.x,y)]; + } + if(gThreadID.y >= N-blurRadius) + { + int y = min(ThreadID.y+blurRadius,inTex.Length.y-1); + gCache[gThreadID.y+2*blurRadius] = inTex[int2(ThreadID.x,y)]; + } + gCache[gThreadID.y+blurRadius] = inTex[min(ThreadID.xy,inTex.Length.xy-1)]; + + GroupMemoryBarrierWithGroupSync(); + + float4 blurCol = float4(0,0,0,0); + + [unroll] + for(int i = -blurRadius; i <= blurRadius;++i) + { + int k = gThreadID.y + blurRadius + i; + blurCol +=Weights[i + blurRadius] * gCache[k]; + } + + outTex[ThreadID.xy] = blurCol; + //Output[ThreadID.xy] = inTex[((ThreadID.xy))]; +} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/PixelGatherData.hlsl b/Code/OysterGraphics/Shader/Passes/Gather/GatherPixel.hlsl similarity index 52% rename from Code/OysterGraphics/Shader/HLSL/Deffered Shaders/PixelGatherData.hlsl rename to Code/OysterGraphics/Shader/Passes/Gather/GatherPixel.hlsl index de06ce7f..b0a2f40f 100644 --- a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/PixelGatherData.hlsl +++ b/Code/OysterGraphics/Shader/Passes/Gather/GatherPixel.hlsl @@ -1,9 +1,9 @@ -#include "GBufferHeader.hlsli" +#include "Header.hlsli" PixelOut main(VertexOut input) { PixelOut output; output.DiffuseGlow = Diffuse.Sample(S1, input.UV); - output.NormalSpec = float4(normalize(input.normal), 1.0f); + output.NormalSpec = float4(normalize(input.normal), Normal.Sample(S1,input.UV).w); return output; } \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/Gather/GatherVertex.hlsl b/Code/OysterGraphics/Shader/Passes/Gather/GatherVertex.hlsl new file mode 100644 index 00000000..4042c224 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/Gather/GatherVertex.hlsl @@ -0,0 +1,20 @@ +#include "Header.hlsli" + +VertexOut main( VertexIn input ) +{ + VertexOut output; + + Matrix boneTrans = AnimatedData[input.boneIndex.x]*input.boneWeight.x + + AnimatedData[input.boneIndex.y]*input.boneWeight.y + + AnimatedData[input.boneIndex.z]*input.boneWeight.z + + AnimatedData[input.boneIndex.w]*input.boneWeight.w; + + input.pos = mul(boneTrans,float4(input.pos,1)).xyz * Animated + input.pos * int(1-Animated); + + input.normal = mul(boneTrans,float4(input.normal,1)).xyz * Animated + input.normal * int(1-Animated); + + output.pos = mul(WVP, float4(input.pos,1)); + output.normal = mul(WV, float4(input.normal,0)).xyz; + output.UV = input.UV; + return output; +} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/GBufferHeader.hlsli b/Code/OysterGraphics/Shader/Passes/Gather/Header.hlsli similarity index 95% rename from Code/OysterGraphics/Shader/HLSL/Deffered Shaders/GBufferHeader.hlsli rename to Code/OysterGraphics/Shader/Passes/Gather/Header.hlsli index f28c1b0b..a313a649 100644 --- a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/GBufferHeader.hlsli +++ b/Code/OysterGraphics/Shader/Passes/Gather/Header.hlsli @@ -32,13 +32,13 @@ SamplerState S1 : register(s0); cbuffer Animation : register(b0) { - float4x4 BoneAnimation[100]; - int Animated; - float3 Pad; + float4x4 AnimatedData[100]; } cbuffer PerModel : register(b1) { matrix WV; matrix WVP; + int Animated; + float3 Pad; } \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/Defines.hlsli b/Code/OysterGraphics/Shader/Passes/Light/Defines.hlsli similarity index 71% rename from Code/OysterGraphics/Shader/HLSL/Deffered Shaders/Defines.hlsli rename to Code/OysterGraphics/Shader/Passes/Light/Defines.hlsli index 1f1061d1..adf01e9d 100644 --- a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/Defines.hlsli +++ b/Code/OysterGraphics/Shader/Passes/Light/Defines.hlsli @@ -27,12 +27,13 @@ cbuffer LightConstants : register(b0) Texture2D DiffuseGlow : register(t0); Texture2D NormalSpec : register(t1); -Texture2D DepthTexture : register(t2); +Texture2D GUI : register(t2); +Texture2D DepthTexture : register(t3); -StructuredBuffer Points : register(t3); +StructuredBuffer Points : register(t4); -Texture1D SSAOKernel : register(t4); -Texture2D SSAORand : register(t5); +Texture1D SSAOKernel : register(t5); +Texture2D SSAORand : register(t6); RWTexture2D Diffuse : register(u0); RWTexture2D Specular : register(u1); diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/LightCalc.hlsli b/Code/OysterGraphics/Shader/Passes/Light/LightCalc.hlsli similarity index 100% rename from Code/OysterGraphics/Shader/HLSL/Deffered Shaders/LightCalc.hlsli rename to Code/OysterGraphics/Shader/Passes/Light/LightCalc.hlsli diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/LightPass.hlsl b/Code/OysterGraphics/Shader/Passes/Light/LightPass.hlsl similarity index 72% rename from Code/OysterGraphics/Shader/HLSL/Deffered Shaders/LightPass.hlsl rename to Code/OysterGraphics/Shader/Passes/Light/LightPass.hlsl index d10484ef..dc54187e 100644 --- a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/LightPass.hlsl +++ b/Code/OysterGraphics/Shader/Passes/Light/LightPass.hlsl @@ -27,16 +27,16 @@ void main( uint3 DTid : SV_DispatchThreadID, uint3 GTid : SV_GroupThreadID ) Shaded.Specular += light.Specular; } - //Diffuse[DTid.xy] = float4(Shaded.Diffuse * DiffuseGlow[DTid.xy].xyz,1); - Diffuse[DTid.xy] = float4(DiffuseGlow[DTid.xy].xyz,1); - - Specular[DTid.xy] = float4(Shaded.Specular, 1); + Diffuse[DTid.xy] = float4(Shaded.Diffuse * DiffuseGlow[DTid.xy].xyz,0); + Specular[DTid.xy] = float4(Shaded.Specular, 0); if(DTid.x & 1 && DTid.y & 1 ) { float AmbValue = GetSSAO(ViewPos, UV, DTid.xy, GTid.xy/2); - Ambient[DTid.xy/2] = AmbValue; + Ambient[DTid.xy/2] = float4(DiffuseGlow[DTid.xy].xyz, AmbValue); + Ambient[DTid.xy/2 + float2(Pixels.x/2, 0)] = GUI[DTid.xy]; + //Ambient[DTid.xy] = GUI[DTid.xy]; } } \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/PosManipulation.hlsli b/Code/OysterGraphics/Shader/Passes/Light/PosManipulation.hlsli similarity index 100% rename from Code/OysterGraphics/Shader/HLSL/Deffered Shaders/PosManipulation.hlsli rename to Code/OysterGraphics/Shader/Passes/Light/PosManipulation.hlsli diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/SSAO.hlsli b/Code/OysterGraphics/Shader/Passes/Light/SSAO.hlsli similarity index 100% rename from Code/OysterGraphics/Shader/HLSL/Deffered Shaders/SSAO.hlsli rename to Code/OysterGraphics/Shader/Passes/Light/SSAO.hlsli diff --git a/Code/OysterGraphics/Shader/Passes/Post/PostPass.hlsl b/Code/OysterGraphics/Shader/Passes/Post/PostPass.hlsl new file mode 100644 index 00000000..69982881 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/Post/PostPass.hlsl @@ -0,0 +1,26 @@ +Texture2D Diffuse : register(t0); +Texture2D Specular : register(t1); +Texture2D Ambient : register(t2); + +RWTexture2D Output; + +cbuffer Size : register(b0) +{ + int2 Pixels; +} + +#define AmbFactor 0.8f; + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float4 Light = Diffuse[DTid.xy] + saturate(Specular[DTid.xy]); + float4 Amb = float4(Ambient[DTid.xy/2].xyz * Ambient[DTid.xy/2].w, 0); + float4 GUI; + uint2 index = DTid.xy/2 + int2(Pixels.x/2,0); + float3 PostLight = Amb.xyz * AmbFactor; + PostLight = PostLight + Light.xyz; + GUI = float4(Ambient[index]); + PostLight = PostLight * (1 - GUI.w); + Output[DTid.xy] = float4((GUI.xyz * GUI.w) + PostLight, 1); +} \ No newline at end of file diff --git a/Code/Tester/MainTest.cpp b/Code/Tester/MainTest.cpp index dcafe91f..c857b320 100644 --- a/Code/Tester/MainTest.cpp +++ b/Code/Tester/MainTest.cpp @@ -20,8 +20,10 @@ HWND g_hWnd = NULL; Oyster::Graphics::Model::Model* m = NULL; Oyster::Graphics::Model::Model* m2 = NULL; Oyster::Graphics::Model::Model* m3 = NULL; +Oyster::Graphics::API::Texture t = NULL; Oyster::Math::Float4x4 V; Oyster::Math::Float4x4 P; +Oyster::Graphics::Definitions::Pointlight pl; //-------------------------------------------------------------------------------------- @@ -90,6 +92,8 @@ int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdL } } + Oyster::Graphics::API::Option o = Oyster::Graphics::API::GetOption(); + Oyster::Graphics::API::DeleteModel(m); Oyster::Graphics::API::DeleteModel(m2); Oyster::Graphics::API::DeleteModel(m3); @@ -154,31 +158,35 @@ HRESULT InitDirect3D() { HRESULT hr = S_OK;; + + Oyster::Graphics::API::Option o = Oyster::Graphics::API::GetOption(); + o.modelPath = L"..\\Content\\Models\\"; + o.texturePath = L"..\\Content\\Textures\\"; + Oyster::Graphics::API::SetOptions(o); + if(Oyster::Graphics::API::Init(g_hWnd,false,false, Oyster::Math::Float2( 1024, 768 )) == Oyster::Graphics::API::Fail) { return E_FAIL; } + + m = Oyster::Graphics::API::CreateModel(L"crate_colonists.dan"); + m2 = Oyster::Graphics::API::CreateModel(L"char_temporary.dan"); + m2->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3::null,Oyster::Math::Float3(4,0,0),Oyster::Math::Float3::null); + Oyster::Graphics::API::PlayAnimation(m2, L"movement",true); - m = Oyster::Graphics::API::CreateModel(L"untitled.dan"); - m2 = Oyster::Graphics::API::CreateModel(L"still.dan"); - m2->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3::null,Oyster::Math::Float3(0,5,0),Oyster::Math::Float3::null); - m2->AnimationPlaying = 0; - m2->AnimationTime = 0.0f; - //m3 = Oyster::Graphics::API::CreateModel(L"box_2.dan"); - //m3->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3::null,Oyster::Math::Float3(0,5,0),Oyster::Math::Float3::null); - + t = Oyster::Graphics::API::CreateTexture(L"structure_corp_mdg.png"); P = Oyster::Math3D::ProjectionMatrix_Perspective(Oyster::Math::pi/2,1280.0f/720.0f,.1f,10000); Oyster::Graphics::API::SetProjection(P); - V = Oyster::Math3D::OrientationMatrix_LookAtDirection(Oyster::Math::Float3(0,0,-1),Oyster::Math::Float3(0,1,0),Oyster::Math::Float3(0,200,500.4f)); + V = Oyster::Math3D::OrientationMatrix_LookAtDirection(Oyster::Math::Float3(0,0,-1),Oyster::Math::Float3(0,1,0),Oyster::Math::Float3(0,0,5.4f)); V = V.GetInverse(); - Oyster::Graphics::Definitions::Pointlight pl; - pl.Color = Oyster::Math::Float3(1,1,1); + + pl.Color = Oyster::Math::Float3(1,0,1); pl.Bright = 1; - pl.Pos = Oyster::Math::Float3(0,-20.0f,30.4f); + pl.Pos = Oyster::Math::Float3(0,-20.0f,0.4f); pl.Radius = 90; Oyster::Graphics::API::AddLight(pl); @@ -189,16 +197,11 @@ HRESULT InitDirect3D() float angle = 0; HRESULT Update(float deltaTime) { - - angle += Oyster::Math::pi/16 * deltaTime; - //m->WorldMatrix = Oyster::Math3D::RotationMatrix_AxisY(angle) * Oyster::Math3D::RotationMatrix_AxisX(-Oyster::Math::pi/2); - m2->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3(0,1,0)*-Oyster::Math::pi/2,Oyster::Math::Float3(0,-4,0),Oyster::Math::Float3::null); - Oyster::Math::Matrix ma = Oyster::Math::Matrix::identity; - ma *= 50; - ma.m44 = 1; - m2->WorldMatrix = m2->WorldMatrix * ma; - m2->AnimationTime += deltaTime * 0.5f; - //m3->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3(1,0,0)*-0,Oyster::Math::Float3(3,4,-1*angle),Oyster::Math::Float3::null); + //angle += Oyster::Math::pi/16 * deltaTime; + m2->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3(0,1,0) * angle,Oyster::Math::Float3(4,0,0),Oyster::Math::Float3::null); + //Oyster::Math::Matrix ma = Oyster::Math::Matrix::identity; + Oyster::Graphics::API::Update(deltaTime); + //m2->Animation.data.AnimationTime += deltaTime;// * 0.5f; return S_OK; } @@ -207,10 +210,12 @@ HRESULT Render(float deltaTime) Oyster::Graphics::API::SetView(V); Oyster::Graphics::API::NewFrame(); - //Oyster::Graphics::API::RenderModel(*m); - Oyster::Graphics::API::RenderModel(*m2); - //Oyster::Graphics::API::RenderModel(*m3); - + Oyster::Graphics::API::RenderModel(m); + Oyster::Graphics::API::RenderModel(m2); + Oyster::Graphics::API::StartGuiRender(); + Oyster::Graphics::API::RenderGuiElement(t,Oyster::Math::Float2(0.5f,0.5f),Oyster::Math::Float2(0.8f,0.2f)); + Oyster::Graphics::API::StartTextRender(); + Oyster::Graphics::API::RenderText(L"Lanariel Was Here",Oyster::Math::Float2(0.5f,0.1f),Oyster::Math::Float2(0.05f,0.08f)); Oyster::Graphics::API::EndFrame(); return S_OK; @@ -248,6 +253,19 @@ LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam Oyster::Graphics::API::ReloadShaders(); #endif break; + //Z - + case 0x5A: + //m2->AnimationTime -= 0.1f; + //if(m2->AnimationTime < 0) + //m2->AnimationTime = 0; + angle += Oyster::Math::pi / 16; + break; + //X + + case 0x58: + //m2->AnimationTime += 0.1f; + angle -= Oyster::Math::pi / 16; + break; + } break;