VTK  9.7.1
vtkWebGPUBatchedLabeledDataMapperInternals.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 
4 #ifndef vtkWebGPUBatchedLabeledDataMapperInternals_h
5 #define vtkWebGPUBatchedLabeledDataMapperInternals_h
6 
7 #include "vtkRenderingWebGPUModule.h" // For export macro
9 
10 #include "vtk_wgpu.h"
11 
12 VTK_ABI_NAMESPACE_BEGIN
14 
15 class VTKRENDERINGWEBGPU_NO_EXPORT vtkWebGPUBatchedLabeledDataMapperInternals
17 {
18 public:
21 
23 
24  uint32_t NumberOfLabels = 0;
25 
26  wgpu::Texture GlyphsTexture;
27  wgpu::TextureView GlyphsTextureView;
28  wgpu::Sampler GlyphsSampler;
29  wgpu::Buffer LabelUniformBuffer;
30 
31  enum InstanceAttrib : int
32  {
33  GLYPH_EXTENTS = 0,
34  COFF_PROPID = 1,
35  FRAME_COLORS = 2,
36  NUM_INSTANCE_ATTRIBS = 3
37  };
38  wgpu::Buffer InstanceBuffers[NUM_INSTANCE_ATTRIBS];
39  uint64_t InstanceBufferSizes[NUM_INSTANCE_ATTRIBS] = { 0, 0, 0 };
40  wgpu::VertexAttribute InstanceAttributes[3];
41  bool LabelCountChanged = false;
42 
43  void InvalidatePipelines() { this->RebuildGraphicsPipelines = true; }
44 
45  void RenderPiece(vtkRenderer* renderer, vtkActor* actor) override;
46  void ReleaseGraphicsResources(vtkWindow* window) override;
47 
48 protected:
50  ~vtkWebGPUBatchedLabeledDataMapperInternals() override = default;
51 
52  bool IsPipelineSupported(GraphicsPipelineType pipelineType) override;
53  DrawCallArgs GetDrawCallArgs(GraphicsPipelineType pipelineType,
54  vtkWebGPUCellToPrimitiveConverter::TopologySourceType topologySourceType) override;
56  vtkWebGPUCellToPrimitiveConverter::TopologySourceType topologySourceType) override;
57  std::vector<wgpu::VertexBufferLayout> GetVertexBufferLayouts() override;
58  void SetVertexBuffers(const wgpu::RenderPassEncoder& encoder) override;
59  void SetVertexBuffers(const wgpu::RenderBundleEncoder& encoder) override;
60  std::vector<wgpu::BindGroupLayoutEntry> GetMeshBindGroupLayoutEntries() override;
61  std::vector<wgpu::BindGroupEntry> GetMeshBindGroupEntries() override;
62 
63  void ReplaceShaderConstantsDef(GraphicsPipelineType pipelineType, vtkWebGPURenderer* renderer,
64  vtkWebGPUActor* actor, std::string& vss, std::string& fss) override;
65  void ReplaceShaderCustomDef(GraphicsPipelineType pipelineType, vtkWebGPURenderer* renderer,
66  vtkWebGPUActor* actor, std::string& vss, std::string& fss) override;
67  void ReplaceShaderCustomBindings(GraphicsPipelineType pipelineType, vtkWebGPURenderer* renderer,
68  vtkWebGPUActor* actor, std::string& vss, std::string& fss) override;
69  void ReplaceVertexShaderInputDef(GraphicsPipelineType pipelineType, vtkWebGPURenderer* renderer,
70  vtkWebGPUActor* actor, std::string& vss) override;
71  void ReplaceVertexShaderVertexId(GraphicsPipelineType pipelineType, vtkWebGPURenderer* renderer,
72  vtkWebGPUActor* actor, std::string& vss) override;
73  void ReplaceVertexShaderPosition(GraphicsPipelineType pipelineType, vtkWebGPURenderer* renderer,
74  vtkWebGPUActor* actor, std::string& vss) override;
75  void ReplaceVertexShaderColors(GraphicsPipelineType pipelineType, vtkWebGPURenderer* renderer,
76  vtkWebGPUActor* actor, std::string& vss) override;
77  void ReplaceVertexShaderUVs(GraphicsPipelineType pipelineType, vtkWebGPURenderer* renderer,
78  vtkWebGPUActor* actor, std::string& vss) override;
79  void ReplaceVertexShaderNormals(GraphicsPipelineType pipelineType, vtkWebGPURenderer* renderer,
80  vtkWebGPUActor* actor, std::string& vss) override;
81  void ReplaceVertexShaderTangents(GraphicsPipelineType pipelineType, vtkWebGPURenderer* renderer,
82  vtkWebGPUActor* actor, std::string& vss) override;
83  void ReplaceFragmentShaderColors(GraphicsPipelineType pipelineType, vtkWebGPURenderer* renderer,
84  vtkWebGPUActor* actor, std::string& fss) override;
85  void ReplaceFragmentShaderNormals(GraphicsPipelineType pipelineType, vtkWebGPURenderer* renderer,
86  vtkWebGPUActor* actor, std::string& fss) override;
87  void ReplaceFragmentShaderLights(GraphicsPipelineType pipelineType, vtkWebGPURenderer* renderer,
88  vtkWebGPUActor* actor, std::string& fss) override;
89  void ReplaceFragmentShaderCoincidentOffset(GraphicsPipelineType pipelineType,
90  vtkWebGPURenderer* renderer, vtkWebGPUActor* actor, std::string& fss) override;
91 
92 private:
95  void operator=(const vtkWebGPUBatchedLabeledDataMapperInternals&) = delete;
96 
97  void UpdateInstanceBuffers(vtkWebGPUConfiguration* wgpuConfiguration);
98  void UpdateUniformBuffer(vtkRenderer* renderer, vtkWebGPUConfiguration* wgpuConfiguration);
99 };
100 VTK_ABI_NAMESPACE_END
101 
102 #endif
virtual std::vector< wgpu::VertexBufferLayout > GetVertexBufferLayouts()
virtual void ReplaceVertexShaderInputDef(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:41
virtual std::vector< wgpu::BindGroupEntry > GetMeshBindGroupEntries()
Allow subclasses to customize the entries in the bind group corresponding to GROUP_MESH.
virtual bool IsPipelineSupported(GraphicsPipelineType pipelineType)
Whether shaders must be built to target the specific pipeline.
void RenderPiece(vtkRenderer *renderer, vtkActor *act) override
Implemented by sub classes.
static vtkWebGPUPolyDataMapper * New()
virtual void ReplaceFragmentShaderColors(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
virtual void ReplaceVertexShaderVertexId(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ReplaceVertexShaderUVs(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ReplaceShaderConstantsDef(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
virtual void ReplaceShaderCustomDef(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
abstract specification for renderers
Definition: vtkRenderer.h:63
virtual void ReplaceFragmentShaderNormals(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
virtual void SetVertexBuffers(const wgpu::RenderPassEncoder &passEncoder)
virtual void ReplaceVertexShaderPosition(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ReplaceFragmentShaderCoincidentOffset(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
window superclass for vtkRenderWindow
Definition: vtkWindow.h:41
virtual DrawCallArgs GetDrawCallArgs(GraphicsPipelineType pipelineType, vtkWebGPUCellToPrimitiveConverter::TopologySourceType topologySourceType)
void ReleaseGraphicsResources(vtkWindow *) override
Release any graphics resources that are being consumed by this mapper.
virtual void ReplaceVertexShaderNormals(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ReplaceVertexShaderTangents(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
WebGPU backend for vtkBatchedLabeledDataMapper.
virtual void ReplaceFragmentShaderLights(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &fss)
virtual void ReplaceVertexShaderColors(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss)
virtual void ReplaceShaderCustomBindings(GraphicsPipelineType pipelineType, vtkWebGPURenderer *renderer, vtkWebGPUActor *actor, std::string &vss, std::string &fss)
Create a webgpu device for use in rendering and compute pipelines.
virtual DrawCallArgs GetDrawCallArgsForDrawingVertices(vtkWebGPUCellToPrimitiveConverter::TopologySourceType topologySourceType)
TopologySourceType
All supported types of topology.
virtual std::vector< wgpu::BindGroupLayoutEntry > GetMeshBindGroupLayoutEntries()
Allow subclasses to customize the entries in the bind group layout corresponding to GROUP_MESH...