Sleeping Wombat Graphic API
1.010
swGraphicAPI
|
Renderer obsługujący DirectX 11. More...
#include <DX11Renderer.h>
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. | |
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 |
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. | |
RendererUsage | m_usageType |
Informacja jak będzie używany rederer. | |
Additional Inherited Members | |
![]() | |
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ą. | |
![]() | |
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. | |
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. | |
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... | |
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. | |
void | SetDebugName (ID3D11DeviceChild *child, const std::string &name) |
bool | IsDebugLayerEnabled () |
![]() | |
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 ID3D11Buffer * | const_per_frame = nullptr |
Bufor stałych zmieniających się nie częściej niż co ramkę | |
static ID3D11Buffer * | const_per_mesh = nullptr |
Bufor stałych zmieniający się dla każdej części mesha. | |
static ID3D11DepthStencilState * | depth_enabled = nullptr |
Do włączania z-bufora. | |
static ID3D11DepthStencilState * | depth_disabled = nullptr |
Do wyłączania z-bufora. More... | |
![]() | |
static DX11APIObjects * | this_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. | |
static D3D11_VIEWPORT | _view_port_desc |
Domyślny deskryptor viewportu. Jeżeli użytkownik poda własny to zostanie on nadpisany. | |
static D3D_FEATURE_LEVEL * | _feature_levels = nullptr |
Tablica z preferowanymi poziomami DirectX. Domyślnie nullptr, uzytkownik może zdefiniować. | |
static unsigned int | _num_feature_levels = 0 |
Liczba elementów powyższej tablicy. | |
static D3D_FEATURE_LEVEL | _current_feature_level |
Przechowuje poziom DirectXa. | |
static D3D11_TEXTURE2D_DESC | _z_buffer_desc |
Deskryptor z i stencil bufora. | |
static D3D11_DEPTH_STENCIL_VIEW_DESC | _z_buffer_view_desc |
Deskryptor widoku z i stencil bufora. | |
static D3D11_INPUT_ELEMENT_DESC * | _vertex_layout_desc = nullptr |
Aktualny deskryptor layoutu wierzchołka. | |
static unsigned int | _layout_elements_count = 0 |
Liczba elementów w talicy deskryptora layoutu. | |
static D3D11_SAMPLER_DESC | _sampler_desc |
Deskryptor samplera. | |
static D3D11_RASTERIZER_DESC | _rasterizer_desc |
Deskryptor rasteryzatora. | |
static ID3D11Debug * | debug_interface = nullptr |
Pozwala na pobranie bardziej szczegółowych informacji debugowych. | |
static ID3D11Device * | device = nullptr |
Zmienna służy do tworzenia obiektów, buforów tekstur i zasobów. | |
static ID3D11DeviceContext * | device_context = nullptr |
Zmienna używana do renderowania sceny, ustawiania buforów, shaderów itp. | |
static IDXGISwapChain * | swap_chain = nullptr |
Służy do prezentowania ramki na ekranie. | |
static ID3D11RenderTargetView * | render_target = nullptr |
Widok bufora docelowego renderowania, czyli bufora tylnego. | |
static ID3D11DepthStencilView * | z_buffer_view = nullptr |
Widok z-buffora. | |
static ID3D11Texture2D * | back_buffer = nullptr |
Tekstura bufora tylnego. | |
static ID3D11Texture2D * | z_buffer = nullptr |
Tekstura z-bufora. | |
static ID3D11SamplerState * | default_sampler = nullptr |
Obiekt domyślnego samplera. | |
static ID3D11InputLayout * | default_vertex_layout = nullptr |
Layout formatu wierzchołka używanego dla meshy. | |
static ID3D11VertexShader * | default_vertex_shader = nullptr |
Obiekt domyślnego vertex shadera. | |
static ID3D11PixelShader * | default_pixel_shader = nullptr |
Obiekt domyślnego piksel shadera. | |
Renderer obsługujący DirectX 11.
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.
|
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.