Sleeping Wombat Graphic API  1.010
swGraphicAPI
Protected Member Functions | Static Protected Member Functions | Static Protected Attributes | List of all members
DX11APIObjects Class Reference

Klasa przechowuje w zmiennych statycznych najważniejsze interfejsy DirectX11. More...

#include <DX11APIObjects.h>

Inheritance diagram for DX11APIObjects:
DX11AuxiliaryObjects DX11BlendingState DX11Buffer DX11ComputeShader DX11DepthStencilState DX11InputLayout DX11PixelShader DX11RasterizerState DX11RenderTarget DX11SwapChain DX11Texture DX11VertexShader

Protected Member Functions

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...
 
virtual void release_DirectX ()
 Zwalnia wszystkie stworzone obiekty DirectXa.
 
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 Protected Member Functions

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

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.
 
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.
 

Detailed Description

Klasa przechowuje w zmiennych statycznych najważniejsze interfejsy DirectX11.

Obiekty, które ich potrzebują, powinny odziedziczyć po tej klasie, dzięki czemu mają bezpośredni dostęp.

Aby najłatwiej zainicjować DirectX, najlepiej jest wywołać funkcję init_DX11. Z wyjątkiem rzeczy podawanych w parametrach, wszystko zostanie zainicjowane zgodnie z deskryptorami domyślnymi. Jeżeli chcesz coś zmienić, to musisz to zrobić przed wywołaniem tej funkcji.

Można też inicjować każdą rzecz z osobna, ale w zasadzie nie ma to większego sensu, skoro wiszystkie deskryptory można zmodyfikować.

Klasa daje też możliwość kompilowania shaderów.

Member Function Documentation

void DX11APIObjects::begin_scene ( )
protected

Czyścimy tylny bufor oraz z-bufor i wywołujemy funcję inicjującą renderowanie.

Attention
Funkcja zakłada, że device_context, render target i depthstencil są utworzone. Ponieważ funkcja jest wywoływana w pętli renderingu, to nie jest to sprawdzane, więc programista jest odpowiedzialny za poprawne wywołanie.
DX11_INIT_RESULT DX11APIObjects::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 
)
protected

Funkcja do pełnej inicjalizacji DirectXa.

Jeżeli chcesz zainicjować wszystko na raz, to wywołaj tę funkcję. Przed wywołaniem ustaw odpowiednie deskryptory, jeżeli chcesz, żeby użyte zostały inne wartości niż domyślne.

Parameters
[in]widthSzerokość okna.
[in]heightWysokość okna.
[in]windowUchwyt głównego okna aplikacji.
[in]fullscreenUstaw na true, jeżeli aplikacja ma działać w trybie pełnoekranowym.
[in]pix_shader_filePlik zawierający shader.
[in]pix_shader_nameNazwa funkcji, od której ma się zacząć wykonywanie shadera.
[in]vert_shader_filePlik zawierający shader.
[in]vert_shader_nameNazwa funkcji, od której ma się zacząć wykonywanie shadera.
[in]singleThreadUstaw na true, jeżeli nie zamierzasz korzystać z ID3D11Device wielowątkowo (pozwala to na przyspieszenie działania ze względu na to, że nie jest konieczna synchronizacja. Nie wiem jak duży to ma wpływ.)
Returns
Zwraca jedną ze stałych DX11_INIT_RESULT.
DX11_INIT_RESULT DX11APIObjects::init_DX11 ( int  width,
int  height,
HWND  window,
bool  fullscreen,
bool  singleThread = true 
)
protected

Funkcja do pełnej inicjalizacji DirectXa.

Jeżeli chcesz zainicjować wszystko na raz, to wywołaj tę funkcję. Przed wywołaniem ustaw odpowiednie deskryptory, jeżeli chcesz, żeby użyte zostały inne wartości niż domyślne.

Funkcja nie inicjuje shaderów, nie tworzy layoutu wierzchołka ani nie ustawia samplera.

