VTK  9.0.1
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 }
RTW_TEXTURE_RGBA32F
@ RTW_TEXTURE_RGBA32F
Definition: Types.h:41
RTW_TEXTURE_R8
@ RTW_TEXTURE_R8
Definition: Types.h:45
RTW::Texture::Texture
Texture(const char *)
Definition: Texture.h:43
vtkX3D::type
@ type
Definition: vtkX3D.h:522
vtkX3D::data
@ data
Definition: vtkX3D.h:321
RTW::Object::Get2i
VisRTX::Vec2i Get2i(const std::vector< std::string > &ids, const VisRTX::Vec2i &defaultValue=VisRTX::Vec2i(), bool *found=nullptr) const
Definition: Object.h:141
RTW
Definition: Backend.h:5
RTW::Object
Definition: Object.h:17
RTW::convert
OSPFrameBufferFormat convert(RTWFrameBufferFormat format)
Definition: OSPRayBackend.h:16
RTW::Light
Definition: Light.h:12
RTW_TEXTURE_RGB32F
@ RTW_TEXTURE_RGB32F
Definition: Types.h:44
RTW_TEXTURE_FILTER_NEAREST
@ RTW_TEXTURE_FILTER_NEAREST
Definition: Types.h:56
RTW::Texture
Definition: Texture.h:11
RTW::Data
Definition: Data.h:9
vtkX3D::size
@ size
Definition: vtkX3D.h:259
RTW::Object::Get1i
int32_t Get1i(const std::vector< std::string > &ids, int32_t defaultValue=0, bool *found=nullptr) const
Definition: Object.h:107
RTW::Texture::Commit
void Commit() override
Definition: Texture.h:53
RTW_TEXTURE_RGB8
@ RTW_TEXTURE_RGB8
Definition: Types.h:42
RTW::Material
Definition: Material.h:15
RTW_TEXTURE_R32F
@ RTW_TEXTURE_R32F
Definition: Types.h:46
RTWTextureFormat
RTWTextureFormat
Definition: Types.h:37
RTW_TEXTURE_RGBA8
@ RTW_TEXTURE_RGBA8
Definition: Types.h:39
RTW::Renderer
Definition: Renderer.h:17
source
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
Definition: vtkBoostGraphAdapter.h:959
RTW::Texture::~Texture
~Texture()
Definition: Texture.h:47