Sleeping Wombat GUI  0.100
swGUI
Public Member Functions | Private Member Functions | Private Attributes | List of all members
DX11Renderer Class Reference

Renderer obsługujący DirectX 11. More...

#include <DX11Renderer.h>

Inheritance diagram for DX11Renderer:
IRenderer DX11AuxiliaryObjects DX11APIObjects

Public Member Functions

 DX11Renderer (RendererUsage usage=USE_AS_IMMEDIATE)
 Klasa będzie renderować w trybie immediate albo deferred. More...
 
 ~DX11Renderer ()
 
bool SupportsDefferedContextRendering () override
 Informuje czy Renderer nadaje się do renderowania w wielu wątkach do opóźnionego contextu. More...
 
bool IsValid () override
 
virtual void Draw (const DrawCommand &command) override
 
virtual void DrawInstanced (const DrawInstancedCommand &command) override
 
virtual void SetRenderTarget (const SetRenderTargetCommand &command) override
 
virtual void SetRenderTarget (const SetRenderTargetExCommand &command) override
 
virtual void ClearRenderTarget (const ClearRenderTargetCommand &command) override
 
virtual void UpdateBuffer (const UpdateBufferCommand &command) override
 
virtual void BindBuffer (const BindBufferCommand &command) override
 
virtual void UpdateAndBindBuffer (const UpdateBindBuffer &command) override
 
virtual void SetDefaultBuffers (const SetDefaultBuffersCommand &command) override
 
virtual void SetShaderState (const SetShaderStateCommand &command) override
 
virtual void SetShaderState (const SetShaderStateExCommand &command) override
 
virtual void SetShaderState (const SetRenderStateCommand &command) override
 
virtual void SetShaderState (const SetRenderStateExCommand &command) override
 
virtual void CopyTexture (const CopyTextureCommand &command) override
 
- Public Member Functions inherited from IRenderer
 IRenderer ()=default
 
virtual ~IRenderer ()=default
 

Private Member Functions

bool SetVertexBuffer (BufferObject *buffer, unsigned int offset)
 
void SetIndexBuffer (BufferObject *buffer, unsigned int offset, bool extendedIndex)
 
void SetRenderTarget (RenderTargetObject *const targets[MAX_BOUND_RENDER_TARGETS], RenderTargetObject *depthStencil)
 
void SetTextures (TextureObject *const texturesArray[MAX_BOUND_RENDER_TARGETS], const uint8 shaderTypes[MAX_BOUND_RENDER_TARGETS])
 

Private Attributes

ID3D11DeviceContext * m_localDeviceContext
 
bool m_valid
 Jeżeli klasa nie została zainicjowana poprawnie, to będzie tu wartość false. More...
 
RendererUsage m_usageType
 Informacja jak będzie używany rederer. More...
 

Additional Inherited Members

- Protected Member Functions inherited from DX11AuxiliaryObjects
void init_buffers (unsigned int size_per_frame, unsigned int size_per_mesh)
 Tworzy bufory stałych dla shadera. More...
 
void init_depth_states ()
 
void release_DirectX () override
 Zwalania obiekty DirectXa. Funkcja wywołuje tę samą funkcję z obiektu potomnego, żeby zwolnić wszystkie obiekty, które istnieją. More...
 
- Protected Member Functions inherited from DX11APIObjects
void set_swapchain_desc (const DXGI_SWAP_CHAIN_DESC &swap_chain_desc)
 Funkcja ustawia deskryptor dla obiektów Device, DeviceContext i SwapChain DirectXa. More...
 
void set_viewport_desc (const D3D11_VIEWPORT &view_port_desc)
 Funkcja ustawia deskryptor dla Viewportu. Nie jest on ustawiany jako aktywny w DirectX, trzeba wywołać funkcję init_viewport. More...
 
void set_feature_levels (D3D_FEATURE_LEVEL *feature_levels, unsigned int elements)
 ustawia podaną w parametrze tablicę z levelami. Tablica nie powinna zostać usunięta, ponieważ nie jest kopiowana. More...
 
void set_window_resolution (unsigned int window_width, unsigned int window_height)
 
void set_depth_stencil_format (DXGI_FORMAT depth_stencil_format)
 