Parameters
[in]widthSzerokość okna.
[in]heightWysokość okna.
[in]windowUchwyt głównego okna aplikacji.
[in]fullscreenUstaw na true, jeżeli aplikacja ma działać w trybie pełnoekranowym.
[in]singleThreadUstaw na true, jeżeli nie zamierzasz korzystać z ID3D11Device wielowątkowo (pozwala to na przyspieszenie działania ze względu na to, że nie jest konieczna synchronizacja. Nie wiem jak duży to ma wpływ.)
Returns
Zwraca jedną ze stałych DX11_INIT_RESULT.
DX11_INIT_RESULT DX11APIObjects::init_pixel_shader ( const std::wstring &  file_name,
const std::string &  shader_name 
)
protected

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.

Poza tworzeniem domyślnego shadera, funkcja tworzy domyślny sampler. W trybie debug komunikaty kompilacji shadera są przekazywane do okna output.

Funkcja ustawia ten shader i sampler w kontekście urządzenia jako aktywny.

Parameters
[in]file_nameNazwa pliku zawierającego shader.
[in]shader_nameNazwa shadera.
Returns
Zwraca jedną ze stałych, jaką zwraca DirectX.
DX11_INIT_RESULT DX11APIObjects::init_sampler ( )
protected

Tworzy domyślny smapler.

Returns
Zwraca jedną ze stałych DX11_INIT_RESULT.
DX11_INIT_RESULT DX11APIObjects::init_vertex_shader ( const std::wstring &  file_name,
const std::string &  shader_name 
)
protected

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.

Funkcja ustawia shader oraz layout wierzchołków w kontekście urządzenia jako aktywny. W trybie debug komunikaty kompilacji shadera są przekazywane do okna output.

Parameters
[in]file_nameNazwa pliku zawierającego shader.
[in]shader_nameNazwa shadera.
Returns
Zwraca jedną ze stałych, jaką zwraca DirectX.
DX11_INIT_RESULT DX11APIObjects::init_z_buffer_and_render_target ( )
protected

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.

Returns
Zwraca jedną ze stałych DX11_INIT_RESULT.
DX11_INIT_RESULT DX11APIObjects::InitDevicesAndSwapChain ( HWND  window,
bool  fullscreen,
bool  single_thread = true 
)
protected

Tworzy obiekty swap_chain, device i device_context.

Parameters
[in]widthSzerokość ekranu w pikselach
[in]heightWysokość ekranu w pikselach
[in]windowUchwyt okna, w którym renderujemy
[in]fullscreenTryb pełnoekranowy lub w oknie.
[in]singleThreadUstawić na true, jeżeli mamy tylko jeden wątek, który tworzy wszystkie obiekty DirectXa typu bufory i shadery. Domyślnie false.
Returns
Zwraca jedną z wartości DX11_INIT_RESULT.
ID3D11PixelShader * DX11APIObjects::load_pixel_shader ( const std::wstring &  file_name,
const std::string &  shader_name,
const char *  shader_model = "ps_4_0" 
)
protected

Tworzy pixel shader na podstawie pliku.

W przypadku błędów kompilacji w trybie debug są one przekierowane do okna Output.

Na razie obsługuje tylko nieskompilowane pliki.

Parameters
[in]file_nameNazwa pliku, z którego zostanie wczytany shader
[in]shader_nameNazwa funkcji, która jest punktem poczatkowym wykonania shadera
[in]shader_modelŁańcuch znaków opisujący shader model.
ID3D11VertexShader * DX11APIObjects::load_vertex_shader ( const std::wstring &  file_name,
const std::string &  shader_name,
const char *  shader_model = "vs_4_0" 
)
protected

Tworzy obiekt VertexShader na podstawie pliku.

W przypadku błędów kompilacji w trybie debug są one przekierowane do okna Output.

Na razie obsługuje tylko nieskompilowane pliki.

Parameters
[in]file_nameNazwa pliku, z którego zostanie wczytany shader.
[in]shader_nameNazwa funkcji, która jest punktem poczatkowym wykonania shadera.
[in]shader_modelŁańcuch znaków opisujący shader model.
Returns
Zwraca wskaźnik na obiekt vertex shadera lub nullptr w przypadku niepowodzenia.
ID3D11VertexShader * DX11APIObjects::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 = "vs_4_0" 
)
protected

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.

