Sleeping Wombat Graphic API  1.010
swGraphicAPI
Public Member Functions | Protected Attributes | Private Member Functions | List of all members
ResourceManager Class Reference

Manager for low level resources. More...

#include <ResourceManager.h>

Public Member Functions

RenderTargetObjectCreateRenderTarget (const std::wstring &name, const RenderTargetDescriptor &renderTargetDescriptor)
 Znajduje Loader pasujący do pliku podanego w parametrze. More...
 
RenderTargetObjectAddRenderTarget (RenderTargetObject *renderTarget, const std::wstring &name)
 Dodaje renderTarget do ResourceManagera, jeżeli jeszcze nie istniał. More...
 
Geting existing resource

Gets resource if exist otherwise returns nullptr.

BlendingStateGetBlendingState (const std::wstring &name)
 
RasterizerStateGetRasterizerState (const std::wstring &name)
 
DepthStencilStateGetDepthStencilState (const std::wstring &name)
 
BlendingStateGetBlendingState (const BlendingInfo &info)
 
RasterizerStateGetRasterizerState (const RasterizerStateInfo &info)
 
DepthStencilStateGetDepthStencilState (const DepthStencilInfo &info)
 
RenderTargetObjectGetRenderTarget (const std::wstring &name)
 Zwraca RenderTarget o podanej nazwie, jeżeli jest wczytany.
 
VertexShaderGetVertexShader (const std::wstring &name)
 Zwraca vertex shader o podanej nazwie, jeżeli jest wczytany.
 
PixelShaderGetPixelShader (const std::wstring &name)
 Zwraca pixel shader o podanej nazwie, jeżeli jest wczytany.
 
TextureObjectGetTexture (const std::wstring &name)
 Zwraca teksturę o podanej nazwie, jeżeli jest wczytany.
 
BufferObjectGetVertexBuffer (const std::wstring &name)
 Zwraca bufor wierzchołków o podanej nazwie, jeżeli jest wczytany.
 
BufferObjectGetConstantBuffer (const std::wstring &name)
 Zwraca bufor stałych o podanej nazwie, jeżeli jest wczytany.
 
BufferObjectGetIndexBuffer (const std::wstring &name)
 Zwraca bufor indeksów o podanej nazwie, jeżeli jest wczytany.
 
ShaderInputLayoutGetLayout (const std::wstring &name)
 
Resource loading

Load assets from specified file. Functions protect from loading assets multiple times.

TextureObjectLoadTexture (const std::wstring &fileName)
 Dodaje teksturę do ModelManagera, jeżeli jeszcze nie istniała. More...
 
VertexShaderLoadVertexShader (const std::wstring &fileName, const std::string &shaderEntry)
 Dodaje vertex shader do ResourceManagera. Jeżeli obiekt już istniał, to nie jest tworzony nowy. More...
 
VertexShaderLoadVertexShader (const std::wstring &fileName, const std::string &shaderEntry, ShaderInputLayout **layout, InputLayoutDescriptor *layout_desc)
 Dodaje vertex shader do ResourceManagera. Jeżeli obiekt już istniał, to nie jest tworzony nowy. Tworzy też layout wierzchołka związany z tym shaderem i zwraca go w zmiennej layout. More...
 
PixelShaderLoadPixelShader (const std::wstring &fileName, const std::string &shaderEntry)
 Dodaje pixel shader do ResourceManagera. Jeżeli obiekt już istniał, to nie jest tworzony nowy. More...
 
GeometryShaderLoadGeometryShader (const std::wstring &fileName, const std::string &shaderEntry)
 
ControlShaderLoadControlShader (const std::wstring &fileName, const std::string &shaderEntry)
 
EvaluationShaderLoadEvaluationShader (const std::wstring &fileName, const std::string &shaderEntry)
 
Resource creation

You can create assets in code using these functions. Remember to give unique names for your assets. Engine uses convention, that all generated resources have :: before name, to distinguish them from assets loaded from files.

ResourcePtr< BufferObjectCreateVertexBuffer (const std::wstring &name, const void *buffer, unsigned int element_size, unsigned int vert_count)
 Dodaje do ResourceManagera bufor wierzchołków. Jeżeli pod taką nazwą istnieje jakiś bufor, to zostanie zwrócony wskaźnik na niego. More...
 
