VTK  9.6.20260204
vtkWebGPURenderWindow.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
18
19#ifndef vtkWebGPURenderWindow_h
20#define vtkWebGPURenderWindow_h
21
22#include "vtkRenderWindow.h"
23
24#include "vtkRenderingWebGPUModule.h" // for export macro
25#include "vtkWebGPUComputePipeline.h" // for the compute pipelines of this render window
26#include "vtkWebGPUComputeRenderTexture.h" // for compute render textures
27#include "vtkWebGPURenderPipelineCache.h" // for vtkWebGPURenderPipelineCache
28#include "vtkWebGPURenderTextureCache.h" // for texture cache
29#include "vtkWebGPUShaderDatabase.h" // for shader database
30#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
31#include "vtk_wgpu.h" // for webgpu
32
33VTK_ABI_NAMESPACE_BEGIN
34
37class vtkWebGPUTextureCache;
38class vtkImageData;
39class vtkTypeUInt32Array;
40class VTKRENDERINGWEBGPU_EXPORT VTK_MARSHALAUTO vtkWebGPURenderWindow : public vtkRenderWindow
41{
42public:
47
49 void PrintSelf(ostream& os, vtkIndent indent) override;
50
54 virtual void CreateAWindow();
55
59 virtual void DestroyWindow() {}
60
73 void Initialize() override;
74
75 void Start() override;
76
80 void End() override;
81
85 void Render() override;
86
91 void StereoMidpoint() override;
92 void Frame() override;
93
94 const char* GetRenderingBackend() override;
95
99 void* GetGenericContext() override;
100
102
107 unsigned char* GetPixelData(int x, int y, int x2, int y2, int front, int right) override;
109 int x, int y, int x2, int y2, int front, vtkUnsignedCharArray* data, int right) override;
111 int x, int y, int x2, int y2, unsigned char* data, int front, int right) override;
113 int x, int y, int x2, int y2, vtkUnsignedCharArray* data, int front, int right) override;
115
117
120 float* GetRGBAPixelData(int x, int y, int x2, int y2, int front, int right = 0) override;
122 int x, int y, int x2, int y2, int front, vtkFloatArray* data, int right = 0) override;
124 int x, int y, int x2, int y2, float* data, int front, int blend = 0, int right = 0) override;
125 int SetRGBAPixelData(int x, int y, int x2, int y2, vtkFloatArray* data, int front, int blend = 0,
126 int right = 0) override;
127 void ReleaseRGBAPixelData(float* data) override;
128 unsigned char* GetRGBACharPixelData(
129 int x, int y, int x2, int y2, int front, int right = 0) override;
131 int x, int y, int x2, int y2, int front, vtkUnsignedCharArray* data, int right = 0) override;
132 int SetRGBACharPixelData(int x, int y, int x2, int y2, unsigned char* data, int front,
133 int blend = 0, int right = 0) override;
134 int SetRGBACharPixelData(int x, int y, int x2, int y2, vtkUnsignedCharArray* data, int front,
135 int blend = 0, int right = 0) override;
137
139
142 float* GetZbufferData(int x1, int y1, int x2, int y2) override;
143 int GetZbufferData(int x1, int y1, int x2, int y2, float* z) override;
144 int GetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray* buffer) override;
145 int SetZbufferData(int x1, int y1, int x2, int y2, float* buffer) override;
146 int SetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray* buffer) override;
148
153 int GetColorBufferSizes(int* rgba) override;
157 void WaitForCompletion() override;
158
162 int SupportsOpenGL() override;
163
167 const char* ReportCapabilities() override;
168
174
180
182 vtkGetSmartPointerMacro(WGPUConfiguration, vtkWebGPUConfiguration);
183
190
196
202
207 std::string PreprocessShaderSource(const std::string& source) const;
208
212 wgpu::RenderPassEncoder NewRenderPass(wgpu::RenderPassDescriptor& descriptor);
213
218 wgpu::RenderBundleEncoder NewRenderBundleEncoder(wgpu::RenderBundleEncoderDescriptor& descriptor);
219
224 wgpu::CommandEncoder GetCommandEncoder();
225
230
234 void FlushCommandBuffers(vtkTypeUInt32 count, wgpu::CommandBuffer* buffers);
235
241
245 wgpu::TextureView GetDepthStencilView();
246
250 wgpu::TextureFormat GetDepthStencilFormat();
251
256
260 wgpu::Device GetDevice();
261
265 wgpu::Adapter GetAdapter();
266
270 wgpu::TextureFormat GetPreferredSurfaceTextureFormat();
271
276
278
288
291
293 std::function<void(const void* mappedData, int bytesPerRow, void* userdata)>;
294
303
308
312 bool EnsureDisplay() override;
313
317 void* GetGenericDisplayId() override;
318
319protected:
322
331 virtual std::string MakeDefaultWindowNameWithBackend();
332
333 bool WGPUInit();
335
339
342
345
348
351
353
355
356 virtual void SyncWithHardware();
357
359
360 wgpu::Surface Surface;
361 wgpu::CommandEncoder CommandEncoder;
363 wgpu::TextureFormat PreferredSurfaceTextureFormat = wgpu::TextureFormat::BGRA8Unorm;
364 wgpu::TextureFormat PreferredSelectorIdsTextureFormat = wgpu::TextureFormat::RGBA32Uint;
366 {
367 wgpu::Texture Texture;
368 wgpu::TextureView View;
369 wgpu::TextureFormat Format;
371 };
373
375 {
376 wgpu::Texture Texture;
377 wgpu::TextureView View;
378 wgpu::TextureFormat Format;
379 };
382
384 {
385 wgpu::Origin3D Origin;
386 wgpu::Extent3D Extent;
387 wgpu::TexelCopyBufferLayout Layout;
388 wgpu::Buffer Buffer; // for SetPixelData
389 };
391
393 {
394 std::string Key;
395 wgpu::BindGroup BindGroup;
396 };
398
403
408
410
411private:
412 // For accessing SubmitCommandBuffer to submit custom prop render work
414 // For accessing HardwareSelectorAttachment
416
418 void operator=(const vtkWebGPURenderWindow&) = delete;
419
424 void InitializeRendererComputePipelines();
425
430 void SubmitCommandBuffer(int count, wgpu::CommandBuffer* commandBuffer);
431
435 void PostRenderComputePipelines();
436
441 void PostRasterizationRender();
442
443 void ReadTextureFromGPU(wgpu::Texture& wgpuTexture, wgpu::TextureFormat format,
444 std::size_t mipLevel, wgpu::TextureAspect aspect, wgpu::Origin3D offsets,
445 wgpu::Extent3D extents, TextureMapCallback callback, void* userData);
446
447 void ReadTextureFromGPU(wgpu::Texture& wgpuTexture, wgpu::TextureFormat format,
448 std::size_t mipLevel, wgpu::TextureAspect aspect, TextureMapCallback callback, void* userData);
449
450 void GetIdsData(int x1, int y1, int x2, int y2, vtkTypeUInt32* values);
451 void GetIdsData(int x1, int y1, int x2, int y2, vtkTypeUInt32Array* data);
452
453 // Render textures acquired by the user on this render window. They are kept here in case the
454 // render window is resized, in which case, we'll need to resize the render textures --> We need
455 // access to the textures
456 std::vector<vtkSmartPointer<vtkWebGPUComputeRenderTexture>> ComputeRenderTextures;
457};
458
459VTK_ABI_NAMESPACE_END
460#endif
dynamic, self-adjusting array of float
topologically and geometrically regular array of data
a simple class to control print indentation
Definition vtkIndent.h:108
Allocate and hold a VTK object.
Definition vtkNew.h:167
platform-independent render window interaction including picking and frame rate control.
Hold a reference to a vtkObjectBase instance.
dynamic, self-adjusting array of unsigned char
This culler does both frustum culling and occlusion culling.
Create a webgpu device for use in rendering and compute pipelines.
Class to create and retrieve render pipelines based on a given key.
Class to create and retrieve render Textures based on a given key.
vtkWGPUAttachment IdsAttachment
vtkGetNewMacro(WGPUPipelineCache, vtkWebGPURenderPipelineCache)
Get the pipeline cache for this renderer.
vtkWGPUDepthStencil DepthStencilAttachment
virtual void DestroyWindow()
Destroy a not-off-screen window.
void Frame() override
A termination method performed at the end of the rendering process to do things like swapping buffers...
void CreateCommandEncoder()
Initializes a new command encoder.
wgpu::TextureFormat GetPreferredSurfaceTextureFormat()
Get the texture format preferred for the surface.
wgpu::TextureFormat GetPreferredSelectorIdsTextureFormat()
Get the texture format preferred for selector IDs.
void RecreateComputeRenderTextures()
wgpu::TextureFormat GetDepthStencilFormat()
Get the texture format of the depth-stencil attachment.
bool EnsureDisplay() override
Ensure RenderWindow's display is opened.
vtkGetNewMacro(WGPUTextureCache, vtkWebGPURenderTextureCache)
Get the texture cache for this renderer.
std::string PreprocessShaderSource(const std::string &source) const
Replaces all include statements in the given source code with source code corresponding to the includ...
void End() override
Update the system, if needed, at end of render process.
vtkSmartPointer< vtkImageData > SaveAttachmentToVTI(AttachmentTypeForVTISnapshot type)
int SupportsOpenGL() override
Does this render window support OpenGL?
int SetZbufferData(int x1, int y1, int x2, int y2, float *buffer) override
Set/Get the zbuffer data from an image.
float * GetRGBAPixelData(int x, int y, int x2, int y2, int front, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
wgpu::CommandEncoder GetCommandEncoder()
Get the currently used command encoder.
vtkNew< vtkWebGPURenderTextureCache > WGPUTextureCache
void SetWGPUConfiguration(vtkWebGPUConfiguration *config)
void SetInteractor(vtkRenderWindowInteractor *) override
Set the interactor for the window.
const char * ReportCapabilities() override
Get report of capabilities for the render window.
wgpu::Adapter GetAdapter()
Get the webgpu adapter.
std::function< void(const void *mappedData, int bytesPerRow, void *userdata)> TextureMapCallback
bool HasStencil()
Whether the offscreen render target has stencil capabilities.
int GetPixelData(int x, int y, int x2, int y2, int front, vtkUnsignedCharArray *data, int right) override
Set/Get the pixel data of an image, transmitted as RGBRGB... front in this context indicates that the...
vtkWGPUAttachment ColorAttachment
friend class vtkWebGPUComputeOcclusionCuller
vtkSmartPointer< vtkWebGPUConfiguration > WGPUConfiguration
wgpu::TextureView GetHardwareSelectorAttachmentView()
int GetRGBAPixelData(int x, int y, int x2, int y2, int front, vtkFloatArray *data, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
void ReleaseRGBAPixelData(float *data) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static vtkWebGPURenderWindow * New()
Instantiate the class.
int GetRGBACharPixelData(int x, int y, int x2, int y2, int front, vtkUnsignedCharArray *data, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
void * GetGenericDisplayId() override
Get the generic display id for the window.
int SetPixelData(int x, int y, int x2, int y2, unsigned char *data, int front, int right) override
Set/Get the pixel data of an image, transmitted as RGBRGB... front in this context indicates that the...
unsigned char * GetRGBACharPixelData(int x, int y, int x2, int y2, int front, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
wgpu::TextureFormat PreferredSurfaceTextureFormat
vtkWGPUFullScreenQuad ColorCopyRenderPipeline
float * GetZbufferData(int x1, int y1, int x2, int y2) override
Set/Get the zbuffer data from an image.
void WaitForCompletion() override
Block the thread until work queue completes all submitted work.
int SetPixelData(int x, int y, int x2, int y2, vtkUnsignedCharArray *data, int front, int right) override
Set/Get the pixel data of an image, transmitted as RGBRGB... front in this context indicates that the...
wgpu::CommandEncoder CommandEncoder
void CreateDepthStencilAttachment()
void DestroyDepthStencilAttachment()
void ReleaseGraphicsResources(vtkWindow *) override
Free up any graphics resources associated with this window a value of NULL means the context may alre...
bool InitializeFromCurrentContext() override
Initialize the render window from the information associated with the currently activated OpenGL cont...
vtkSmartPointer< vtkWebGPUComputePipeline > DepthCopyPipeline
vtkGetNewMacro(WGPUShaderDatabase, vtkWebGPUShaderDatabase)
Get a database of all WebGPU shader source codes in VTK.
void Initialize() override
Creates the WebGPU context, swapchain, depth buffer, color attachment, ...
void CreateOffscreenColorAttachment()
void DestroyOffscreenColorAttachment()
wgpu::TextureView GetDepthStencilView()
Get a view of the depth-stencil attachment used in the offscreen render target.
int SetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray *buffer) override
Set/Get the zbuffer data from an image.
int GetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray *buffer) override
Set/Get the zbuffer data from an image.
void Render() override
Handle opengl specific code and calls superclass.
int SetRGBAPixelData(int x, int y, int x2, int y2, float *data, int front, int blend=0, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
wgpu::RenderBundleEncoder NewRenderBundleEncoder(wgpu::RenderBundleEncoderDescriptor &descriptor)
Create a new render bundle encoder on the webgpu device.
vtkSmartPointer< vtkWebGPUComputeRenderTexture > AcquireDepthBufferRenderTexture()
Returns a vtkWebGPUComputeRenderTexture ready to be added to a compute pipeline using vtkWebGPUComput...
vtkSmartPointer< vtkWebGPUComputePass > DepthCopyPass
void FlushCommandBuffers(vtkTypeUInt32 count, wgpu::CommandBuffer *buffers)
Sends a given command buffer to the device queue.
void Start() override
Start the rendering process for a frame.
const char * GetRenderingBackend() override
What rendering backend has the user requested.
vtkSmartPointer< vtkWebGPUComputeRenderTexture > AcquireFramebufferRenderTexture()
Returns a vtkWebGPUComputeRenderTexture ready to be added to a compute pipeline using vtkWebGPUComput...
vtkNew< vtkWebGPURenderPipelineCache > WGPUPipelineCache
wgpu::RenderPassEncoder NewRenderPass(wgpu::RenderPassDescriptor &descriptor)
Create a new render pass encoder on the webgpu device.
virtual void SyncWithHardware()
int SetRGBACharPixelData(int x, int y, int x2, int y2, vtkUnsignedCharArray *data, int front, int blend=0, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
vtkNew< vtkWebGPUShaderDatabase > WGPUShaderDatabase
~vtkWebGPURenderWindow() override
void * GetGenericContext() override
Get the generic context pointer.
virtual std::string MakeDefaultWindowNameWithBackend()
Construct the window title as "Visualization Toolkit - <WindowSystem> <GraphicsBackend>" Ex: "Visuali...
int GetZbufferData(int x1, int y1, int x2, int y2, float *z) override
Set/Get the zbuffer data from an image.
wgpu::TextureView GetOffscreenColorAttachmentView()
Get a view of the color attachment used in the offscreen render target.
vtkWGPUUserStagingPixelData StagingPixelData
int SetRGBAPixelData(int x, int y, int x2, int y2, vtkFloatArray *data, int front, int blend=0, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
void StereoMidpoint() override
Intermediate method performs operations required between the rendering of the left and right eye.
int GetColorBufferSizes(int *rgba) override
Get the size of the color buffer.
wgpu::Device GetDevice()
Get the webgpu device.
int SetRGBACharPixelData(int x, int y, int x2, int y2, unsigned char *data, int front, int blend=0, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
virtual void CreateAWindow()
Create a not-off-screen window.
wgpu::TextureFormat PreferredSelectorIdsTextureFormat
unsigned char * GetPixelData(int x, int y, int x2, int y2, int front, int right) override
Set/Get the pixel data of an image, transmitted as RGBRGB... front in this context indicates that the...
Class to add and retrieve source code for shader files for a specified key.
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
#define VTK_MARSHALAUTO