MGL(Win32)
読み取り中…
検索中…
一致する文字列を見つけられません
mgl_d3d11_device.h
[詳解]
1// SPDX-License-Identifier: Zlib
2/* ------------------------------------------------------------------------- */
9/* ------------------------------------------------------------------------- */
10
11#ifndef INCGUARD_MGL_D3D11_DEVICE_H_1614578619
12#define INCGUARD_MGL_D3D11_DEVICE_H_1614578619
13
14#include <mgl/mgl_environment.h>
15#if defined(MGL_RENDERER_ENABLE_D3D11)
16
17#include <d3d11_1.h>
20#include <mgl/event/mgl_event.h>
23#include <vector>
24#include <atlbase.h>
25
26namespace MGL::Render::D3D11
27{
29class Device final : public SharedSingleton<Device>
30{
31public:
32 static STL::unique_ptr<Device> &GetInstanceRef() noexcept;
33
34 Device() noexcept;
35 ~Device() noexcept;
36
37 bool Initialize() noexcept;
38
39 bool SetFrameLatency(uint32_t latency) noexcept;
40 bool SetFullscreen(bool isEnable) noexcept;
41 bool IsFullscreen() const noexcept;
42
43 void ClearRenderTarget(const Color &color) noexcept;
44 void Present() noexcept;
45
46 /* ------------------------------------------------------------------------- */
51 /* ------------------------------------------------------------------------- */
52 ID3D11DeviceContext *GetContext() noexcept
53 {
54 return _immediateContext;
55 }
56
57 /* ------------------------------------------------------------------------- */
62 /* ------------------------------------------------------------------------- */
63 IDXGISwapChain *GetSwapChain() noexcept
64 {
65 return _swapChain;
66 }
67
68 /* ------------------------------------------------------------------------- */
73 /* ------------------------------------------------------------------------- */
74 ID3D11Device *GetD3DDevice() noexcept
75 {
76 return _d3dDevice;
77 }
78
81 {
82 CComPtr<ID3D11Buffer> buffer;
83 size_t offset;
84
86 DynamicBuffer() noexcept
87 : buffer(nullptr)
88 , offset(0)
89 {}
90 };
91
92 /* ------------------------------------------------------------------------- */
97 /* ------------------------------------------------------------------------- */
98 constexpr DynamicBuffer &GetVertexBuffer() noexcept
99 {
100 return _vertexBuffer;
101 }
102
103
104 ID3D11Buffer* GetConstantBuffer(size_t size) noexcept;
105
106 bool SetRenderTarget(ID3D11RenderTargetView *renderTargetView, float width, float height) noexcept;
107
108 bool ResizeClientBuffer(float width, float height) noexcept;
109
110 DXGI_FORMAT GetMainRenderTargetPixelFormat() const noexcept;
111 Vector2 GetMainRenderTargetSize() const noexcept;
112
113 /* ------------------------------------------------------------------------- */
118 /* ------------------------------------------------------------------------- */
119 ID3D11Buffer *GetMainOrthogonalMatrixBuffer() const noexcept
120 {
121 return _mainOrthogonalMatrixBuffer;
122 }
123
124private:
125 bool InitializeOrthogonalMatrixBuffer() noexcept;
126 bool InitializeVertexBuffer() noexcept;
127 bool InitializeConstantBuffer() noexcept;
128
129 bool UpdateViewport(float width, float height) noexcept;
130 bool UpdateOrthogonalMatrix() noexcept;
131
132 static void OnEventPostFrameUpdate(void *callbackArg, void *notifyArg) noexcept;
133 static void OnEventChangeClientSize(void *callbackArg, void *notifyArg) noexcept;
134
135 D3D_DRIVER_TYPE _driverType;
136 D3D_FEATURE_LEVEL _featureLevel;
137 CComPtr<ID3D11Device> _d3dDevice;
138 CComPtr<ID3D11Device1> _d3dDevice1;
139 CComPtr<ID3D11DeviceContext> _immediateContext;
140 CComPtr<ID3D11DeviceContext1> _immediateContext1;
141 CComPtr<IDXGISwapChain> _swapChain;
142 CComPtr<IDXGISwapChain1> _swapChain1;
143 CComPtr<ID3D11RenderTargetView> _mainRenderTargetView;
144 CComPtr<ID3D11Texture2D> _mainTexture;
145 CComPtr<ID3D11Buffer> _mainOrthogonalMatrixBuffer;
146 DynamicBuffer _vertexBuffer;
147
148 struct ConstBuffer
149 {
150 size_t size;
151 CComPtr<ID3D11Buffer> buffer;
152
153 ConstBuffer()
154 : size(0)
155 , buffer(nullptr)
156 {}
157
158 ConstBuffer(size_t inSize)
159 : size(inSize)
160 , buffer(nullptr)
161 {}
162 };
163
164 std::vector<ConstBuffer> _constBufferArray;
165 ID3D11RenderTargetView *_currentRenderTarget;
166
167 Event::Handle _eventPostFrameUpdate;
168 Event::Handle _eventChangeClientSize;
169};
170} // namespace MGL::Render::D3D11
171
172#endif // MGL_RENDERER_ENABLE_D3D11
173#endif // INCGUARD_MGL_D3D11_DEVICE_H_1614578619
174
175// vim: et ts=4 sw=4 sts=4
MGL Direct3D11 デバイス管理
Definition mgl_d3d11_device.h:30
void ClearRenderTarget(const Color &color) noexcept
レンダーターゲットのクリア
Definition mgl_d3d11_device.cc:380
IDXGISwapChain * GetSwapChain() noexcept
スワップチェインの取得
Definition mgl_d3d11_device.h:63
DXGI_FORMAT GetMainRenderTargetPixelFormat() const noexcept
メインレンダーターゲットのピクセルフォーマットを取得
Definition mgl_d3d11_device.cc:619
void Present() noexcept
描画の更新
Definition mgl_d3d11_device.cc:398
static STL::unique_ptr< Device > & GetInstanceRef() noexcept
インスタンスの取得
Definition mgl_d3d11_device.cc:35
bool SetRenderTarget(ID3D11RenderTargetView *renderTargetView, float width, float height) noexcept
描画先の変更
Definition mgl_d3d11_device.cc:539
ID3D11DeviceContext * GetContext() noexcept
デバイスコンテキストの取得
Definition mgl_d3d11_device.h:52
bool SetFullscreen(bool isEnable) noexcept
フルスクリーンモードに切り替える
Definition mgl_d3d11_device.cc:334
bool SetFrameLatency(uint32_t latency) noexcept
フレーム遅延の最大値を設定
Definition mgl_d3d11_device.cc:309
constexpr DynamicBuffer & GetVertexBuffer() noexcept
動的バッファの取得
Definition mgl_d3d11_device.h:98
ID3D11Device * GetD3DDevice() noexcept
Direct3Dデバイスの取得
Definition mgl_d3d11_device.h:74
ID3D11Buffer * GetConstantBuffer(size_t size) noexcept
定数バッファを取得
Definition mgl_d3d11_device.cc:509
Device() noexcept
コンストラクタ
Definition mgl_d3d11_device.cc:48
~Device() noexcept
デストラクタ
Definition mgl_d3d11_device.cc:75
bool ResizeClientBuffer(float width, float height) noexcept
クライアントバッファのリサイズ
Definition mgl_d3d11_device.cc:567
ID3D11Buffer * GetMainOrthogonalMatrixBuffer() const noexcept
平行投影行列の取得
Definition mgl_d3d11_device.h:119
bool IsFullscreen() const noexcept
フルスクリーン状態の取得
Definition mgl_d3d11_device.cc:357
Vector2 GetMainRenderTargetSize() const noexcept
メインレンダーターゲットのサイズを取得
Definition mgl_d3d11_device.cc:634
bool Initialize() noexcept
初期化処理
Definition mgl_d3d11_device.cc:97
シングルトンテンプレート(共有ライブラリ用)
Definition mgl_singleton.h:44
MGL 色情報
MGL 環境定義
MGL イベント
MGL シングルトンクラス
MGL STLのメモリ関連の代替
std::unique_ptr< T, Deleter > unique_ptr
MGLのアロケータを利用するユニークポインタ
Definition mgl_stl_memory.h:247
MGL 2Dベクトル
色情報
Definition mgl_color.h:22
動的バッファ
Definition mgl_d3d11_device.h:81
DynamicBuffer() noexcept
初期化用コンストラクタ
Definition mgl_d3d11_device.h:86
CComPtr< ID3D11Buffer > buffer
バッファの先頭アドレス
Definition mgl_d3d11_device.h:82
size_t offset
現在のオフセット
Definition mgl_d3d11_device.h:83
2Dベクトル
Definition mgl_vector2.h:23