Nameless Engine
Loading...
Searching...
No Matches
ShaderCpuWriteResourceManager.h
1#pragma once
2
3// Standard.
4#include <set>
5#include <memory>
6#include <mutex>
7#include <array>
8#include <unordered_map>
9#include <unordered_set>
10
11// Custom.
12#include "shader/general/resources/ShaderResource.h"
13#include "shader/general/resources/cpuwrite/ShaderCpuWriteResourceUniquePtr.h"
14#include "render/general/resources/frame/FrameResourcesManager.h"
15
16namespace ne {
17 class Renderer;
18 class Pipeline;
19
22 // Only renderer should be allowed to create this manager.
23 friend class Renderer;
24
25 // Unique pointers will notify the manager before destruction.
27
28 public:
30 struct Resources {
37 std::unordered_map<ShaderCpuWriteResource*, std::unique_ptr<ShaderCpuWriteResource>> all;
38
40 std::array<
41 std::unordered_set<ShaderCpuWriteResource*>,
44 };
45
47
50
53
73 std::variant<ShaderCpuWriteResourceUniquePtr, Error> createShaderCpuWriteResource(
74 const std::string& sShaderResourceName,
75 const std::string& sResourceAdditionalInfo,
76 size_t iResourceSizeInBytes,
77 const std::unordered_set<Pipeline*>& pipelinesToUse,
78 const std::function<void*()>& onStartedUpdatingResource,
79 const std::function<void()>& onFinishedUpdatingResource);
80
88 void updateResources(size_t iCurrentFrameResourceIndex);
89
96 void markResourceAsNeedsUpdate(ShaderCpuWriteResource* pResourceToDestroy);
97
103 std::pair<std::recursive_mutex, Resources>* getResources();
104
105 private:
112
120 std::variant<ShaderCpuWriteResourceUniquePtr, Error>
121 handleResourceCreation(std::variant<std::unique_ptr<ShaderCpuWriteResource>, Error> result);
122
129 void destroyResource(ShaderCpuWriteResource* pResourceToDestroy);
130
132 Renderer* pRenderer = nullptr;
133
135 std::pair<std::recursive_mutex, Resources> mtxShaderCpuWriteResources;
136 };
137} // namespace ne
Definition: Error.h:27
static constexpr unsigned int getFrameResourcesCount()
Definition: FrameResourcesManager.h:74
Definition: Renderer.h:39
Definition: ShaderCpuWriteResourceManager.h:21
std::pair< std::recursive_mutex, Resources > mtxShaderCpuWriteResources
Definition: ShaderCpuWriteResourceManager.h:135
Renderer * pRenderer
Definition: ShaderCpuWriteResourceManager.h:132
~ShaderCpuWriteResourceManager()
Definition: ShaderCpuWriteResourceManager.cpp:183
void updateResources(size_t iCurrentFrameResourceIndex)
Definition: ShaderCpuWriteResourceManager.cpp:79
std::pair< std::recursive_mutex, Resources > * getResources()
Definition: ShaderCpuWriteResourceManager.cpp:175
std::variant< ShaderCpuWriteResourceUniquePtr, Error > createShaderCpuWriteResource(const std::string &sShaderResourceName, const std::string &sResourceAdditionalInfo, size_t iResourceSizeInBytes, const std::unordered_set< Pipeline * > &pipelinesToUse, const std::function< void *()> &onStartedUpdatingResource, const std::function< void()> &onFinishedUpdatingResource)
Definition: ShaderCpuWriteResourceManager.cpp:17
std::variant< ShaderCpuWriteResourceUniquePtr, Error > handleResourceCreation(std::variant< std::unique_ptr< ShaderCpuWriteResource >, Error > result)
Definition: ShaderCpuWriteResourceManager.cpp:54
void markResourceAsNeedsUpdate(ShaderCpuWriteResource *pResourceToDestroy)
Definition: ShaderCpuWriteResourceManager.cpp:132
void destroyResource(ShaderCpuWriteResource *pResourceToDestroy)
Definition: ShaderCpuWriteResourceManager.cpp:154
Definition: ShaderCpuWriteResourceUniquePtr.h:17
Definition: ShaderResource.h:120
Definition: ShaderCpuWriteResourceManager.h:30
std::array< std::unordered_set< ShaderCpuWriteResource * >, FrameResourcesManager::getFrameResourcesCount()> vToBeUpdated
Definition: ShaderCpuWriteResourceManager.h:43
std::unordered_map< ShaderCpuWriteResource *, std::unique_ptr< ShaderCpuWriteResource > > all
Definition: ShaderCpuWriteResourceManager.h:37