VTK  9.7.20260918
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 C API
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 WGPURenderPassEncoder& passEncoder);
202 vtkRenderer* renderer, vtkActor* actor, const WGPURenderBundleEncoder& bundleEncoder);
203
209
214 virtual std::vector<WGPUBindGroupLayoutEntry> GetMeshBindGroupLayoutEntries();
215
220 virtual std::vector<WGPUBindGroupLayoutEntry> GetTopologyBindGroupLayoutEntries(
221 bool homogeneousCellSize, bool useEdgeArray);
222
227 virtual std::vector<WGPUBindGroupEntry> GetMeshBindGroupEntries();
228
233 virtual std::vector<WGPUBindGroupEntry> 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<WGPUVertexBufferLayout> GetVertexBufferLayouts() { return {}; }
288
289 virtual void SetVertexBuffers(const WGPURenderPassEncoder& vtkNotUsed(passEncoder)) {}
290 virtual void SetVertexBuffers(const WGPURenderBundleEncoder& 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 WGPUPrimitiveTopology GetPrimitiveTopologyForPipeline(GraphicsPipelineType pipelineType);
394
396 {
397 std::uint32_t VertexOffset = 0;
398 std::uint32_t VertexCount = 0;
399 std::uint32_t InstanceOffset = 0;
400 std::uint32_t InstanceCount = 0;
401 };
406
411 WGPUBindGroup CreateMeshAttributeBindGroup(const WGPUDevice& device, const std::string& label);
412
418 WGPUBindGroup CreateTopologyBindGroup(const WGPUDevice& device, const std::string& label,
420
422 {
423 WGPUBuffer Buffer = nullptr;
424 uint64_t Size = 0;
425 uint64_t Watermark = 0;
426 bool Touched = false;
427 };
430 struct
431 {
432 vtkTypeFloat32 PlaneEquations[6][4];
433 vtkTypeUInt32 PlaneCount = 0;
434 } ClippingPlanesData;
435 WGPUBuffer ClippingPlanesBuffer = nullptr;
436
442
446 // used by RenderPiece and functions it calls to reduce
447 // calls to get the input and allow for rendering of
448 // other polydata (not the input)
450 // vtkRenderer culls props to frustum. At that point, it requests
451 // mappers for bounds of the geometry. We cache the vtkAlgorithm output
452 // so that `UpdateMeshGeometryBuffers` can reuse it without climbing up
453 // vtkAlgorithm pipeline.
456
457 // 1 bind group for this polydata mesh
458 WGPUBindGroup MeshAttributeBindGroup = nullptr;
459 std::vector<std::uint32_t> MeshAttributeDynamicOffsets;
460
462 {
463 // buffer for point ids.
464 WGPUBuffer ConnectivityBuffer = nullptr;
465 // buffer for the cell ids.
466 WGPUBuffer CellIdBuffer = nullptr;
467 // buffer for edge array. this lets fragment shader hide internal edges of a polygon
468 // when edge visibility is turned on.
469 WGPUBuffer EdgeArrayBuffer = nullptr;
470 // uniform buffer for cell id offset.
471 WGPUBuffer CellIdOffsetUniformBuffer = nullptr;
472 // // buffer for indirect draw command
473 // WGPUBuffer IndirectDrawBuffer;
474 // bind group for the primitive size uniform.
475 WGPUBindGroup BindGroup = nullptr;
476 // maximum number of vertices in a cell
477 vtkTypeUInt32 MaxCellSize = 0;
478 // vertexCount for draw call.
479 vtkTypeUInt32 VertexCount = 0;
480 // composite vertex offset and counts for drawing composite data
481 std::vector<std::pair<vtkTypeUInt32, vtkTypeUInt32>> VertexOffsetAndCounts;
482 };
483
484 enum BindingGroup : int
485 {
490 // Clipping planes are bound to the same group as the mesh attributes
491 // because they vary based on the mapper's shift/scale and the actor's
492 // transformation matrix.
496 };
497 static_assert(GROUP_NB_BINDGROUPS <= 4,
498 "Number of bind groups exceeds 4! Most devices can support only up to 4 bind groups");
499 std::array<std::uint32_t, GROUP_NB_BINDGROUPS> NumberOfBindings = {};
504
505private:
507 void operator=(const vtkWebGPUPolyDataMapper&) = delete;
509 friend class vtkWebGPURenderer;
510
514 WGPUBuffer GetPointDataWGPUBuffer(PointDataAttributes attribute)
515 {
516 return this->PointBuffers[attribute].Buffer;
517 }
518
522 WGPUBuffer GetCellDataWGPUBuffer(CellDataAttributes attribute)
523 {
524 return this->CellBuffers[attribute].Buffer;
525 }
526
530 void UploadAttributeToGPUBuffer(vtkWebGPUConfiguration* wgpuConfiguration,
531 vtkDataArray* dataArray, PointDataAttributes attributeType, float denominator = 1.0f);
532 void UploadAttributeToGPUBuffer(vtkWebGPUConfiguration* wgpuConfiguration,
533 vtkDataArray* dataArray, CellDataAttributes attributeType, float denominator = 1.0f);
534
540 bool GetNeedToRebuildGraphicsPipelines(vtkActor* actor, vtkRenderer* renderer);
541
552 bool CacheActorRendererProperties(vtkActor* actor, vtkRenderer* renderer);
553
557 void ResetPointCellAttributeState();
558
562 WGPUBindGroupLayout CreateMeshAttributeBindGroupLayout(
563 const WGPUDevice& device, const std::string& label);
564
568 WGPUBindGroupLayout CreateTopologyBindGroupLayout(const WGPUDevice& device,
569 const std::string& label, bool homogeneousCellSize, bool useEdgeArray);
570
575 unsigned long GetPointAttributeElementSize(
577
582 unsigned long GetCellAttributeElementSize(vtkWebGPUPolyDataMapper::CellDataAttributes attribute);
583
589 unsigned long GetExactPointBufferSize(PointDataAttributes attribute);
590
596 unsigned long GetExactCellBufferSize(CellDataAttributes attribute);
597
601 bool AllocateAttributeBuffers(vtkWebGPUConfiguration* wgpuConfiguration);
602
606 const char* GetGraphicsPipelineTypeAsString(GraphicsPipelineType graphicsPipelineType);
607
612 void SetupGraphicsPipelines(const WGPUDevice& device, vtkRenderer* renderer, vtkActor* actor);
613
617 void UpdateClippingPlanesBuffer(vtkWebGPUConfiguration* wgpuConfiguration, vtkActor* actor);
618
625 std::vector<vtkSmartPointer<vtkWebGPUComputeRenderBuffer>> SetupComputeRenderBuffers;
626
630 std::unordered_set<vtkSmartPointer<vtkWebGPUComputeRenderBuffer>> NotSetupComputeRenderBuffers;
631
635 const PointDataAttributes PointDataAttributesOrder[PointDataAttributes::POINT_NB_ATTRIBUTES] = {
636 PointDataAttributes::POINT_POSITIONS, PointDataAttributes::POINT_COLORS,
637 PointDataAttributes::POINT_NORMALS, PointDataAttributes::POINT_TANGENTS,
638 PointDataAttributes::POINT_UVS, PointDataAttributes::POINT_COLOR_UVS
639 };
640
644 const CellDataAttributes CellDataAttributesOrder[CellDataAttributes::CELL_NB_ATTRIBUTES] = {
645 CellDataAttributes::CELL_COLORS, CellDataAttributes::CELL_NORMALS
646 };
647
648 // Cache these so that subsequent executions of UpdateMeshGeometryBuffers() do not unnecessarily
649 // invoke MapScalars().
650 int LastScalarMode = -1;
651 bool LastScalarVisibility = false;
652 vtkTypeUInt32 LastNumClipPlanes = 0;
653 struct ActorState
654 {
655 bool LastActorBackfaceCulling = false;
656 bool LastActorFrontfaceCulling = false;
657 bool LastVertexVisibility = false;
658 int LastRepresentation = VTK_SURFACE;
659 bool LastHasRenderingTranslucentGeometry = false;
660 int LastPointSize = 1;
661 int LastLineWidth = 1;
662 };
663 std::map<std::pair<vtkActor*, vtkRenderer*>, ActorState> CachedActorRendererProperties;
664};
665#define vtkWebGPUPolyDataMapper_OVERRIDE_ATTRIBUTES \
666 vtkWebGPUPolyDataMapper::CreateOverrideAttributes()
667VTK_ABI_NAMESPACE_END
668#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:68
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 void SetVertexBuffers(const WGPURenderBundleEncoder &bundleEncoder)
virtual std::vector< WGPUBindGroupEntry > GetMeshBindGroupEntries()
Allow subclasses to customize the entries in the bind group corresponding to GROUP_MESH.
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.
virtual std::vector< WGPUBindGroupEntry > GetTopologyBindGroupEntries(vtkWebGPUCellToPrimitiveConverter::TopologySourceType topologySourceType, bool homogeneousCellSize, bool useEdgeArray)
Allow subclasses to customize the entries in the bind group corresponding to GROUP_TOPOLOGY.
AttributeBuffer CellBuffers[CELL_NB_ATTRIBUTES]
vtkPolyDataMapper::MapperHashType GenerateHash(vtkPolyData *polydata) override
This hash integer is computed by concrete graphics implementation of this class.
WGPUBindGroup CreateTopologyBindGroup(const WGPUDevice &device, const std::string &label, vtkWebGPUCellToPrimitiveConverter::TopologySourceType topologySourceType)
Create a bind group for the primitives of a mesh.
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 ReplaceShaderRendererBindings(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
virtual std::vector< WGPUBindGroupLayoutEntry > GetTopologyBindGroupLayoutEntries(bool homogeneousCellSize, bool useEdgeArray)
Allow subclasses to customize the entries in the bind group layout corresponding to GROUP_TOPOLOGY.
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)
WGPUBindGroup CreateMeshAttributeBindGroup(const WGPUDevice &device, const std::string &label)
Create a bind group for the point and cell attributes of a mesh.
virtual void ReplaceVertexShaderClippingPlanes(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
AttributeBuffer PointBuffers[POINT_NB_ATTRIBUTES]
virtual void ReplaceFragmentShaderColors(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
void RecordDrawCommands(vtkRenderer *renderer, vtkActor *actor, const WGPURenderBundleEncoder &bundleEncoder)
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)
std::string GraphicsPipelineKeys[GFX_PIPELINE_NB_TYPES]
virtual void SetVertexBuffers(const WGPURenderPassEncoder &passEncoder)
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 std::vector< WGPUVertexBufferLayout > GetVertexBufferLayouts()
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 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 std::vector< WGPUBindGroupLayoutEntry > GetMeshBindGroupLayoutEntries()
Allow subclasses to customize the entries in the bind group layout corresponding to GROUP_MESH.
void RecordDrawCommands(vtkRenderer *renderer, vtkActor *actor, const WGPURenderPassEncoder &passEncoder)
Record draw calls in the render pass encoder.
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 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 WGPURenderPipeline 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...
virtual void ReplaceVertexShaderNormals(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual WGPUPrimitiveTopology GetPrimitiveTopologyForPipeline(GraphicsPipelineType pipelineType)
Get the primitive topology type that should be used for the given pipeline.
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:62
std::vector< std::pair< vtkTypeUInt32, vtkTypeUInt32 > > VertexOffsetAndCounts
#define vtkDataArray
#define VTK_SURFACE
#define VTK_MARSHALAUTO
#define VTK_NEWINSTANCE