VTK  9.7.1
vtkAnariDevice.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
13 #ifndef vtkAnariDevice_h
14 #define vtkAnariDevice_h
15 
16 #include "vtkObject.h"
17 #include "vtkRenderingAnariModule.h" // For export macro
18 
19 #include <anari/anari_cpp.hpp> // for ANARI handles
20 
21 #include <functional> // for std::function
22 
23 VTK_ABI_NAMESPACE_BEGIN
24 
25 class vtkAnariDeviceInternals;
26 
27 class VTKRENDERINGANARI_EXPORT vtkAnariDevice : public vtkObject
28 {
29 public:
30  using OnNewDeviceCallback = std::function<void()>;
31 
32  static vtkAnariDevice* New();
33  vtkTypeMacro(vtkAnariDevice, vtkObject);
34  void PrintSelf(ostream& os, vtkIndent indent) override;
35 
41  void SetAnariDebugConfig(const char* traceDir, const char* traceMode);
42 
49  bool SetupAnariDeviceFromLibrary(
50  const char* libraryName, const char* deviceName, bool enableDebugLayer = false);
51 
55  bool AnariInitialized() const;
56 
60  anari::Device GetHandle() const;
61 
65  const anari::Extensions& GetAnariDeviceExtensions() const;
66 
70  const char* const* GetAnariDeviceExtensionStrings() const;
71 
75  void SetOnNewDeviceCallback(OnNewDeviceCallback&& cb);
76 
78 
85  void SetParameterc(const char* param, char*);
86  void SetParameterb(const char* param, bool);
87  void SetParameteri(const char* param, int);
88  void SetParameter2i(const char* param, int, int);
89  void SetParameter3i(const char* param, int, int, int);
90  void SetParameter4i(const char* param, int, int, int, int);
91  void SetParameterf(const char* param, float);
92  void SetParameter2f(const char* param, float, float);
93  void SetParameter3f(const char* param, float, float, float);
94  void SetParameter4f(const char* param, float, float, float, float);
95  void SetParameterd(const char* param, double);
96  void CommitParameters();
98 
102  std::string& GetAnariLibraryName() const;
103 
107  std::string& GetAnariDeviceName() const;
108 
112  std::vector<std::string> GetAnariRendererSubTypes() const;
113 
114 protected:
118  vtkAnariDevice();
119 
123  ~vtkAnariDevice() override;
124 
125 private:
126  vtkAnariDevice(const vtkAnariDevice&) = delete;
127  void operator=(const vtkAnariDevice&) = delete;
128 
129  vtkAnariDeviceInternals* Internal{ nullptr };
130 };
131 
132 VTK_ABI_NAMESPACE_END
133 #endif
abstract base class for most VTK objects
Definition: vtkObject.h:52
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
a simple class to control print indentation
Definition: vtkIndent.h:28
base class to objects which create + manage a ANARI library + device
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
std::function< void()> OnNewDeviceCallback