diff --git a/SOCEngine/SOCEngine/Rendering/Buffer/BaseBuffer.h b/SOCEngine/SOCEngine/Rendering/Buffer/BaseBuffer.h index 7f3dd8e9..85cb68eb 100644 --- a/SOCEngine/SOCEngine/Rendering/Buffer/BaseBuffer.h +++ b/SOCEngine/SOCEngine/Rendering/Buffer/BaseBuffer.h @@ -2,6 +2,7 @@ #include #include "DXResource.h" + namespace Device { class DirectX; diff --git a/SOCEngine/SOCEngine/Rendering/Mesh/MeshManager.h b/SOCEngine/SOCEngine/Rendering/Mesh/MeshManager.h index 2b7d682c..0e447590 100644 --- a/SOCEngine/SOCEngine/Rendering/Mesh/MeshManager.h +++ b/SOCEngine/SOCEngine/Rendering/Mesh/MeshManager.h @@ -3,8 +3,9 @@ #include #include #include "OpaqueMeshRenderQueue.h" -#include "VectorIndexer.hpp" + #include "VBSortedMeshPool.h" +#include "UnsortedMeshPool.h" namespace Core { @@ -15,7 +16,7 @@ namespace Rendering { namespace Geometry { - using TransparentMeshPool = Core::VectorHashMap; + using TransparentMeshPool = UnsortedMeshPool; using OpaqueMeshPool = VBSortedMeshPool; using AlphaTestMeshPool = OpaqueMeshPool; @@ -56,7 +57,7 @@ namespace Rendering Geometry::Mesh& Add(Geometry::Mesh& mesh, Geometry::TransparentMeshPool& meshPool) { assert(mesh.GetVBKey() != 0); //Error, mesh does not init yet. - return meshPool.Add(mesh.GetObjectID().Literal(), mesh); + return meshPool.Add(mesh.GetObjectID(), 0, mesh); } Geometry::Mesh& Add(Geometry::Mesh& mesh, Geometry::OpaqueMeshPool& meshPool) // or AlphaTestMeshPool @@ -103,29 +104,9 @@ namespace Rendering void ClearDirty() { _dirtyMeshes.clear(); _mustUpdateCBMeshes.clear(); _dirty = false; } + template void ChangeTrait(Core::ObjectID id, - Geometry::OpaqueMeshPool& fromPool, Geometry::OpaqueMeshPool& toPool) // Opaque <-> AlphaTest - { - uint literlID = id.Literal(); - assert(fromPool.Has(literlID)); - assert(toPool.Has(literlID) == false); - - Geometry::Mesh* mesh = fromPool.Find(literlID); - toPool.Add(id, mesh->GetVBKey(), *mesh); - fromPool.Delete(literlID); - } - void ChangeTrait(Core::ObjectID id, - Geometry::OpaqueMeshPool& fromPool, Geometry::TransparentMeshPool& toPool) // Opaque or AlphaTest -> Transparent - { - uint literlID = id.Literal(); - assert(fromPool.Has(literlID)); - assert(toPool.Has(literlID) == false); - - toPool.Add(literlID, *fromPool.Find(literlID)); - fromPool.Delete(literlID); - } - void ChangeTrait(Core::ObjectID id, - Geometry::TransparentMeshPool& fromPool, Geometry::OpaqueMeshPool& toPool) // Transparent -> Opaque / AlphaTest + FromMeshPool& fromPool, ToMeshPool& toPool) { uint literlID = id.Literal(); assert(fromPool.Has(literlID)); diff --git a/SOCEngine/SOCEngine/Rendering/Mesh/UnsortedMeshPool.cpp b/SOCEngine/SOCEngine/Rendering/Mesh/UnsortedMeshPool.cpp new file mode 100644 index 00000000..89827f30 --- /dev/null +++ b/SOCEngine/SOCEngine/Rendering/Mesh/UnsortedMeshPool.cpp @@ -0,0 +1,13 @@ +#include "UnsortedMeshPool.h" + +#include "Mesh.h" +#include "ObjectID.hpp" + +using namespace Rendering; +using namespace Rendering::Geometry; +using namespace Core; + +Mesh& UnsortedMeshPool::Add(Core::ObjectID id, int, Mesh& mesh) +{ + return Parent::Add(id.Literal(), mesh); +} \ No newline at end of file diff --git a/SOCEngine/SOCEngine/Rendering/Mesh/UnsortedMeshPool.h b/SOCEngine/SOCEngine/Rendering/Mesh/UnsortedMeshPool.h new file mode 100644 index 00000000..07cb1d24 --- /dev/null +++ b/SOCEngine/SOCEngine/Rendering/Mesh/UnsortedMeshPool.h @@ -0,0 +1,24 @@ +#pragma once + +#include "VectorIndexer.hpp" +#include "ObjectID.hpp" + +namespace Rendering +{ + namespace Geometry + { + class Mesh; + + class UnsortedMeshPool final + : public Core::VectorHashMap + { + public: + using Parent = Core::VectorHashMap; + using Parent::Parent; + + public: + // int´Â VBSortedPool°ú interface ¸ÂÃß´Â ¿ëµµ¿¡ ºÒ°úÇÔ. + Mesh& Add(Core::ObjectID id, int, Mesh& mesh); + }; + } +} diff --git a/SOCEngine/SOCEngine/Rendering/Postprocessing/Bloom.cpp b/SOCEngine/SOCEngine/Rendering/Postprocessing/Bloom.cpp index 6665f400..6fa89738 100644 --- a/SOCEngine/SOCEngine/Rendering/Postprocessing/Bloom.cpp +++ b/SOCEngine/SOCEngine/Rendering/Postprocessing/Bloom.cpp @@ -133,8 +133,17 @@ void Bloom::RenderBloom(DirectX& dx, RenderTexture& outRT, const RenderTexture& void Bloom::SetElapsedTime(float time) { - Half hTime(time); - Half hInvTime(1.0f / time); + uint packedTime = 0; - _paramData.packedDeltaTime = (hInvTime.GetValue() << 16) | hTime.GetValue(); + if (fabsf(time) <= FLT_EPSILON) + packedTime = 0; + else + { + Half hTime(time); + Half hInvTime(1.0f / time); + + packedTime = (hInvTime.GetValue() << 16) | hTime.GetValue(); + } + + _paramData.packedDeltaTime = packedTime; } \ No newline at end of file diff --git a/SOCEngine/SOCEngine/SOCEngine.vcxproj b/SOCEngine/SOCEngine/SOCEngine.vcxproj index bd2bbe31..5247b940 100644 --- a/SOCEngine/SOCEngine/SOCEngine.vcxproj +++ b/SOCEngine/SOCEngine/SOCEngine.vcxproj @@ -157,6 +157,7 @@ + @@ -393,6 +394,7 @@ + diff --git a/SOCEngine/SOCEngine/SOCEngine.vcxproj.filters b/SOCEngine/SOCEngine/SOCEngine.vcxproj.filters index 88227619..e6dee72c 100644 --- a/SOCEngine/SOCEngine/SOCEngine.vcxproj.filters +++ b/SOCEngine/SOCEngine/SOCEngine.vcxproj.filters @@ -1030,6 +1030,9 @@ Core\Transform + + Rendering\Mesh\Pool + @@ -1350,6 +1353,9 @@ Rendering\Postprocessing\MotionBlur + + Rendering\Mesh\Pool +