MGL(Win32)
読み取り中…
検索中…
一致する文字列を見つけられません
mgl_d3d11_sprite_renderer.h
[詳解]
1// SPDX-License-Identifier: Zlib
2/* ------------------------------------------------------------------------- */
9/* ------------------------------------------------------------------------- */
10
11#ifndef INCGUARD_MGL_D3D11_SPRITE_RENDERER_H_1615013087
12#define INCGUARD_MGL_D3D11_SPRITE_RENDERER_H_1615013087
13
14#include <mgl/mgl_environment.h>
15#if defined(MGL_RENDERER_ENABLE_D3D11)
16
17#include <array>
18#include <atlbase.h>
19#include <d3d11_1.h>
22#include <vector>
23
24namespace MGL::Render::D3D11
25{
28{
29public:
31 struct Attribute
32 {
33 float offset[2];
34 float scale[2];
35 float textureCoord[4];
36 float color[4];
37 float rotate;
38 float pivot[2];
39 uint32_t flip;
40 };
41 static constexpr size_t kAttributeMax = 1024;
42
43 SpriteRenderer() noexcept;
44
45 virtual bool Initialize() noexcept override;
46 virtual void Flush(const FlushParameter &flushParameter) noexcept override;
47
48 void Add(const Attribute &attribute, const FlushParameter &flushParameter, SharedTextureResource texture, SamplerType samplerType, bool isEnabledBlending) noexcept;
49
50 /* ------------------------------------------------------------------------- */
56 /* ------------------------------------------------------------------------- */
57 bool IsFull() const noexcept
58 {
59 return _attributeCount >= kAttributeMax;
60 }
61
62private:
63 bool InitializeShader() noexcept;
64 bool InitializeVertexBuffer() noexcept;
65 bool InitializeSamplerState() noexcept;
66
67 ID3D11VertexShader *GetVertexShader(size_t size) noexcept;
68 ID3D11SamplerState *GetSamplerState(SamplerType samplerType) noexcept;
69
70 bool _isAvailable;
71
72 std::array<Attribute, kAttributeMax> _attributes;
73 size_t _attributeCount;
74
75 CComPtr<ID3D11Buffer> _vertexBuffer;
76
77 struct VertexShader
78 {
79 size_t size;
80 CComPtr<ID3D11VertexShader> shader;
81 };
82 std::vector<VertexShader> _vertexShaderArray;
83 CComPtr<ID3D11PixelShader> _pixelShader;
84 CComPtr<ID3D11InputLayout> _inputLayout;
85
86 enum
87 {
88 kSamplerStateNearest,
89 kSamplerStateLinear,
90 kSamplerStateMax
91 };
92 CComPtr<ID3D11SamplerState> _samplers[kSamplerStateMax];
93
94 SharedTextureResource _currentTexture;
95 SamplerType _currentSamplerType;
96 bool _isEnabledBlending;
97};
98} // namespace MGL::Render::D3D11
99
100#endif // MGL_RENDERER_ENABLE_D3D11
101#endif // INCGUARD_MGL_D3D11_SPRITE_RENDERER_H_1615013087
102
103// vim: et ts=4 sw=4 sts=4
Direct3D11用オブジェクトレンダラ基底クラス
Definition mgl_d3d11_object_renderer.h:23
Direct3D11用スプライトレンダラ
Definition mgl_d3d11_sprite_renderer.h:28
virtual void Flush(const FlushParameter &flushParameter) noexcept override
描画の実行
Definition mgl_d3d11_sprite_renderer.cc:115
bool IsFull() const noexcept
アトリビュートのストックが上限に達しているかを取得
Definition mgl_d3d11_sprite_renderer.h:57
SpriteRenderer() noexcept
コンストラクタ
Definition mgl_d3d11_sprite_renderer.cc:51
static constexpr size_t kAttributeMax
アトリビュートの最大数
Definition mgl_d3d11_sprite_renderer.h:41
virtual bool Initialize() noexcept override
初期化処理
Definition mgl_d3d11_sprite_renderer.cc:74
void Add(const Attribute &attribute, const FlushParameter &flushParameter, SharedTextureResource texture, SamplerType samplerType, bool isEnabledBlending) noexcept
アトリビュートの追加
Definition mgl_d3d11_sprite_renderer.cc:203
MGL Direct3D11用オブジェクトレンダラ基底クラス
MGL 環境定義
SamplerType
サンプラー
Definition mgl_render_types.h:59
MGL テクスチャリソース
std::shared_ptr< MGL::Render::TextureResource > SharedTextureResource
共有するテクスチャリソースの型
Definition mgl_texture_resource.h:145
描画に使用するパラメータ
Definition mgl_d3d11_object_renderer.h:27
スプライト用アトリビュート
Definition mgl_d3d11_sprite_renderer.h:32
float rotate
回転角度
Definition mgl_d3d11_sprite_renderer.h:37
float offset[2]
オフセット(表示位置)
Definition mgl_d3d11_sprite_renderer.h:33
float textureCoord[4]
テクスチャ座標
Definition mgl_d3d11_sprite_renderer.h:35
float color[4]
マスクカラー
Definition mgl_d3d11_sprite_renderer.h:36
float pivot[2]
回転ピボット
Definition mgl_d3d11_sprite_renderer.h:38
float scale[2]
スケール値
Definition mgl_d3d11_sprite_renderer.h:34