File: vtkOSPRayCache.h

package info (click to toggle)
paraview 5.11.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 497,236 kB
  • sloc: cpp: 3,171,290; ansic: 1,315,072; python: 134,290; xml: 103,324; sql: 65,887; sh: 5,286; javascript: 4,901; yacc: 4,383; java: 3,977; perl: 2,363; lex: 1,909; f90: 1,255; objc: 143; makefile: 119; tcl: 59; pascal: 50; fortran: 29
file content (132 lines) | stat: -rw-r--r-- 3,181 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkOSPRayCache.h

  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
/**
 * @class   vtkOSPRayCache
 * @brief   temporal cache ospray structures to speed flipbooks
 *
 * A temporal cache of templated objects that are created on the first
 * playthrough and reused afterward to speed up animations. Cache is
 * first come first serve. In other words the first 'Size' Set()
 * calls will succeed, later calls will be silently ignored. Decreasing
 * the size of the cache frees all previously held contents.
 *
 * This class is internal.
 */

#ifndef vtkOSPRayCache_h
#define vtkOSPRayCache_h

#include "vtkRenderingRayTracingModule.h" // For export macro
#include "vtkSystemIncludes.h"            //dll warning suppression
#include <map>                            // for stl
#include <memory>

#include "RTWrapper/RTWrapper.h" // for handle types

VTK_ABI_NAMESPACE_BEGIN
template <class T>
class VTKRENDERINGRAYTRACING_EXPORT vtkOSPRayCache
{
public:
  vtkOSPRayCache() { this->Size = 0; }

  ~vtkOSPRayCache() { this->Empty(); }

  /**
   * Insert a new object into the cache.
   */
  void Set(double tstep, std::shared_ptr<T> payload)
  {
    if (this->Contents.size() >= this->Size)
    {
      return;
    }
    this->Contents[tstep] = payload;
  }

  /**
   * Obtain an object from the cache.
   * Return nullptr if none present at tstep.
   */
  std::shared_ptr<T> Get(double tstep)
  {
    auto ret = this->Contents.find(tstep);
    if (ret != this->Contents.end())
    {
      return ret->second;
    }
    return nullptr;
  }

  ///@{
  /**
   * Set/Get the number of slots available in the cache.
   * Default is 0.
   */
  void SetSize(size_t sz)
  {
    if (sz == this->Size)
    {
      return;
    }
    if (sz < this->Size)
    {
      this->Empty();
    }
    this->Size = sz;
  }
  size_t GetSize() { return this->Size; }
  ///@}

  /**
   * Query whether cache contains tstep
   */
  bool Contains(double tstep) { return this->Get(tstep) != nullptr; }

  /**
   * Check if the cache has space left.
   */
  bool HasRoom() { return this->Contents.size() < this->Size; }

private:
  // deletes all of the content in the cache
  void Empty()
  {
    this->Contents.clear();
    this->Size = 0;
  }

  size_t Size;

  std::map<double, std::shared_ptr<T>> Contents;
};

class vtkOSPRayCacheItemObject
{
public:
  vtkOSPRayCacheItemObject(RTW::Backend* be, OSPObject obj)
    : backend(be)
  {
    object = obj;
  }
  ~vtkOSPRayCacheItemObject() { ospRelease(object); }
  OSPObject object{ nullptr };
  size_t size{ 0 };
  RTW::Backend* backend = nullptr;
};

VTK_ABI_NAMESPACE_END
#endif // vtkOSPRayCache_h
// VTK-HeaderTest-Exclude: vtkOSPRayCache.h