W przypadku błędów kompilacji w trybie debug są one przekierowane do okna Output.

Na razie obsługuje tylko nieskompilowane pliki.

Parameters
[in]file_nameNazwa pliku, z którego zostanie wczytany shader
[in]shader_nameNazwa funkcji, która jest punktem poczatkowym wykonania shadera
[out]layoutW zmiennej umieszczany jest wskaźnik na layout wierzchołka. Należy pamiętać o zwolnieniu go kiedy będzie niepotrzebny.
[in]layout_descDeskryptor opisujacy tworzony layout.
[in]array_sizeLiczba elementów tablicy layout_desc.
[in]shader_modelŁańcuch znaków opisujący shader model.
Returns
Zwraca wskaźnik na obiekt vertex shadera lub nullptr w przypadku niepowodzenia.
void DX11APIObjects::set_feature_levels ( D3D_FEATURE_LEVEL *  feature_levels,
unsigned int  elements 
)
protected

ustawia podaną w parametrze tablicę z levelami. Tablica nie powinna zostać usunięta, ponieważ nie jest kopiowana.

Jeżeli nic nie zostanie ustawione to domyślne ustawiana jest wartość nullptr, co jest równoważne podaniu następującej tablicy: D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0, D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL_9_2, D3D_FEATURE_LEVEL_9_1,

Zasadniczo lepiej nie modyfikować tego parametru, jeżeli nie ma takiej konieczności.

Parameters
[in]elementsLiczba elementów w tablicy.
void DX11APIObjects::set_sampler_desc ( D3D11_SAMPLER_DESC  sampler_desc)
protected

Ustawia podany w parametrze deskryptor samplera.

void DX11APIObjects::set_swapchain_desc ( const DXGI_SWAP_CHAIN_DESC &  swap_chain_desc)
protected

Funkcja ustawia deskryptor dla obiektów Device, DeviceContext i SwapChain DirectXa.

Wartości takich pól jak:

  • BufferDesc.Width
  • BufferDesc.Height są pobierane z pól klasy i trzeba je modyfikować dedykowaną do tego funkcją.
void DX11APIObjects::set_vertex_layout ( DX11_DEFAULT_VERTEX_LAYOUT  layout)
protected

Ustawia jeden z domyślnych deskryptorów layoutów zdefiniowanych w klasie. Funkcja nie ustawia żadnego layoutu w directX.

Attention
Funkcja nie zwalnia pamięci po starym layoucie. Layouty powinny być alokowane na stosie i być zmiennymi globalnymi w przeciwnym razie moga byc wycieki pamęci.
void DX11APIObjects::set_vertex_layout ( D3D11_INPUT_ELEMENT_DESC *  layout,
unsigned int  array_size 
)
protected

Ustawia podany deskryptor layoutu. Funkcja nie ustawia żadnego layoutu w directX.

Attention
Funkcja nie zwalnia pamięci po starym layoucie. Layouty powinny być alokowane na stosie i być zmiennymi globalnymi w przeciwnym razie moga byc wycieki pamęci.
void DX11APIObjects::set_viewport_desc ( const D3D11_VIEWPORT &  view_port_desc)
protected

Funkcja ustawia deskryptor dla Viewportu. Nie jest on ustawiany jako aktywny w DirectX, trzeba wywołać funkcję init_viewport.

Wartości takich pól jak:

  • BufferDesc.Width
  • BufferDesc.Height są pobierane z pól klasy i trzeba je modyfikować dedykowaną do tego funkcją.

Member Data Documentation

DX11APIObjects * DX11APIObjects::this_ptr = nullptr
staticprotected

Ważne, żeby nie zainicjowac obiektu wielokrotnie.

Wskaźnik na klasę lub nullptr jeżeli nie został stworzony jeszcze obiekt.

Ta klasa nie zawiera żadnych zmiennych niestatycznych, ale chcemy wiedzieć czy został stworzony chociaż jeden obiekt. Dzięki temu możemy zainicjować deskryptory domyślnymi wartościami w wygodny sposób w konstruktorze.


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