ResourcePtr< BufferObjectCreateVertexBuffer (const std::wstring &name, const VertexBufferInitData &data)
 Creates vetex buffer. More...
 
ResourcePtr< BufferObjectCreateIndexBuffer (const std::wstring &name, const void *buffer, unsigned int element_size, unsigned int vert_count)
 Dodaje do ResourceManagera bufor indeksów. Jeżeli pod taką nazwą istnieje jakiś bufor, to zostanie zwrócony wskaźnik na niego. More...
 
ResourcePtr< BufferObjectCreateIndexBuffer (const std::wstring &name, const IndexBufferInitData &data)
 Vreates index buffer. More...
 
ResourcePtr< BufferObjectCreateConstantsBuffer (const std::wstring &name, const void *buffer, unsigned int size)
 Dodaje do ResourceManagera bufor stałch dla shadera. Jeżeli pod taką nazwą istnieje jakiś bufor, to zostanie zwrócony wskaźnik na niego. More...
 
ResourcePtr< BufferObjectCreateConstantsBuffer (const std::wstring &name, const ConstantBufferInitData &data)
 Creates constant buffer. More...
 
ResourcePtr< BlendingStateCreateBlendingState (const std::wstring &name, const BlendingInfo &info)
 Created BlendingState object. More...
 
ResourcePtr< RasterizerStateCreateRasterizerState (const std::wstring &name, const RasterizerStateInfo &info)
 Created RasterizerState object. More...
 
ResourcePtr< DepthStencilStateCreateDepthStencilState (const std::wstring &name, const DepthStencilInfo &info)
 Created DepthStencilState object. More...
 
Listing resources
std::vector< ResourcePtr< BufferObject > > ListVertexBuffers ()
 Listowanie buforów wierzchołków.
 
std::vector< ResourcePtr< BufferObject > > ListIndexBuffers ()
 Listowanie buforów indeksów.
 
std::vector< ResourcePtr< BufferObject > > ListConstantBuffers ()
 Listowanie buforów stałych.
 
std::vector< ResourcePtr< ShaderInputLayout > > ListShaderLayouts ()
 Listowanie layoutów wierzchołków.
 
std::vector< ResourcePtr< TextureObject > > ListTextures ()
 Listowanie tekstur.
 
std::vector< ResourcePtr< VertexShader > > ListVertexShaders ()
 Listowanie vertex shaderów.
 
std::vector< ResourcePtr< PixelShader > > ListPixelShaders ()
 Listowanie pixel shaderów.
 
std::vector< ResourcePtr< RenderTargetObject > > ListRenderTargets ()
 Listowanie render targetów.
 

Protected Attributes

ResourceContainer< BlendingStatem_blendingState
 BlendingState objects.
 
ResourceContainer< RasterizerStatem_rasterizerState
 RasterizerState objects.
 
ResourceContainer< DepthStencilStatem_depthStencilState
 DepthStencilState objects.
 
ResourceContainer< VertexShaderm_vertexShader
 Vertex shaders.
 
ResourceContainer< PixelShaderm_pixelShader
 Pixel shaders.
 
ResourceContainer< GeometryShaderm_geometryShader
 Geometry shaders.
 
ResourceContainer< EvaluationShaderm_evaluationShader
 Tesselation evaluation shaders.
 
ResourceContainer< ControlShaderm_controlShaders
 Tesselation control shaders.
 
ResourceContainer< TextureObjectm_texture
 Textures.
 
ResourceContainer< BufferObjectm_vertexBuffer
 Vertex buffers.
 
ResourceContainer< BufferObjectm_indexBuffer
 Index buffers.
 
ResourceContainer< BufferObjectm_constantBuffer
 Shader constant buffers.
 
ResourceContainer< ShaderInputLayoutm_vertexLayout
 Vertex layouts.
 
ResourceContainer< RenderTargetObjectm_renderTarget
 Obiekty mogące służyć za render target.
 

Private Member Functions

virtual MemoryChunk LoadTextureImpl (const filesystem::Path &filePath, TextureInfo &texInfo)
 Implementation of texture loading. More...
 

Detailed Description

Manager for low level resources.

Todo:
This class should implement generic high level asssets managment.

