Sleeping Wombat Graphic API  1.010
swGraphicAPI
DX11APIObjects.h
Go to the documentation of this file.
1 #pragma once
2 
11 #include <string>
12 
13 #pragma warning( disable : 4005 )
14 #include "d3dx11.h"
15 #include "d3d11.h"
16 #pragma warning( default : 4005 )
17 
18 
19 typedef ID3D11DeviceContext DeviceContext;
20 typedef ID3D11Device Device;
21 
22 
25 {
38 };
39 
42 {
47 };
48 
65 {
66 protected:
68 
69  static bool m_useDebugLayer;
70 
71  static unsigned int _window_width;
72  static unsigned int _window_height;
73  static std::string _pixel_shader_model;
74  static std::string _vertex_shader_model;
75 
76  static DXGI_SWAP_CHAIN_DESC _swap_chain_desc;
77  static D3D11_VIEWPORT _view_port_desc;
78  static D3D_FEATURE_LEVEL* _feature_levels;
79  static unsigned int _num_feature_levels;
80  static D3D_FEATURE_LEVEL _current_feature_level;
81  static D3D11_TEXTURE2D_DESC _z_buffer_desc;
82  static D3D11_DEPTH_STENCIL_VIEW_DESC _z_buffer_view_desc;
83  static D3D11_INPUT_ELEMENT_DESC* _vertex_layout_desc;
84  static unsigned int _layout_elements_count;
85  static D3D11_SAMPLER_DESC _sampler_desc;
86  static D3D11_RASTERIZER_DESC _rasterizer_desc;
87 protected:
88  static ID3D11Debug* debug_interface;
89  static ID3D11Device* device;
90  static ID3D11DeviceContext* device_context;
91  static IDXGISwapChain* swap_chain;
92  static ID3D11RenderTargetView* render_target;
93  static ID3D11DepthStencilView* z_buffer_view;
94  static ID3D11Texture2D* back_buffer;
95  static ID3D11Texture2D* z_buffer;
96 
97  static ID3D11SamplerState* default_sampler;
98  static ID3D11InputLayout* default_vertex_layout;
99  static ID3D11VertexShader* default_vertex_shader;
100  static ID3D11PixelShader* default_pixel_shader;
101 protected: //public: Inicjalizacje powinien zrobić obiekt, który dzidziczy po tej klasie, dlatego zmieniłem.
102  // Funkcje do ustawiania deskryptorów i innych parametrów
103  void set_swapchain_desc ( const DXGI_SWAP_CHAIN_DESC& swap_chain_desc );
104  void set_viewport_desc ( const D3D11_VIEWPORT& view_port_desc );
105  void set_feature_levels ( D3D_FEATURE_LEVEL* feature_levels, unsigned int elements );
106  void set_window_resolution ( unsigned int window_width, unsigned int window_height );
107  void set_depth_stencil_format ( DXGI_FORMAT depth_stencil_format );
109  void set_vertex_layout ( D3D11_INPUT_ELEMENT_DESC* layout, unsigned int array_size );
110  void set_sampler_desc ( D3D11_SAMPLER_DESC sampler_desc );
111  void set_rasterizer_desc ( const D3D11_RASTERIZER_DESC& rasterizer_desc );
112 
113  // Pobieranie deskryptorów
114  static DXGI_SWAP_CHAIN_DESC get_swap_chain_desc() { return _swap_chain_desc; }
115  static D3D11_VIEWPORT get_viewport_desc() { return _view_port_desc; }
116  static D3D_FEATURE_LEVEL get_current_feature_level() { return _current_feature_level; }
117  static D3D11_TEXTURE2D_DESC get_z_buffer_desc() { return _z_buffer_desc; }
118  static D3D11_DEPTH_STENCIL_VIEW_DESC get_z_buffer_view_desc() { return _z_buffer_view_desc; }
119  static D3D11_SAMPLER_DESC get_sampler_desc() { return _sampler_desc; }
120  static D3D11_RASTERIZER_DESC get_rasterizer_desc() { return _rasterizer_desc; }
121 
122  ID3D11VertexShader* load_vertex_shader( const std::wstring& file_name, const std::string& shader_name, const char* shader_model );
123  ID3D11VertexShader* load_vertex_shader( const std::wstring& file_name, const std::string& shader_name,
124  ID3D11InputLayout** layout, D3D11_INPUT_ELEMENT_DESC* layout_desc,
125  unsigned int array_size, const char* shader_model );
126  ID3D11PixelShader* load_pixel_shader( const std::wstring& file_name, const std::string& shader_name, const char* shader_model );
127 
128 
129  // Funkcje inicjujące
130  DX11_INIT_RESULT InitDevicesAndSwapChain ( HWND window, bool fullscreen, bool single_thread = true );
133  DX11_INIT_RESULT init_vertex_shader( const std::wstring& file_name, const std::string& shader_name );
134  DX11_INIT_RESULT init_pixel_shader( const std::wstring& file_name, const std::string& shader_name );
136 
137 protected:
138  DX11APIObjects();
139  ~DX11APIObjects() = default;
140 
141  DX11_INIT_RESULT init_DX11( int width, int height, HWND window, bool fullscreen,
142  const std::wstring& pix_shader_file, const std::string& pix_shader_name,
143  const std::wstring& vert_shader_file, const std::string& vert_shader_name,
144  bool single_thread = true );
145  DX11_INIT_RESULT init_DX11( int width, int height, HWND window, bool fullscreen, bool single_thread = true );
146 
147 
148  virtual void release_DirectX();
149 
150  void begin_scene();
151  inline void end_scene_and_present() { swap_chain->Present( 0, 0 ); }
152 
153 protected:
154 
155  void SetDebugName ( ID3D11DeviceChild* child, const std::string& name );
156  bool IsDebugLayerEnabled ();
157 };
158 
159 
160 
169 {
170 protected:
171  static ID3D11Buffer* const_per_frame;
172  static ID3D11Buffer* const_per_mesh;
173  static ID3D11DepthStencilState* depth_enabled;
174  static ID3D11DepthStencilState* depth_disabled;
175 
176  void init_buffers( unsigned int size_per_frame, unsigned int size_per_mesh );
177  void init_depth_states();
178 
179  void release_DirectX() override;
180 };
181 
182 
static ID3D11Debug * debug_interface
Pozwala na pobranie bardziej szczegółowych informacji debugowych.
Definition: DX11APIObjects.h:88
static D3D11_RASTERIZER_DESC _rasterizer_desc
Deskryptor rasteryzatora.
Definition: DX11APIObjects.h:86
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ą inter...
Definition: DX11APIObjects.cpp:791
static D3D_FEATURE_LEVEL _current_feature_level
Przechowuje poziom DirectXa.
Definition: DX11APIObjects.h:80
Nie udało się stworzyć widoku na bufor głębokości.
Definition: DX11APIObjects.h:32
Funkcja wykonana poprawnie.
Definition: DX11APIObjects.h:26
static D3D11_DEPTH_STENCIL_VIEW_DESC _z_buffer_view_desc
Deskryptor widoku z i stencil bufora.
Definition: DX11APIObjects.h:82
Pozycja, kolor.
Definition: DX11APIObjects.h:45
static DX11APIObjects * this_ptr
Ważne, żeby nie zainicjowac obiektu wielokrotnie.
Definition: DX11APIObjects.h:67
static D3D11_TEXTURE2D_DESC _z_buffer_desc
Deskryptor z i stencil bufora.
Definition: DX11APIObjects.h:81
Nie udało się utworzyć obieków device, device_context i swap_chain.
Definition: DX11APIObjects.h:28
virtual void release_DirectX()
Zwalnia wszystkie stworzone obiekty DirectXa.
Definition: DX11APIObjects.cpp:196
Klasa przechowuje w zmiennych statycznych najważniejsze interfejsy DirectX11.
Definition: DX11APIObjects.h:64
void release_DirectX() override
Zwalania obiekty DirectXa. Funkcja wywołuje tę samą funkcję z obiektu potomnego, żeby zwolnić wszystk...
Definition: DX11APIObjects.cpp:974
static D3D_FEATURE_LEVEL * _feature_levels
Tablica z preferowanymi poziomami DirectX. Domyślnie nullptr, uzytkownik może zdefiniować.
Definition: DX11APIObjects.h:78
static ID3D11DepthStencilView * z_buffer_view
Widok z-buffora.
Definition: DX11APIObjects.h:93
static ID3D11Buffer * const_per_mesh
Bufor stałych zmieniający się dla każdej części mesha.
Definition: DX11APIObjects.h:172
Nie udało się zainicjować widoku na bufor tylni.
Definition: DX11APIObjects.h:30
void init_buffers(unsigned int size_per_frame, unsigned int size_per_mesh)
Tworzy bufory stałych dla shadera.
Definition: DX11APIObjects.cpp:898
void begin_scene()
Czyścimy tylny bufor oraz z-bufor i wywołujemy funcję inicjującą renderowanie.
Definition: DX11APIObjects.cpp:858
static unsigned int _layout_elements_count
Liczba elementów w talicy deskryptora layoutu.
Definition: DX11APIObjects.h:84
static D3D11_VIEWPORT _view_port_desc
Domyślny deskryptor viewportu. Jeżeli użytkownik poda własny to zostanie on nadpisany.
Definition: DX11APIObjects.h:77
static ID3D11DeviceContext * device_context
Zmienna używana do renderowania sceny, ustawiania buforów, shaderów itp.
Definition: DX11APIObjects.h:90
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.
Definition: DX11APIObjects.cpp:286
static ID3D11SamplerState * default_sampler
Obiekt domyślnego samplera.
Definition: DX11APIObjects.h:97
void set_rasterizer_desc(const D3D11_RASTERIZER_DESC &rasterizer_desc)
Ustawia podany w parametrze deskrytptor rasteryzatora.
Definition: DX11APIObjects.cpp:346
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 b...
Definition: DX11APIObjects.cpp:527
Nie udało się skompilować vertex shadera.
Definition: DX11APIObjects.h:34
void end_scene_and_present()
Wywołuje funkcję swap_chain->Present w celu wyświetlenia narysowanej sceny na monitorze.
Definition: DX11APIObjects.h:151
static D3D11_SAMPLER_DESC _sampler_desc
Deskryptor samplera.
Definition: DX11APIObjects.h:85
static ID3D11VertexShader * default_vertex_shader
Obiekt domyślnego vertex shadera.
Definition: DX11APIObjects.h:99
static DXGI_SWAP_CHAIN_DESC _swap_chain_desc
Domyślny deskryptor głównych obiektów DirectX11.
Definition: DX11APIObjects.h:76
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.
Definition: DX11APIObjects.cpp:263
static D3D11_INPUT_ELEMENT_DESC * _vertex_layout_desc
Aktualny deskryptor layoutu wierzchołka.
Definition: DX11APIObjects.h:83
DX11_INIT_RESULT init_viewport()
Ustawia viewport zgodny z aktualnie ustawionym deskryptorem.
Definition: DX11APIObjects.cpp:514
static ID3D11Buffer * const_per_frame
Bufor stałych zmieniających się nie częściej niż co ramkę
Definition: DX11APIObjects.h:171
Żadna klasa nie odziedziczyła po DX11APIObjects. Zmienne są niezainicjalizowane.
Definition: DX11APIObjects.h:27
static ID3D11DepthStencilState * depth_enabled
Do włączania z-bufora.
Definition: DX11APIObjects.h:173
ID3D11PixelShader * load_pixel_shader(const std::wstring &file_name, const std::string &shader_name, const char *shader_model)
Definition: DX11APIObjects.cpp:730
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ą inter...
Definition: DX11APIObjects.cpp:819
ID3D11VertexShader * load_vertex_shader(const std::wstring &file_name, const std::string &shader_name, const char *shader_model)
Tworzy obiekt VertexShader na podstawie pliku.
Definition: DX11APIObjects.cpp:593
Klasa zawiera wskaźniki na bufory stałych zawierające podstawowe zestawy elementów przekazywanych do ...
Definition: DX11APIObjects.h:168
DX11_INIT_RESULT
Definition: DX11APIObjects.h:24
DX11_DEFAULT_VERTEX_LAYOUT
Definition: DX11APIObjects.h:41
static ID3D11Texture2D * z_buffer
Tekstura z-bufora.
Definition: DX11APIObjects.h:95
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...
Definition: DX11APIObjects.cpp:322
static ID3D11Device * device
Zmienna służy do tworzenia obiektów, buforów tekstur i zasobów.
Definition: DX11APIObjects.h:89
static IDXGISwapChain * swap_chain
Służy do prezentowania ramki na ekranie.
Definition: DX11APIObjects.h:91
static ID3D11InputLayout * default_vertex_layout
Layout formatu wierzchołka używanego dla meshy.
Definition: DX11APIObjects.h:98
Nie ustało się stworzyć bufora głębokości.
Definition: DX11APIObjects.h:31
Pozycja, normalne współrzędne UV.
Definition: DX11APIObjects.h:43
DirectX nie został zainicjowany (obiekt device_context wskazuje na nullptr).
Definition: DX11APIObjects.h:37
void set_sampler_desc(D3D11_SAMPLER_DESC sampler_desc)
Definition: DX11APIObjects.cpp:340
void set_swapchain_desc(const DXGI_SWAP_CHAIN_DESC &swap_chain_desc)
Funkcja ustawia deskryptor dla obiektów Device, DeviceContext i SwapChain DirectXa.
Definition: DX11APIObjects.cpp:248
Pozycja, normalne, kolor.
Definition: DX11APIObjects.h:46
static unsigned int _num_feature_levels
Liczba elementów powyższej tablicy.
Definition: DX11APIObjects.h:79
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.
Definition: DX11APIObjects.cpp:372
DX11_INIT_RESULT init_sampler()
Tworzy domyślny smapler.
Definition: DX11APIObjects.cpp:837
DirectX nie został zainicjowany (obiekt device wskazuje na nullptr).
Definition: DX11APIObjects.h:36
Pozycja, współrzędne UV.
Definition: DX11APIObjects.h:44
Nie udało się utworzyć obiektu samplera.
Definition: DX11APIObjects.h:35
static ID3D11PixelShader * default_pixel_shader
Obiekt domyślnego piksel shadera.
Definition: DX11APIObjects.h:100
DX11_INIT_RESULT InitDevicesAndSwapChain(HWND window, bool fullscreen, bool single_thread=true)
Tworzy obiekty swap_chain, device i device_context.
Definition: DX11APIObjects.cpp:475
Nie udało się skompilować pixel shadera.
Definition: DX11APIObjects.h:33
Nie udało się utworzyć bufora tylnego.
Definition: DX11APIObjects.h:29
static ID3D11RenderTargetView * render_target
Widok bufora docelowego renderowania, czyli bufora tylnego.
Definition: DX11APIObjects.h:92
static ID3D11Texture2D * back_buffer
Tekstura bufora tylnego.
Definition: DX11APIObjects.h:94
static ID3D11DepthStencilState * depth_disabled
Do wyłączania z-bufora.
Definition: DX11APIObjects.h:174