mirror of https://github.com/ocornut/imgui
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			87 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
			
		
		
	
	
			87 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
| // dear imgui: Renderer for WebGPU
 | |
| // This needs to be used along with a Platform Binding (e.g. GLFW)
 | |
| // (Please note that WebGPU is currently experimental, will not run on non-beta browsers, and may break.)
 | |
| 
 | |
| // Important note to dawn and/or wgpu users: when targeting native platforms (i.e. NOT emscripten),
 | |
| // one of IMGUI_IMPL_WEBGPU_BACKEND_DAWN or IMGUI_IMPL_WEBGPU_BACKEND_WGPU must be provided.
 | |
| // Add #define to your imconfig.h file, or as a compilation flag in your build system.
 | |
| // This requirement will be removed once WebGPU stabilizes and backends converge on a unified interface.
 | |
| //#define IMGUI_IMPL_WEBGPU_BACKEND_DAWN
 | |
| //#define IMGUI_IMPL_WEBGPU_BACKEND_WGPU
 | |
| 
 | |
| // Implemented features:
 | |
| //  [X] Renderer: User texture binding. Use 'WGPUTextureView' as ImTextureID. Read the FAQ about ImTextureID/ImTextureRef!
 | |
| //  [X] Renderer: Large meshes support (64k+ vertices) even with 16-bit indices (ImGuiBackendFlags_RendererHasVtxOffset).
 | |
| //  [X] Renderer: Expose selected render state for draw callbacks to use. Access in '(ImGui_ImplXXXX_RenderState*)GetPlatformIO().Renderer_RenderState'.
 | |
| //  [X] Renderer: Texture updates support for dynamic font system (ImGuiBackendFlags_RendererHasTextures).
 | |
| 
 | |
| // 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.
 | |
| // 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
 | |
| 
 | |
| #pragma once
 | |
| #include "imgui.h"          // IMGUI_IMPL_API
 | |
| #ifndef IMGUI_DISABLE
 | |
| 
 | |
| #include <webgpu/webgpu.h>
 | |
| #if defined(IMGUI_IMPL_WEBGPU_BACKEND_DAWN)
 | |
| #include <webgpu/webgpu_cpp.h>  // for wgpu::Device, wgpu::DeviceLostReason, wgpu::ErrorType used by validation layer callbacks.
 | |
| #elif !defined(__EMSCRIPTEN__)
 | |
| #include <webgpu/wgpu.h>        // WGPULogLevel
 | |
| #endif
 | |
| 
 | |
| // Initialization data, for ImGui_ImplWGPU_Init()
 | |
| struct ImGui_ImplWGPU_InitInfo
 | |
| {
 | |
|     WGPUDevice              Device;
 | |
|     int                     NumFramesInFlight = 3;
 | |
|     WGPUTextureFormat       RenderTargetFormat = WGPUTextureFormat_Undefined;
 | |
|     WGPUTextureFormat       DepthStencilFormat = WGPUTextureFormat_Undefined;
 | |
|     WGPUMultisampleState    PipelineMultisampleState = {};
 | |
| 
 | |
|     ImGui_ImplWGPU_InitInfo()
 | |
|     {
 | |
|         PipelineMultisampleState.count = 1;
 | |
|         PipelineMultisampleState.mask = UINT32_MAX;
 | |
|         PipelineMultisampleState.alphaToCoverageEnabled = false;
 | |
|     }
 | |
| };
 | |
| 
 | |
| // Follow "Getting Started" link and check examples/ folder to learn about using backends!
 | |
| IMGUI_IMPL_API bool ImGui_ImplWGPU_Init(ImGui_ImplWGPU_InitInfo* init_info);
 | |
| IMGUI_IMPL_API void ImGui_ImplWGPU_Shutdown();
 | |
| IMGUI_IMPL_API void ImGui_ImplWGPU_NewFrame();
 | |
| IMGUI_IMPL_API void ImGui_ImplWGPU_RenderDrawData(ImDrawData* draw_data, WGPURenderPassEncoder pass_encoder);
 | |
| 
 | |
| // Use if you want to reset your rendering device without losing Dear ImGui state.
 | |
| IMGUI_IMPL_API bool ImGui_ImplWGPU_CreateDeviceObjects();
 | |
| IMGUI_IMPL_API void ImGui_ImplWGPU_InvalidateDeviceObjects();
 | |
| 
 | |
| // (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_ImplWGPU_UpdateTexture(ImTextureData* tex);
 | |
| 
 | |
| // [BETA] Selected render state data shared with callbacks.
 | |
| // This is temporarily stored in GetPlatformIO().Renderer_RenderState during the ImGui_ImplWGPU_RenderDrawData() call.
 | |
| // (Please open an issue if you feel you need access to more data)
 | |
| struct ImGui_ImplWGPU_RenderState
 | |
| {
 | |
|     WGPUDevice                  Device;
 | |
|     WGPURenderPassEncoder       RenderPassEncoder;
 | |
| };
 | |
| 
 | |
| // (Optional) WebGPU Helpers
 | |
| bool    ImGui_ImplWGPU_CheckSurfaceTextureOptimalStatus_Helper(WGPUSurfaceGetCurrentTextureStatus status);                      // Check if the status of surface texture is optimal
 | |
| void    ImGui_ImplWGPU_PrintAdapterInfo_Helper(const WGPUAdapter& adapter);
 | |
| #if defined(IMGUI_IMPL_WEBGPU_BACKEND_DAWN)     // DAWN both Native / EMSCRIPTEN
 | |
| void    ImGui_ImplWGPU_DAWN_DeviceLostCallback_Helper(const wgpu::Device&, wgpu::DeviceLostReason reason, wgpu::StringView msg);// DAWN Validation Layer callback: reason for device loss
 | |
| void    ImGui_ImplWGPU_DAWN_ErrorCallback_Helper(const wgpu::Device&, wgpu::ErrorType type, wgpu::StringView msg);              // DAWN Validation Layer callback: print error type
 | |
| #elif !defined(__EMSCRIPTEN__)                  // WGPU-Native
 | |
| void    ImGui_ImplWGPU_WGPU_LogCallback_Helper(WGPULogLevel level, WGPUStringView msg, void* userdata);                         // WGPU-Native log callback: print information based on request level.
 | |
| #endif
 | |
| 
 | |
| #endif // #ifndef IMGUI_DISABLE
 |