diff --git a/src/Nazara/Utility/Loaders/MD5Anim/Parser.hpp b/include/Nazara/Utility/Formats/MD5AnimParser.hpp similarity index 91% rename from src/Nazara/Utility/Loaders/MD5Anim/Parser.hpp rename to include/Nazara/Utility/Formats/MD5AnimParser.hpp index 8dc57fe28..f962e489c 100644 --- a/src/Nazara/Utility/Loaders/MD5Anim/Parser.hpp +++ b/include/Nazara/Utility/Formats/MD5AnimParser.hpp @@ -4,8 +4,8 @@ #pragma once -#ifndef NAZARA_LOADERS_MD5ANIM_PARSER_HPP -#define NAZARA_LOADERS_MD5ANIM_PARSER_HPP +#ifndef NAZARA_FORMATS_MD5ANIMPARSER_HPP +#define NAZARA_FORMATS_MD5ANIMPARSER_HPP #include #include @@ -15,7 +15,7 @@ #include #include -class NzMD5AnimParser +class NAZARA_API NzMD5AnimParser { public: struct FrameJoint @@ -76,4 +76,4 @@ class NzMD5AnimParser unsigned int m_streamFlags; }; -#endif // NAZARA_LOADERS_MD5ANIM_PARSER_HPP +#endif // NAZARA_FORMATS_MD5ANIMPARSER_HPP diff --git a/src/Nazara/Utility/Loaders/MD5Mesh/Parser.hpp b/include/Nazara/Utility/Formats/MD5MeshParser.hpp similarity index 91% rename from src/Nazara/Utility/Loaders/MD5Mesh/Parser.hpp rename to include/Nazara/Utility/Formats/MD5MeshParser.hpp index 647779b1c..345c48296 100644 --- a/src/Nazara/Utility/Loaders/MD5Mesh/Parser.hpp +++ b/include/Nazara/Utility/Formats/MD5MeshParser.hpp @@ -4,8 +4,8 @@ #pragma once -#ifndef NAZARA_LOADERS_MD5MESH_PARSER_HPP -#define NAZARA_LOADERS_MD5MESH_PARSER_HPP +#ifndef NAZARA_FORMATS_MD5MESHPARSER_HPP +#define NAZARA_FORMATS_MD5MESHPARSER_HPP #include #include @@ -15,7 +15,7 @@ #include #include -class NzMD5MeshParser +class NAZARA_API NzMD5MeshParser { public: struct Joint @@ -80,4 +80,4 @@ class NzMD5MeshParser unsigned int m_streamFlags; }; -#endif // NAZARA_LOADERS_MD5MESH_PARSER_HPP +#endif // NAZARA_FORMATS_MD5MESHPARSER_HPP diff --git a/src/Nazara/Graphics/Loaders/OBJ/MTLParser.hpp b/include/Nazara/Utility/Formats/MTLParser.hpp similarity index 82% rename from src/Nazara/Graphics/Loaders/OBJ/MTLParser.hpp rename to include/Nazara/Utility/Formats/MTLParser.hpp index 5bfbef6d0..2d5220436 100644 --- a/src/Nazara/Graphics/Loaders/OBJ/MTLParser.hpp +++ b/include/Nazara/Utility/Formats/MTLParser.hpp @@ -1,11 +1,11 @@ // Copyright (C) 2015 Jérôme Leclercq -// This file is part of the "Nazara Engine - Graphics module" +// This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once -#ifndef NAZARA_LOADERS_OBJ_MTLPARSER_HPP -#define NAZARA_LOADERS_OBJ_MTLPARSER_HPP +#ifndef NAZARA_FORMATS_MTLPARSER_HPP +#define NAZARA_FORMATS_MTLPARSER_HPP #include #include @@ -13,7 +13,7 @@ #include #include -class NzMTLParser +class NAZARA_API NzMTLParser { public: struct Material @@ -40,6 +40,7 @@ class NzMTLParser ~NzMTLParser(); const Material* GetMaterial(const NzString& materialName) const; + const std::unordered_map& GetMaterials() const; bool Parse(); @@ -57,4 +58,4 @@ class NzMTLParser unsigned int m_streamFlags; }; -#endif // NAZARA_LOADERS_OBJ_MTLPARSER_HPP +#endif // NAZARA_FORMATS_MTLPARSER_HPP diff --git a/src/Nazara/Graphics/Loaders/OBJ/OBJParser.hpp b/include/Nazara/Utility/Formats/OBJParser.hpp similarity index 89% rename from src/Nazara/Graphics/Loaders/OBJ/OBJParser.hpp rename to include/Nazara/Utility/Formats/OBJParser.hpp index 512eda666..18c0814a6 100644 --- a/src/Nazara/Graphics/Loaders/OBJ/OBJParser.hpp +++ b/include/Nazara/Utility/Formats/OBJParser.hpp @@ -1,11 +1,11 @@ // Copyright (C) 2015 Jérôme Leclercq -// This file is part of the "Nazara Engine - Graphics module" +// This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once -#ifndef NAZARA_LOADERS_OBJ_OBJPARSER_HPP -#define NAZARA_LOADERS_OBJ_OBJPARSER_HPP +#ifndef NAZARA_FORMATS_OBJPARSER_HPP +#define NAZARA_FORMATS_OBJPARSER_HPP #include #include @@ -72,4 +72,4 @@ class NzOBJParser unsigned int m_streamFlags; }; -#endif // NAZARA_LOADERS_OBJ_OBJPARSER_HPP +#endif // NAZARA_FORMATS_OBJPARSER_HPP diff --git a/src/Nazara/Audio/Audio.cpp b/src/Nazara/Audio/Audio.cpp index 7f305e3e1..6b539a33a 100644 --- a/src/Nazara/Audio/Audio.cpp +++ b/src/Nazara/Audio/Audio.cpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/Nazara/Audio/Loaders/sndfile/Loader.cpp b/src/Nazara/Audio/Formats/sndfileLoader.cpp similarity index 99% rename from src/Nazara/Audio/Loaders/sndfile/Loader.cpp rename to src/Nazara/Audio/Formats/sndfileLoader.cpp index 140798a80..012b2258e 100644 --- a/src/Nazara/Audio/Loaders/sndfile/Loader.cpp +++ b/src/Nazara/Audio/Formats/sndfileLoader.cpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Audio module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include #include #include diff --git a/src/Nazara/Audio/Loaders/sndfile.hpp b/src/Nazara/Audio/Formats/sndfileLoader.hpp similarity index 100% rename from src/Nazara/Audio/Loaders/sndfile.hpp rename to src/Nazara/Audio/Formats/sndfileLoader.hpp diff --git a/src/Nazara/Graphics/Loaders/Mesh/Loader.cpp b/src/Nazara/Graphics/Formats/MeshLoader.cpp similarity index 98% rename from src/Nazara/Graphics/Loaders/Mesh/Loader.cpp rename to src/Nazara/Graphics/Formats/MeshLoader.cpp index 9c5a83d80..7006631e4 100644 --- a/src/Nazara/Graphics/Loaders/Mesh/Loader.cpp +++ b/src/Nazara/Graphics/Formats/MeshLoader.cpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Graphics module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include #include #include diff --git a/src/Nazara/Graphics/Loaders/Mesh.hpp b/src/Nazara/Graphics/Formats/MeshLoader.hpp similarity index 100% rename from src/Nazara/Graphics/Loaders/Mesh.hpp rename to src/Nazara/Graphics/Formats/MeshLoader.hpp diff --git a/src/Nazara/Graphics/Loaders/OBJ/Loader.cpp b/src/Nazara/Graphics/Formats/OBJLoader.cpp similarity index 98% rename from src/Nazara/Graphics/Loaders/OBJ/Loader.cpp rename to src/Nazara/Graphics/Formats/OBJLoader.cpp index 190517f72..0b500a4b0 100644 --- a/src/Nazara/Graphics/Loaders/OBJ/Loader.cpp +++ b/src/Nazara/Graphics/Formats/OBJLoader.cpp @@ -2,13 +2,13 @@ // This file is part of the "Nazara Engine - Graphics module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include #include #include #include -#include -#include +#include +#include #include #include #include diff --git a/src/Nazara/Graphics/Loaders/OBJ.hpp b/src/Nazara/Graphics/Formats/OBJLoader.hpp similarity index 100% rename from src/Nazara/Graphics/Loaders/OBJ.hpp rename to src/Nazara/Graphics/Formats/OBJLoader.hpp diff --git a/src/Nazara/Graphics/Loaders/Texture/Loader.cpp b/src/Nazara/Graphics/Formats/TextureLoader.cpp similarity index 95% rename from src/Nazara/Graphics/Loaders/Texture/Loader.cpp rename to src/Nazara/Graphics/Formats/TextureLoader.cpp index 07629ceb3..7fb68e226 100644 --- a/src/Nazara/Graphics/Loaders/Texture/Loader.cpp +++ b/src/Nazara/Graphics/Formats/TextureLoader.cpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Graphics module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include #include #include diff --git a/src/Nazara/Graphics/Loaders/Texture.hpp b/src/Nazara/Graphics/Formats/TextureLoader.hpp similarity index 100% rename from src/Nazara/Graphics/Loaders/Texture.hpp rename to src/Nazara/Graphics/Formats/TextureLoader.hpp diff --git a/src/Nazara/Graphics/Graphics.cpp b/src/Nazara/Graphics/Graphics.cpp index d04f83d24..691423019 100644 --- a/src/Nazara/Graphics/Graphics.cpp +++ b/src/Nazara/Graphics/Graphics.cpp @@ -17,9 +17,9 @@ #include #include #include -#include -#include -#include +#include +#include +#include #include #include #include diff --git a/src/Nazara/Utility/Formats/DDSConstants.hpp b/src/Nazara/Utility/Formats/DDSConstants.hpp new file mode 100644 index 000000000..4c1bd28ce --- /dev/null +++ b/src/Nazara/Utility/Formats/DDSConstants.hpp @@ -0,0 +1,374 @@ +// Copyright (C) 2009 Cruden BV - 2014 Jérôme Leclercq +// This file is part of the "Nazara Engine - Utility module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NAZARA_LOADERS_DDS_CONSTANTS_HPP +#define NAZARA_LOADERS_DDS_CONSTANTS_HPP + +#define DDS_MAGIC 0x20534444 +#define DDS_DXT1 0x31545844 +#define DDS_DXT3 0x33545844 +#define DDS_DXT5 0x35545844 + +inline constexpr nzUInt32 FourCC(nzUInt32 a, nzUInt32 b, nzUInt32 c, nzUInt32 d) +{ + return a << 0 | + b << 8 | + c << 16 | + d << 24; +} + +enum D3D10_RESOURCE_DIMENSION : nzUInt32 +{ + D3D10_RESOURCE_DIMENSION_UNKNOWN = 0, + D3D10_RESOURCE_DIMENSION_BUFFER = 1, + D3D10_RESOURCE_DIMENSION_TEXTURE1D = 2, + D3D10_RESOURCE_DIMENSION_TEXTURE2D = 3, + D3D10_RESOURCE_DIMENSION_TEXTURE3D = 4 +}; + +enum D3D10_RESOURCE_MISC +{ + D3D10_RESOURCE_MISC_GENERATE_MIPS = 0x1L, + D3D10_RESOURCE_MISC_SHARED = 0x2L, + D3D10_RESOURCE_MISC_TEXTURECUBE = 0x4L, + D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX = 0x10L, + D3D10_RESOURCE_MISC_GDI_COMPATIBLE = 0x20L +}; + +enum D3DFMT : nzUInt32 +{ + D3DFMT_UNKNOWN = 0, + + D3DFMT_R8G8B8 = 20, + D3DFMT_A8R8G8B8 = 21, + D3DFMT_X8R8G8B8 = 22, + D3DFMT_R5G6B5 = 23, + D3DFMT_X1R5G5B5 = 24, + D3DFMT_A1R5G5B5 = 25, + D3DFMT_A4R4G4B4 = 26, + D3DFMT_R3G3B2 = 27, + D3DFMT_A8 = 28, + D3DFMT_A8R3G3B2 = 29, + D3DFMT_X4R4G4B4 = 30, + D3DFMT_A2B10G10R10 = 31, + D3DFMT_A8B8G8R8 = 32, + D3DFMT_X8B8G8R8 = 33, + D3DFMT_G16R16 = 34, + D3DFMT_A2R10G10B10 = 35, + D3DFMT_A16B16G16R16 = 36, + + D3DFMT_A8P8 = 40, + D3DFMT_P8 = 41, + + D3DFMT_L8 = 50, + D3DFMT_A8L8 = 51, + D3DFMT_A4L4 = 52, + + D3DFMT_V8U8 = 60, + D3DFMT_L6V5U5 = 61, + D3DFMT_X8L8V8U8 = 62, + D3DFMT_Q8W8V8U8 = 63, + D3DFMT_V16U16 = 64, + D3DFMT_A2W10V10U10 = 67, + + D3DFMT_UYVY = FourCC('U', 'Y', 'V', 'Y'), + D3DFMT_R8G8_B8G8 = FourCC('R', 'G', 'B', 'G'), + D3DFMT_YUY2 = FourCC('Y', 'U', 'Y', '2'), + D3DFMT_G8R8_G8B8 = FourCC('G', 'R', 'G', 'B'), + D3DFMT_DXT1 = FourCC('D', 'X', 'T', '1'), + D3DFMT_DXT2 = FourCC('D', 'X', 'T', '2'), + D3DFMT_DXT3 = FourCC('D', 'X', 'T', '3'), + D3DFMT_DXT4 = FourCC('D', 'X', 'T', '4'), + D3DFMT_DXT5 = FourCC('D', 'X', 'T', '5'), + + D3DFMT_D16_LOCKABLE = 70, + D3DFMT_D32 = 71, + D3DFMT_D15S1 = 73, + D3DFMT_D24S8 = 75, + D3DFMT_D24X8 = 77, + D3DFMT_D24X4S4 = 79, + D3DFMT_D16 = 80, + + D3DFMT_D32F_LOCKABLE = 82, + D3DFMT_D24FS8 = 83, + + D3DFMT_L16 = 81, + + D3DFMT_VERTEXDATA = 100, + D3DFMT_INDEX16 = 101, + D3DFMT_INDEX32 = 102, + + D3DFMT_Q16W16V16U16 = 110, + + D3DFMT_MULTI2_ARGB8 = FourCC('M','E','T','1'), + + D3DFMT_R16F = 111, + D3DFMT_G16R16F = 112, + D3DFMT_A16B16G16R16F = 113, + + D3DFMT_R32F = 114, + D3DFMT_G32R32F = 115, + D3DFMT_A32B32G32R32F = 116, + + D3DFMT_CxV8U8 = 117, + + D3DFMT_DX10 = FourCC('D', 'X', '1', '0') +}; + +enum DDPF +{ + DDPF_ALPHAPIXELS = 0x00001, + DDPF_ALPHA = 0x00002, + DDPF_FOURCC = 0x00004, + DDPF_RGB = 0x00040, + DDPF_YUV = 0x00200, + DDPF_LUMINANCE = 0x20000 +}; + +enum DDSD +{ + DDSD_CAPS = 0x00000001, + DDSD_HEIGHT = 0x00000002, + DDSD_WIDTH = 0x00000004, + DDSD_PITCH = 0x00000008, + DDSD_PIXELFORMAT = 0x00001000, + DDSD_MIPMAPCOUNT = 0x00020000, + DDSD_LINEARSIZE = 0x00080000, + DDSD_DEPTH = 0x00800000 +}; + +enum DDSCAPS +{ + DDSCAPS_COMPLEX = 0x00000008, + DDSCAPS_MIPMAP = 0x00400000, + DDSCAPS_TEXTURE = 0x00001000 +}; + +enum DDSCAPS2 +{ + DDSCAPS2_CUBEMAP = 0x00000200, + DDSCAPS2_CUBEMAP_POSITIVEX = 0x00000400, + DDSCAPS2_CUBEMAP_NEGATIVEX = 0x00000800, + DDSCAPS2_CUBEMAP_POSITIVEY = 0x00001000, + DDSCAPS2_CUBEMAP_NEGATIVEY = 0x00002000, + DDSCAPS2_CUBEMAP_POSITIVEZ = 0x00004000, + DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x00008000, + DDSCAPS2_VOLUME = 0x00200000 +}; + +enum DDS_COLOR +{ + DDS_COLOR_DEFAULT = 0, + DDS_COLOR_DISTANCE, + DDS_COLOR_LUMINANCE, + DDS_COLOR_INSET_BBOX, + DDS_COLOR_MAX +}; + +enum DDS_COMPRESS +{ + DDS_COMPRESS_NONE = 0, + DDS_COMPRESS_BC1, /* DXT1 */ + DDS_COMPRESS_BC2, /* DXT3 */ + DDS_COMPRESS_BC3, /* DXT5 */ + DDS_COMPRESS_BC3N, /* DXT5n */ + DDS_COMPRESS_BC4, /* ATI1 */ + DDS_COMPRESS_BC5, /* ATI2 */ + DDS_COMPRESS_AEXP, /* DXT5 */ + DDS_COMPRESS_YCOCG, /* DXT5 */ + DDS_COMPRESS_YCOCGS, /* DXT5 */ + DDS_COMPRESS_MAX +}; + +enum DDS_FORMAT +{ + DDS_FORMAT_DEFAULT = 0, + DDS_FORMAT_RGB8, + DDS_FORMAT_RGBA8, + DDS_FORMAT_BGR8, + DDS_FORMAT_ABGR8, + DDS_FORMAT_R5G6B5, + DDS_FORMAT_RGBA4, + DDS_FORMAT_RGB5A1, + DDS_FORMAT_RGB10A2, + DDS_FORMAT_R3G3B2, + DDS_FORMAT_A8, + DDS_FORMAT_L8, + DDS_FORMAT_L8A8, + DDS_FORMAT_AEXP, + DDS_FORMAT_YCOCG, + DDS_FORMAT_MAX +}; + +enum DDS_MIPMAP +{ + DDS_MIPMAP_DEFAULT = 0, + DDS_MIPMAP_NEAREST, + DDS_MIPMAP_BOX, + DDS_MIPMAP_BILINEAR, + DDS_MIPMAP_BICUBIC, + DDS_MIPMAP_LANCZOS, + DDS_MIPMAP_MAX +}; + +enum DDS_SAVE +{ + DDS_SAVE_SELECTED_LAYER = 0, + DDS_SAVE_CUBEMAP, + DDS_SAVE_VOLUMEMAP, + DDS_SAVE_MAX +}; + +enum DXGI_FORMAT : nzUInt32 +{ + DXGI_FORMAT_UNKNOWN = 0, + DXGI_FORMAT_R32G32B32A32_TYPELESS = 1, + DXGI_FORMAT_R32G32B32A32_FLOAT = 2, + DXGI_FORMAT_R32G32B32A32_UINT = 3, + DXGI_FORMAT_R32G32B32A32_SINT = 4, + DXGI_FORMAT_R32G32B32_TYPELESS = 5, + DXGI_FORMAT_R32G32B32_FLOAT = 6, + DXGI_FORMAT_R32G32B32_UINT = 7, + DXGI_FORMAT_R32G32B32_SINT = 8, + DXGI_FORMAT_R16G16B16A16_TYPELESS = 9, + DXGI_FORMAT_R16G16B16A16_FLOAT = 10, + DXGI_FORMAT_R16G16B16A16_UNORM = 11, + DXGI_FORMAT_R16G16B16A16_UINT = 12, + DXGI_FORMAT_R16G16B16A16_SNORM = 13, + DXGI_FORMAT_R16G16B16A16_SINT = 14, + DXGI_FORMAT_R32G32_TYPELESS = 15, + DXGI_FORMAT_R32G32_FLOAT = 16, + DXGI_FORMAT_R32G32_UINT = 17, + DXGI_FORMAT_R32G32_SINT = 18, + DXGI_FORMAT_R32G8X24_TYPELESS = 19, + DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20, + DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 21, + DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22, + DXGI_FORMAT_R10G10B10A2_TYPELESS = 23, + DXGI_FORMAT_R10G10B10A2_UNORM = 24, + DXGI_FORMAT_R10G10B10A2_UINT = 25, + DXGI_FORMAT_R11G11B10_FLOAT = 26, + DXGI_FORMAT_R8G8B8A8_TYPELESS = 27, + DXGI_FORMAT_R8G8B8A8_UNORM = 28, + DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29, + DXGI_FORMAT_R8G8B8A8_UINT = 30, + DXGI_FORMAT_R8G8B8A8_SNORM = 31, + DXGI_FORMAT_R8G8B8A8_SINT = 32, + DXGI_FORMAT_R16G16_TYPELESS = 33, + DXGI_FORMAT_R16G16_FLOAT = 34, + DXGI_FORMAT_R16G16_UNORM = 35, + DXGI_FORMAT_R16G16_UINT = 36, + DXGI_FORMAT_R16G16_SNORM = 37, + DXGI_FORMAT_R16G16_SINT = 38, + DXGI_FORMAT_R32_TYPELESS = 39, + DXGI_FORMAT_D32_FLOAT = 40, + DXGI_FORMAT_R32_FLOAT = 41, + DXGI_FORMAT_R32_UINT = 42, + DXGI_FORMAT_R32_SINT = 43, + DXGI_FORMAT_R24G8_TYPELESS = 44, + DXGI_FORMAT_D24_UNORM_S8_UINT = 45, + DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46, + DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47, + DXGI_FORMAT_R8G8_TYPELESS = 48, + DXGI_FORMAT_R8G8_UNORM = 49, + DXGI_FORMAT_R8G8_UINT = 50, + DXGI_FORMAT_R8G8_SNORM = 51, + DXGI_FORMAT_R8G8_SINT = 52, + DXGI_FORMAT_R16_TYPELESS = 53, + DXGI_FORMAT_R16_FLOAT = 54, + DXGI_FORMAT_D16_UNORM = 55, + DXGI_FORMAT_R16_UNORM = 56, + DXGI_FORMAT_R16_UINT = 57, + DXGI_FORMAT_R16_SNORM = 58, + DXGI_FORMAT_R16_SINT = 59, + DXGI_FORMAT_R8_TYPELESS = 60, + DXGI_FORMAT_R8_UNORM = 61, + DXGI_FORMAT_R8_UINT = 62, + DXGI_FORMAT_R8_SNORM = 63, + DXGI_FORMAT_R8_SINT = 64, + DXGI_FORMAT_A8_UNORM = 65, + DXGI_FORMAT_R1_UNORM = 66, + DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67, + DXGI_FORMAT_R8G8_B8G8_UNORM = 68, + DXGI_FORMAT_G8R8_G8B8_UNORM = 69, + DXGI_FORMAT_BC1_TYPELESS = 70, + DXGI_FORMAT_BC1_UNORM = 71, + DXGI_FORMAT_BC1_UNORM_SRGB = 72, + DXGI_FORMAT_BC2_TYPELESS = 73, + DXGI_FORMAT_BC2_UNORM = 74, + DXGI_FORMAT_BC2_UNORM_SRGB = 75, + DXGI_FORMAT_BC3_TYPELESS = 76, + DXGI_FORMAT_BC3_UNORM = 77, + DXGI_FORMAT_BC3_UNORM_SRGB = 78, + DXGI_FORMAT_BC4_TYPELESS = 79, + DXGI_FORMAT_BC4_UNORM = 80, + DXGI_FORMAT_BC4_SNORM = 81, + DXGI_FORMAT_BC5_TYPELESS = 82, + DXGI_FORMAT_BC5_UNORM = 83, + DXGI_FORMAT_BC5_SNORM = 84, + DXGI_FORMAT_B5G6R5_UNORM = 85, + DXGI_FORMAT_B5G5R5A1_UNORM = 86, + DXGI_FORMAT_B8G8R8A8_UNORM = 87, + DXGI_FORMAT_B8G8R8X8_UNORM = 88, + DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89, + DXGI_FORMAT_B8G8R8A8_TYPELESS = 90, + DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91, + DXGI_FORMAT_B8G8R8X8_TYPELESS = 92, + DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93, + DXGI_FORMAT_BC6H_TYPELESS = 94, + DXGI_FORMAT_BC6H_UF16 = 95, + DXGI_FORMAT_BC6H_SF16 = 96, + DXGI_FORMAT_BC7_TYPELESS = 97, + DXGI_FORMAT_BC7_UNORM = 98, + DXGI_FORMAT_BC7_UNORM_SRGB = 99 +}; + +struct DDSPixelFormat // DDPIXELFORMAT +{ + nzUInt32 size; + nzUInt32 flags; + nzUInt32 fourCC; + nzUInt32 bpp; + nzUInt32 redMask; + nzUInt32 greenMask; + nzUInt32 blueMask; + nzUInt32 alphaMask; +}; + +static_assert(sizeof(DDSPixelFormat) == 8*sizeof(nzUInt32), "DDSPixelFormat must be packed"); + +struct DDSHeader +{ + nzUInt32 size; + nzUInt32 flags; + nzUInt32 height; + nzUInt32 width; + nzUInt32 pitch; + nzUInt32 depth; + nzUInt32 levelCount; + nzUInt32 reserved1[11]; + DDSPixelFormat format; + nzUInt32 ddsCaps1; + nzUInt32 ddsCaps2; + nzUInt32 ddsCaps3; + nzUInt32 ddsCaps4; + nzUInt32 reserved2; +}; + +static_assert(sizeof(DDSHeader) == 23*sizeof(nzUInt32) + sizeof(DDSPixelFormat), "DDSHeader must be packed"); + +struct DDSHeaderDX10Ext +{ + DXGI_FORMAT dxgiFormat; + D3D10_RESOURCE_DIMENSION resourceDimension; + nzUInt32 miscFlag; + nzUInt32 arraySize; + nzUInt32 reserved; +}; + +static_assert(sizeof(DDSHeaderDX10Ext) == 5*sizeof(nzUInt32), "DDSHeaderDX10Ext must be packed"); + +#endif // NAZARA_LOADERS_DDS_CONSTANTS_HPP diff --git a/src/Nazara/Utility/Formats/DDSLoader.cpp b/src/Nazara/Utility/Formats/DDSLoader.cpp new file mode 100644 index 000000000..196f94ae6 --- /dev/null +++ b/src/Nazara/Utility/Formats/DDSLoader.cpp @@ -0,0 +1,123 @@ +// Copyright (C) 2015 Jérôme Leclercq - 2009 Cruden BV +// This file is part of the "Nazara Engine - Utility module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace +{ + bool IsSupported(const NzString& extension) + { + return (extension == "dds"); + } + + nzTernary Check(NzInputStream& stream, const NzImageParams& parameters) + { + NazaraUnused(parameters); + + nzUInt32 magic; + if (stream.Read(&magic, sizeof(nzUInt32)) == sizeof(nzUInt32)) + { + #ifdef NAZARA_BIG_ENDIAN + NzByteSwap(&magic, sizeof(nzUInt32)); + #endif + + if (magic == DDS_MAGIC) + return nzTernary_True; + } + + return nzTernary_False; + } + + bool Load(NzImage* image, NzInputStream& stream, const NzImageParams& parameters) + { + NazaraUnused(parameters); + + DDSHeader header; + if (stream.Read(&header, sizeof(DDSHeader)) != sizeof(DDSHeader)) + { + NazaraError("Failed to read DDS header"); + return false; + } + + DDSHeaderDX10Ext headerDX10; + if (header.format.flags & DDPF_FOURCC && header.format.fourCC == D3DFMT_DX10) + { + if (stream.Read(&headerDX10, sizeof(DDSHeaderDX10Ext)) != sizeof(DDSHeaderDX10Ext)) + { + NazaraError("Failed to read DDS DX10 extension header"); + return false; + } + } + else + { + headerDX10.arraySize = 1; + headerDX10.dxgiFormat = DXGI_FORMAT_UNKNOWN; + headerDX10.miscFlag = 0; + headerDX10.resourceDimension = D3D10_RESOURCE_DIMENSION_UNKNOWN; + } + + #ifdef NAZARA_BIG_ENDIAN + // Les fichiers DDS sont en little endian + NzByteSwap(&header.size, sizeof(nzUInt32)); + NzByteSwap(&header.flags, sizeof(nzUInt32)); + NzByteSwap(&header.height, sizeof(nzUInt32)); + NzByteSwap(&header.width, sizeof(nzUInt32)); + NzByteSwap(&header.pitch, sizeof(nzUInt32)); + NzByteSwap(&header.depth, sizeof(nzUInt32)); + NzByteSwap(&header.levelCount, sizeof(nzUInt32)); + + // DDS_PixelFormat + NzByteSwap(&header.format.size, sizeof(nzUInt32)); + NzByteSwap(&header.format.flags, sizeof(nzUInt32)); + NzByteSwap(&header.format.fourCC, sizeof(nzUInt32)); + NzByteSwap(&header.format.bpp, sizeof(nzUInt32)); + NzByteSwap(&header.format.redMask, sizeof(nzUInt32)); + NzByteSwap(&header.format.greenMask, sizeof(nzUInt32)); + NzByteSwap(&header.format.blueMask, sizeof(nzUInt32)); + NzByteSwap(&header.format.alphaMask, sizeof(nzUInt32)); + + NzByteSwap(&header.ddsCaps1, sizeof(nzUInt32)); + NzByteSwap(&header.ddsCaps2, sizeof(nzUInt32)); + NzByteSwap(&header.ddsCaps3, sizeof(nzUInt32)); + NzByteSwap(&header.ddsCaps4, sizeof(nzUInt32)); + #endif + + unsigned int width = header.width; + unsigned int height = header.height; + unsigned int depth = std::max(header.depth, 1U); + unsigned int levelCount = (parameters.levelCount > 0) ? std::min(parameters.levelCount, static_cast(header.levelCount)) : header.levelCount; + + // Détermination du type + nzImageType type; + if (header.ddsCaps2 & DDSCAPS2_CUBEMAP) + type = nzImageType_Cubemap; + else if (header.ddsCaps2 & DDSCAPS2_VOLUME) + type = nzImageType_3D; + + // Détermination du format + nzPixelFormat format; + + if (parameters.loadFormat != nzPixelFormat_Undefined) + image->Convert(parameters.loadFormat); + + return true; + } +} + +void NzLoaders_DDS_Register() +{ + NzImageLoader::RegisterLoader(IsSupported, Check, Load); +} + +void NzLoaders_DDS_Unregister() +{ + NzImageLoader::UnregisterLoader(IsSupported, Check, Load); +} diff --git a/src/Nazara/Utility/Formats/DDSLoader.hpp b/src/Nazara/Utility/Formats/DDSLoader.hpp new file mode 100644 index 000000000..9986e2a34 --- /dev/null +++ b/src/Nazara/Utility/Formats/DDSLoader.hpp @@ -0,0 +1,15 @@ +// Copyright (C) 2015 Jérôme Leclercq +// This file is part of the "Nazara Engine - Utility module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NAZARA_LOADERS_DDS_HPP +#define NAZARA_LOADERS_DDS_HPP + +#include + +void NzLoaders_DDS_Register(); +void NzLoaders_DDS_Unregister(); + +#endif // NAZARA_LOADERS_DDS_HPP diff --git a/src/Nazara/Utility/Loaders/FreeType/Loader.cpp b/src/Nazara/Utility/Formats/FreeTypeLoader.cpp similarity index 99% rename from src/Nazara/Utility/Loaders/FreeType/Loader.cpp rename to src/Nazara/Utility/Formats/FreeTypeLoader.cpp index 87df982d2..bbdfa8597 100644 --- a/src/Nazara/Utility/Loaders/FreeType/Loader.cpp +++ b/src/Nazara/Utility/Formats/FreeTypeLoader.cpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include #include FT_FREETYPE_H #include FT_BITMAP_H diff --git a/src/Nazara/Utility/Loaders/FreeType.hpp b/src/Nazara/Utility/Formats/FreeTypeLoader.hpp similarity index 100% rename from src/Nazara/Utility/Loaders/FreeType.hpp rename to src/Nazara/Utility/Formats/FreeTypeLoader.hpp diff --git a/src/Nazara/Utility/Loaders/MD2/Constants.cpp b/src/Nazara/Utility/Formats/MD2Constants.cpp similarity index 99% rename from src/Nazara/Utility/Loaders/MD2/Constants.cpp rename to src/Nazara/Utility/Formats/MD2Constants.cpp index aee90f183..dde0cb7bd 100644 --- a/src/Nazara/Utility/Loaders/MD2/Constants.cpp +++ b/src/Nazara/Utility/Formats/MD2Constants.cpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include const nzUInt32 md2Ident = 'I' + ('D'<<8) + ('P'<<16) + ('2'<<24); diff --git a/src/Nazara/Utility/Loaders/MD2/Constants.hpp b/src/Nazara/Utility/Formats/MD2Constants.hpp similarity index 100% rename from src/Nazara/Utility/Loaders/MD2/Constants.hpp rename to src/Nazara/Utility/Formats/MD2Constants.hpp diff --git a/src/Nazara/Utility/Loaders/MD2/Loader.cpp b/src/Nazara/Utility/Formats/MD2Loader.cpp similarity index 98% rename from src/Nazara/Utility/Loaders/MD2/Loader.cpp rename to src/Nazara/Utility/Formats/MD2Loader.cpp index 2b32eee17..5872b4292 100644 --- a/src/Nazara/Utility/Loaders/MD2/Loader.cpp +++ b/src/Nazara/Utility/Formats/MD2Loader.cpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include #include #include @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/Nazara/Utility/Loaders/MD2.hpp b/src/Nazara/Utility/Formats/MD2Loader.hpp similarity index 100% rename from src/Nazara/Utility/Loaders/MD2.hpp rename to src/Nazara/Utility/Formats/MD2Loader.hpp diff --git a/src/Nazara/Utility/Loaders/MD5Anim/Loader.cpp b/src/Nazara/Utility/Formats/MD5AnimLoader.cpp similarity index 96% rename from src/Nazara/Utility/Loaders/MD5Anim/Loader.cpp rename to src/Nazara/Utility/Formats/MD5AnimLoader.cpp index 1fe7c6396..2ff789575 100644 --- a/src/Nazara/Utility/Loaders/MD5Anim/Loader.cpp +++ b/src/Nazara/Utility/Formats/MD5AnimLoader.cpp @@ -2,8 +2,8 @@ // This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include -#include +#include +#include #include namespace diff --git a/src/Nazara/Utility/Loaders/MD5Anim.hpp b/src/Nazara/Utility/Formats/MD5AnimLoader.hpp similarity index 100% rename from src/Nazara/Utility/Loaders/MD5Anim.hpp rename to src/Nazara/Utility/Formats/MD5AnimLoader.hpp diff --git a/src/Nazara/Utility/Loaders/MD5Anim/Parser.cpp b/src/Nazara/Utility/Formats/MD5AnimParser.cpp similarity index 99% rename from src/Nazara/Utility/Loaders/MD5Anim/Parser.cpp rename to src/Nazara/Utility/Formats/MD5AnimParser.cpp index f47522ecb..f9723ed34 100644 --- a/src/Nazara/Utility/Loaders/MD5Anim/Parser.cpp +++ b/src/Nazara/Utility/Formats/MD5AnimParser.cpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include #include #include diff --git a/src/Nazara/Utility/Loaders/MD5Mesh/Loader.cpp b/src/Nazara/Utility/Formats/MD5MeshLoader.cpp similarity index 98% rename from src/Nazara/Utility/Loaders/MD5Mesh/Loader.cpp rename to src/Nazara/Utility/Formats/MD5MeshLoader.cpp index 8d07acde8..526904460 100644 --- a/src/Nazara/Utility/Loaders/MD5Mesh/Loader.cpp +++ b/src/Nazara/Utility/Formats/MD5MeshLoader.cpp @@ -2,12 +2,12 @@ // This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include -#include +#include #include #include #include #include +#include #include #include diff --git a/src/Nazara/Utility/Loaders/MD5Mesh.hpp b/src/Nazara/Utility/Formats/MD5MeshLoader.hpp similarity index 100% rename from src/Nazara/Utility/Loaders/MD5Mesh.hpp rename to src/Nazara/Utility/Formats/MD5MeshLoader.hpp diff --git a/src/Nazara/Utility/Loaders/MD5Mesh/Parser.cpp b/src/Nazara/Utility/Formats/MD5MeshParser.cpp similarity index 99% rename from src/Nazara/Utility/Loaders/MD5Mesh/Parser.cpp rename to src/Nazara/Utility/Formats/MD5MeshParser.cpp index 0533160f4..796aaaaa8 100644 --- a/src/Nazara/Utility/Loaders/MD5Mesh/Parser.cpp +++ b/src/Nazara/Utility/Formats/MD5MeshParser.cpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include #include #include diff --git a/src/Nazara/Graphics/Loaders/OBJ/MTLParser.cpp b/src/Nazara/Utility/Formats/MTLParser.cpp similarity index 96% rename from src/Nazara/Graphics/Loaders/OBJ/MTLParser.cpp rename to src/Nazara/Utility/Formats/MTLParser.cpp index 2614fa511..4ab5d0f0f 100644 --- a/src/Nazara/Graphics/Loaders/OBJ/MTLParser.cpp +++ b/src/Nazara/Utility/Formats/MTLParser.cpp @@ -1,14 +1,14 @@ // Copyright (C) 2015 Jérôme Leclercq -// This file is part of the "Nazara Engine - Graphics module" +// This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include #include #include #include #include -#include +#include NzMTLParser::NzMTLParser(NzInputStream& stream) : m_stream(stream), @@ -33,6 +33,11 @@ const NzMTLParser::Material* NzMTLParser::GetMaterial(const NzString& materialNa return nullptr; } +const std::unordered_map& NzMTLParser::GetMaterials() const +{ + return m_materials; +} + bool NzMTLParser::Parse() { m_keepLastLine = false; diff --git a/src/Nazara/Graphics/Loaders/OBJ/OBJParser.cpp b/src/Nazara/Utility/Formats/OBJParser.cpp similarity index 98% rename from src/Nazara/Graphics/Loaders/OBJ/OBJParser.cpp rename to src/Nazara/Utility/Formats/OBJParser.cpp index fcefc2dd5..fa5bb7532 100644 --- a/src/Nazara/Graphics/Loaders/OBJ/OBJParser.cpp +++ b/src/Nazara/Utility/Formats/OBJParser.cpp @@ -1,15 +1,15 @@ // Copyright (C) 2015 Jérôme Leclercq -// This file is part of the "Nazara Engine - Graphics module" +// This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include #include #include #include #include #include -#include +#include NzOBJParser::NzOBJParser(NzInputStream& stream) : m_stream(stream), diff --git a/src/Nazara/Utility/Loaders/PCX/Loader.cpp b/src/Nazara/Utility/Formats/PCXLoader.cpp similarity index 99% rename from src/Nazara/Utility/Loaders/PCX/Loader.cpp rename to src/Nazara/Utility/Formats/PCXLoader.cpp index 48af53229..0f2d0450f 100644 --- a/src/Nazara/Utility/Loaders/PCX/Loader.cpp +++ b/src/Nazara/Utility/Formats/PCXLoader.cpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include #include #include diff --git a/src/Nazara/Utility/Loaders/PCX.hpp b/src/Nazara/Utility/Formats/PCXLoader.hpp similarity index 100% rename from src/Nazara/Utility/Loaders/PCX.hpp rename to src/Nazara/Utility/Formats/PCXLoader.hpp diff --git a/src/Nazara/Utility/Loaders/STB/Loader.cpp b/src/Nazara/Utility/Formats/STBLoader.cpp similarity index 98% rename from src/Nazara/Utility/Loaders/STB/Loader.cpp rename to src/Nazara/Utility/Formats/STBLoader.cpp index dbf36e4b4..21f7f985c 100644 --- a/src/Nazara/Utility/Loaders/STB/Loader.cpp +++ b/src/Nazara/Utility/Formats/STBLoader.cpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include +#include #include #include #include diff --git a/src/Nazara/Utility/Loaders/STB.hpp b/src/Nazara/Utility/Formats/STBLoader.hpp similarity index 100% rename from src/Nazara/Utility/Loaders/STB.hpp rename to src/Nazara/Utility/Formats/STBLoader.hpp diff --git a/src/Nazara/Utility/Utility.cpp b/src/Nazara/Utility/Utility.cpp index b984ef30e..d647e0424 100644 --- a/src/Nazara/Utility/Utility.cpp +++ b/src/Nazara/Utility/Utility.cpp @@ -15,17 +15,17 @@ #include #include #include -#include -#include -#include -#include -#include -#include #include #include #include #include #include +#include +#include +#include +#include +#include +#include #include bool NzUtility::Initialize()