VTK  9.6.20260422
vtkWebGPURenderer.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
3#ifndef vtkWebGPURenderer_h
4#define vtkWebGPURenderer_h
5
6#include "vtkRenderer.h"
7
8#include "vtkRenderingWebGPUModule.h" // for export macro
9#include "vtkSmartPointer.h" // for ivar
10#include "vtkWebGPUComputePipeline.h" // for the compute pipelines used by this renderer
11#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
12#include "vtk_wgpu.h" // for webgpu
13
14#include <unordered_set> // for the set of actors rendered last frame
15
17class vtkRenderState;
20VTK_ABI_NAMESPACE_BEGIN
21
23
24class VTKRENDERINGWEBGPU_EXPORT VTK_MARSHALAUTO vtkWebGPURenderer : public vtkRenderer
25{
26public:
31 void PrintSelf(ostream& os, vtkIndent indent) override;
32
33 // get the complexity of the current lights as a int
34 // 0 = no lighting
35 // 1 = headlight
36 // 2 = directional lights
37 // 3 = positional lights
45 vtkGetMacro(LightingComplexity, int);
46
55
59 void Clear() override;
60
64 void DeviceRender() override;
65
72
78 int UpdateGeometry(vtkFrameBufferObjectBase* fbo = nullptr) override;
79
88
94
96
100 const std::vector<vtkSmartPointer<vtkWebGPUComputePipeline>>& GetSetupPreRenderComputePipelines();
101 const std::vector<vtkSmartPointer<vtkWebGPUComputePipeline>>&
104
105 int UpdateLights() override;
106
107 void SetEnvironmentTexture(vtkTexture* texture, bool isSRGB = false) override;
108
110
111 wgpu::RenderPassEncoder GetRenderPassEncoder() { return this->WGPURenderEncoder; }
112 wgpu::RenderBundleEncoder GetRenderBundleEncoder() { return this->WGPUBundleEncoder; }
113 wgpu::BindGroup GetSceneBindGroup() { return this->SceneBindGroup; }
114
115 void PopulateBindgroupLayouts(std::vector<wgpu::BindGroupLayout>& layouts)
116 {
117 layouts.emplace_back(this->SceneBindGroupLayout);
118 }
119
121
128
132 std::unordered_set<vtkProp*> GetPropsRendered() { return this->PropsRendered; }
133
135
142
144
149 vtkSetMacro(UseRenderBundles, bool);
150 vtkBooleanMacro(UseRenderBundles, bool);
151 vtkGetMacro(UseRenderBundles, bool);
153
164
190 {
191 this->RebuildRenderBundle = true;
192 this->Bundle = nullptr;
193 }
194
198 vtkGetMacro(RebuildRenderBundle, bool);
199
200protected:
203
212
213private:
215 // For the mapper to access 'AddPostRasterizationActor'
217 // For render window accessing PostRenderComputePipelines()
219
220 vtkWebGPURenderer(const vtkWebGPURenderer&) = delete;
221 void operator=(const vtkWebGPURenderer&) = delete;
222
223 // Setup scene and actor bindgroups. Actor has dynamic offsets.
224 void SetupBindGroupLayouts();
225 // Create buffers for the bind groups.
226 void CreateBuffers();
227 // Create scene bind group.
228 void SetupSceneBindGroup();
229
230 // Start, finish recording commands.
231 void BeginRecording();
232 void EndRecording();
233
234 std::size_t WriteLightsBuffer(std::size_t offset = 0);
235 std::size_t WriteSceneTransformsBuffer(std::size_t offset = 0);
236
240 void InitComputePipeline(vtkSmartPointer<vtkWebGPUComputePipeline> pipeline);
241
243
250 void PreRenderComputePipelines();
251 void PostRenderComputePipelines();
253
264 void PostRasterizationRender();
265
269 void AddPostRasterizationActor(vtkActor* actor);
270
275 std::vector<vtkSmartPointer<vtkWebGPUComputePipeline>> SetupPreRenderComputePipelines;
276 std::vector<vtkSmartPointer<vtkWebGPUComputePipeline>> SetupPostRenderComputePipelines;
277
281 std::vector<vtkSmartPointer<vtkWebGPUComputePipeline>> NotSetupPreRenderComputePipelines;
282 std::vector<vtkSmartPointer<vtkWebGPUComputePipeline>> NotSetupPostRenderComputePipelines;
283
291 std::vector<vtkActor*> PostRasterizationActors;
292
296 wgpu::CommandBuffer EncodePropListRenderCommand(vtkProp** propList, int listLength);
297
303 void RecordRenderCommands();
304
305 wgpu::RenderPassEncoder WGPURenderEncoder;
306 wgpu::RenderBundleEncoder WGPUBundleEncoder;
307 wgpu::Buffer SceneTransformBuffer;
308 wgpu::Buffer SceneLightsBuffer;
309
310 wgpu::BindGroup SceneBindGroup;
311 wgpu::BindGroupLayout SceneBindGroupLayout;
312
313 // Render bundles enable faster rendering.
314 bool UseRenderBundles = true;
315 bool RebuildRenderBundle = false;
316 // the commands in bundle get reused every frame.
317 wgpu::RenderBundle Bundle;
318
319 int LightingComplexity = 0;
320 std::size_t NumberOfLightsUsed = 0;
321 std::vector<std::size_t> LightIDs;
322
323 vtkMTimeType LightingUpdateTime;
324 vtkTimeStamp LightingUploadTimestamp;
325
329 vtkSmartPointer<vtkTransform> UserLightTransform;
330
335 bool ComputeBuffersInitialized = false;
336
342
346 bool DrawBackgroundInClearPass = true;
347
354 std::unordered_set<vtkProp*> PropsRendered;
355};
356
357#define vtkWebGPURenderer_OVERRIDE_ATTRIBUTES vtkWebGPURenderer::CreateOverrideAttributes()
358VTK_ABI_NAMESPACE_END
359#endif
abstract class specifies interface to map data
represents an object (geometry & properties) in a rendered scene
Definition vtkActor.h:151
abstract interface to OpenGL FBOs
a simple class to control print indentation
Definition vtkIndent.h:108
Attribute for vtkObjectFactory overrides.
abstract superclass for all actors, volumes and annotations
Definition vtkProp.h:69
Context in which a vtkRenderPass will render.
Hold a reference to a vtkObjectBase instance.
handles properties associated with a texture map
Definition vtkTexture.h:168
record modification and/or execution time
describes linear transformations via a 4x4 matrix
This culler does both frustum culling and occlusion culling.
void ConfigureComputeRenderBuffers(vtkSmartPointer< vtkWebGPUComputePipeline > computePipeline)
Set up the buffers of a given vtkWebGPUComputePass.
friend class vtkWebGPUComputePointCloudMapper
void ReleaseGraphicsResources(vtkWindow *w) override
static vtkWebGPURenderer * New()
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void ConfigureComputePipelines()
Sets the adapter and the device of the render window of this renderer to the compute pipelines of thi...
void AddPostRenderComputePipeline(vtkSmartPointer< vtkWebGPUComputePipeline > pipeline)
Adds a compute pipeline to the renderer that will be executed each frame before/after the rendering p...
wgpu::BindGroup GetSceneBindGroup()
int UpdateOpaquePolygonalGeometry() override
Request mappers to run the vtkAlgorithm pipeline (if needed) and consequently update device buffers c...
int UpdateTranslucentPolygonalGeometry() override
Ask all props to update and draw any translucent polygonal geometry.
int UpdateGeometry(vtkFrameBufferObjectBase *fbo=nullptr) override
Ask all props to update and draw any opaque and translucent geometry.
friend class vtkWebGPUComputeOcclusionCuller
int UpdateLights() override
Ask all lights to load themselves into rendering pipeline.
void SetUserLightTransform(vtkTransform *transform)
Set the user light transform applied after the camera transform.
void PopulateBindgroupLayouts(std::vector< wgpu::BindGroupLayout > &layouts)
std::unordered_set< vtkProp * > GetPropsRendered()
Returns the list of the actors that were rendered last frame.
void Clear() override
Clear the image to the background color.
vtkTransform * GetUserLightTransform()
Set the user light transform applied after the camera transform.
static vtkOverrideAttribute * CreateOverrideAttributes()
void DeviceRender() override
Create an image.
void InvalidateBundle()
Forces the renderer to re-record draw commands into a render bundle.
void AddPreRenderComputePipeline(vtkSmartPointer< vtkWebGPUComputePipeline > pipeline)
Adds a compute pipeline to the renderer that will be executed each frame before/after the rendering p...
wgpu::RenderBundleEncoder GetRenderBundleEncoder()
~vtkWebGPURenderer() override
wgpu::RenderPassEncoder GetRenderPassEncoder()
void UpdateBuffers()
Updates / creates the various buffer necessary for the rendering of the props.
const std::vector< vtkSmartPointer< vtkWebGPUComputePipeline > > & GetSetupPostRenderComputePipelines()
Returns the list of compute pipelines of this renderer that have been setup for execution before/afte...
friend class vtkWebGPURenderWindow
vtkGetEnumMacro(RenderStage, RenderStageEnum)
Query the stage in the rendering process.
const std::vector< vtkSmartPointer< vtkWebGPUComputePipeline > > & GetSetupPreRenderComputePipelines()
Returns the list of compute pipelines of this renderer that have been setup for execution before/afte...
void SetEnvironmentTexture(vtkTexture *texture, bool isSRGB=false) override
Set/Get the environment texture used for image based lighting.
window superclass for vtkRenderWindow
Definition vtkWindow.h:61
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:318
#define VTK_MARSHALAUTO
#define VTK_NEWINSTANCE