void set_vertex_layout (DX11_DEFAULT_VERTEX_LAYOUT layout)
 Ustawia jeden z domyślnych deskryptorów layoutów zdefiniowanych w klasie. Funkcja nie ustawia żadnego layoutu w directX. More...
 
void set_vertex_layout (D3D11_INPUT_ELEMENT_DESC *layout, unsigned int array_size)
 Ustawia podany deskryptor layoutu. Funkcja nie ustawia żadnego layoutu w directX. More...
 
void set_sampler_desc (D3D11_SAMPLER_DESC sampler_desc)
 
void set_rasterizer_desc (const D3D11_RASTERIZER_DESC &rasterizer_desc)
 Ustawia podany w parametrze deskrytptor rasteryzatora. More...
 
ID3D11VertexShader * load_vertex_shader (const std::wstring &file_name, const std::string &shader_name, const char *shader_model)
 Tworzy obiekt VertexShader na podstawie pliku. More...
 
ID3D11VertexShader * load_vertex_shader (const std::wstring &file_name, const std::string &shader_name, ID3D11InputLayout **layout, D3D11_INPUT_ELEMENT_DESC *layout_desc, unsigned int array_size, const char *shader_model)
 Tworzy obiekt vertex shadera na podstawie pliku. Zwraca również layout dla podanej struktury wierzchołka. Nie należy używać tej funkcji, jeżeli layout nie jest rzeczywiście potrzebny. Trzeba pamietać o zwolnieniu go, kiedy przestanie być potrzebny. More...
 
ID3D11PixelShader * load_pixel_shader (const std::wstring &file_name, const std::string &shader_name, const char *shader_model)
 
DX11_INIT_RESULT InitDevicesAndSwapChain (HWND window, bool fullscreen, bool single_thread=true)
 Tworzy obiekty swap_chain, device i device_context. More...
 
DX11_INIT_RESULT init_viewport ()
 Ustawia viewport zgodny z aktualnie ustawionym deskryptorem. More...
 
DX11_INIT_RESULT init_z_buffer_and_render_target ()
 Funkcja tworzy z-bufffer oraz pobiera tylny bufor i tworzy z niego render target. Następnie widok z bufora i widok tylnego bufora są ustawione jako cel dla funkcji renderujących renderowania. More...
 
DX11_INIT_RESULT init_vertex_shader (const std::wstring &file_name, const std::string &shader_name)
 Funkcja tworzy shader na podstawie podanego pliku, kompiluje go, a potem obudowuje klasą będącą interfejsem shadera. Parametr shader_name oznacza nazwę funkcji, od której zaczyna się wykonanie kodu shadera. More...
 
DX11_INIT_RESULT init_pixel_shader (const std::wstring &file_name, const std::string &shader_name)
 Funkcja tworzy shader na podstawie podanego pliku, kompiluje go, a potem obudowuje klasą będącą interfejsem shadera. Parametr shader_name oznacza nazwę funkcji, od której zaczyna się wykonanie kodu shadera. More...
 
DX11_INIT_RESULT init_sampler ()
 Tworzy domyślny smapler. More...
 
 DX11APIObjects ()
 
 ~DX11APIObjects ()=default
 
DX11_INIT_RESULT init_DX11 (int width, int height, HWND window, bool fullscreen, const std::wstring &pix_shader_file, const std::string &pix_shader_name, const std::wstring &vert_shader_file, const std::string &vert_shader_name, bool single_thread=true)
 Funkcja do pełnej inicjalizacji DirectXa. More...
 
DX11_INIT_RESULT init_DX11 (int width, int height, HWND window, bool fullscreen, bool single_thread=true)
 Funkcja do pełnej inicjalizacji DirectXa. More...
 
void begin_scene ()
 Czyścimy tylny bufor oraz z-bufor i wywołujemy funcję inicjującą renderowanie. More...
 
void end_scene_and_present ()
 Wywołuje funkcję swap_chain->Present w celu wyświetlenia narysowanej sceny na monitorze. More...
 
void SetDebugName (ID3D11DeviceChild *child, const std::string &name)
 
bool IsDebugLayerEnabled ()
 
- Static Protected Member Functions inherited from DX11APIObjects
static DXGI_SWAP_CHAIN_DESC get_swap_chain_desc ()
 
static D3D11_VIEWPORT get_viewport_desc ()
 
