VTK  9.7.1
vtkWebGPURenderTextureDeviceResource.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 
8 #ifndef vtkWebGPURenderTextureDeviceResource_h
9 #define vtkWebGPURenderTextureDeviceResource_h
10 #include "vtkDataArray.h"
11 #include "vtkRenderingWebGPUModule.h" // For export macro
13 #include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
14 #include "vtk_wgpu.h" // for webgpu
15 
16 #include <cstdint>
17 
18 VTK_ABI_NAMESPACE_BEGIN
19 class vtkWindow;
20 class vtkImageData;
24 {
25 public:
28  void PrintSelf(ostream& os, vtkIndent indent) override;
29 
33  void ReleaseGraphicsResources(vtkWindow* window);
34 
35  enum class AddressMode
36  {
37  UNDEFINED = 0,
38  CLAMP_TO_EDGE,
39  REPEAT,
40  MIRROR_REPEAT
41  };
42 
43  enum class FilterMode
44  {
45  UNDEFINED = 0,
46  NEAREST,
47  LINEAR
48  };
49 
50  enum class SamplerMode
51  {
52  UNDEFINED = 0,
53  FILTERING,
54  NON_FILTERING,
55  COMPARISON
56  };
57 
58  enum class CompareFunction
59  {
60  UNDEFINED = 0,
61  NEVER,
62  LESS,
63  LESS_EQUAL,
64  GREATER,
65  GREATER_EQUAL,
66  EQUAL,
67  NOT_EQUAL,
68  ALWAYS
69  };
70 
72 
75  vtkGetEnumMacro(AddressModeU, AddressMode);
76  vtkSetEnumMacro(AddressModeU, AddressMode);
77  vtkGetEnumMacro(AddressModeV, AddressMode);
78  vtkSetEnumMacro(AddressModeV, AddressMode);
79  vtkGetEnumMacro(AddressModeW, AddressMode);
80  vtkSetEnumMacro(AddressModeW, AddressMode);
82 
84 
87  vtkGetEnumMacro(MagFilter, FilterMode);
88  vtkSetEnumMacro(MagFilter, FilterMode);
89  vtkGetEnumMacro(MinFilter, FilterMode);
90  vtkSetEnumMacro(MinFilter, FilterMode);
91  vtkGetEnumMacro(MipmapFilter, FilterMode);
92  vtkSetEnumMacro(MipmapFilter, FilterMode);
94 
96 
99  vtkGetEnumMacro(SamplerBindingType, SamplerMode);
100  vtkSetEnumMacro(SamplerBindingType, SamplerMode);
102 
104 
107  vtkGetEnumMacro(CompareFunc, CompareFunction);
108  vtkSetEnumMacro(CompareFunc, CompareFunction);
110 
112 
115  vtkGetMacro(LODMinClamp, float);
116  vtkSetMacro(LODMinClamp, float);
117  vtkGetMacro(LODMaxClamp, float);
118  vtkSetMacro(LODMaxClamp, float);
120 
122 
125  vtkGetMacro(MaxAnisotropy, vtkTypeUInt16);
126  vtkSetMacro(MaxAnisotropy, vtkTypeUInt16);
128 
130 
133  vtkGetMacro(SampleCount, vtkTypeUInt32);
134  vtkSetMacro(SampleCount, vtkTypeUInt32);
136 
143  void SendToWebGPUDevice(
144  std::vector<void*> dataPlanes, vtkWebGPUConfiguration* wgpuConfiguration, bool cubeMap = false);
145 
152  wgpu::BindGroupLayoutEntry MakeSamplerBindGroupLayoutEntry(
153  std::uint32_t binding, wgpu::ShaderStage visibility);
154 
160  wgpu::BindGroupEntry MakeSamplerBindGroupEntry(std::uint32_t binding);
161 
168  wgpu::BindGroupLayoutEntry MakeTextureViewBindGroupLayoutEntry(
169  std::uint32_t binding, wgpu::ShaderStage visibility);
170 
176  wgpu::BindGroupEntry MakeTextureViewBindGroupEntry(std::uint32_t binding);
177 
179 
182  vtkSetStdStringFromCharMacro(Label);
183  vtkSetMacro(Label, std::string);
184  vtkGetCharFromStdStringMacro(Label);
186 
187  static const char* GetTextureSampleTypeString(TextureSampleType type);
188  static wgpu::FilterMode GetWebGPUFilterMode(FilterMode mode);
189  static wgpu::MipmapFilterMode GetWGPUMipMapFilterMode(FilterMode mode);
190  static wgpu::AddressMode GetWebGPUAddressMode(AddressMode mode);
191  static wgpu::SamplerBindingType GetWebGPUSamplerBindingType(SamplerMode mode);
192  static wgpu::CompareFunction GetWebGPUCompareFunction(CompareFunction mode);
193 
194 protected:
197 
198 private:
200  void operator=(const vtkWebGPURenderTextureDeviceResource&) = delete;
201 
202  AddressMode AddressModeU = AddressMode::UNDEFINED;
203  AddressMode AddressModeV = AddressMode::UNDEFINED;
204  AddressMode AddressModeW = AddressMode::UNDEFINED;
205 
206  FilterMode MagFilter = FilterMode::UNDEFINED;
207  FilterMode MinFilter = FilterMode::UNDEFINED;
208  FilterMode MipmapFilter = FilterMode::UNDEFINED;
209 
210  SamplerMode SamplerBindingType = SamplerMode::UNDEFINED;
211  CompareFunction CompareFunc = CompareFunction::UNDEFINED;
212 
213  float LODMinClamp = 0.0f;
214  float LODMaxClamp = 32.0f;
215  vtkTypeUInt16 MaxAnisotropy = 1;
216 
217  vtkTypeUInt32 SampleCount = 1;
218  vtkTypeUInt32 BaseMipLevel = 0;
219 
220  std::string Label;
221 
222  wgpu::TextureDescriptor TextureDescriptor;
223  wgpu::Texture Texture;
224  wgpu::SamplerDescriptor SamplerDescriptor;
225  wgpu::Sampler Sampler;
226  wgpu::TextureViewDescriptor TextureViewDescriptor;
227  wgpu::TextureView TextureView;
228 };
229 
230 VTK_ABI_NAMESPACE_END
231 #endif
window superclass for vtkRenderWindow
Definition: vtkWindow.h:41
a simple class to control print indentation
Definition: vtkIndent.h:28
Abstraction class for WebGPU textures.
topologically and geometrically regular array of data
Definition: vtkImageData.h:45
static vtkWebGPUTextureDeviceResource * New()
vtkGetEnumMacro(Dimension, TextureDimension)
Get/set the texture dimension.
Create a webgpu device for use in rendering and compute pipelines.
vtkSetEnumMacro(Dimension, TextureDimension)
Get/set the texture dimension.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
#define VTK_MARSHALAUTO