@@ -10,6 +10,7 @@
|
||||
#include "Engine/Graphics/RenderTools.h"
|
||||
#include "Engine/Graphics/Textures/TextureData.h"
|
||||
#include "Engine/Graphics/PixelFormatExtensions.h"
|
||||
#include "Engine/Utilities/AnsiPathTempFile.h"
|
||||
#include "Engine/Platform/File.h"
|
||||
|
||||
#define STBI_ASSERT(x) ASSERT(x)
|
||||
@@ -48,6 +49,18 @@
|
||||
// Compression libs for Editor
|
||||
#include <ThirdParty/detex/detex.h>
|
||||
#include <ThirdParty/bc7enc16/bc7enc16.h>
|
||||
|
||||
// Import tinyexr library
|
||||
// Source: https://github.com/syoyo/tinyexr
|
||||
#define TINYEXR_IMPLEMENTATION
|
||||
#define TINYEXR_USE_MINIZ 1
|
||||
#define TINYEXR_USE_STB_ZLIB 0
|
||||
#define TINYEXR_USE_THREAD 0
|
||||
#define TINYEXR_USE_OPENMP 0
|
||||
#undef min
|
||||
#undef max
|
||||
#include <ThirdParty/tinyexr/tinyexr.h>
|
||||
|
||||
#endif
|
||||
|
||||
static void stbWrite(void* context, void* data, int size)
|
||||
@@ -173,7 +186,7 @@ bool TextureTool::ExportTextureStb(ImageType type, const StringView& path, const
|
||||
{
|
||||
if (textureData.GetArraySize() != 1)
|
||||
{
|
||||
LOG(Warning, "Exporting texture arrays and cubemaps is not supported by stb library.");
|
||||
LOG(Warning, "Exporting texture arrays and cubemaps is not supported.");
|
||||
}
|
||||
TextureData const* texture = &textureData;
|
||||
|
||||
@@ -189,7 +202,7 @@ bool TextureTool::ExportTextureStb(ImageType type, const StringView& path, const
|
||||
const auto sampler = GetSampler(texture->Format);
|
||||
if (sampler == nullptr)
|
||||
{
|
||||
LOG(Warning, "Texture data format {0} is not supported by stb library.", (int32)textureData.Format);
|
||||
LOG(Warning, "Texture data format {0} is not supported.", (int32)textureData.Format);
|
||||
return true;
|
||||
}
|
||||
const auto srcData = texture->GetData(0, 0);
|
||||
@@ -272,16 +285,19 @@ bool TextureTool::ExportTextureStb(ImageType type, const StringView& path, const
|
||||
break;
|
||||
}
|
||||
case ImageType::GIF:
|
||||
LOG(Warning, "GIF format is not supported by stb library.");
|
||||
LOG(Warning, "GIF format is not supported.");
|
||||
break;
|
||||
case ImageType::TIFF:
|
||||
LOG(Warning, "GIF format is not supported by stb library.");
|
||||
LOG(Warning, "GIF format is not supported.");
|
||||
break;
|
||||
case ImageType::DDS:
|
||||
LOG(Warning, "DDS format is not supported by stb library.");
|
||||
LOG(Warning, "DDS format is not supported.");
|
||||
break;
|
||||
case ImageType::RAW:
|
||||
LOG(Warning, "RAW format is not supported by stb library.");
|
||||
LOG(Warning, "RAW format is not supported.");
|
||||
break;
|
||||
case ImageType::EXR:
|
||||
LOG(Warning, "EXR format is not supported.");
|
||||
break;
|
||||
default:
|
||||
LOG(Warning, "Unknown format.");
|
||||
@@ -383,11 +399,49 @@ bool TextureTool::ImportTextureStb(ImageType type, const StringView& path, Textu
|
||||
|
||||
break;
|
||||
}
|
||||
case ImageType::EXR:
|
||||
{
|
||||
#if USE_EDITOR
|
||||
// Load exr file
|
||||
AnsiPathTempFile tempFile(path);
|
||||
float* pixels;
|
||||
int width, height;
|
||||
const char* err = nullptr;
|
||||
int ret = LoadEXR(&pixels, &width, &height, tempFile.Path.Get(), &err);
|
||||
if (ret != TINYEXR_SUCCESS)
|
||||
{
|
||||
if (err)
|
||||
{
|
||||
LOG_STR(Warning, String(err));
|
||||
FreeEXRErrorMessage(err);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Setup texture data
|
||||
textureData.Width = width;
|
||||
textureData.Height = height;
|
||||
textureData.Depth = 1;
|
||||
textureData.Format = PixelFormat::R32G32B32A32_Float;
|
||||
textureData.Items.Resize(1);
|
||||
textureData.Items[0].Mips.Resize(1);
|
||||
auto& mip = textureData.Items[0].Mips[0];
|
||||
mip.RowPitch = width * sizeof(Float4);
|
||||
mip.DepthPitch = mip.RowPitch * height;
|
||||
mip.Lines = height;
|
||||
mip.Data.Copy((const byte*)pixels, mip.DepthPitch);
|
||||
|
||||
free(pixels);
|
||||
#else
|
||||
LOG(Warning, "EXR format is not supported.");
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case ImageType::DDS:
|
||||
LOG(Warning, "DDS format is not supported by stb library.");
|
||||
LOG(Warning, "DDS format is not supported.");
|
||||
break;
|
||||
case ImageType::TIFF:
|
||||
LOG(Warning, "TIFF format is not supported by stb library.");
|
||||
LOG(Warning, "TIFF format is not supported.");
|
||||
break;
|
||||
default:
|
||||
LOG(Warning, "Unknown format.");
|
||||
|
||||
Reference in New Issue
Block a user