static D3D_FEATURE_LEVEL get_current_feature_level ()
 
static D3D11_TEXTURE2D_DESC get_z_buffer_desc ()
 
static D3D11_DEPTH_STENCIL_VIEW_DESC get_z_buffer_view_desc ()
 
static D3D11_SAMPLER_DESC get_sampler_desc ()
 
static D3D11_RASTERIZER_DESC get_rasterizer_desc ()
 
- Static Protected Attributes inherited from DX11AuxiliaryObjects
static ID3D11Buffer * const_per_frame = nullptr
 Bufor stałych zmieniających się nie częściej niż co ramkę More...
 
static ID3D11Buffer * const_per_mesh = nullptr
 Bufor stałych zmieniający się dla każdej części mesha. More...
 
static ID3D11DepthStencilState * depth_enabled = nullptr
 Do włączania z-bufora. More...
 
static ID3D11DepthStencilState * depth_disabled = nullptr
 Do wyłączania z-bufora. More...
 
- Static Protected Attributes inherited from DX11APIObjects
static DX11APIObjectsthis_ptr = nullptr
 Ważne, żeby nie zainicjowac obiektu wielokrotnie. More...
 
static bool m_useDebugLayer = false
 
static unsigned int _window_width = 1024
 
static unsigned int _window_height = 768
 
static std::string _pixel_shader_model = "ps_4_0"
 
static std::string _vertex_shader_model = "vs_4_0"
 
static DXGI_SWAP_CHAIN_DESC _swap_chain_desc
 Domyślny deskryptor głównych obiektów DirectX11. More...
 
static D3D11_VIEWPORT _view_port_desc
 Domyślny deskryptor viewportu. Jeżeli użytkownik poda własny to zostanie on nadpisany. More...
 
static D3D_FEATURE_LEVEL * _feature_levels = nullptr
 Tablica z preferowanymi poziomami DirectX. Domyślnie nullptr, uzytkownik może zdefiniować. More...
 
static unsigned int _num_feature_levels = 0
 Liczba elementów powyższej tablicy. More...
 
static D3D_FEATURE_LEVEL _current_feature_level
 Przechowuje poziom DirectXa. More...
 
static D3D11_TEXTURE2D_DESC _z_buffer_desc
 Deskryptor z i stencil bufora. More...
 
static D3D11_DEPTH_STENCIL_VIEW_DESC _z_buffer_view_desc
 Deskryptor widoku z i stencil bufora. More...
 
static D3D11_INPUT_ELEMENT_DESC * _vertex_layout_desc = nullptr
 Aktualny deskryptor layoutu wierzchołka. More...
 
static unsigned int _layout_elements_count = 0
 Liczba elementów w talicy deskryptora layoutu. More...
 
static D3D11_SAMPLER_DESC _sampler_desc
 Deskryptor samplera. More...
 
static D3D11_RASTERIZER_DESC _rasterizer_desc
 Deskryptor rasteryzatora. More...
 
static ID3D11Debug * debug_interface = nullptr
 Pozwala na pobranie bardziej szczegółowych informacji debugowych. More...
 
static ID3D11Device * device = nullptr
 Zmienna służy do tworzenia obiektów, buforów tekstur i zasobów. More...
 
static ID3D11DeviceContext * device_context = nullptr
 Zmienna używana do renderowania sceny, ustawiania buforów, shaderów itp. More...
 
static IDXGISwapChain * swap_chain = nullptr
 Służy do prezentowania ramki na ekranie. More...
 
static ID3D11RenderTargetView * render_target = nullptr
 Widok bufora docelowego renderowania, czyli bufora tylnego. More...
 
static ID3D11DepthStencilView * z_buffer_view = nullptr
 Widok z-buffora. More...
 
static ID3D11Texture2D * back_buffer = nullptr
 Tekstura bufora tylnego. More...
 
static ID3D11Texture2D * z_buffer = nullptr
 Tekstura z-bufora. More...
 
static ID3D11SamplerState * default_sampler = nullptr
 Obiekt domyślnego samplera. More...
 
static ID3D11InputLayout * default_vertex_layout = nullptr
 Layout formatu wierzchołka używanego dla meshy. More...
 
static ID3D11VertexShader * default_vertex_shader = nullptr
 Obiekt domyślnego vertex shadera. More...
 
