VTK  9.5.20250718
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
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 "vtkWebGPUShaderDatabase.h" // for shader database
26#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
27#include "vtk_wgpu.h" // for webgpu
28
29VTK_ABI_NAMESPACE_BEGIN
30
33class vtkImageData;
34class vtkTypeUInt32Array;
35class VTKRENDERINGWEBGPU_EXPORT VTK_MARSHALAUTO vtkWebGPURenderWindow : public vtkRenderWindow
36{
37public:
39 void PrintSelf(ostream& os, vtkIndent indent) override;
40
45 virtual bool WindowSetup() = 0;
46
50 virtual void CreateAWindow() = 0;
51
55 virtual void DestroyWindow() = 0;
56
69 void Initialize() override;
70
71 void Start() override;
72
76 void End() override;
77
81 void Render() override;
82
87 void StereoMidpoint() override;
88 void Frame() override;
89
90 const char* GetRenderingBackend() override;
91
93
98 unsigned char* GetPixelData(int x, int y, int x2, int y2, int front, int right) override;
100 int x, int y, int x2, int y2, int front, vtkUnsignedCharArray* data, int right) override;
102 int x, int y, int x2, int y2, unsigned char* data, int front, int right) override;
104 int x, int y, int x2, int y2, vtkUnsignedCharArray* data, int front, int right) override;
106
108
111 float* GetRGBAPixelData(int x, int y, int x2, int y2, int front, int right = 0) override;
113 int x, int y, int x2, int y2, int front, vtkFloatArray* data, int right = 0) override;
115 int x, int y, int x2, int y2, float* data, int front, int blend = 0, int right = 0) override;
116 int SetRGBAPixelData(int x, int y, int x2, int y2, vtkFloatArray* data, int front, int blend = 0,
117 int right = 0) override;
118 void ReleaseRGBAPixelData(float* data) override;
119 unsigned char* GetRGBACharPixelData(
120 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, vtkUnsignedCharArray* data, int right = 0) override;
123 int SetRGBACharPixelData(int x, int y, int x2, int y2, unsigned char* data, int front,
124 int blend = 0, int right = 0) override;
125 int SetRGBACharPixelData(int x, int y, int x2, int y2, vtkUnsignedCharArray* data, int front,
126 int blend = 0, int right = 0) override;
128
130
133 float* GetZbufferData(int x1, int y1, int x2, int y2) override;
134 int GetZbufferData(int x1, int y1, int x2, int y2, float* z) override;
135 int GetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray* buffer) override;
136 int SetZbufferData(int x1, int y1, int x2, int y2, float* buffer) override;
137 int SetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray* buffer) override;
139
144 int GetColorBufferSizes(int* rgba) override;
148 void WaitForCompletion() override;
149
153 int SupportsOpenGL() override;
154
158 const char* ReportCapabilities() override;
159
165
171
173 vtkGetSmartPointerMacro(WGPUConfiguration, vtkWebGPUConfiguration);
174
181
187
192 std::string PreprocessShaderSource(const std::string& source) const;
193
197 wgpu::RenderPassEncoder NewRenderPass(wgpu::RenderPassDescriptor& descriptor);
198
203 wgpu::RenderBundleEncoder NewRenderBundleEncoder(wgpu::RenderBundleEncoderDescriptor& descriptor);
204
209 wgpu::CommandEncoder GetCommandEncoder();
210
215
219 void FlushCommandBuffers(vtkTypeUInt32 count, wgpu::CommandBuffer* buffers);
220
226
230 wgpu::TextureView GetDepthStencilView();
231
235 wgpu::TextureFormat GetDepthStencilFormat();
236
241
245 wgpu::Device GetDevice();
246
250 wgpu::Adapter GetAdapter();
251
255 wgpu::TextureFormat GetPreferredSurfaceTextureFormat();
256
261
263
273
276
278 std::function<void(const void* mappedData, int bytesPerRow, void* userdata)>;
279
281 {
282 ColorRGBA,
283 ColorRGB,
284 Depth,
285 Ids,
286 };
288
289protected:
292
301 virtual std::string MakeDefaultWindowNameWithBackend() = 0;
302
303 bool WGPUInit();
305
308
311
314
317
320
322
324
325 bool RenderTexturesSetup = false;
326
327 wgpu::Surface Surface;
328 wgpu::CommandEncoder CommandEncoder;
329 int SurfaceConfiguredSize[2];
330 wgpu::TextureFormat PreferredSurfaceTextureFormat = wgpu::TextureFormat::BGRA8Unorm;
331 wgpu::TextureFormat PreferredSelectorIdsTextureFormat = wgpu::TextureFormat::RGBA32Uint;
333 {
334 wgpu::Texture Texture;
335 wgpu::TextureView View;
336 wgpu::TextureFormat Format;
338 };
340
342 {
343 wgpu::Texture Texture;
344 wgpu::TextureView View;
345 wgpu::TextureFormat Format;
346 };
349
351 {
352 wgpu::Origin3D Origin;
353 wgpu::Extent3D Extent;
354 wgpu::TexelCopyBufferLayout Layout;
355 wgpu::Buffer Buffer; // for SetPixelData
356 };
358
360 {
361 std::string Key;
362 wgpu::BindGroup BindGroup;
363 };
365
369
372 int DepthCopyBufferIndex = 0;
373 int DepthCopyTextureIndex = 0;
374
375 int ScreenSize[2];
376
377private:
378 // For accessing SubmitCommandBuffer to submit custom prop render work
380 // For accessing HardwareSelectorAttachment
382
384 void operator=(const vtkWebGPURenderWindow&) = delete;
385
390 void InitializeRendererComputePipelines();
391
396 void SubmitCommandBuffer(int count, wgpu::CommandBuffer* commandBuffer);
397
401 void PostRenderComputePipelines();
402
407 void PostRasterizationRender();
408
409 void ReadTextureFromGPU(wgpu::Texture& wgpuTexture, wgpu::TextureFormat format,
410 std::size_t mipLevel, wgpu::TextureAspect aspect, wgpu::Origin3D offsets,
411 wgpu::Extent3D extents, TextureMapCallback callback, void* userData);
412
413 void ReadTextureFromGPU(wgpu::Texture& wgpuTexture, wgpu::TextureFormat format,
414 std::size_t mipLevel, wgpu::TextureAspect aspect, TextureMapCallback callback, void* userData);
415
416 void GetIdsData(int x1, int y1, int x2, int y2, vtkTypeUInt32* values);
417 void GetIdsData(int x1, int y1, int x2, int y2, vtkTypeUInt32Array* data);
418
419 // Render textures acquired by the user on this render window. They are kept here in case the
420 // render window is resized, in which case, we'll need to resize the render textures --> We need
421 // access to the textures
422 std::vector<vtkSmartPointer<vtkWebGPUComputeRenderTexture>> ComputeRenderTextures;
423};
424
425VTK_ABI_NAMESPACE_END
426#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
create a window for renderers to draw into
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.
implements the device specific code of vtkWebGPUHardwareSelector.
Class to create and retrieve render pipelines based on a given key.
WebGPU rendering window.
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.
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? 0-false, 1-true.
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.
void SetWGPUConfiguration(vtkWebGPUConfiguration *config)
const char * ReportCapabilities() override
Get report of capabilities for the render window.
wgpu::Adapter GetAdapter()
Get the webgpu adapter.
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
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...
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.
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.
std::function< void(const void *mappedData, int bytesPerRow, void *userdata)> TextureMapCallback
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...
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.
window superclass for vtkRenderWindow
Definition vtkWindow.h:48
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
#define VTK_MARSHALAUTO