2022-05-18 16:23:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								// dear imgui: Renderer Backend for DirectX12
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// This needs to be used along with a Platform Backend (e.g. Win32)
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Implemented features:
  
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//  [X] Renderer: User texture binding. Use 'D3D12_GPU_DESCRIPTOR_HANDLE' as texture identifier. Read the FAQ about ImTextureID/ImTextureRef!
  
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//  [X] Renderer: Large meshes support (64k+ vertices) even with 16-bit indices (ImGuiBackendFlags_RendererHasVtxOffset).
  
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//  [X] Renderer: Texture updates support for dynamic font atlas (ImGuiBackendFlags_RendererHasTextures).
  
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:52:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//  [X] Renderer: Expose selected render state for draw callbacks to use. Access in '(ImGui_ImplXXXX_RenderState*)GetPlatformIO().Renderer_RenderState'.
  
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//  [X] Renderer: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'.
  
						 
					
						
							
								
									
										
										
										
											2022-05-18 16:23:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// The aim of imgui_impl_dx12.h/.cpp is to be usable in your engine without any modification.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// IF YOU FEEL YOU NEED TO MAKE ANY CHANGE TO THIS CODE, please share them and your feedback at https://github.com/ocornut/imgui/
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-05-18 16:23:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								// 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.
  
						 
					
						
							
								
									
										
										
										
											2025-08-09 22:26:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// Learn about Dear ImGui:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// - FAQ                  https://dearimgui.com/faq
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// - Getting Started      https://dearimgui.com/getting-started
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// - Documentation        https://dearimgui.com/docs (same as your local docs/ folder).
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// - Introduction, links and more at the top of imgui.cpp
  
						 
					
						
							
								
									
										
										
										
											2022-05-18 16:23:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# pragma once 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "imgui.h"      // IMGUI_IMPL_API 
  
						 
					
						
							
								
									
										
										
										
											2023-08-30 01:42:51 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# ifndef IMGUI_DISABLE 
  
						 
					
						
							
								
									
										
										
										
											2022-05-18 16:23:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# include  <dxgiformat.h> // DXGI_FORMAT 
  
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <d3d12.h>      // D3D12_CPU_DESCRIPTOR_HANDLE 
  
						 
					
						
							
								
									
										
										
										
											2022-05-18 16:23:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// Initialization data, for ImGui_ImplDX12_Init()
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct  ImGui_ImplDX12_InitInfo  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ID3D12Device *                Device ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ID3D12CommandQueue *          CommandQueue ;        // Command queue used for queuing texture uploads.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int                          NumFramesInFlight ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    DXGI_FORMAT                  RTVFormat ;           // RenderTarget format.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    DXGI_FORMAT                  DSVFormat ;           // DepthStencilView format.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    void *                        UserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-18 16:23:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    // Allocating SRV descriptors for textures is up to the application, so we provide callbacks.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    // (current version of the backend will only allocate one descriptor, from 1.92 the backend will need to allocate more)
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ID3D12DescriptorHeap *        SrvDescriptorHeap ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    void                         ( * SrvDescriptorAllocFn ) ( ImGui_ImplDX12_InitInfo *  info ,  D3D12_CPU_DESCRIPTOR_HANDLE *  out_cpu_desc_handle ,  D3D12_GPU_DESCRIPTOR_HANDLE *  out_gpu_desc_handle ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    void                         ( * SrvDescriptorFreeFn ) ( ImGui_ImplDX12_InitInfo *  info ,  D3D12_CPU_DESCRIPTOR_HANDLE  cpu_desc_handle ,  D3D12_GPU_DESCRIPTOR_HANDLE  gpu_desc_handle ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    D3D12_CPU_DESCRIPTOR_HANDLE  LegacySingleSrvCpuDescriptor ;  // To facilitate transition from single descriptor to allocator callback, you may use those.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    D3D12_GPU_DESCRIPTOR_HANDLE  LegacySingleSrvGpuDescriptor ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
									
										
										
										
											2025-08-10 06:07:58 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:05:46 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ImGui_ImplDX12_InitInfo ( )    {  memset ( ( void * ) this ,  0 ,  sizeof ( * this ) ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Follow "Getting Started" link and check examples/ folder to learn about using backends!
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								IMGUI_IMPL_API  bool      ImGui_ImplDX12_Init ( ImGui_ImplDX12_InitInfo *  info ) ;  
						 
					
						
							
								
									
										
										
										
											2022-05-18 16:23:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								IMGUI_IMPL_API  void      ImGui_ImplDX12_Shutdown ( ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								IMGUI_IMPL_API  void      ImGui_ImplDX12_NewFrame ( ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								IMGUI_IMPL_API  void      ImGui_ImplDX12_RenderDrawData ( ImDrawData *  draw_data ,  ID3D12GraphicsCommandList *  graphics_command_list ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Legacy initialization API Obsoleted in 1.91.5
  
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// - font_srv_cpu_desc_handle and font_srv_gpu_desc_handle are handles to a single SRV descriptor to use for the internal font texture, they must be in 'srv_descriptor_heap'
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// - When we introduced the ImGui_ImplDX12_InitInfo struct we also added a 'ID3D12CommandQueue* CommandQueue' field.
  
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								IMGUI_IMPL_API  bool      ImGui_ImplDX12_Init ( ID3D12Device *  device ,  int  num_frames_in_flight ,  DXGI_FORMAT  rtv_format ,  ID3D12DescriptorHeap *  srv_descriptor_heap ,  D3D12_CPU_DESCRIPTOR_HANDLE  font_srv_cpu_desc_handle ,  D3D12_GPU_DESCRIPTOR_HANDLE  font_srv_gpu_desc_handle ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-05-18 16:23:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								// Use if you want to reset your rendering device without losing Dear ImGui state.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								IMGUI_IMPL_API  bool      ImGui_ImplDX12_CreateDeviceObjects ( ) ;  
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:09:28 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								IMGUI_IMPL_API  void      ImGui_ImplDX12_InvalidateDeviceObjects ( ) ;  
						 
					
						
							
								
									
										
										
										
											2023-08-30 01:42:51 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// (Advanced) Use e.g. if you need to precisely control the timing of texture updates (e.g. for staged rendering), by setting ImDrawData::Textures = NULL to handle this manually.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								IMGUI_IMPL_API  void      ImGui_ImplDX12_UpdateTexture ( ImTextureData *  tex ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:52:57 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// [BETA] Selected render state data shared with callbacks.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// This is temporarily stored in GetPlatformIO().Renderer_RenderState during the ImGui_ImplDX12_RenderDrawData() call.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// (Please open an issue if you feel you need access to more data)
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct  ImGui_ImplDX12_RenderState  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ID3D12Device *                Device ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ID3D12GraphicsCommandList *   CommandList ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-30 01:42:51 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# endif  // #ifndef IMGUI_DISABLE