3#ifndef vtkWebGPUPolyDataMapper_h
4#define vtkWebGPUPolyDataMapper_h
9#include "vtkRenderingWebGPUModule.h"
16#include <unordered_set>
18VTK_ABI_NAMESPACE_BEGIN
129 int fieldAssociation,
int componentno = -1)
override;
139 int fieldAssociation,
int componentno = -1)
override;
175 int uniformsBinding);
182 int uniformsBinding);
221 bool homogeneousCellSize,
bool useEdgeArray);
235 bool homogeneousCellSize,
bool useEdgeArray);
434 } ClippingPlanesData;
497 static_assert(GROUP_NB_BINDGROUPS <= 4,
498 "Number of bind groups exceeds 4! Most devices can support only up to 4 bind groups");
516 return this->PointBuffers[attribute].
Buffer;
522 WGPUBuffer GetCellDataWGPUBuffer(CellDataAttributes attribute)
524 return this->CellBuffers[attribute].
Buffer;
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);
540 bool GetNeedToRebuildGraphicsPipelines(vtkActor* actor, vtkRenderer* renderer);
552 bool CacheActorRendererProperties(vtkActor* actor, vtkRenderer* renderer);
557 void ResetPointCellAttributeState();
562 WGPUBindGroupLayout CreateMeshAttributeBindGroupLayout(
563 const WGPUDevice& device,
const std::string& label);
568 WGPUBindGroupLayout CreateTopologyBindGroupLayout(
const WGPUDevice& device,
569 const std::string& label,
bool homogeneousCellSize,
bool useEdgeArray);
575 unsigned long GetPointAttributeElementSize(
589 unsigned long GetExactPointBufferSize(PointDataAttributes attribute);
596 unsigned long GetExactCellBufferSize(CellDataAttributes attribute);
601 bool AllocateAttributeBuffers(vtkWebGPUConfiguration* wgpuConfiguration);
606 const char* GetGraphicsPipelineTypeAsString(GraphicsPipelineType graphicsPipelineType);
612 void SetupGraphicsPipelines(
const WGPUDevice& device, vtkRenderer* renderer, vtkActor* actor);
617 void UpdateClippingPlanesBuffer(vtkWebGPUConfiguration* wgpuConfiguration, vtkActor* actor);
625 std::vector<vtkSmartPointer<vtkWebGPUComputeRenderBuffer>> SetupComputeRenderBuffers;
630 std::unordered_set<vtkSmartPointer<vtkWebGPUComputeRenderBuffer>> NotSetupComputeRenderBuffers;
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
644 const CellDataAttributes CellDataAttributesOrder[CellDataAttributes::CELL_NB_ATTRIBUTES] = {
645 CellDataAttributes::CELL_COLORS, CellDataAttributes::CELL_NORMALS
650 int LastScalarMode = -1;
651 bool LastScalarVisibility =
false;
652 vtkTypeUInt32 LastNumClipPlanes = 0;
655 bool LastActorBackfaceCulling =
false;
656 bool LastActorFrontfaceCulling =
false;
657 bool LastVertexVisibility =
false;
659 bool LastHasRenderingTranslucentGeometry =
false;
660 int LastPointSize = 1;
661 int LastLineWidth = 1;
663 std::map<std::pair<vtkActor*, vtkRenderer*>, ActorState> CachedActorRendererProperties;
665#define vtkWebGPUPolyDataMapper_OVERRIDE_ATTRIBUTES \
666 vtkWebGPUPolyDataMapper::CreateOverrideAttributes()
represents an object (geometry & properties) in a rendered scene
object to represent cell connectivity
a simple class to control print indentation
Allocate and hold a VTK object.
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
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.
@ NUM_TOPOLOGY_SOURCE_TYPES
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)
bool GetSupportsSelection() override
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)
bool RebuildGraphicsPipelines
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.
WGPUBindGroup MeshAttributeBindGroup
bool HasCellAttributes[CELL_NB_ATTRIBUTES]
friend class vtkWebGPURenderer
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)
vtkPolyData * CurrentInput
vtkWebGPUPolyDataMapper()
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
WGPUBuffer ClippingPlanesBuffer
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)
vtkPolyData * CachedInput
friend class vtkWebGPUComputeRenderBuffer
GraphicsPipelineType
This mapper uses different WGPURenderPipeline to render a list of primitives.
@ GFX_PIPELINE_POINTS_SHAPED
@ GFX_PIPELINE_LINES_ROUND_CAP_ROUND_JOIN
@ GFX_PIPELINE_POINTS_HOMOGENEOUS_CELL_SIZE
@ GFX_PIPELINE_LINES_HOMOGENEOUS_CELL_SIZE
@ GFX_PIPELINE_LINES_MITER_JOIN
@ GFX_PIPELINE_LINES_THICK_HOMOGENEOUS_CELL_SIZE
@ GFX_PIPELINE_LINES_THICK
@ GFX_PIPELINE_LINES_ROUND_CAP_ROUND_JOIN_HOMOGENEOUS_CELL_SIZE
@ GFX_PIPELINE_POINTS_SHAPED_HOMOGENEOUS_CELL_SIZE
@ GFX_PIPELINE_TRIANGLES_HOMOGENEOUS_CELL_SIZE
@ GFX_PIPELINE_LINES_MITER_JOIN_HOMOGENEOUS_CELL_SIZE
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)
vtkWebGPUTexture is a concrete implementation of the abstract class vtkTexture for WebGPU.
window superclass for vtkRenderWindow
std::uint32_t VertexCount
std::uint32_t VertexOffset
std::uint32_t InstanceOffset
std::uint32_t InstanceCount
WGPUBuffer EdgeArrayBuffer
WGPUBuffer CellIdOffsetUniformBuffer
vtkTypeUInt32 VertexCount
vtkTypeUInt32 MaxCellSize
std::vector< std::pair< vtkTypeUInt32, vtkTypeUInt32 > > VertexOffsetAndCounts
WGPUBuffer ConnectivityBuffer