static ID3D11PixelShader * default_pixel_shader = nullptr
 Obiekt domyślnego piksel shadera. More...
 

Detailed Description

Renderer obsługujący DirectX 11.

Constructor & Destructor Documentation

DX11Renderer::DX11Renderer ( RendererUsage  usage = USE_AS_IMMEDIATE)

Klasa będzie renderować w trybie immediate albo deferred.

Jeżeli ustawiono flagę D3D11_CREATE_DEVICE_SINGLETHREADED, to nie wolno podać w parametrze RendererUsage::USE_AS_DEFERRED.

Można sprawdzić czy klasa została zainicjowana poprawnie wywołując funkcję isValid.

DX11Renderer::~DX11Renderer ( )

Tylko w takim wypadku alokowaliśmy nowy kontekst. Inaczej zwalanianie należy do klasy DX11_interfaces_container.

Member Function Documentation

void DX11Renderer::BindBuffer ( const BindBufferCommand command)
overridevirtual

Implements IRenderer.

void DX11Renderer::ClearRenderTarget ( const ClearRenderTargetCommand command)
overridevirtual

Implements IRenderer.

void DX11Renderer::CopyTexture ( const CopyTextureCommand command)
overridevirtual

Implements IRenderer.

void DX11Renderer::Draw ( const DrawCommand command)
overridevirtual

Implements IRenderer.

void DX11Renderer::DrawInstanced ( const DrawInstancedCommand command)
overridevirtual

Implements IRenderer.

bool DX11Renderer::IsValid ( )
inlineoverridevirtual

Implements IRenderer.

void DX11Renderer::SetDefaultBuffers ( const SetDefaultBuffersCommand command)
overridevirtual

Implements IRenderer.

void DX11Renderer::SetIndexBuffer ( BufferObject buffer,
unsigned int  offset,
bool  extendedIndex 
)
private
void DX11Renderer::SetRenderTarget ( const SetRenderTargetCommand command)
overridevirtual

Implements IRenderer.

void DX11Renderer::SetRenderTarget ( const SetRenderTargetExCommand command)
overridevirtual

Implements IRenderer.

void DX11Renderer::SetRenderTarget ( RenderTargetObject *const  targets[MAX_BOUND_RENDER_TARGETS],
RenderTargetObject depthStencil 
)
private
void DX11Renderer::SetShaderState ( const SetShaderStateCommand command)
overridevirtual

Implements IRenderer.

void DX11Renderer::SetShaderState ( const SetShaderStateExCommand command)
overridevirtual

Implements IRenderer.

void DX11Renderer::SetShaderState ( const SetRenderStateCommand command)
overridevirtual

Implements IRenderer.

void DX11Renderer::SetShaderState ( const SetRenderStateExCommand command)
overridevirtual

Implements IRenderer.

void DX11Renderer::SetTextures ( TextureObject *const  texturesArray[MAX_BOUND_RENDER_TARGETS],
const uint8  shaderTypes[MAX_BOUND_RENDER_TARGETS] 
)
private
bool DX11Renderer::SetVertexBuffer ( BufferObject buffer,
unsigned int  offset 
)
private
bool DX11Renderer::SupportsDefferedContextRendering ( )
inlineoverridevirtual

Informuje czy Renderer nadaje się do renderowania w wielu wątkach do opóźnionego contextu.

Implements IRenderer.

void DX11Renderer::UpdateAndBindBuffer ( const UpdateBindBuffer command)
overridevirtual

Implements IRenderer.

void DX11Renderer::UpdateBuffer ( const UpdateBufferCommand command)
overridevirtual

Implements IRenderer.

Member Data Documentation

ID3D11DeviceContext* DX11Renderer::m_localDeviceContext
private

Kontekst urządzenia służący do renderowania. W zależności czy stosujemy opóźnione renderowanie (deferred rendering) czy nie, ta zmienna przechowuje kopię wskaźnika z DX11_interfaces_container lub opóźniony kontekst (deferred context). W trakcie renderowania nie musimy wiedzieć z czym mamy do czynienia.

RendererUsage DX11Renderer::m_usageType
private

Informacja jak będzie używany rederer.

bool DX11Renderer::m_valid
private

Jeżeli klasa nie została zainicjowana poprawnie, to będzie tu wartość false.


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