VTK  9.6.20260422
vtkWebGPUPolyDataMapper.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 vtkWebGPUPolyDataMapper_h
4#define vtkWebGPUPolyDataMapper_h
5
6#include "vtkPolyDataMapper.h"
7
8#include "vtkProperty.h" // for VTK_SURFACE constants
9#include "vtkRenderingWebGPUModule.h" // for export macro
10#include "vtkWebGPUCellToPrimitiveConverter.h" // for TopologySourceType
11#include "vtkWebGPUComputePipeline.h" // for ivar
12#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
13#include "vtk_wgpu.h" // for webgpu
14
15#include <array> // for ivar
16#include <unordered_set> // for the not set compute render buffers
17
18VTK_ABI_NAMESPACE_BEGIN
19class vtkCellArray;
21class vtkWebGPUActor;
27
28class VTKRENDERINGWEBGPU_EXPORT VTK_MARSHALAUTO vtkWebGPUPolyDataMapper : public vtkPolyDataMapper
29{
30public:
35 void PrintSelf(ostream& os, vtkIndent indent) override;
36
51
62
69 {
70 // Pipeline that renders points, is best suitable for rendering 1-pixel wide points.
73 // Pipeline that renders points using a square or circle shape.
76 // Pipeline that is best suitable for rendering 1-pixel thick line segments
79 // Pipeline that can render lines thicker than 1-pixel. This pipeline does not
80 // create joining geometry between contiguous line segments in a polyline.
83 // Pipeline that renders lines with rounded caps and rounded joins.
86 // Pipeline that renders lines with miter joins.
89 // Pipeline that renders triangles
93 };
94
96
100 void RenderPiece(vtkRenderer* renderer, vtkActor* act) override;
101
108
115 bool GetSupportsSelection() override { return false; }
116
128 void MapDataArrayToVertexAttribute(const char* vertexAttributeName, const char* dataArrayName,
129 int fieldAssociation, int componentno = -1) override;
130
138 void MapDataArrayToMultiTextureAttribute(const char* tname, const char* dataArrayName,
139 int fieldAssociation, int componentno = -1) override;
140
144 void RemoveVertexAttributeMapping(const char* vertexAttributeName) override;
145
150
156 vtkHardwareSelector* sel, std::vector<unsigned int>& pixeloffsets, vtkProp* prop) override;
157
174 PointDataAttributes attribute, int bufferGroup, int bufferBinding, int uniformsGroup,
175 int uniformsBinding);
176
181 CellDataAttributes attribute, int bufferGroup, int bufferBinding, int uniformsGroup,
182 int uniformsBinding);
183
184protected:
187
193 void ComputeBounds() override;
194
200 vtkRenderer* renderer, vtkActor* actor, const wgpu::RenderPassEncoder& passEncoder);
202 vtkRenderer* renderer, vtkActor* actor, const wgpu::RenderBundleEncoder& bundleEncoder);
203
209
214 virtual std::vector<wgpu::BindGroupLayoutEntry> GetMeshBindGroupLayoutEntries();
215
220 virtual std::vector<wgpu::BindGroupLayoutEntry> GetTopologyBindGroupLayoutEntries(
221 bool homogeneousCellSize, bool useEdgeArray);
222
227 virtual std::vector<wgpu::BindGroupEntry> GetMeshBindGroupEntries();
228
233 virtual std::vector<wgpu::BindGroupEntry> GetTopologyBindGroupEntries(
235 bool homogeneousCellSize, bool useEdgeArray);
236
240 virtual unsigned long GetPointAttributeByteSize(
242
246 virtual unsigned long GetCellAttributeByteSize(
248
254
268 virtual void UpdateMeshGeometryBuffers(vtkWebGPUConfiguration* wgpuConfiguration);
269
274
279 virtual bool EnsureInput();
280
285 vtkWebGPUConfiguration* wgpuConfiguration, vtkProperty* displayProperty);
286
287 virtual std::vector<wgpu::VertexBufferLayout> GetVertexBufferLayouts() { return {}; }
288
289 virtual void SetVertexBuffers(const wgpu::RenderPassEncoder& vtkNotUsed(passEncoder)) {}
290 virtual void SetVertexBuffers(const wgpu::RenderBundleEncoder& vtkNotUsed(bundleEncoder)) {}
291
296 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss, std::string& fss);
297
299 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss, std::string& fss);
301 vtkWebGPUActor* actor, std::string& vss, std::string& fss);
303 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss, std::string& fss);
305 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss, std::string& fss);
306
308 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss, std::string& fss);
310 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss, std::string& fss);
312 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss, std::string& fss);
314 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss, std::string& fss);
316 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss, std::string& fss);
318 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss, std::string& fss);
320 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss, std::string& fss);
321
323 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
325 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
327 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
329 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
331 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
333 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
335 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
337 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
339 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
341 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
343 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
345 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
347 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
349 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
351 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
353 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
355 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& vss);
356
358 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& fss);
359
361 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& fss);
363 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& fss);
365 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& fss);
367 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& fss);
369 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& fss);
371 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& fss);
373 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& fss);
375 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& fss);
377 vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& fss);
378
387 virtual bool IsPipelineSupported(GraphicsPipelineType vtkNotUsed(pipelineType)) { return true; }
389
393 virtual wgpu::PrimitiveTopology GetPrimitiveTopologyForPipeline(
394 GraphicsPipelineType pipelineType);
395
397 {
398 std::uint32_t VertexOffset = 0;
399 std::uint32_t VertexCount = 0;
400 std::uint32_t InstanceOffset = 0;
401 std::uint32_t InstanceCount = 0;
402 };
407
413 const wgpu::Device& device, const std::string& label);
414
420 wgpu::BindGroup CreateTopologyBindGroup(const wgpu::Device& device, const std::string& label,
422
424 {
425 wgpu::Buffer Buffer;
426 uint64_t Size = 0;
427 uint64_t Watermark = 0;
428 bool Touched = false;
429 };
432 struct
433 {
434 vtkTypeFloat32 PlaneEquations[6][4];
435 vtkTypeUInt32 PlaneCount = 0;
436 } ClippingPlanesData;
438
444
448 // used by RenderPiece and functions it calls to reduce
449 // calls to get the input and allow for rendering of
450 // other polydata (not the input)
452 // vtkRenderer culls props to frustum. At that point, it requests
453 // mappers for bounds of the geometry. We cache the vtkAlgorithm output
454 // so that `UpdateMeshGeometryBuffers` can reuse it without climbing up
455 // vtkAlgorithm pipeline.
458
459 // 1 bind group for this polydata mesh
460 wgpu::BindGroup MeshAttributeBindGroup;
461 std::vector<std::uint32_t> MeshAttributeDynamicOffsets;
462
464 {
465 // buffer for point ids.
466 wgpu::Buffer ConnectivityBuffer;
467 // buffer for the cell ids.
468 wgpu::Buffer CellIdBuffer;
469 // buffer for edge array. this lets fragment shader hide internal edges of a polygon
470 // when edge visibility is turned on.
471 wgpu::Buffer EdgeArrayBuffer;
472 // uniform buffer for cell id offset.
474 // // buffer for indirect draw command
475 // wgpu::Buffer IndirectDrawBuffer;
476 // bind group for the primitive size uniform.
477 wgpu::BindGroup BindGroup;
478 // maximum number of vertices in a cell
479 vtkTypeUInt32 MaxCellSize = 0;
480 // vertexCount for draw call.
481 vtkTypeUInt32 VertexCount = 0;
482 // composite vertex offset and counts for drawing composite data
483 std::vector<std::pair<vtkTypeUInt32, vtkTypeUInt32>> VertexOffsetAndCounts;
484 };
485
486 enum BindingGroup : int
487 {
492 // Clipping planes are bound to the same group as the mesh attributes
493 // because they vary based on the mapper's shift/scale and the actor's
494 // transformation matrix.
498 };
499 static_assert(GROUP_NB_BINDGROUPS <= 4,
500 "Number of bind groups exceeds 4! Most devices can support only up to 4 bind groups");
501 std::array<std::uint32_t, GROUP_NB_BINDGROUPS> NumberOfBindings = {};
506
507private:
509 void operator=(const vtkWebGPUPolyDataMapper&) = delete;
511 friend class vtkWebGPURenderer;
512
516 wgpu::Buffer GetPointDataWGPUBuffer(PointDataAttributes attribute)
517 {
518 return this->PointBuffers[attribute].Buffer;
519 }
520
524 wgpu::Buffer GetCellDataWGPUBuffer(CellDataAttributes attribute)
525 {
526 return this->CellBuffers[attribute].Buffer;
527 }
528
532 void UploadAttributeToGPUBuffer(vtkWebGPUConfiguration* wgpuConfiguration,
533 vtkDataArray* dataArray, PointDataAttributes attributeType, float denominator = 1.0f);
534 void UploadAttributeToGPUBuffer(vtkWebGPUConfiguration* wgpuConfiguration,
535 vtkDataArray* dataArray, CellDataAttributes attributeType, float denominator = 1.0f);
536
542 bool GetNeedToRebuildGraphicsPipelines(vtkActor* actor, vtkRenderer* renderer);
543
554 bool CacheActorRendererProperties(vtkActor* actor, vtkRenderer* renderer);
555
559 void ResetPointCellAttributeState();
560
564 wgpu::BindGroupLayout CreateMeshAttributeBindGroupLayout(
565 const wgpu::Device& device, const std::string& label);
566
570 wgpu::BindGroupLayout CreateTopologyBindGroupLayout(const wgpu::Device& device,
571 const std::string& label, bool homogeneousCellSize, bool useEdgeArray);
572
577 unsigned long GetPointAttributeElementSize(
579
584 unsigned long GetCellAttributeElementSize(vtkWebGPUPolyDataMapper::CellDataAttributes attribute);
585
591 unsigned long GetExactPointBufferSize(PointDataAttributes attribute);
592
598 unsigned long GetExactCellBufferSize(CellDataAttributes attribute);
599
603 bool AllocateAttributeBuffers(vtkWebGPUConfiguration* wgpuConfiguration);
604
608 const char* GetGraphicsPipelineTypeAsString(GraphicsPipelineType graphicsPipelineType);
609
614 void SetupGraphicsPipelines(const wgpu::Device& device, vtkRenderer* renderer, vtkActor* actor);
615
619 void UpdateClippingPlanesBuffer(vtkWebGPUConfiguration* wgpuConfiguration, vtkActor* actor);
620
627 std::vector<vtkSmartPointer<vtkWebGPUComputeRenderBuffer>> SetupComputeRenderBuffers;
628
632 std::unordered_set<vtkSmartPointer<vtkWebGPUComputeRenderBuffer>> NotSetupComputeRenderBuffers;
633
637 const PointDataAttributes PointDataAttributesOrder[PointDataAttributes::POINT_NB_ATTRIBUTES] = {
638 PointDataAttributes::POINT_POSITIONS, PointDataAttributes::POINT_COLORS,
639 PointDataAttributes::POINT_NORMALS, PointDataAttributes::POINT_TANGENTS,
640 PointDataAttributes::POINT_UVS, PointDataAttributes::POINT_COLOR_UVS
641 };
642
646 const CellDataAttributes CellDataAttributesOrder[CellDataAttributes::CELL_NB_ATTRIBUTES] = {
647 CellDataAttributes::CELL_COLORS, CellDataAttributes::CELL_NORMALS
648 };
649
650 // Cache these so that subsequent executions of UpdateMeshGeometryBuffers() do not unnecessarily
651 // invoke MapScalars().
652 int LastScalarMode = -1;
653 bool LastScalarVisibility = false;
654 vtkTypeUInt32 LastNumClipPlanes = 0;
655 struct ActorState
656 {
657 bool LastActorBackfaceCulling = false;
658 bool LastActorFrontfaceCulling = false;
659 bool LastVertexVisibility = false;
660 int LastRepresentation = VTK_SURFACE;
661 bool LastHasRenderingTranslucentGeometry = false;
662 int LastPointSize = 1;
663 int LastLineWidth = 1;
664 };
665 std::map<std::pair<vtkActor*, vtkRenderer*>, ActorState> CachedActorRendererProperties;
666};
667#define vtkWebGPUPolyDataMapper_OVERRIDE_ATTRIBUTES \
668 vtkWebGPUPolyDataMapper::CreateOverrideAttributes()
669VTK_ABI_NAMESPACE_END
670#endif
represents an object (geometry & properties) in a rendered scene
Definition vtkActor.h:151
object to represent cell connectivity
a simple class to control print indentation
Definition vtkIndent.h:108
Allocate and hold a VTK object.
Definition vtkNew.h:168
Attribute for vtkObjectFactory overrides.
std::uintptr_t MapperHashType
concrete dataset represents vertices, lines, polygons, and triangle strips
abstract superclass for all actors, volumes and annotations
Definition vtkProp.h:69
represent surface properties of a geometric object
abstract specification for renderers
Hold a reference to a vtkObjectBase instance.
record modification and/or execution time
TopologySourceType
All supported types of topology.
Render buffers are returned by calls to vtkWebGPUPolyDataMapper::AcquirePointAttributeComputeRenderBu...
Create a webgpu device for use in rendering and compute pipelines.
vtkTimeStamp PointAttributesBuildTimestamp[POINT_NB_ATTRIBUTES]
Timestamps help reuse previous resources as much as possible.
PointDataAttributes
All the attributes supported by the point data buffer.
virtual unsigned long GetPointAttributeByteSize(vtkWebGPUPolyDataMapper::PointDataAttributes attribute)
Returns the size of the 'sub-buffer' within the whole point data SSBO for the given attribute.
void ProcessSelectorPixelBuffers(vtkHardwareSelector *sel, std::vector< unsigned int > &pixeloffsets, vtkProp *prop) override
allows a mapper to update a selections color buffers Called from a prop which in turn is called from ...
virtual void ReplaceShaderCustomDef(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
virtual void ReplaceVertexShaderMainEnd(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void BeginUpdateMeshGeometryBuffers()
Set all point/cell buffer's Touched flag to false.
virtual void ReplaceShaderMeshAttributeBindings(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
virtual void ReplaceVertexShaderPositionVC(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ReplaceShaderVertexOutputDef(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
virtual void ReplaceVertexShaderNormalTransform(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ReplaceFragmentShaderMainEnd(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
virtual void ReplaceFragmentShaderMainStart(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
virtual void ReplaceFragmentShaderClippingPlanes(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
virtual std::vector< wgpu::BindGroupLayoutEntry > GetTopologyBindGroupLayoutEntries(bool homogeneousCellSize, bool useEdgeArray)
Allow subclasses to customize the entries in the bind group layout corresponding to GROUP_TOPOLOGY.
virtual void ReplaceFragmentShaderCoincidentOffset(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
void ReleaseGraphicsResources(vtkWindow *) override
Release any graphics resources that are being consumed by this mapper.
virtual void EndUpdateMeshGeometryBuffers()
Timestamp the buffers whose Touched flag is true.
vtkTypeFloat32 PlaneEquations[6][4]
std::array< std::uint32_t, GROUP_NB_BINDGROUPS > NumberOfBindings
virtual void ReplaceVertexShaderPicking(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
vtkTimeStamp ClippingPlanesBuildTimestamp
Timestamps help reuse previous resources as much as possible.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
bool HasCellAttributes[CELL_NB_ATTRIBUTES]
void MapDataArrayToVertexAttribute(const char *vertexAttributeName, const char *dataArrayName, int fieldAssociation, int componentno=-1) override
Select a data array from the point/cell data and map it to a generic vertex attribute.
virtual void ReplaceShaderClippingPlanesBindings(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
void RemoveAllVertexAttributeMappings() override
Remove all vertex attributes.
AttributeBuffer CellBuffers[CELL_NB_ATTRIBUTES]
virtual std::vector< wgpu::VertexBufferLayout > GetVertexBufferLayouts()
vtkPolyDataMapper::MapperHashType GenerateHash(vtkPolyData *polydata) override
This hash integer is computed by concrete graphics implementation of this class.
virtual void DeducePointCellAttributeAvailability()
Looks at the point/cell data of vtkPolyData object and determines which attributes are available.
vtkSmartPointer< vtkWebGPUTexture > ColorTextureHostResource
virtual bool EnsureInput()
Ensures that the input data is valid and ready for processing.
virtual void SetVertexBuffers(const wgpu::RenderPassEncoder &passEncoder)
virtual std::vector< wgpu::BindGroupEntry > GetMeshBindGroupEntries()
Allow subclasses to customize the entries in the bind group corresponding to GROUP_MESH.
virtual void ReplaceShaderRendererBindings(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
vtkTimeStamp CellAttributesBuildTimestamp[CELL_NB_ATTRIBUTES]
Timestamps help reuse previous resources as much as possible.
vtkSmartPointer< vtkWebGPUComputeRenderBuffer > AcquirePointAttributeComputeRenderBuffer(PointDataAttributes attribute, int bufferGroup, int bufferBinding, int uniformsGroup, int uniformsBinding)
Returns an already configured (ready to be added to a vtkWebGPUComputePipeline) buffer bound to the g...
virtual void ReplaceFragmentShaderOutputDef(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
vtkSmartPointer< vtkWebGPUComputeRenderBuffer > AcquireCellAttributeComputeRenderBuffer(CellDataAttributes attribute, int bufferGroup, int bufferBinding, int uniformsGroup, int uniformsBinding)
Same as AcquirePointAttributeComputeRenderBuffer but for cell data attributes.
virtual void ReplaceShaderActorBindings(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
virtual void ReplaceVertexShaderClippingPlanes(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
AttributeBuffer PointBuffers[POINT_NB_ATTRIBUTES]
virtual std::vector< wgpu::BindGroupLayoutEntry > GetMeshBindGroupLayoutEntries()
Allow subclasses to customize the entries in the bind group layout corresponding to GROUP_MESH.
virtual void ReplaceFragmentShaderColors(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
TopologyBindGroupInfo TopologyBindGroupInfos[vtkWebGPUCellToPrimitiveConverter::NUM_TOPOLOGY_SOURCE_TYPES]
virtual void ReplaceVertexShaderEdges(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ReplaceVertexShaderPrimitiveId(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
wgpu::BindGroup CreateTopologyBindGroup(const wgpu::Device &device, const std::string &label, vtkWebGPUCellToPrimitiveConverter::TopologySourceType topologySourceType)
Create a bind group for the primitives of a mesh.
virtual void SetVertexBuffers(const wgpu::RenderBundleEncoder &bundleEncoder)
std::string GraphicsPipelineKeys[GFX_PIPELINE_NB_TYPES]
void RecordDrawCommands(vtkRenderer *renderer, vtkActor *actor, const wgpu::RenderPassEncoder &passEncoder)
Record draw calls in the render pass encoder.
virtual void ReplaceVertexShaderPosition(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
void RemoveVertexAttributeMapping(const char *vertexAttributeName) override
Remove a vertex attribute mapping.
virtual bool IsPipelineSupported(GraphicsPipelineType pipelineType)
Whether shaders must be built to target the specific pipeline.
static vtkWebGPUPolyDataMapper * New()
virtual void ReplaceVertexShaderMainStart(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ReplaceFragmentShaderNormals(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
~vtkWebGPUPolyDataMapper() override
std::vector< std::uint32_t > MeshAttributeDynamicOffsets
virtual void ReplaceFragmentShaderEdges(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
virtual DrawCallArgs GetDrawCallArgsForDrawingVertices(vtkWebGPUCellToPrimitiveConverter::TopologySourceType topologySourceType)
virtual wgpu::PrimitiveTopology GetPrimitiveTopologyForPipeline(GraphicsPipelineType pipelineType)
Get the primitive topology type that should be used for the given pipeline.
void RecordDrawCommands(vtkRenderer *renderer, vtkActor *actor, const wgpu::RenderBundleEncoder &bundleEncoder)
virtual DrawCallArgs GetDrawCallArgs(GraphicsPipelineType pipelineType, vtkWebGPUCellToPrimitiveConverter::TopologySourceType topologySourceType)
vtkNew< vtkWebGPUCellToPrimitiveConverter > CellConverter
void MapDataArrayToMultiTextureAttribute(const char *tname, const char *dataArrayName, int fieldAssociation, int componentno=-1) override
This method will Map the specified data array for use as a texture coordinate for texture tname.
virtual void ReplaceFragmentShaderLights(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
virtual unsigned long GetCellAttributeByteSize(vtkWebGPUPolyDataMapper::CellDataAttributes attribute)
Returns the size of the 'sub-buffer' within the whole cell data SSBO for the given attribute.
virtual void ReplaceShaderConstantsDef(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
virtual void ReplaceShaderClippingPlanesDef(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
virtual void UpdateMeshTopologyBuffers(vtkWebGPUConfiguration *wgpuConfiguration, vtkProperty *displayProperty)
Updates the connectivity related buffers.
virtual std::vector< wgpu::BindGroupEntry > GetTopologyBindGroupEntries(vtkWebGPUCellToPrimitiveConverter::TopologySourceType topologySourceType, bool homogeneousCellSize, bool useEdgeArray)
Allow subclasses to customize the entries in the bind group corresponding to GROUP_TOPOLOGY.
virtual void UpdateMeshGeometryBuffers(vtkWebGPUConfiguration *wgpuConfiguration)
Creates buffers as needed and updates them with point/cell attributes, topology, draw parameters.
virtual void ReplaceShaderActorDef(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
void RenderPiece(vtkRenderer *renderer, vtkActor *act) override
Implemented by sub classes.
virtual void ReplaceVertexShaderTangents(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ReplaceVertexShaderInputDef(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ReplaceFragmentShaderPicking(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
GraphicsPipelineType
This mapper uses different wgpu::RenderPipeline to render a list of primitives.
virtual void ReplaceShaderCustomBindings(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
static bool IsPipelineForHomogeneousCellSize(GraphicsPipelineType pipelineType)
virtual void ReplaceVertexShaderUVs(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ReplaceVertexShaderCamera(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ReplaceVertexShaderCellId(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ApplyShaderReplacements(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
Generates vertex and fragment shader code.
bool HasPointAttributes[POINT_NB_ATTRIBUTES]
virtual bool ShouldReleaseGraphicsResourcesOnSync()
Return true if the mapper should release graphics resources from previous render during the vtkWebGPU...
wgpu::BindGroup CreateMeshAttributeBindGroup(const wgpu::Device &device, const std::string &label)
Create a bind group for the point and cell attributes of a mesh.
virtual void ReplaceVertexShaderNormals(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
CellDataAttributes
All the attributes supported by the cell data buffer.
void ComputeBounds() override
Called in GetBounds().
virtual void ReplaceVertexShaderVertexId(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ReplaceShaderTopologyBindings(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
static vtkOverrideAttribute * CreateOverrideAttributes()
virtual void ReplaceVertexShaderColors(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
WebGPU rendering window.
vtkWebGPUTexture is a concrete implementation of the abstract class vtkTexture for WebGPU.
window superclass for vtkRenderWindow
Definition vtkWindow.h:61
std::vector< std::pair< vtkTypeUInt32, vtkTypeUInt32 > > VertexOffsetAndCounts
#define vtkDataArray
#define VTK_SURFACE
#define VTK_MARSHALAUTO
#define VTK_NEWINSTANCE