Nameless Engine
Loading...
Searching...
No Matches
ne::ShaderCpuWriteResourceManager Class Reference

#include <ShaderCpuWriteResourceManager.h>

Classes

struct  Resources
 

Public Member Functions

 ShaderCpuWriteResourceManager (const ShaderCpuWriteResourceManager &)=delete
 
ShaderCpuWriteResourceManageroperator= (const ShaderCpuWriteResourceManager &)=delete
 
 ~ShaderCpuWriteResourceManager ()
 
std::variant< ShaderCpuWriteResourceUniquePtr, ErrorcreateShaderCpuWriteResource (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)
 
void updateResources (size_t iCurrentFrameResourceIndex)
 
void markResourceAsNeedsUpdate (ShaderCpuWriteResource *pResourceToDestroy)
 
std::pair< std::recursive_mutex, Resources > * getResources ()
 

Private Member Functions

 ShaderCpuWriteResourceManager (Renderer *pRenderer)
 
std::variant< ShaderCpuWriteResourceUniquePtr, ErrorhandleResourceCreation (std::variant< std::unique_ptr< ShaderCpuWriteResource >, Error > result)
 
void destroyResource (ShaderCpuWriteResource *pResourceToDestroy)
 

Private Attributes

RendererpRenderer = nullptr
 
std::pair< std::recursive_mutex, ResourcesmtxShaderCpuWriteResources
 

Friends

class Renderer
 
class ShaderCpuWriteResourceUniquePtr
 

Detailed Description

Stores all shader resources with CPU write access.

Constructor & Destructor Documentation

◆ ~ShaderCpuWriteResourceManager()

ne::ShaderCpuWriteResourceManager::~ShaderCpuWriteResourceManager ( )

Makes sure that no resource exists.

◆ ShaderCpuWriteResourceManager()

ne::ShaderCpuWriteResourceManager::ShaderCpuWriteResourceManager ( Renderer pRenderer)
private

Initializes manager.

Parameters
pRenderer

Member Function Documentation

◆ createShaderCpuWriteResource()

std::variant< ShaderCpuWriteResourceUniquePtr, Error > ne::ShaderCpuWriteResourceManager::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 
)

Creates a new render-specific shader resource.

Parameters
sShaderResourceNameName of the resource we are referencing (should be exactly the same as the resource name written in the shader file we are referencing).
sResourceAdditionalInfoAdditional text that we will append to created resource name (used for logging).
iResourceSizeInBytesSize of the data that this resource will contain. Note that this size will most likely be padded to be a multiple of 256 because of the hardware requirement for shader constant buffers.
pipelinesToUsePipelines that use shader/parameters we are referencing.
onStartedUpdatingResourceFunction that will be called when started updating resource data. Function returns pointer to data of the specified resource data size that needs to be copied into the resource.
onFinishedUpdatingResourceFunction that will be called when finished updating (usually used for unlocking resource data mutex).
Returns
Error if something went wrong, otherwise created shader resource.

◆ destroyResource()

void ne::ShaderCpuWriteResourceManager::destroyResource ( ShaderCpuWriteResource pResourceToDestroy)
private

Called by shader CPU write resource unique pointers to destroy the specified resource because it will no longer be used.

Parameters
pResourceToDestroyResource to destroy.

◆ getResources()

std::pair< std::recursive_mutex, ShaderCpuWriteResourceManager::Resources > * ne::ShaderCpuWriteResourceManager::getResources ( )

Returns internal resources.

Returns
Internal resources.

◆ handleResourceCreation()

std::variant< ShaderCpuWriteResourceUniquePtr, Error > ne::ShaderCpuWriteResourceManager::handleResourceCreation ( std::variant< std::unique_ptr< ShaderCpuWriteResource >, Error result)
private

Processes resource creation.

Parameters
resultResult of resource creation function.
Returns
Result of resource creation.

◆ markResourceAsNeedsUpdate()

void ne::ShaderCpuWriteResourceManager::markResourceAsNeedsUpdate ( ShaderCpuWriteResource pResourceToDestroy)

Marks resource as "needs update", this will cause resource's update callback function to be later called multiple times.

Parameters
pResourceToDestroyResource to mark as "needs update".

◆ updateResources()

void ne::ShaderCpuWriteResourceManager::updateResources ( size_t  iCurrentFrameResourceIndex)

Updates all resources marked as "needs update" and copies new (updated) data to the GPU resource of the specified frame resource.

Parameters
iCurrentFrameResourceIndexIndex of the frame resource that will be used to submit the next frame.

Member Data Documentation

◆ mtxShaderCpuWriteResources

std::pair<std::recursive_mutex, Resources> ne::ShaderCpuWriteResourceManager::mtxShaderCpuWriteResources
private

Shader CPU write resources.

◆ pRenderer

Renderer* ne::ShaderCpuWriteResourceManager::pRenderer = nullptr
private

Renderer that owns this manager.


The documentation for this class was generated from the following files: