Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
197 commits
Select commit Hold shift + click to select a range
fa8a391
feat: FixedString struct created
PR3C14D0 Mar 2, 2026
f896f64
feat: MeshAsset struct created
PR3C14D0 Mar 2, 2026
80cbb10
feat: TextureAsset struct created
PR3C14D0 Mar 2, 2026
999b80c
feat: added nativefiledialog-extended
PR3C14D0 Mar 2, 2026
ca917ae
docs: updated README.md
PR3C14D0 Mar 2, 2026
21ce9ae
feat: changed imgui branch to imgui/docking
PR3C14D0 Mar 2, 2026
d23211c
feat: VulkanDescriptorSet::CreateFromExisting method created
PR3C14D0 Mar 2, 2026
ef58bb3
feat: VulkanDevice::CreateDescriptorSet overload created
PR3C14D0 Mar 2, 2026
04ef746
feat: created method for handling camera resizing
PR3C14D0 Mar 2, 2026
7fd062a
feat: imgui dock space window created
PR3C14D0 Mar 2, 2026
48422ee
feat: started AssetManager class
PR3C14D0 Mar 4, 2026
26b766a
feat: subpass dependencies implemented
PR3C14D0 Mar 4, 2026
cb7765a
feat: added subpass dependencies
PR3C14D0 Mar 4, 2026
c2c1d59
feat: created a map type alias
PR3C14D0 Mar 19, 2026
7323a95
feat: created pointer type aliases
PR3C14D0 Mar 20, 2026
d830e05
feat: Ref allowing being initialized as nullptr
PR3C14D0 Mar 20, 2026
4557b8d
feat: ProjectManager class started
PR3C14D0 Mar 24, 2026
488a539
fix: project tree orphan nodes solved
PR3C14D0 Mar 25, 2026
b07a635
feat: AssetBrowserState structure created
PR3C14D0 Mar 25, 2026
d976b54
feat: added nanosvg
PR3C14D0 Mar 25, 2026
db3613a
feat: nanosvg implementation
PR3C14D0 Mar 25, 2026
89af7a9
feat: Utils.h LoadSVG function created
PR3C14D0 Mar 25, 2026
9e43bf5
feat: increased shadow pass lambda value
PR3C14D0 Mar 25, 2026
18d33d4
feat: ImGuiImpl::ImageButton method created
PR3C14D0 Mar 25, 2026
192562e
refactor: improved deltaTime calculation
PR3C14D0 Mar 25, 2026
310a48f
feat: Folder icon header file created
PR3C14D0 Mar 25, 2026
0e38c0f
feat: ImGuIPass::ShowAssetBrowser method created
PR3C14D0 Mar 25, 2026
2eb86ba
feat: placeholder Mesh icon added
PR3C14D0 Mar 26, 2026
6242ab8
refactor: created the loadIcon lambda
PR3C14D0 Mar 26, 2026
67493bc
chore: decreased asset browser button size
PR3C14D0 Mar 26, 2026
52c5425
fix: moved ImGui::PopID out of ImageButton
PR3C14D0 Mar 26, 2026
27ef314
feat: ImGuiImpl::ImageButton changed button logic for double clicked
PR3C14D0 Mar 26, 2026
479a596
feat: cascade shadow maps perfection
PR3C14D0 Mar 27, 2026
11462ae
refactor: added this-> keyword
PR3C14D0 Mar 27, 2026
9cd75f5
feat: ProjectTree::FindAssetInNode method created
PR3C14D0 Mar 28, 2026
7fa3a0f
feat: AssetVersion structure created
PR3C14D0 Mar 28, 2026
172b8e5
feat: AssetVersion::Serialize and Deserialize methods created
PR3C14D0 Mar 30, 2026
26c3f40
docs: enhanced scenemanager documentation
PR3C14D0 Mar 31, 2026
a64f7f2
feat: created a Byte type alias
PR3C14D0 May 11, 2026
c3407bb
refactor: changed MeshAsset buffer type to a Vector<Byte>
PR3C14D0 May 11, 2026
b8b2d81
feat: GPUFormat now inherits from uint32_t
PR3C14D0 May 11, 2026
ece3902
refactor: refactored MeshAsset for supporting the new AssetVersion st…
PR3C14D0 May 11, 2026
df11efa
refactor: started using an AssetHandle structure for handling assets
PR3C14D0 May 11, 2026
998b01c
feat: added SCENE asset type
PR3C14D0 May 11, 2026
08626fc
feat: started GameObjectAsset structure
PR3C14D0 May 11, 2026
a6c8439
feat: added nlohmann/json
PR3C14D0 May 11, 2026
6c64920
feat: Project namespace created with Asset structure inside
PR3C14D0 May 12, 2026
74748db
refactor: changed ProjectManager for opening json files instead of pi…
PR3C14D0 May 12, 2026
612356c
feat: HashMap alias created
PR3C14D0 May 12, 2026
6eb5564
feat: s_assetVersions HashMap initialized
PR3C14D0 May 12, 2026
b272883
feat: Scene::GetName method created
PR3C14D0 May 15, 2026
358d17c
feat: Mesh::GetFilePath method created
PR3C14D0 May 15, 2026
01e0640
refactor: shaders now located at ${BIN_DIR}/shaders
PR3C14D0 May 15, 2026
651bda2
feat: added Scene icon
PR3C14D0 May 17, 2026
0d79916
feat: started SceneAsset structure
PR3C14D0 May 17, 2026
defb36a
feat: added SceneAsset to AssetVariant
PR3C14D0 May 17, 2026
68a4c9c
refactor: MeshAsset now supports Sub-Meshes
PR3C14D0 May 17, 2026
def7d1e
feat: ProjectManager::ProjectManager method created
PR3C14D0 May 17, 2026
b37a189
fix: issues in ProjectTree::FindAssetInNode method
PR3C14D0 May 17, 2026
f17042f
feat: Vector4 structure created
PR3C14D0 May 18, 2026
3351684
feat: MaterialAsset structure created
PR3C14D0 May 18, 2026
8efdd91
feat: added MaterialAsset as a AssetVariant
PR3C14D0 May 18, 2026
85e62ce
fix: added Vector4 default constructors to allow being trivially copy…
PR3C14D0 May 18, 2026
2f69c01
feat: added the bCompressed boolean to TextureAssetHeader struct
PR3C14D0 May 18, 2026
75499d5
feat: added NONE to EMaterialFlags
PR3C14D0 May 18, 2026
d90ce17
feat: Texture icon created
PR3C14D0 May 18, 2026
4be8a1b
feat: Material icon created
PR3C14D0 May 18, 2026
27e55db
feat: manual ImageButton implementation for drag and drop
PR3C14D0 May 18, 2026
1da5a2c
feat: Refactor AssetManager for generic asset types and core saving
PR3C14D0 May 27, 2026
4a39a0f
refactor: Update ProjectManager to use generic asset registration
PR3C14D0 May 27, 2026
631ce40
feat: Implement scene serialization
PR3C14D0 May 27, 2026
279695c
feat: Integrate editor scene saving functionality
PR3C14D0 May 27, 2026
fae08ca
feat: Implement drag and drop for assets and external files
PR3C14D0 May 27, 2026
f29e501
fix: Adjust sample scene object transformation
PR3C14D0 May 27, 2026
32e9451
chore: Bump minor version to 2
PR3C14D0 May 27, 2026
0be2ed8
docs: Document parameters for DeferredRenderer::Init
PR3C14D0 May 28, 2026
51fe9ec
feat: Ensure robust mesh asset serialization and path retrieval
PR3C14D0 May 29, 2026
13bbd57
feat: Add support for GLSL shader macro definitions
PR3C14D0 Jun 1, 2026
7eb41f8
chore: Remove unused include from CullingPass
PR3C14D0 Jun 1, 2026
d4aa66c
feat: material system
PR3C14D0 Jun 3, 2026
747a422
feat: FixedString struct created
PR3C14D0 Mar 2, 2026
a3aef63
feat: MeshAsset struct created
PR3C14D0 Mar 2, 2026
c1aabe4
feat: TextureAsset struct created
PR3C14D0 Mar 2, 2026
1ed12a9
feat: added nativefiledialog-extended
PR3C14D0 Mar 2, 2026
06a7ef5
docs: updated README.md
PR3C14D0 Mar 2, 2026
5571bdd
feat: changed imgui branch to imgui/docking
PR3C14D0 Mar 2, 2026
1c70963
feat: VulkanDescriptorSet::CreateFromExisting method created
PR3C14D0 Mar 2, 2026
86bfbc4
feat: VulkanDevice::CreateDescriptorSet overload created
PR3C14D0 Mar 2, 2026
05dccbd
feat: created method for handling camera resizing
PR3C14D0 Mar 2, 2026
b220aff
feat: imgui dock space window created
PR3C14D0 Mar 2, 2026
c2f1576
feat: started AssetManager class
PR3C14D0 Mar 4, 2026
200bd73
feat: subpass dependencies implemented
PR3C14D0 Mar 4, 2026
783f939
feat: added subpass dependencies
PR3C14D0 Mar 4, 2026
d5bfed5
feat: created a map type alias
PR3C14D0 Mar 19, 2026
b7c1d72
feat: created pointer type aliases
PR3C14D0 Mar 20, 2026
acb38ba
feat: Ref allowing being initialized as nullptr
PR3C14D0 Mar 20, 2026
51708f1
feat: ProjectManager class started
PR3C14D0 Mar 24, 2026
c57fe6c
fix: project tree orphan nodes solved
PR3C14D0 Mar 25, 2026
477adc4
feat: AssetBrowserState structure created
PR3C14D0 Mar 25, 2026
97cf216
feat: added nanosvg
PR3C14D0 Mar 25, 2026
5ca4470
feat: nanosvg implementation
PR3C14D0 Mar 25, 2026
b08dcbf
feat: Utils.h LoadSVG function created
PR3C14D0 Mar 25, 2026
62f6b52
feat: increased shadow pass lambda value
PR3C14D0 Mar 25, 2026
4f01a25
feat: ImGuiImpl::ImageButton method created
PR3C14D0 Mar 25, 2026
003fed1
refactor: improved deltaTime calculation
PR3C14D0 Mar 25, 2026
00627dc
feat: Folder icon header file created
PR3C14D0 Mar 25, 2026
07cc47c
feat: ImGuIPass::ShowAssetBrowser method created
PR3C14D0 Mar 25, 2026
df21a16
feat: placeholder Mesh icon added
PR3C14D0 Mar 26, 2026
bc0ed45
refactor: created the loadIcon lambda
PR3C14D0 Mar 26, 2026
18996d5
chore: decreased asset browser button size
PR3C14D0 Mar 26, 2026
457debb
fix: moved ImGui::PopID out of ImageButton
PR3C14D0 Mar 26, 2026
11571b3
feat: ImGuiImpl::ImageButton changed button logic for double clicked
PR3C14D0 Mar 26, 2026
a5d2908
feat: cascade shadow maps perfection
PR3C14D0 Mar 27, 2026
dce33ca
refactor: added this-> keyword
PR3C14D0 Mar 27, 2026
be983a3
feat: ProjectTree::FindAssetInNode method created
PR3C14D0 Mar 28, 2026
40fd637
feat: AssetVersion structure created
PR3C14D0 Mar 28, 2026
1abb11a
feat: AssetVersion::Serialize and Deserialize methods created
PR3C14D0 Mar 30, 2026
4cd2d12
docs: enhanced scenemanager documentation
PR3C14D0 Mar 31, 2026
8f7bb62
feat: created a Byte type alias
PR3C14D0 May 11, 2026
eb69eed
refactor: changed MeshAsset buffer type to a Vector<Byte>
PR3C14D0 May 11, 2026
b642939
feat: GPUFormat now inherits from uint32_t
PR3C14D0 May 11, 2026
8b4edb8
refactor: refactored MeshAsset for supporting the new AssetVersion st…
PR3C14D0 May 11, 2026
133255f
refactor: started using an AssetHandle structure for handling assets
PR3C14D0 May 11, 2026
d8ec241
feat: added SCENE asset type
PR3C14D0 May 11, 2026
b87d635
feat: started GameObjectAsset structure
PR3C14D0 May 11, 2026
7c791e4
feat: added nlohmann/json
PR3C14D0 May 11, 2026
4cd51af
feat: Project namespace created with Asset structure inside
PR3C14D0 May 12, 2026
95cd74f
refactor: changed ProjectManager for opening json files instead of pi…
PR3C14D0 May 12, 2026
5df7fd7
feat: HashMap alias created
PR3C14D0 May 12, 2026
b63cbec
feat: s_assetVersions HashMap initialized
PR3C14D0 May 12, 2026
92d3802
feat: Scene::GetName method created
PR3C14D0 May 15, 2026
b3dde5f
feat: Mesh::GetFilePath method created
PR3C14D0 May 15, 2026
ed0032e
refactor: shaders now located at ${BIN_DIR}/shaders
PR3C14D0 May 15, 2026
50fdc0b
feat: added Scene icon
PR3C14D0 May 17, 2026
1aaa736
feat: started SceneAsset structure
PR3C14D0 May 17, 2026
3b7c7a9
feat: added SceneAsset to AssetVariant
PR3C14D0 May 17, 2026
b5c5a46
refactor: MeshAsset now supports Sub-Meshes
PR3C14D0 May 17, 2026
22091fe
feat: ProjectManager::ProjectManager method created
PR3C14D0 May 17, 2026
9836ca4
fix: issues in ProjectTree::FindAssetInNode method
PR3C14D0 May 17, 2026
4cde67d
feat: Vector4 structure created
PR3C14D0 May 18, 2026
18b446f
feat: MaterialAsset structure created
PR3C14D0 May 18, 2026
5812541
feat: added MaterialAsset as a AssetVariant
PR3C14D0 May 18, 2026
c2fc7a2
fix: added Vector4 default constructors to allow being trivially copy…
PR3C14D0 May 18, 2026
a8b4e89
feat: added the bCompressed boolean to TextureAssetHeader struct
PR3C14D0 May 18, 2026
6c6fcb5
feat: added NONE to EMaterialFlags
PR3C14D0 May 18, 2026
ab31639
feat: Texture icon created
PR3C14D0 May 18, 2026
5a3d007
feat: Material icon created
PR3C14D0 May 18, 2026
aebc218
feat: manual ImageButton implementation for drag and drop
PR3C14D0 May 18, 2026
ec17f09
feat: Refactor AssetManager for generic asset types and core saving
PR3C14D0 May 27, 2026
72c956f
refactor: Update ProjectManager to use generic asset registration
PR3C14D0 May 27, 2026
9a79464
feat: Implement scene serialization
PR3C14D0 May 27, 2026
3872c99
feat: Integrate editor scene saving functionality
PR3C14D0 May 27, 2026
b92340a
feat: Implement drag and drop for assets and external files
PR3C14D0 May 27, 2026
f5d5180
fix: Adjust sample scene object transformation
PR3C14D0 May 27, 2026
27e0401
chore: Bump minor version to 2
PR3C14D0 May 27, 2026
a7cfbb3
docs: Document parameters for DeferredRenderer::Init
PR3C14D0 May 28, 2026
94a87e6
feat: Ensure robust mesh asset serialization and path retrieval
PR3C14D0 May 29, 2026
253b284
feat: Add support for GLSL shader macro definitions
PR3C14D0 Jun 1, 2026
842bbf5
chore: Remove unused include from CullingPass
PR3C14D0 Jun 1, 2026
f1cd71f
feat: material system
PR3C14D0 Jun 3, 2026
b2237f0
Merge remote-tracking branch 'origin/feat/project-management' into fe…
PR3C14D0 Jun 4, 2026
4b912bd
refactor: using Aetherion RHI for single time command buffers
PR3C14D0 Jun 6, 2026
e25f548
Merge remote-tracking branch 'origin/feat/project-management' into fe…
PR3C14D0 Jun 6, 2026
6854b92
fix(renderer): resolve vulkan initialization bugs and dynamic device …
PR3C14D0 Jun 6, 2026
7ae3316
fix(renderer): correct typo in sampler anisotropy flag name
PR3C14D0 Jun 9, 2026
9330ccc
feat(renderer): implement Disney Diffuse BRDF for PBR lighting
PR3C14D0 Jun 13, 2026
5e7fa52
feat(scene): implement hierarchical scene structure
PR3C14D0 Jun 14, 2026
ca2410c
feat(core): add equality operators to Ref
PR3C14D0 Jun 14, 2026
819fc29
feat(scene): initialize hierarchy and refactor camera management
PR3C14D0 Jun 14, 2026
95b7533
feat(project): Default-initialize ProjectTree node ID to unassigned s…
PR3C14D0 Jun 14, 2026
a5347a3
feat(renderer): Optimize texture uploads and enhance thread safety
PR3C14D0 Jun 15, 2026
719ad74
feat(renderer): default-initialize material albedo and emissive colors
PR3C14D0 Jun 15, 2026
2d7822d
feat(core): initialize SceneManager instance
PR3C14D0 Jun 15, 2026
18784f5
feat(renderer): improve cascaded shadow map frustum calculation
PR3C14D0 Jun 15, 2026
f073b64
refactor(core): explicitly cast ThreadPool thread count
PR3C14D0 Jun 15, 2026
ed00957
fix(core): remove hierarchy node from parent's children list
PR3C14D0 Jun 15, 2026
94092cf
fix(imgui): Safely copy asset names with snprintf
PR3C14D0 Jun 15, 2026
a909e1e
feat: SceneManager::SetCurrentScene method created
PR3C14D0 Aug 4, 2026
a4b4676
feat: GameObjectAsset::HasComponent helper member function created
PR3C14D0 Aug 5, 2026
edcd6d9
feat: Implement project scene loading, object deletion cleanup, and b…
PR3C14D0 Aug 8, 2026
2458dd3
feat: GameObject::SetupFromAsset method created
PR3C14D0 Aug 8, 2026
78eb22d
refactor: typos on comments corrected
PR3C14D0 Aug 8, 2026
3370fe8
feat: MegaBuffer::Free method created and added ability to use free s…
PR3C14D0 Aug 8, 2026
0e77b81
chore: ShadowPass early return if 0 batches
PR3C14D0 Aug 8, 2026
10f829f
refactor: use objName instead of calling GetName per object on Scene:…
PR3C14D0 Aug 8, 2026
1c6f1d1
feat: Scene::DeleteObject method created
PR3C14D0 Aug 8, 2026
63492ab
feat: added methods for Scene class to start and update hierarchy
PR3C14D0 Aug 8, 2026
7466662
feat: Scene::SetupFromAsset method created
PR3C14D0 Aug 8, 2026
6c33ec6
feat: Scene::[OnNodeDeleted] callback
PR3C14D0 Aug 8, 2026
809979e
feat: SceneCollector now collects objects from the Scene hierarchy
PR3C14D0 Aug 8, 2026
1d2479b
chore: early-return on deferred renderer if no batches added
PR3C14D0 Aug 8, 2026
cacada0
feat: DeferredRenderer::UnloadMesh method created
PR3C14D0 Aug 8, 2026
98b5662
refactor: replaced strncpy by snprintf on FixedString
PR3C14D0 Aug 8, 2026
cfce9cd
feat: ProjectManager::GetProjectDir method created
PR3C14D0 Aug 8, 2026
4700114
refactor: cleanup of dummy gameobject initalization at SceneManager
PR3C14D0 Aug 8, 2026
99455e3
fix(asset-manager): asset manager can now read scene type assets
PR3C14D0 Aug 8, 2026
894eea4
feat: ImGuiPass::DrawHierarchyNode method created and added the usage…
PR3C14D0 Aug 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,6 @@
- [xxHash](https://github.com/Cyan4973/xxHash)
- [imgui](https://github.com/ocornut/imgui)
- [Roboto Font](https://fonts.google.com/specimen/Roboto)
- [NFD-Extended](https://github.com/btzy/nativefiledialog-extended)
- [nanosvg](https://github.com/memononen/nanosvg)
- [nlohmann/json](https://github.com/nlohmann/json)
160 changes: 159 additions & 1 deletion include/imgui/backends/imgui_impl_dx11.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
// [X] Renderer: Large meshes support (64k+ vertices) even with 16-bit indices (ImGuiBackendFlags_RendererHasVtxOffset).
// [X] Renderer: Texture updates support for dynamic font atlas (ImGuiBackendFlags_RendererHasTextures).
// [X] Renderer: Expose selected render state for draw callbacks to use. Access in '(ImGui_ImplXXXX_RenderState*)GetPlatformIO().Renderer_RenderState'.
// [X] Renderer: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'.

// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.
// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need.
Expand All @@ -17,10 +18,12 @@

// CHANGELOG
// (minor and older changes stripped away, please see git history for details)
// 2026-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
// 2026-01-19: DirectX11: Added 'SamplerNearest' in ImGui_ImplDX11_RenderState. Renamed 'SamplerDefault' to 'SamplerLinear'.
// 2025-09-18: Call platform_io.ClearRendererHandlers() on shutdown.
// 2025-06-11: DirectX11: Added support for ImGuiBackendFlags_RendererHasTextures, for dynamic font atlas.
// 2025-05-07: DirectX11: Honor draw_data->FramebufferScale to allow for custom backends and experiment using it (consistently with other renderer backends, even though in normal condition it is not set under Windows).
// 2025-02-24: [Docking] Added undocumented ImGui_ImplDX11_SetSwapChainDescs() to configure swap chain creation for secondary viewports.
// 2025-01-06: DirectX11: Expose VertexConstantBuffer in ImGui_ImplDX11_RenderState. Reset projection matrix in ImDrawCallback_ResetRenderState handler.
// 2024-10-07: DirectX11: Changed default texture sampler to Clamp instead of Repeat/Wrap.
// 2024-10-07: DirectX11: Expose selected render state in ImGui_ImplDX11_RenderState, which you can access in 'void* platform_io.Renderer_RenderState' during draw callbacks.
Expand Down Expand Up @@ -85,6 +88,7 @@ struct ImGui_ImplDX11_Data
ID3D11DepthStencilState* pDepthStencilState;
int VertexBufferSize;
int IndexBufferSize;
ImVector<DXGI_SWAP_CHAIN_DESC> SwapChainDescsForViewports;

ImGui_ImplDX11_Data() { memset((void*)this, 0, sizeof(*this)); VertexBufferSize = 5000; IndexBufferSize = 10000; }
};
Expand All @@ -101,6 +105,10 @@ static ImGui_ImplDX11_Data* ImGui_ImplDX11_GetBackendData()
return ImGui::GetCurrentContext() ? (ImGui_ImplDX11_Data*)ImGui::GetIO().BackendRendererUserData : nullptr;
}

// Forward Declarations
static void ImGui_ImplDX11_InitMultiViewportSupport();
static void ImGui_ImplDX11_ShutdownMultiViewportSupport();

// Functions
static void ImGui_ImplDX11_SetupRenderState(const ImDrawData* draw_data, ID3D11DeviceContext* device_ctx)
{
Expand Down Expand Up @@ -626,6 +634,7 @@ bool ImGui_ImplDX11_Init(ID3D11Device* device, ID3D11DeviceContext* device_co
io.BackendRendererName = "imgui_impl_dx11";
io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes.
io.BackendFlags |= ImGuiBackendFlags_RendererHasTextures; // We can honor ImGuiPlatformIO::Textures[] requests during render.
io.BackendFlags |= ImGuiBackendFlags_RendererHasViewports; // We can create multi-viewports on the Renderer side (optional)

ImGuiPlatformIO& platform_io = ImGui::GetPlatformIO();
platform_io.Renderer_TextureMaxWidth = platform_io.Renderer_TextureMaxHeight = D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION;
Expand All @@ -648,6 +657,8 @@ bool ImGui_ImplDX11_Init(ID3D11Device* device, ID3D11DeviceContext* device_co
bd->pd3dDevice->AddRef();
bd->pd3dDeviceContext->AddRef();

ImGui_ImplDX11_InitMultiViewportSupport();

return true;
}

Expand All @@ -658,14 +669,15 @@ void ImGui_ImplDX11_Shutdown()
ImGuiIO& io = ImGui::GetIO();
ImGuiPlatformIO& platform_io = ImGui::GetPlatformIO();

ImGui_ImplDX11_ShutdownMultiViewportSupport();
ImGui_ImplDX11_InvalidateDeviceObjects();
if (bd->pFactory) { bd->pFactory->Release(); }
if (bd->pd3dDevice) { bd->pd3dDevice->Release(); }
if (bd->pd3dDeviceContext) { bd->pd3dDeviceContext->Release(); }

io.BackendRendererName = nullptr;
io.BackendRendererUserData = nullptr;
io.BackendFlags &= ~(ImGuiBackendFlags_RendererHasVtxOffset | ImGuiBackendFlags_RendererHasTextures);
io.BackendFlags &= ~(ImGuiBackendFlags_RendererHasVtxOffset | ImGuiBackendFlags_RendererHasTextures | ImGuiBackendFlags_RendererHasViewports);
platform_io.ClearRendererHandlers();
IM_DELETE(bd);
}
Expand All @@ -680,6 +692,152 @@ void ImGui_ImplDX11_NewFrame()
IM_ASSERT(0 && "ImGui_ImplDX11_CreateDeviceObjects() failed!");
}

//--------------------------------------------------------------------------------------------------------
// MULTI-VIEWPORT / PLATFORM INTERFACE SUPPORT
// This is an _advanced_ and _optional_ feature, allowing the backend to create and handle multiple viewports simultaneously.
// If you are new to dear imgui or creating a new binding for dear imgui, it is recommended that you completely ignore this section first..
//--------------------------------------------------------------------------------------------------------

// Helper structure we store in the void* RendererUserData field of each ImGuiViewport to easily retrieve our backend data.
struct ImGui_ImplDX11_ViewportData
{
IDXGISwapChain* SwapChain;
ID3D11RenderTargetView* RTView;

ImGui_ImplDX11_ViewportData() { SwapChain = nullptr; RTView = nullptr; }
~ImGui_ImplDX11_ViewportData() { IM_ASSERT(SwapChain == nullptr && RTView == nullptr); }
};

// Multi-Viewports: configure templates used when creating swapchains for secondary viewports. Will try them in order.
// This is intentionally not declared in the .h file yet, so you will need to copy this declaration:
void ImGui_ImplDX11_SetSwapChainDescs(const DXGI_SWAP_CHAIN_DESC* desc_templates, int desc_templates_count);
void ImGui_ImplDX11_SetSwapChainDescs(const DXGI_SWAP_CHAIN_DESC* desc_templates, int desc_templates_count)
{
ImGui_ImplDX11_Data* bd = ImGui_ImplDX11_GetBackendData();
bd->SwapChainDescsForViewports.resize(desc_templates_count);
memcpy(bd->SwapChainDescsForViewports.Data, desc_templates, sizeof(DXGI_SWAP_CHAIN_DESC));
}

static void ImGui_ImplDX11_CreateWindow(ImGuiViewport* viewport)
{
ImGui_ImplDX11_Data* bd = ImGui_ImplDX11_GetBackendData();
ImGui_ImplDX11_ViewportData* vd = IM_NEW(ImGui_ImplDX11_ViewportData)();
viewport->RendererUserData = vd;

// PlatformHandleRaw should always be a HWND, whereas PlatformHandle might be a higher-level handle (e.g. GLFWWindow*, SDL's WindowID).
// Some backends will leave PlatformHandleRaw == 0, in which case we assume PlatformHandle will contain the HWND.
HWND hwnd = viewport->PlatformHandleRaw ? (HWND)viewport->PlatformHandleRaw : (HWND)viewport->PlatformHandle;
IM_ASSERT(hwnd != 0);
IM_ASSERT(vd->SwapChain == nullptr && vd->RTView == nullptr);

// Create swap chain
HRESULT hr = DXGI_ERROR_UNSUPPORTED;
for (const DXGI_SWAP_CHAIN_DESC& sd_template : bd->SwapChainDescsForViewports)
{
IM_ASSERT(sd_template.BufferDesc.Width == 0 && sd_template.BufferDesc.Height == 0 && sd_template.OutputWindow == nullptr);
DXGI_SWAP_CHAIN_DESC sd = sd_template;
sd.BufferDesc.Width = (UINT)viewport->Size.x;
sd.BufferDesc.Height = (UINT)viewport->Size.y;
sd.OutputWindow = hwnd;
hr = bd->pFactory->CreateSwapChain(bd->pd3dDevice, &sd, &vd->SwapChain);
if (SUCCEEDED(hr))
break;
}
IM_ASSERT(SUCCEEDED(hr));
bd->pFactory->MakeWindowAssociation(hwnd, DXGI_MWA_NO_ALT_ENTER | DXGI_MWA_NO_WINDOW_CHANGES); // Disable e.g. Alt+Enter

// Create the render target
if (vd->SwapChain != nullptr)
{
ID3D11Texture2D* pBackBuffer;
vd->SwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer));
bd->pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &vd->RTView);
pBackBuffer->Release();
}
}

static void ImGui_ImplDX11_DestroyWindow(ImGuiViewport* viewport)
{
// The main viewport (owned by the application) will always have RendererUserData == nullptr since we didn't create the data for it.
if (ImGui_ImplDX11_ViewportData* vd = (ImGui_ImplDX11_ViewportData*)viewport->RendererUserData)
{
if (vd->SwapChain)
vd->SwapChain->Release();
vd->SwapChain = nullptr;
if (vd->RTView)
vd->RTView->Release();
vd->RTView = nullptr;
IM_DELETE(vd);
}
viewport->RendererUserData = nullptr;
}

static void ImGui_ImplDX11_SetWindowSize(ImGuiViewport* viewport, ImVec2 size)
{
ImGui_ImplDX11_Data* bd = ImGui_ImplDX11_GetBackendData();
ImGui_ImplDX11_ViewportData* vd = (ImGui_ImplDX11_ViewportData*)viewport->RendererUserData;
if (vd->RTView)
{
vd->RTView->Release();
vd->RTView = nullptr;
}
if (vd->SwapChain)
{
ID3D11Texture2D* pBackBuffer = nullptr;
vd->SwapChain->ResizeBuffers(0, (UINT)size.x, (UINT)size.y, DXGI_FORMAT_UNKNOWN, 0);
vd->SwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer));
if (pBackBuffer == nullptr) { fprintf(stderr, "ImGui_ImplDX11_SetWindowSize() failed creating buffers.\n"); return; }
bd->pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &vd->RTView);
pBackBuffer->Release();
}
}

static void ImGui_ImplDX11_RenderWindow(ImGuiViewport* viewport, void*)
{
ImGui_ImplDX11_Data* bd = ImGui_ImplDX11_GetBackendData();
ImGui_ImplDX11_ViewportData* vd = (ImGui_ImplDX11_ViewportData*)viewport->RendererUserData;
ImVec4 clear_color = ImVec4(0.0f, 0.0f, 0.0f, 1.0f);
bd->pd3dDeviceContext->OMSetRenderTargets(1, &vd->RTView, nullptr);
if (!(viewport->Flags & ImGuiViewportFlags_NoRendererClear))
bd->pd3dDeviceContext->ClearRenderTargetView(vd->RTView, (float*)&clear_color);
ImGui_ImplDX11_RenderDrawData(viewport->DrawData);
}

static void ImGui_ImplDX11_SwapBuffers(ImGuiViewport* viewport, void*)
{
ImGui_ImplDX11_ViewportData* vd = (ImGui_ImplDX11_ViewportData*)viewport->RendererUserData;
if (vd->SwapChain)
vd->SwapChain->Present(0, 0); // Present without vsync
}

static void ImGui_ImplDX11_InitMultiViewportSupport()
{
ImGuiPlatformIO& platform_io = ImGui::GetPlatformIO();
platform_io.Renderer_CreateWindow = ImGui_ImplDX11_CreateWindow;
platform_io.Renderer_DestroyWindow = ImGui_ImplDX11_DestroyWindow;
platform_io.Renderer_SetWindowSize = ImGui_ImplDX11_SetWindowSize;
platform_io.Renderer_RenderWindow = ImGui_ImplDX11_RenderWindow;
platform_io.Renderer_SwapBuffers = ImGui_ImplDX11_SwapBuffers;

// Default swapchain format
DXGI_SWAP_CHAIN_DESC sd;
ZeroMemory(&sd, sizeof(sd));
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
sd.SampleDesc.Count = 1;
sd.SampleDesc.Quality = 0;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.BufferCount = 1;
sd.Windowed = TRUE;
sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
sd.Flags = 0;
ImGui_ImplDX11_SetSwapChainDescs(&sd, 1);
}

static void ImGui_ImplDX11_ShutdownMultiViewportSupport()
{
ImGui::DestroyPlatformWindows();
}

//-----------------------------------------------------------------------------

#endif // #ifndef IMGUI_DISABLE
3 changes: 2 additions & 1 deletion include/imgui/backends/imgui_impl_dx11.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
// [X] Renderer: Large meshes support (64k+ vertices) even with 16-bit indices (ImGuiBackendFlags_RendererHasVtxOffset).
// [X] Renderer: Texture updates support for dynamic font atlas (ImGuiBackendFlags_RendererHasTextures).
// [X] Renderer: Expose selected render state for draw callbacks to use. Access in '(ImGui_ImplXXXX_RenderState*)GetPlatformIO().Renderer_RenderState'.
// [X] Renderer: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'.

// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.
// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need.
Expand All @@ -16,7 +17,7 @@
// - Introduction, links and more at the top of imgui.cpp

#pragma once
#include <imgui/imgui.h> // IMGUI_IMPL_API
#include <imgui/imgui.h> // IMGUI_IMPL_API
#ifndef IMGUI_DISABLE

struct ID3D11Device;
Expand Down
Loading
Loading