Member Function Documentation

RenderTargetObject * ResourceManager::AddRenderTarget ( RenderTargetObject renderTarget,
const std::wstring &  name 
)

Dodaje renderTarget do ResourceManagera, jeżeli jeszcze nie istniał.

Note
Funkcja nie dodaje odwołania do obiektu, bo nie zakłada, że ktoś go od razu użyje. W każdym miejscu, gdzie zostanie przypisany zwrócony obiekt, należy pamiętać o dodaniu odwołania oraz skasowaniu go, gdy obiekt przestanie być używany.
Jeżeli renderTarget już istniał (jego nazwa), to ten podany w parametrze nie zostanie dodany. Oznacza to, że za jego zwolnienie odpowiada ten, kto go stworzył. Trzeba zawsze sprawdzić czy zwrócona wartość jest tym samym co podaliśmy.
Todo:
Nie może tak zostać, że ktoś dodaje renderTarget i musi sprawdzić czy nie dostał innego. Nie można też zmuszać kogoś do zwalniania pamięci po renderTargecie. Wogóle dodawanie renderTargetów musi się odbywać jakoś inaczej. Najlepiej, żeby były one tworzone przez ResourceManager, ale wtedy trzeba wymyśleć sposób dodawania renderTargetu związanego z buforem okna.
Parameters
[in]renderTargetrenderTarget, który ma zostać dodany.
[in]nameNazwa renderTargetu. Do materiału będzie można się odwołać podając ciąg znaków
Returns
Zwraca wskaźnik na dodany renderTarget.
ResourcePtr< BlendingState > ResourceManager::CreateBlendingState ( const std::wstring &  name,
const BlendingInfo info 
)

Created BlendingState object.

Returns
If object named name exist, returns nullptr.
ResourcePtr< BufferObject > ResourceManager::CreateConstantsBuffer ( const std::wstring &  name,
const void *  buffer,
unsigned int  size 
)

Dodaje do ResourceManagera bufor stałch dla shadera. Jeżeli pod taką nazwą istnieje jakiś bufor, to zostanie zwrócony wskaźnik na niego.

Note
Funkcja nie dodaje odwołania do obiektu, bo nie zakłada, że ktoś go od razu użyje. W każdym miejscu, gdzie zostanie przypisany zwrócony obiekt, należy pamiętać o dodaniu odwołania oraz skasowaniu go, gdy obiekt przestanie być używany.
Parameters
[in]nameNazwa bufora, po której można się będzie odwołać.
[in]bufferWskaźnik na bufor z danym, które mają być przeniesione do bufora DirectXowego.
[in]sizeRozmiar bufora.
Returns
Dodany bufor indeksów. Zwraca nullptr, jeżeli nie udało się stworzyć bufora.
ResourcePtr< BufferObject > ResourceManager::CreateConstantsBuffer ( const std::wstring &  name,
const ConstantBufferInitData data 
)

Creates constant buffer.

Returns
Returns buffer or nullptr if name already exists or buffer creation failed.
ResourcePtr< DepthStencilState > ResourceManager::CreateDepthStencilState ( const std::wstring &  name,
const DepthStencilInfo info 
)

Created DepthStencilState object.

Returns
If object named name exist, returns nullptr.
ResourcePtr< BufferObject > ResourceManager::CreateIndexBuffer ( const std::wstring &  name,
const void *  buffer,
unsigned int  elementSize,
unsigned int  vertCount 
)

Dodaje do ResourceManagera bufor indeksów. Jeżeli pod taką nazwą istnieje jakiś bufor, to zostanie zwrócony wskaźnik na niego.

Note
Funkcja nie dodaje odwołania do obiektu, bo nie zakłada, że ktoś go od razu użyje. W każdym miejscu, gdzie zostanie przypisany zwrócony obiekt, należy pamiętać o dodaniu odwołania oraz skasowaniu go, gdy obiekt przestanie być używany.
Parameters
[in]nameNazwa bufora, po której można się będzie odwołać.
[in]bufferWskaźnik na bufor z danym, które mają być przeniesione do bufora DirectXowego.
[in]elementSizeRozmiar pojedynczego elementu w buforze.
[in]vertCountLiczba wierzchołków/indeksów w buforze.
Returns
Dodany bufor indeksów. Zwraca nullptr, jeżeli nie udało się stworzyć bufora.
ResourcePtr< BufferObject > ResourceManager::CreateIndexBuffer ( const std::wstring &  name,
const IndexBufferInitData data 
)

