VTK  9.5.20251207
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
15
16#ifndef vtkWebGPURenderWindow_h
17#define vtkWebGPURenderWindow_h
18
19#include "vtkRenderWindow.h"
20
21#include "vtkRenderingWebGPUModule.h" // for export macro
22#include "vtkWebGPUComputePipeline.h" // for the compute pipelines of this render window
23#include "vtkWebGPUComputeRenderTexture.h" // for compute render textures
24#include "vtkWebGPURenderPipelineCache.h" // for vtkWebGPURenderPipelineCache
25#include "vtkWebGPURenderTextureCache.h" // for texture cache
26#include "vtkWebGPUShaderDatabase.h" // for shader database
27#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
28#include "vtk_wgpu.h" // for webgpu
29
30VTK_ABI_NAMESPACE_BEGIN
31
34class vtkWebGPUTextureCache;
35class vtkImageData;
36class vtkTypeUInt32Array;
37class VTKRENDERINGWEBGPU_EXPORT VTK_MARSHALAUTO vtkWebGPURenderWindow : public vtkRenderWindow
38{
39public:
41 void PrintSelf(ostream& os, vtkIndent indent) override;
42
47 virtual bool WindowSetup() = 0;
48
52 virtual void CreateAWindow() = 0;
53
57 virtual void DestroyWindow() = 0;
58
71 void Initialize() override;
72
73 void Start() override;
74
78 void End() override;
79
83 void Render() override;
84
89 void StereoMidpoint() override;
90 void Frame() override;
91
92 const char* GetRenderingBackend() override;
93
97 void* GetGenericContext() override;
98
100
105 unsigned char* GetPixelData(int x, int y, int x2, int y2, int front, int right) override;
107 int x, int y, int x2, int y2, int front, vtkUnsignedCharArray* data, int right) override;
109 int x, int y, int x2, int y2, unsigned char* data, int front, int right) override;
111 int x, int y, int x2, int y2, vtkUnsignedCharArray* data, int front, int right) override;
113
115
118 float* GetRGBAPixelData(int x, int y, int x2, int y2, int front, int right = 0) override;
120 int x, int y, int x2, int y2, int front, vtkFloatArray* data, int right = 0) override;
122 int x, int y, int x2, int y2, float* data, int front, int blend = 0, int right = 0) override;
123 int SetRGBAPixelData(int x, int y, int x2, int y2, vtkFloatArray* data, int front, int blend = 0,
124 int right = 0) override;
125 void ReleaseRGBAPixelData(float* data) override;
126 unsigned char* GetRGBACharPixelData(
127 int x, int y, int x2, int y2, int front, int right = 0) override;
129 int x, int y, int x2, int y2, int front, vtkUnsignedCharArray* data, int right = 0) override;
130 int SetRGBACharPixelData(int x, int y, int x2, int y2, unsigned char* data, int front,
131 int blend = 0, int right = 0) override;
132 int SetRGBACharPixelData(int x, int y, int x2, int y2, vtkUnsignedCharArray* data, int front,
133 int blend = 0, int right = 0) override;
135
137
140 float* GetZbufferData(int x1, int y1, int x2, int y2) override;
141 int GetZbufferData(int x1, int y1, int x2, int y2, float* z) override;
142 int GetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray* buffer) override;
143 int SetZbufferData(int x1, int y1, int x2, int y2, float* buffer) override;
144 int SetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray* buffer) override;
146
151 int GetColorBufferSizes(int* rgba) override;
155 void WaitForCompletion() override;
156
160 int SupportsOpenGL() override;
161
165 const char* ReportCapabilities() override;
166
172
178
180 vtkGetSmartPointerMacro(WGPUConfiguration, vtkWebGPUConfiguration);
181
188
194
200
205 std::string PreprocessShaderSource(const std::string& source) const;
206
210 wgpu::RenderPassEncoder NewRenderPass(wgpu::RenderPassDescriptor& descriptor);
211
216 wgpu::RenderBundleEncoder NewRenderBundleEncoder(wgpu::RenderBundleEncoderDescriptor& descriptor);
217
222 wgpu::CommandEncoder GetCommandEncoder();
223
228
232 void FlushCommandBuffers(vtkTypeUInt32 count, wgpu::CommandBuffer* buffers);
233
239
243 wgpu::TextureView GetDepthStencilView();
244
248 wgpu::TextureFormat GetDepthStencilFormat();
249
254
258 wgpu::Device GetDevice();
259
263 wgpu::Adapter GetAdapter();
264
268 wgpu::TextureFormat GetPreferredSurfaceTextureFormat();
269
274
276
286
289
291 std::function<void(const void* mappedData, int bytesPerRow, void* userdata)>;
292
301
302protected:
305
314 virtual std::string MakeDefaultWindowNameWithBackend() = 0;
315
316 bool WGPUInit();
318
321
324
327
330
333
335
337
339
340 wgpu::Surface Surface;
341 wgpu::CommandEncoder CommandEncoder;
343 wgpu::TextureFormat PreferredSurfaceTextureFormat = wgpu::TextureFormat::BGRA8Unorm;
344 wgpu::TextureFormat PreferredSelectorIdsTextureFormat = wgpu::TextureFormat::RGBA32Uint;
346 {
347 wgpu::Texture Texture;
348 wgpu::TextureView View;
349 wgpu::TextureFormat Format;
351 };
353
355 {
356 wgpu::Texture Texture;
357 wgpu::TextureView View;
358 wgpu::TextureFormat Format;
359 };
362
364 {
365 wgpu::Origin3D Origin;
366 wgpu::Extent3D Extent;
367 wgpu::TexelCopyBufferLayout Layout;
368 wgpu::Buffer Buffer; // for SetPixelData
369 };
371
373 {
374 std::string Key;
375 wgpu::BindGroup BindGroup;
376 };
378
383
388
390
391private:
392 // For accessing SubmitCommandBuffer to submit custom prop render work
394 // For accessing HardwareSelectorAttachment
396
398 void operator=(const vtkWebGPURenderWindow&) = delete;
399
404 void InitializeRendererComputePipelines();
405
410 void SubmitCommandBuffer(int count, wgpu::CommandBuffer* commandBuffer);
411
415 void PostRenderComputePipelines();
416
421 void PostRasterizationRender();
422
423 void ReadTextureFromGPU(wgpu::Texture& wgpuTexture, wgpu::TextureFormat format,
424 std::size_t mipLevel, wgpu::TextureAspect aspect, wgpu::Origin3D offsets,
425 wgpu::Extent3D extents, TextureMapCallback callback, void* userData);
426
427 void ReadTextureFromGPU(wgpu::Texture& wgpuTexture, wgpu::TextureFormat format,
428 std::size_t mipLevel, wgpu::TextureAspect aspect, TextureMapCallback callback, void* userData);
429
430 void GetIdsData(int x1, int y1, int x2, int y2, vtkTypeUInt32* values);
431 void GetIdsData(int x1, int y1, int x2, int y2, vtkTypeUInt32Array* data);
432
433 // Render textures acquired by the user on this render window. They are kept here in case the
434 // render window is resized, in which case, we'll need to resize the render textures --> We need
435 // access to the textures
436 std::vector<vtkSmartPointer<vtkWebGPUComputeRenderTexture>> ComputeRenderTextures;
437};
438
439VTK_ABI_NAMESPACE_END
440#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
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
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.
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)
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...
virtual void CreateAWindow()=0
Create a not-off-screen window.
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.
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...
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...
virtual std::string MakeDefaultWindowNameWithBackend()=0
Construct the window title as "Visualization Toolkit - <WindowSystem> <GraphicsBackend>" Ex: "Visuali...
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
virtual void DestroyWindow()=0
Destroy a not-off-screen window.
wgpu::RenderPassEncoder NewRenderPass(wgpu::RenderPassDescriptor &descriptor)
Create a new render pass encoder on the webgpu device.
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
virtual bool WindowSetup()=0
Concrete render windows must create a platform window and initialize this->WindowId.
void * GetGenericContext() override
Get the generic context pointer.
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...
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