13 #ifndef hifi_image_TextureProcessing_h
14 #define hifi_image_TextureProcessing_h
18 #include <gpu/Texture.h>
21 #include <nvtt/nvtt.h>
25 std::function<gpu::uint32(
const glm::vec3&)> getHDRPackingFunction();
26 std::function<glm::vec3(gpu::uint32)> getHDRUnpackingFunction();
27 void convertToFloatFromPacked(
const unsigned char* source,
int width,
int height,
size_t srcLineByteStride, gpu::Element sourceFormat,
28 glm::vec4* output,
size_t outputLinePixelStride);
29 void convertToPackedFromFloat(
unsigned char* output,
int width,
int height,
size_t outputLineByteStride, gpu::Element outputFormat,
30 const glm::vec4* source,
size_t srcLinePixelStride);
32 namespace TextureUsage {
68 METALLIC_TEXTURE = SPECULAR_TEXTURE,
75 SCATTERING_TEXTURE = OCCLUSION_TEXTURE,
80 using TextureLoader = std::function<gpu::TexturePointer(Image&&,
const std::string&,
bool, gpu::BackendTarget,
const std::atomic<bool>&)>;
81 TextureLoader getTextureLoaderForType(Type type);
83 gpu::TexturePointer create2DTextureFromImage(Image&& image,
const std::string& srcImageName,
84 bool compress, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing);
85 gpu::TexturePointer createStrict2DTextureFromImage(Image&& image,
const std::string& srcImageName,
86 bool compress, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing);
87 gpu::TexturePointer createAlbedoTextureFromImage(Image&& image,
const std::string& srcImageName,
88 bool compress, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing);
89 gpu::TexturePointer createEmissiveTextureFromImage(Image&& image,
const std::string& srcImageName,
90 bool compress, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing);
91 gpu::TexturePointer createNormalTextureFromNormalImage(Image&& image,
const std::string& srcImageName,
92 bool compress, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing);
93 gpu::TexturePointer createNormalTextureFromBumpImage(Image&& image,
const std::string& srcImageName,
94 bool compress, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing);
95 gpu::TexturePointer createRoughnessTextureFromImage(Image&& image,
const std::string& srcImageName,
96 bool compress, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing);
97 gpu::TexturePointer createRoughnessTextureFromGlossImage(Image&& image,
const std::string& srcImageName,
98 bool compress, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing);
99 gpu::TexturePointer createMetallicTextureFromImage(Image&& image,
const std::string& srcImageName,
100 bool compress, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing);
101 gpu::TexturePointer createCubeTextureFromImage(Image&& image,
const std::string& srcImageName,
102 bool compress, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing);
103 gpu::TexturePointer createAmbientCubeTextureAndIrradianceFromImage(Image&& image,
const std::string& srcImageName,
104 bool compress, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing);
105 gpu::TexturePointer createLightmapTextureFromImage(Image&& image,
const std::string& srcImageName,
106 bool compress, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing);
107 gpu::TexturePointer process2DTextureColorFromImage(Image&& srcImage,
const std::string& srcImageName,
bool compress,
108 gpu::BackendTarget target,
bool isStrict,
const std::atomic<bool>& abortProcessing);
109 gpu::TexturePointer process2DHDRTextureColorFromImage(Image&& srcImage,
const std::string& srcImageName,
bool compress,
110 gpu::BackendTarget target,
bool isStrict,
const std::atomic<bool>& abortProcessing);
111 gpu::TexturePointer process2DTextureNormalMapFromImage(Image&& srcImage,
const std::string& srcImageName,
bool compress,
112 gpu::BackendTarget target,
bool isBumpMap,
const std::atomic<bool>& abortProcessing);
113 gpu::TexturePointer process2DTextureGrayscaleFromImage(Image&& srcImage,
const std::string& srcImageName,
bool compress,
114 gpu::BackendTarget target,
bool isInvertedPixels,
const std::atomic<bool>& abortProcessing);
116 enum CubeTextureOptions {
118 CUBE_GENERATE_IRRADIANCE = 0x1,
119 CUBE_GGX_CONVOLVE = 0x2
121 gpu::TexturePointer processCubeTextureColorFromImage(Image&& srcImage,
const std::string& srcImageName,
bool compress,
122 gpu::BackendTarget target,
int option,
const std::atomic<bool>& abortProcessing);
125 const QStringList getSupportedFormats();
127 std::pair<gpu::TexturePointer, glm::ivec2> processImage(std::shared_ptr<QIODevice> content,
const std::string& url, ColorChannel sourceChannel,
128 int maxNumPixels, TextureUsage::Type textureType,
129 bool compress, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing =
false);
131 void convertToTextureWithMips(gpu::Texture* texture, Image&& image, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing =
false,
int face = -1);
132 void convertToTexture(gpu::Texture* texture, Image&& image, gpu::BackendTarget target,
const std::atomic<bool>& abortProcessing =
false,
int face = -1,
int mipLevel = 0);
133 Image convertToHDRFormat(Image&& srcImage, gpu::Element format);
134 Image convertToLDRFormat(Image&& srcImage, Image::Format format);