Vreates index buffer.

Returns
Returns buffer or nullptr if name already exists or buffer creation failed.
ResourcePtr< RasterizerState > ResourceManager::CreateRasterizerState ( const std::wstring &  name,
const RasterizerStateInfo info 
)

Created RasterizerState object.

Returns
If object named name exist, returns nullptr.
RenderTargetObject * ResourceManager::CreateRenderTarget ( const std::wstring &  name,
const RenderTargetDescriptor renderTargetDescriptor 
)

Znajduje Loader pasujący do pliku podanego w parametrze.

Parameters
[in]pathŚcieżka do pliku, dla której szukamy loadera.
Returns
Wskaźnik na odpowiedni loader lub nullptr, jeżeli nie znaleziono pasującego. Tworzy nowy render target.

Funkcja dodaje stworzony obiekt do tablicy m_renderTarget. Jeżeli tekstury bufora colorów, głębokości i stencilu nie są nullptrami, to i one są dodawane do tablicy m_texture.

Tekstury te mają nazwy jak render target + dodany jest człon

  • ::color
  • ::depth
  • ::stencil
Todo:
Przy dodawaniu tekstur nie jest sprawdzane czy one już istnieją. Trzeba albo to sprawdzać, albo zapewnić np. jakąś polityką nazewnictwa, że w ten sposób nie nadpisujemy istniejącej tekstury.
Parameters
[in]nameNazwa identyfikująca render target.
[in]renderTargetDescriptorDeskryptor opisujący parametry render targetu.
Returns
Zwraca stworzony obiekt lub nullptr w przypadku niepowodzenia. Jeżeli render target już istniał, to zwracany jest istniejący obiekt.
ResourcePtr< BufferObject > ResourceManager::CreateVertexBuffer ( const std::wstring &  name,
const void *  buffer,
unsigned int  elementSize,
unsigned int  vertCount 
)

Dodaje do ResourceManagera bufor wierzchołków. Jeżeli pod taką nazwą istnieje jakiś bufor, to zostanie zwrócony wskaźnik na niego.

Note
Funkcja nie dodaje odwołania do obiektu, bo nie zakłada, że ktoś go od razu użyje. W każdym miejscu, gdzie zostanie przypisany zwrócony obiekt, należy pamiętać o dodaniu odwołania oraz skasowaniu go, gdy obiekt przestanie być używany.
Parameters
[in]nameNazwa bufora, po której można się będzie odwołać.
[in]bufferWskaźnik na bufor z danym, które mają być przeniesione do bufora DirectXowego.
[in]elementSizeRozmiar pojedynczego elementu w buforze.
[in]vertCountLiczba wierzchołków/indeksów w buforze.
Returns
Dodany bufor wierzchołków. Zwraca nullptr, jeżeli nie udało się stworzyć bufora.
ResourcePtr< BufferObject > ResourceManager::CreateVertexBuffer ( const std::wstring &  name,
const VertexBufferInitData data 
)

Creates vetex buffer.

Returns
Returns buffer or nullptr if name already exists or buffer creation failed.
ShaderInputLayout* ResourceManager::GetLayout ( const std::wstring &  name)
inline

Zwraca layout o podanej nazwie.

PixelShader * ResourceManager::LoadPixelShader ( const std::wstring &  fileName,
const std::string &  shaderEntry 
)

Dodaje pixel shader do ResourceManagera. Jeżeli obiekt już istniał, to nie jest tworzony nowy.

Note
Funkcja nie dodaje odwołania do obiektu, bo nie zakłada, że ktoś go od razu użyje. W każdym miejscu, gdzie zostanie przypisany zwrócony obiekt, należy pamiętać o dodaniu odwołania oraz skasowaniu go, gdy obiekt przestanie być używany.
Parameters
[in]fileNameNazwa pliku, w którym znajduje się pixel shader.
[in]shaderEntryNazwa funkcji od której ma się zacząć wykonywanie shadera.
Returns
Zwraca obiekt dodanego shadera. Zwraca nullptr, jeżeli shadera nie udało się skompilować.
TextureObject * ResourceManager::LoadTexture ( const std::wstring &  fileName)

