19 #ifndef vtkWebGPURenderWindow_h
20 #define vtkWebGPURenderWindow_h
24 #include "vtkRenderingWebGPUModule.h"
33 VTK_ABI_NAMESPACE_BEGIN
38 class vtkWebGPUTextureCache;
40 class vtkTypeUInt32Array;
56 virtual void CreateAWindow();
61 virtual void DestroyWindow();
96 void Start()
override;
113 void Frame()
override;
128 unsigned char*
GetPixelData(
int x,
int y,
int x2,
int y2,
int front,
int right)
override;
132 int x,
int y,
int x2,
int y2,
unsigned char*
data,
int front,
int right)
override;
141 float*
GetRGBAPixelData(
int x,
int y,
int x2,
int y2,
int front,
int right = 0)
override;
143 int x,
int y,
int x2,
int y2,
int front,
vtkFloatArray*
data,
int right = 0)
override;
145 int x,
int y,
int x2,
int y2,
float*
data,
int front,
int blend = 0,
int right = 0)
override;
147 int right = 0)
override;
150 int x,
int y,
int x2,
int y2,
int front,
int right = 0)
override;
154 int blend = 0,
int right = 0)
override;
156 int blend = 0,
int right = 0)
override;
164 int GetZbufferData(
int x1,
int y1,
int x2,
int y2,
float* z)
override;
166 int SetZbufferData(
int x1,
int y1,
int x2,
int y2,
float* buffer)
override;
174 vtkTypeUInt32* GetIdsData(
int x1,
int y1,
int x2,
int y2);
175 void GetIdsData(
int x1,
int y1,
int x2,
int y2, vtkTypeUInt32Array*
data);
241 wgpu::RenderPassEncoder NewRenderPass(wgpu::RenderPassDescriptor& descriptor);
247 wgpu::RenderBundleEncoder NewRenderBundleEncoder(wgpu::RenderBundleEncoderDescriptor& descriptor);
253 wgpu::CommandEncoder GetCommandEncoder();
258 void CreateCommandEncoder();
263 void FlushCommandBuffers(vtkTypeUInt32 count, wgpu::CommandBuffer* buffers);
268 wgpu::TextureView GetOffscreenColorAttachmentView();
269 wgpu::TextureView GetHardwareSelectorAttachmentView();
274 wgpu::TextureView GetDepthStencilView();
279 wgpu::TextureFormat GetDepthStencilFormat();
289 wgpu::Device GetDevice();
294 wgpu::Adapter GetAdapter();
299 wgpu::TextureFormat GetPreferredSurfaceTextureFormat();
304 wgpu::TextureFormat GetPreferredSelectorIdsTextureFormat();
321 std::function<void(const void* mappedData, int bytesPerRow, void* userdata)>;
354 virtual std::string MakeDefaultWindowNameWithBackend();
367 void InitializeRendererComputePipelines();
373 void SubmitCommandBuffer(
int count, wgpu::CommandBuffer* commandBuffer);
378 void PostRenderComputePipelines();
384 void PostRasterizationRender();
386 struct ComponentMapping
409 ComponentMapping GetComponentMapping(wgpu::TextureFormat format,
int desiredOutComponents);
411 template <
typename TOutput,
typename TInput>
412 struct PixelReadbackCallbackData
414 TOutput* OutputValues;
415 uint32_t Width, Height;
416 ComponentMapping Mapping;
417 std::function<TOutput(TInput)> Converter;
434 template <
typename TOutput,
typename TInput>
435 TOutput* GetTextureDataInternal(wgpu::Texture texture, wgpu::TextureFormat format,
int x1,
int y1,
436 int x2,
int y2,
const ComponentMapping& componentMapping,
444 std::uint32_t FlipY(std::uint32_t y);
455 void ReadTextureFromGPU(wgpu::Texture& wgpuTexture, wgpu::TextureFormat format,
456 std::size_t mipLevel, wgpu::TextureAspect aspect, wgpu::Origin3D offsets,
457 wgpu::Extent3D extents, TextureMapCallback callback,
void* userData);
464 void ReadTextureFromGPU(wgpu::Texture& wgpuTexture, wgpu::TextureFormat format,
465 std::size_t mipLevel, wgpu::TextureAspect aspect, TextureMapCallback callback,
void* userData);
488 void CreateSurface();
493 void ConfigureSurface();
500 void UnconfigureSurface();
508 void CreateOffscreenColorAttachment();
509 void DestroyOffscreenColorAttachment();
518 void CreateIdsAttachment();
519 void DestroyIdsAttachment();
528 void CreateDepthStencilAttachment();
529 void DestroyDepthStencilAttachment();
537 void CreateColorCopyPipeline();
538 void DestroyColorCopyPipeline();
546 void RecreateComputeRenderTextures();
554 void RenderOffscreenTexture();
560 virtual void SyncWithHardware();
562 bool RenderTexturesSetup =
false;
564 wgpu::Surface Surface;
565 wgpu::CommandEncoder CommandEncoder;
566 int SurfaceConfiguredSize[2];
567 wgpu::TextureFormat PreferredSurfaceTextureFormat = wgpu::TextureFormat::BGRA8Unorm;
568 wgpu::TextureFormat PreferredSelectorIdsTextureFormat = wgpu::TextureFormat::RGBA32Uint;
569 struct vtkWGPUDepthStencil
571 wgpu::Texture Texture;
572 wgpu::TextureView View;
573 wgpu::TextureFormat Format;
576 vtkWGPUDepthStencil DepthStencilAttachment;
578 struct vtkWGPUAttachment
580 wgpu::Texture Texture;
581 wgpu::TextureView View;
582 wgpu::TextureFormat Format;
584 vtkWGPUAttachment ColorAttachment;
585 vtkWGPUAttachment IdsAttachment;
587 struct vtkWGPUUserStagingPixelData
589 wgpu::Origin3D Origin;
590 wgpu::Extent3D Extent;
591 wgpu::TexelCopyBufferLayout Layout;
594 vtkWGPUUserStagingPixelData StagingPixelData;
596 struct vtkWGPUFullScreenQuad
599 wgpu::BindGroup BindGroup;
601 vtkWGPUFullScreenQuad ColorCopyRenderPipeline;
610 int DepthCopyBufferIndex = 0;
611 int DepthCopyTextureIndex = 0;
618 std::vector<vtkSmartPointer<vtkWebGPUComputeRenderTexture>> ComputeRenderTextures;
621 #define vtkWebGPURenderWindow_OVERRIDE_ATTRIBUTES vtkWebGPURenderWindow::CreateOverrideAttributes()
622 VTK_ABI_NAMESPACE_END
virtual void Start()
Start the rendering process for a frame.
Attribute for vtkObjectFactory overrides.
virtual float * GetZbufferData(int, int, int, int)
Set/Get the zbuffer data from the frame buffer.
void * GetGenericDisplayId() override
Dummy stubs for vtkWindow API.
void * GetGenericContext() override
Dummy stubs for vtkWindow API.
virtual unsigned char * GetPixelData(int, int, int, int, int, int=0)
Get the pixel data of an image, transmitted as RGBRGBRGB.
virtual int SetPixelData(int, int, int, int, unsigned char *, int, int=0)
Set/Get the pixel data of an image, transmitted as RGBRGBRGB.
virtual int GetColorBufferSizes(int *)
Get the size of the color buffer.
static vtkRenderWindow * New()
Construct an instance of vtkRenderWindow with its screen size set to 300x300, borders turned on...
Class to create and retrieve render Textures based on a given key.
dynamic, self-adjusting array of float
Hold a reference to a vtkObjectBase instance.
void Render() override
Ask each renderer owned by this RenderWindow to render its image and synchronize this process...
virtual void Finalize()
Finalize the rendering process.
window superclass for vtkRenderWindow
virtual const char * ReportCapabilities()
Get report of capabilities for the render window.
virtual int SupportsOpenGL()
Does this render window support OpenGL? 0-false, 1-true.
virtual int SetZbufferData(int, int, int, int, float *)
Set/Get the zbuffer data from the frame buffer.
a simple class to control print indentation
topologically and geometrically regular array of data
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void WaitForCompletion()
Block the thread until the actual rendering is finished().
AttachmentTypeForVTISnapshot
virtual bool EnsureDisplay()
These are window system independent methods that are used to help interface vtkWindow to native windo...
virtual void ReleaseRGBAPixelData(float *)
Same as Get/SetPixelData except that the image also contains an alpha component.
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
dynamic, self-adjusting array of unsigned char
vtkGetNewMacro(RenderTimer, vtkRenderTimerLog)
Get the render timer log for this window.
virtual int SetRGBAPixelData(int, int, int, int, float *, int, int=0, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
create a window for renderers to draw into
virtual bool InitializeFromCurrentContext()
Initialize the render window from the information associated with the currently activated OpenGL cont...
Class to add and retrieve source code for shader files for a specified key.
virtual const char * GetRenderingBackend()
What rendering backend has the user requested.
std::function< void(const void *mappedData, int bytesPerRow, void *userdata)> TextureMapCallback
Create a webgpu device for use in rendering and compute pipelines.
virtual unsigned char * GetRGBACharPixelData(int, int, int, int, int, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
virtual void StereoMidpoint()
Intermediate method performs operations required between the rendering of the left and right eye...
virtual void End()
Update the system, if needed, at end of render process.
virtual float * GetRGBAPixelData(int, int, int, int, int, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
This culler does both frustum culling and occlusion culling.
virtual void ReleaseGraphicsResources(vtkWindow *)
Release any graphics resources that are being consumed by this texture.
virtual void Frame()
A termination method performed at the end of the rendering process to do things like swapping buffers...
Class to create and retrieve render pipelines based on a given key.
virtual int SetRGBACharPixelData(int, int, int, int, unsigned char *, int, int=0, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
virtual void Initialize()
Initializes the rendering process.