VTK  9.0.2
Texture.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "../Types.h"
4 
5 #include <VisRTX.h>
6 #include <algorithm>
7 #include <cassert>
8 
9 namespace RTW
10 {
11  class Texture : public Object
12  {
13  friend class Renderer;
14  friend class Material;
15  friend class Light;
16 
17  private:
18  VisRTX::TextureFormat convert(RTWTextureFormat format) const
19  {
20  switch (format)
21  {
22  case RTW_TEXTURE_RGBA8:
23  return VisRTX::TextureFormat::RGBA8;
24  case RTW_TEXTURE_RGB8:
25  return VisRTX::TextureFormat::RGB8;
27  return VisRTX::TextureFormat::RGBA32F;
28  case RTW_TEXTURE_RGB32F:
29  return VisRTX::TextureFormat::RGB32F;
30  case RTW_TEXTURE_R8:
31  return VisRTX::TextureFormat::R8;
32  case RTW_TEXTURE_R32F:
33  return VisRTX::TextureFormat::R32F;
34  default:
35  break;
36  }
37 
38  assert(false);
39  return VisRTX::TextureFormat::RGBA8;
40  }
41 
42  public:
43  Texture(const char* /*type*/)
44  {
45  }
46 
48  {
49  if (this->texture)
50  this->texture->Release();
51  }
52 
53  void Commit() override
54  {
55  VisRTX::Vec2i size = this->Get2i({ "size" });
56  int type = this->Get1i({ "type" }); // format
57  int flags = this->Get1i({ "flags" });
58 
59  void* source = nullptr;
60  Data* data = this->GetObject<Data>({ "data" });
61  if (data)
62  source = data->GetData();
63 
64  VisRTX::Context* rtx = VisRTX_GetContext();
65 
66  if (!this->texture)
67  this->texture = rtx->CreateTexture(VisRTX::Vec2ui(size.x, size.y), convert((RTWTextureFormat)type), source);
68  else
69  this->texture->SetPixels(VisRTX::Vec2ui(size.x, size.y), convert((RTWTextureFormat)type), source);
70 
71  if (flags & RTW_TEXTURE_FILTER_NEAREST)
72  this->texture->SetFiltering(VisRTX::TextureFiltering::NEAREST, VisRTX::TextureFiltering::NEAREST);
73  }
74 
75 
76  private:
77  VisRTX::Texture* texture = nullptr;
78  };
79 }
RTWTextureFormat
Definition: Types.h:38
@ RTW_TEXTURE_R32F
Definition: Types.h:46
@ RTW_TEXTURE_RGBA32F
Definition: Types.h:41
@ RTW_TEXTURE_RGB8
Definition: Types.h:42
@ RTW_TEXTURE_R8
Definition: Types.h:45
@ RTW_TEXTURE_RGBA8
Definition: Types.h:39
@ RTW_TEXTURE_RGB32F
Definition: Types.h:44
@ RTW_TEXTURE_FILTER_NEAREST
Definition: Types.h:56
Definition: Data.h:10
int32_t Get1i(const std::vector< std::string > &ids, int32_t defaultValue=0, bool *found=nullptr) const
Definition: Object.h:107
VisRTX::Vec2i Get2i(const std::vector< std::string > &ids, const VisRTX::Vec2i &defaultValue=VisRTX::Vec2i(), bool *found=nullptr) const
Definition: Object.h:141
Texture(const char *)
Definition: Texture.h:43
void Commit() override
Definition: Texture.h:53
Definition: Backend.h:6
OSPFrameBufferFormat convert(RTWFrameBufferFormat format)
Definition: OSPRayBackend.h:16
@ type
Definition: vtkX3D.h:522
@ size
Definition: vtkX3D.h:259
@ data
Definition: vtkX3D.h:321
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)