Dodaje teksturę do ModelManagera, jeżeli jeszcze nie istniała.

Note
Funkcja nie dodaje odwołania do obiektu, bo nie zakłada, że ktoś go od razu użyje. W każdym miejscu, gdzie zostanie przypisany zwrócony obiekt, należy pamiętać o dodaniu odwołania oraz skasowaniu go, gdy obiekt przestanie być używany.
Parameters
[in]fileNameŚcieżka do tekstury
Returns
Zwraca wskaźnik na dodaną teksturę lub nullptr, jeżeli nie dało się wczytać.
MemoryChunk ResourceManager::LoadTextureImpl ( const filesystem::Path &  filePath,
TextureInfo texInfo 
)
privatevirtual

Implementation of texture loading.

This is hack function. Resource manager have no texture loading function beacause it needs separate library for this. Derived classes will implement it, but in future this must change. ResourceManager must be fully operational class. Otherwise GUI won't load textures.

VertexShader * ResourceManager::LoadVertexShader ( const std::wstring &  fileName,
const std::string &  shaderEntry 
)

Dodaje vertex shader do ResourceManagera. Jeżeli obiekt już istniał, to nie jest tworzony nowy.

Note
Funkcja nie dodaje odwołania do obiektu, bo nie zakłada, że ktoś go od razu użyje. W każdym miejscu, gdzie zostanie przypisany zwrócony obiekt, należy pamiętać o dodaniu odwołania oraz skasowaniu go, gdy obiekt przestanie być używany.
Parameters
[in]fileNameNazwa pliku, w którym znajduje się vertex shader.
[in]shaderEntryNazwa funkcji od której ma się zacząć wykonywanie shadera.
Returns
Zwraca obiekt dodanego shadera. Zwraca nullptr, jeżeli shadera nie udało się skompilować.
VertexShader * ResourceManager::LoadVertexShader ( const std::wstring &  fileName,
const std::string &  shaderEntry,
ShaderInputLayout **  layout,
InputLayoutDescriptor layoutDesc 
)

Dodaje vertex shader do ResourceManagera. Jeżeli obiekt już istniał, to nie jest tworzony nowy. Tworzy też layout wierzchołka związany z tym shaderem i zwraca go w zmiennej layout.

Jeżeli vertex shader wcześniej istniał, to stworzenie layoutu wymaga ponownego skompilowania shadera. Shader taki jest potem kasowany i nie zostaje zdublowany w ResourceManagerze, ale niepotrzebna praca zostaje włożona. Jest więc zadaniem programisty, żeby do takich rzeczy dochodziło jak najrzadziej.

Note
Funkcja nie dodaje odwołania do obiektu, bo nie zakłada, że ktoś go od razu użyje. W każdym miejscu, gdzie zostanie przypisany zwrócony obiekt, należy pamiętać o dodaniu odwołania oraz skasowaniu go, gdy obiekt przestanie być używany.
Parameters
[in]fileNameNazwa pliku, w którym znajduje się vertex shader.
[in]shaderEntryNazwa funkcji od której ma się zacząć wykonywanie shadera.
[out]layoutW zmiennej umieszczany jest wskaźnik na layout wierzchołka. Nawet jeżeli shader się nie skompilował, to pole może mieć wartość inną niż nullptr. Dzieje się tak wtedy, gdy layout istniał już wcześniej.
Attention
Jeżeli vertex shader wcześniej istniał, to stworzenie layoutu wymaga ponownego skompilowania shadera. Shader taki jest potem kasowany i nie zostaje zdublowany w ResourceManagerze, ale niepotrzebna praca zostaje włożona. Jest więc zadaniem programisty, żeby do takich rzeczy dochodziło jak najrzadziej.
Parameters
[in]layoutDescDeskryptor opisujacy tworzony layout.
Returns
Zwraca obiekt dodanego shadera. Zwraca nullptr, jeżeli shadera nie udało się skompilować.
Todo:
Ten kod to jakiś totalny shit. Jak komuś się będzie nudziło kiedyś (ha ha), to może niech poprawi.

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