Blue Brain BioExplorer
Texture2D.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2024, EPFL/Blue Brain Project
3  * All rights reserved. Do not distribute without permission.
4  *
5  * This file is part of Blue Brain BioExplorer <https://github.com/BlueBrain/BioExplorer>
6  *
7  * This library is free software; you can redistribute it and/or modify it under
8  * the terms of the GNU Lesser General Public License version 3.0 as published
9  * by the Free Software Foundation.
10  *
11  * This library is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13  * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14  * details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this library; if not, write to the Free Software Foundation, Inc.,
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19  */
20 
21 #pragma once
22 
25 #include <vector>
26 
27 namespace core
28 {
29 enum class TextureWrapMode
30 {
33  mirror,
34  repeat
35 };
36 
37 class Texture2D
38 {
39 public:
43  enum class Type
44  {
45  default_, // Default type of texture.
46  cubemap, // Cubemap texture.
47  normal_roughness, // Normal roughness texture.
48  aoe // Ambient occlusion texture.
49  };
50 
61  PLATFORM_API Texture2D(const Type type, const std::string& filename, const uint8_t channels, const uint8_t depth,
62  const uint32_t width, const uint32_t height);
63 
67  size_t getSizeInBytes() const { return height * width * depth * channels; }
68 
74  void setMipLevels(const uint8_t mips);
75 
79  uint8_t getMipLevels() const { return _mipLevels; }
80 
88  template <typename T>
89  const T* getRawData(const uint8_t face = 0, const uint8_t mip = 0) const
90  {
91  return reinterpret_cast<const T*>(_rawData[face][mip].data());
92  }
93 
102  void setRawData(unsigned char* data, const size_t size, const uint8_t face = 0, const uint8_t mip = 0);
103 
111  void setRawData(std::vector<unsigned char>&& rawData, const uint8_t face = 0, const uint8_t mip = 0);
112 
116  uint8_t getPossibleMipMapsLevels() const;
117 
121  bool isCubeMap() const { return type == Type::cubemap; }
122 
126  bool isNormalMap() const { return type == Type::normal_roughness; }
127 
131  uint8_t getNumFaces() const { return isCubeMap() ? 6 : 1; }
132 
138  void setWrapMode(const TextureWrapMode mode) { _wrapMode = mode; }
139 
143  TextureWrapMode getWrapMode() const { return _wrapMode; }
144 
146  const Type type;
147 
149  const std::string filename;
150 
152  const uint8_t channels;
153 
155  const uint8_t depth;
156 
158  const uint32_t width;
159 
161  const uint32_t height;
162 
163 private:
165  uint8_t _mipLevels{0};
166 
169 
175  std::vector<std::vector<std::vector<unsigned char>>> _rawData;
176 };
177 } // namespace core
#define PLATFORM_API
Definition: Api.h:37
const T * getRawData(const uint8_t face=0, const uint8_t mip=0) const
Definition: Texture2D.h:89
size_t getSizeInBytes() const
Definition: Texture2D.h:67
uint8_t getPossibleMipMapsLevels() const
Definition: Texture2D.cpp:58
uint8_t getNumFaces() const
Definition: Texture2D.h:131
const Type type
Definition: Texture2D.h:146
const uint8_t channels
Definition: Texture2D.h:152
bool isCubeMap() const
Definition: Texture2D.h:121
bool isNormalMap() const
Definition: Texture2D.h:126
TextureWrapMode getWrapMode() const
Definition: Texture2D.h:143
uint8_t getMipLevels() const
Definition: Texture2D.h:79
const uint32_t width
Definition: Texture2D.h:158
void setMipLevels(const uint8_t mips)
Definition: Texture2D.cpp:38
PLATFORM_API Texture2D(const Type type, const std::string &filename, const uint8_t channels, const uint8_t depth, const uint32_t width, const uint32_t height)
Definition: Texture2D.cpp:25
const uint32_t height
Definition: Texture2D.h:161
void setWrapMode(const TextureWrapMode mode)
Definition: Texture2D.h:138
void setRawData(unsigned char *data, const size_t size, const uint8_t face=0, const uint8_t mip=0)
Definition: Texture2D.cpp:47
const std::string filename
Definition: Texture2D.h:149
const uint8_t depth
Definition: Texture2D.h:155
TextureWrapMode
Definition: Texture2D.h:30