VTK  9.6.20260428
vtkWebGPUBatchedPolyDataMapper.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
10
11#ifndef vtkWebGPUBatchedPolyDataMapper_h
12#define vtkWebGPUBatchedPolyDataMapper_h
13
15
16#include "vtkRenderingWebGPUModule.h" // for export macro
17#include "vtkWebGPUCompositePolyDataMapperDelegator.h" // for struct BatchElement
18
19#include <cstdint> // for std::uintptr_t
20#include <memory> // for unique_ptr
21
22VTK_ABI_NAMESPACE_BEGIN
24class vtkPolyData;
25
26class VTKRENDERINGWEBGPU_EXPORT vtkWebGPUBatchedPolyDataMapper : public vtkWebGPUPolyDataMapper
27{
28public:
31 void PrintSelf(ostream& os, vtkIndent indent) override;
32
34
38 void AddBatchElement(unsigned int flatIndex, BatchElement&& batchElement);
42
46 std::vector<vtkPolyData*> GetRenderedList() const;
48
52 void RenderPiece(vtkRenderer* renderer, vtkActor* actor) override;
55
60
67
68protected:
71
76
80 bool EnsureInput() override;
81
86
88
91 void UpdateMeshGeometryBuffers(vtkWebGPUConfiguration* wgpuConfiguration) override;
93 vtkWebGPUConfiguration* wgpuConfiguration, vtkProperty* displayProperty) override;
95
97
106
108
111 std::vector<wgpu::BindGroupLayoutEntry> GetMeshBindGroupLayoutEntries() override;
112 std::vector<wgpu::BindGroupEntry> GetMeshBindGroupEntries() override;
114
116
119 std::vector<wgpu::BindGroupLayoutEntry> GetTopologyBindGroupLayoutEntries(
120 bool homogeneousCellSize, bool useEdgeArray) override;
121 std::vector<wgpu::BindGroupEntry> GetTopologyBindGroupEntries(
123 bool homogeneousCellSize, bool useEdgeArray) override;
125
127 vtkWebGPUActor* wgpuActor, std::string& vss, std::string& fss) override;
129 vtkWebGPURenderer* wgpuRenderer, vtkWebGPUActor* wgpuActor, std::string& vss,
130 std::string& fss) override;
131
133 vtkWebGPUActor* actor, std::string& vss) override;
135 vtkWebGPURenderer* wgpuRenderer, vtkWebGPUActor* wgpuActor, std::string& vss) override;
136
138 vtkWebGPURenderer* wgpuRenderer, vtkWebGPUActor* wgpuActor, std::string& fss) override;
140 vtkWebGPURenderer* wgpuRenderer, vtkWebGPUActor* wgpuActor, std::string& fss) override;
141
143
152
154
155private:
157 void operator=(const vtkWebGPUBatchedPolyDataMapper&) = delete;
158
159 // Reference to CPDM
160 vtkCompositePolyDataMapper* Parent = nullptr;
161 // Maps an address of a vtkPolyData to its rendering attributes.
162 std::map<std::uintptr_t, std::unique_ptr<BatchElement>> VTKPolyDataToBatchElement;
163 std::map<unsigned int, std::uintptr_t> FlatIndexToPolyData;
164
165 struct CompositeDataProperties
166 {
167 vtkTypeUInt32 ApplyOverrideColors = 0;
168 vtkTypeFloat32 Opacity = 0;
169 vtkTypeUInt32 CompositeId = 0;
170 vtkTypeUInt32 Pickable = 1;
171 vtkTypeFloat32 Ambient[3] = {};
172 vtkTypeUInt32 CellIdOffsetForVerts = 0;
173 vtkTypeFloat32 Diffuse[3] = {};
174 vtkTypeUInt32 CellIdOffsetForLines = 0;
175 vtkTypeUInt32 CellIdOffsetForPolys = 0;
176 vtkTypeUInt32 CellIdOffsetForSelector = 0;
177 };
178 struct StorageBuffer
179 {
180 wgpu::Buffer Buffer;
181 std::uint64_t Size = 0;
182 std::uint32_t BindingSize = 0;
183 };
184 StorageBuffer CompositeDataPropertyStorage;
185 vtkTimeStamp ResourcesSyncTimeStamp;
186
187 std::size_t CurrentDrawMeshId = 0; // 0 <= CurrentDrawMeshId < BatchSize
188 std::uint32_t MinStorageBufferOffsetAlignment = 0;
189
190 bool AllocateCompositeDataPropertyStorageBuffer(vtkWebGPUConfiguration* wgpuConfiguration);
191};
192
193VTK_ABI_NAMESPACE_END
194#endif
represents an object (geometry & properties) in a rendered scene
Definition vtkActor.h:151
a class that renders hierarchical polygonal data
general representation of visualization data
a simple class to control print indentation
Definition vtkIndent.h:108
concrete dataset represents vertices, lines, polygons, and triangle strips
represent surface properties of a geometric object
abstract specification for renderers
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
bool EnsureInput() override
Override to ensure batch is not empty.
void RenderPiece(vtkRenderer *renderer, vtkActor *actor) override
Implemented by sub classes.
void ReplaceVertexShaderPicking(GraphicsPipelineType pipelineType, vtkWebGPURenderer *wgpuRenderer, vtkWebGPUActor *wgpuActor, std::string &vss) override
void ReplaceFragmentShaderColors(GraphicsPipelineType pipelineType, vtkWebGPURenderer *wgpuRenderer, vtkWebGPUActor *wgpuActor, std::string &fss) override
BatchElement * GetBatchElement(vtkPolyData *polydata)
API to add and query a BatchElement instance per vtkPolyData.
void ReplaceVertexShaderCellId(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss) override
vtkWebGPUCompositePolyDataMapperDelegator::BatchElement BatchElement
API to add and query a BatchElement instance per vtkPolyData.
bool ShouldReleaseGraphicsResourcesOnSync() override
Override to detect changes in the polydata batch.
unsigned long GetPointAttributeByteSize(vtkWebGPUPolyDataMapper::PointDataAttributes attribute) override
Override to accumulate the sizes of the given attribute from all the polydata in the batch.
void ReplaceShaderCustomBindings(GraphicsPipelineType pipelineType, vtkWebGPURenderer *wgpuRenderer, vtkWebGPUActor *wgpuActor, std::string &vss, std::string &fss) override
std::vector< vtkPolyData * > GetRenderedList() const
Accessor to the ordered list of PolyData that we last drew.
void UpdateMeshGeometryBuffers(vtkWebGPUConfiguration *wgpuConfiguration) override
Override to upload all the polydata from the batch.
void ReleaseGraphicsResources(vtkWindow *) override
Release any graphics resources that are being consumed by this mapper.
void UpdateMeshTopologyBuffers(vtkWebGPUConfiguration *wgpuConfiguration, vtkProperty *displayProperty) override
Override to upload all the polydata from the batch.
std::vector< wgpu::BindGroupEntry > GetMeshBindGroupEntries() override
Override to add another binding for CompositeDataPropertyStorage.
vtkMTimeType GetMTime() override
Returns the maximum of our and Parent vtkCompositePolyDataMapper's MTime.
void ReplaceFragmentShaderPicking(GraphicsPipelineType pipelineType, vtkWebGPURenderer *wgpuRenderer, vtkWebGPUActor *wgpuActor, std::string &fss) override
void DeducePointCellAttributeAvailability() override
Override to call super class for each polydata in batch.
void ReplaceShaderCustomDef(GraphicsPipelineType pipelineType, vtkWebGPURenderer *wgpuRenderer, vtkWebGPUActor *wgpuActor, std::string &vss, std::string &fss) override
std::vector< wgpu::BindGroupEntry > GetTopologyBindGroupEntries(vtkWebGPUCellToPrimitiveConverter::TopologySourceType topologySourceType, bool homogeneousCellSize, bool useEdgeArray) override
Override to customize bindings when homogeneousCellSize=true.
~vtkWebGPUBatchedPolyDataMapper() override
static vtkWebGPUBatchedPolyDataMapper * New()
std::vector< wgpu::BindGroupLayoutEntry > GetMeshBindGroupLayoutEntries() override
Override to add another binding for CompositeDataPropertyStorage.
unsigned long GetCellAttributeByteSize(vtkWebGPUPolyDataMapper::CellDataAttributes attribute) override
Override to accumulate the sizes of the given attribute from all the polydata in the batch.
int CanUseTextureMapForColoring(vtkDataObject *) override
Returns if we can use texture maps for scalar coloring.
void ClearBatchElements()
API to add and query a BatchElement instance per vtkPolyData.
DrawCallArgs GetDrawCallArgs(GraphicsPipelineType pipelineType, vtkWebGPUCellToPrimitiveConverter::TopologySourceType topologySourceType) override
Override to return the correct vertex offset and vertex count for the mesh currently being drawn with...
void AddBatchElement(unsigned int flatIndex, BatchElement &&batchElement)
API to add and query a BatchElement instance per vtkPolyData.
std::vector< wgpu::BindGroupLayoutEntry > GetTopologyBindGroupLayoutEntries(bool homogeneousCellSize, bool useEdgeArray) override
Override to customize bindings when homogeneousCellSize=true.
void SetParent(vtkCompositePolyDataMapper *parent)
DrawCallArgs GetDrawCallArgsForDrawingVertices(vtkWebGPUCellToPrimitiveConverter::TopologySourceType topologySourceType) override
Override to return the correct vertex offset and vertex count for the mesh currently being drawn with...
TopologySourceType
All supported types of topology.
vtkCompositePolyDataMapperDelegator::BatchElement BatchElement
Create a webgpu device for use in rendering and compute pipelines.
PointDataAttributes
All the attributes supported by the point data buffer.
GraphicsPipelineType
This mapper uses different wgpu::RenderPipeline to render a list of primitives.
CellDataAttributes
All the attributes supported by the cell data buffer.
window superclass for vtkRenderWindow
Definition vtkWindow.h:61
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:318