Skip to content
Snippets Groups Projects
Commit 632abc27 authored by D-AIRY's avatar D-AIRY
Browse files

dds plugin (begin)

parent bea739b4
No related branches found
No related tags found
No related merge requests found
......@@ -351,6 +351,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "xCore", "xCore", "{74D74409
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxambient", "..\..\sxambient\vs2013\sxambient.vcxproj", "{6FE14C5C-6052-4D96-A89F-0843D91F89AD}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ddsplugin", "..\..\ddsplugin\vs2013\ddsplugin.vcxproj", "{FE640066-C8E8-41FB-AD13-89BC03BFFBFB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
......@@ -659,6 +661,14 @@ Global
{6FE14C5C-6052-4D96-A89F-0843D91F89AD}.Release|Win32.Build.0 = Release|Win32
{6FE14C5C-6052-4D96-A89F-0843D91F89AD}.Release|x64.ActiveCfg = Release|x64
{6FE14C5C-6052-4D96-A89F-0843D91F89AD}.Release|x64.Build.0 = Release|x64
{FE640066-C8E8-41FB-AD13-89BC03BFFBFB}.Debug|Win32.ActiveCfg = Debug|Win32
{FE640066-C8E8-41FB-AD13-89BC03BFFBFB}.Debug|Win32.Build.0 = Debug|Win32
{FE640066-C8E8-41FB-AD13-89BC03BFFBFB}.Debug|x64.ActiveCfg = Debug|x64
{FE640066-C8E8-41FB-AD13-89BC03BFFBFB}.Debug|x64.Build.0 = Debug|x64
{FE640066-C8E8-41FB-AD13-89BC03BFFBFB}.Release|Win32.ActiveCfg = Release|Win32
{FE640066-C8E8-41FB-AD13-89BC03BFFBFB}.Release|Win32.Build.0 = Release|Win32
{FE640066-C8E8-41FB-AD13-89BC03BFFBFB}.Release|x64.ActiveCfg = Release|x64
{FE640066-C8E8-41FB-AD13-89BC03BFFBFB}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
......@@ -720,6 +730,7 @@ Global
{D2386C4E-7032-487B-8EAD-951778AD6EBC} = {74D74409-BAC7-4DD0-8C74-117516B4A01C}
{74D74409-BAC7-4DD0-8C74-117516B4A01C} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC}
{6FE14C5C-6052-4D96-A89F-0843D91F89AD} = {E6B16854-D4A4-4B56-8E1C-482DD523F205}
{FE640066-C8E8-41FB-AD13-89BC03BFFBFB} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787}
EndGlobalSection
GlobalSection(Performance) = preSolution
HasPerformanceSessions = true
......
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\source\ddsplugin\dllmain.cpp" />
<ClCompile Include="..\..\..\source\ddsplugin\TextureLoader.cpp" />
<ClCompile Include="..\..\..\source\ddsplugin\plugin_main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\source\ddsplugin\DDSFile.h" />
<ClInclude Include="..\..\..\source\ddsplugin\TextureLoader.h" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{FE640066-C8E8-41FB-AD13-89BC03BFFBFB}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ddsplugin</RootNamespace>
<ProjectName>ddsplugin</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v120_xp</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v120_xp</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v120_xp</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v120_xp</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>../../../build/bin/plugins/</OutDir>
<TargetName>$(ProjectName)_d</TargetName>
<IncludePath>$(IncludePath);../../../sdks/;$(WindowsSdk_71A_IncludePath);../../../source;</IncludePath>
<LibraryPath>;../../../libs;$(LibraryPath)</LibraryPath>
<SourcePath>../../../source;$(SourcePath)</SourcePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<TargetName>$(ProjectName)_d</TargetName>
<IncludePath>$(IncludePath);../../../sdks/;$(WindowsSdk_71A_IncludePath);../../../source;</IncludePath>
<LibraryPath>;../../../libs64;$(LibraryPath)</LibraryPath>
<SourcePath>../../../source;$(SourcePath)</SourcePath>
<LinkIncremental>false</LinkIncremental>
<OutDir>../../../build/bin64/plugins/</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>../../../build/bin/plugins/</OutDir>
<IncludePath>$(IncludePath);../../../sdks/;$(WindowsSdk_71A_IncludePath);../../../source;</IncludePath>
<LibraryPath>;../../../libs;$(LibraryPath)</LibraryPath>
<SourcePath>../../../source;$(SourcePath)</SourcePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<IncludePath>$(IncludePath);../../../sdks/;$(WindowsSdk_71A_IncludePath);../../../source;</IncludePath>
<LibraryPath>;../../../libs64;$(LibraryPath)</LibraryPath>
<SourcePath>../../../source;$(SourcePath)</SourcePath>
<LinkIncremental>false</LinkIncremental>
<OutDir>../../../build/bin64/plugins/</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;SX_LIB_NAME="DDS";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<TreatSpecificWarningsAsErrors>4316</TreatSpecificWarningsAsErrors>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ImportLibrary>../../../libs/$(TargetName).lib</ImportLibrary>
<ProgramDatabaseFile>$(ProjectDir)$(TargetName).pdb</ProgramDatabaseFile>
<Profile>true</Profile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN64;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;SX_LIB_NAME="DDS";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<TreatSpecificWarningsAsErrors>4316</TreatSpecificWarningsAsErrors>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ImportLibrary>../../../libs/$(TargetName).lib</ImportLibrary>
<ProgramDatabaseFile>$(ProjectDir)$(TargetName).pdb</ProgramDatabaseFile>
<Profile>true</Profile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level1</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;SX_LIB_NAME="DDS";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<TreatSpecificWarningsAsErrors>4316</TreatSpecificWarningsAsErrors>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<ProgramDatabaseFile>$(ProjectDir)$(TargetName).pdb</ProgramDatabaseFile>
<ImportLibrary>../../../libs/$(TargetName).lib</ImportLibrary>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level1</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN64;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;SX_LIB_NAME="DDS";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<TreatSpecificWarningsAsErrors>4316</TreatSpecificWarningsAsErrors>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<ProgramDatabaseFile>$(ProjectDir)$(TargetName).pdb</ProgramDatabaseFile>
<ImportLibrary>../../../libs/$(TargetName).lib</ImportLibrary>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{A449BBF6-87B9-4A5C-ADF0-2EBF183111CA}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{53F9B2A7-D46D-438A-9854-263F22AFCF5C}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{E8C70B41-9EA3-4F97-84C0-4CCFC5D0A117}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\source\ddsplugin\dllmain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\source\ddsplugin\plugin_main.cpp" />
<ClCompile Include="..\..\..\source\ddsplugin\TextureLoader.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\source\ddsplugin\TextureLoader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\ddsplugin\DDSFile.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -13,6 +13,8 @@
#include <GRegisterIndex.h>
#include <xcommon/IXTextureLoader.h>
extern CTimeManager *g_pTimers;
extern CPerfMon *g_pPerfMon;
extern CCore *g_pCore;
......@@ -80,6 +82,17 @@ CCore::CCore(const char *szName)
}
loadPlugins();
#if 1
IXTextureLoader *pLoader = (IXTextureLoader*)m_pPluginManager->getInterface(IXTEXTURELOADER_GUID);
if(pLoader->open("textures/tp/tp_sga_window_center_up.dds", ""))
{
XTextureInfo texInfo;
pLoader->getInfo(&texInfo);
pLoader->close();
}
#endif
}
CCore::~CCore()
{
......
#ifndef __DDSFILE_H
#define __DDSFILE_H
#include <gdefines.h>
#pragma pack(push,1)
typedef enum DXGI_FORMAT
{
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,
DXGI_FORMAT_FORCE_UINT = 0xffffffff
} DXGI_FORMAT;
const uint32_t DDS_MAGIC = 0x20534444; // "DDS "
struct DDS_PIXELFORMAT
{
uint32_t size;
uint32_t flags;
uint32_t fourCC;
uint32_t RGBBitCount;
uint32_t RBitMask;
uint32_t GBitMask;
uint32_t BBitMask;
uint32_t ABitMask;
};
#define DDS_FOURCC 0x00000004 // DDPF_FOURCC
#define DDS_RGB 0x00000040 // DDPF_RGB
#define DDS_RGBA 0x00000041 // DDPF_RGB | DDPF_ALPHAPIXELS
#define DDS_LUMINANCE 0x00020000 // DDPF_LUMINANCE
#define DDS_LUMINANCEA 0x00020001 // DDPF_LUMINANCE | DDPF_ALPHAPIXELS
#define DDS_ALPHA 0x00000002 // DDPF_ALPHA
#define DDS_PAL8 0x00000020 // DDPF_PALETTEINDEXED8
#ifndef MAKEFOURCC
#define MAKEFOURCC(ch0, ch1, ch2, ch3) \
((uint32_t)(uint8_t)(ch0) | ((uint32_t)(uint8_t)(ch1) << 8) | \
((uint32_t)(uint8_t)(ch2) << 16) | ((uint32_t)(uint8_t)(ch3) << 24 ))
#endif /* defined(MAKEFOURCC) */
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT1 =
{sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D', 'X', 'T', '1'), 0, 0, 0, 0, 0};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT2 =
{sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D', 'X', 'T', '2'), 0, 0, 0, 0, 0};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT3 =
{sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D', 'X', 'T', '3'), 0, 0, 0, 0, 0};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT4 =
{sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D', 'X', 'T', '4'), 0, 0, 0, 0, 0};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT5 =
{sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D', 'X', 'T', '5'), 0, 0, 0, 0, 0};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_UNORM =
{sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B', 'C', '4', 'U'), 0, 0, 0, 0, 0};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_SNORM =
{sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B', 'C', '4', 'S'), 0, 0, 0, 0, 0};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_UNORM =
{sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B', 'C', '5', 'U'), 0, 0, 0, 0, 0};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_SNORM =
{sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B', 'C', '5', 'S'), 0, 0, 0, 0, 0};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8_B8G8 =
{sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R', 'G', 'B', 'G'), 0, 0, 0, 0, 0};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G8R8_G8B8 =
{sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G', 'R', 'G', 'B'), 0, 0, 0, 0, 0};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8R8G8B8 =
{sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8R8G8B8 =
{sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8B8G8R8 =
{sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8B8G8R8 =
{sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G16R16 =
{sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R5G6B5 =
{sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A1R5G5B5 =
{sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A4R4G4B4 =
{sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8B8 =
{sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L8 =
{sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 8, 0xff, 0x00, 0x00, 0x00};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L16 =
{sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 16, 0xffff, 0x0000, 0x0000, 0x0000};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8L8 =
{sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 16, 0x00ff, 0x0000, 0x0000, 0xff00};
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8 =
{sizeof(DDS_PIXELFORMAT), DDS_ALPHA, 0, 8, 0x00, 0x00, 0x00, 0xff};
// D3DFMT_A2R10G10B10/D3DFMT_A2B10G10R10 should be written using DX10 extension to avoid D3DX 10:10:10:2 reversal issue
// This indicates the DDS_HEADER_DXT10 extension is present (the format is in dxgiFormat)
extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DX10 =
{sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D', 'X', '1', '0'), 0, 0, 0, 0, 0};
#define DDS_HEADER_FLAGS_TEXTURE 0x00001007 // DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT
#define DDS_HEADER_FLAGS_MIPMAP 0x00020000 // DDSD_MIPMAPCOUNT
#define DDS_HEADER_FLAGS_VOLUME 0x00800000 // DDSD_DEPTH
#define DDS_HEADER_FLAGS_PITCH 0x00000008 // DDSD_PITCH
#define DDS_HEADER_FLAGS_LINEARSIZE 0x00080000 // DDSD_LINEARSIZE
#define DDS_HEIGHT 0x00000002 // DDSD_HEIGHT
#define DDS_WIDTH 0x00000004 // DDSD_WIDTH
#define DDS_SURFACE_FLAGS_TEXTURE 0x00001000 // DDSCAPS_TEXTURE
#define DDS_SURFACE_FLAGS_MIPMAP 0x00400008 // DDSCAPS_COMPLEX | DDSCAPS_MIPMAP
#define DDS_SURFACE_FLAGS_CUBEMAP 0x00000008 // DDSCAPS_COMPLEX
#define DDS_CUBEMAP_POSITIVEX 0x00000600 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX
#define DDS_CUBEMAP_NEGATIVEX 0x00000a00 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX
#define DDS_CUBEMAP_POSITIVEY 0x00001200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY
#define DDS_CUBEMAP_NEGATIVEY 0x00002200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY
#define DDS_CUBEMAP_POSITIVEZ 0x00004200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ
#define DDS_CUBEMAP_NEGATIVEZ 0x00008200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ
#define DDS_CUBEMAP_ALLFACES ( DDS_CUBEMAP_POSITIVEX | DDS_CUBEMAP_NEGATIVEX |\
DDS_CUBEMAP_POSITIVEY | DDS_CUBEMAP_NEGATIVEY |\
DDS_CUBEMAP_POSITIVEZ | DDS_CUBEMAP_NEGATIVEZ )
#define DDS_CUBEMAP 0x00000200 // DDSCAPS2_CUBEMAP
#define DDS_FLAGS_VOLUME 0x00200000 // DDSCAPS2_VOLUME
// Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION
enum DDS_RESOURCE_DIMENSION
{
DDS_DIMENSION_TEXTURE1D = 2,
DDS_DIMENSION_TEXTURE2D = 3,
DDS_DIMENSION_TEXTURE3D = 4,
};
// Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG
enum DDS_RESOURCE_MISC_FLAG
{
DDS_RESOURCE_MISC_TEXTURECUBE = 0x4L,
};
enum DDS_MISC_FLAGS2
{
DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L,
};
struct DDS_HEADER
{
uint32_t size;
uint32_t flags;
uint32_t height;
uint32_t width;
uint32_t pitchOrLinearSize;
uint32_t depth; // only if DDS_HEADER_FLAGS_VOLUME is set in flags
uint32_t mipMapCount;
uint32_t reserved1[11];
DDS_PIXELFORMAT ddspf;
uint32_t caps;
uint32_t caps2;
uint32_t caps3;
uint32_t caps4;
uint32_t reserved2;
};
struct DDS_HEADER_DXT10
{
DXGI_FORMAT dxgiFormat;
uint32_t resourceDimension;
uint32_t miscFlag; // see D3D11_RESOURCE_MISC_FLAG
uint32_t arraySize;
uint32_t miscFlags2; // see DDS_MISC_FLAGS2
};
#pragma pack(pop)
static_assert(sizeof(DDS_HEADER) == 124, "DDS Header size mismatch");
static_assert(sizeof(DDS_HEADER_DXT10) == 20, "DDS DX10 Extended Header size mismatch");
#endif
#include "TextureLoader.h"
#include "DDSFile.h"
CTextureLoader::CTextureLoader(IFileSystem* pFileSystem):
m_pFileSystem(pFileSystem)
{
}
UINT XMETHODCALLTYPE CTextureLoader::getVersion()
{
return(IXTEXTURELOADER_VERSION);
}
UINT XMETHODCALLTYPE CTextureLoader::getExtCount() const
{
return(1);
}
const char* XMETHODCALLTYPE CTextureLoader::getExt(UINT uIndex) const
{
assert(uIndex < getExtCount());
switch(uIndex)
{
case 0:
return("dds");
}
return(NULL);
}
const char* XMETHODCALLTYPE CTextureLoader::getExtText(UINT uIndex) const
{
assert(uIndex < getExtCount());
switch(uIndex)
{
case 0:
return("DirectDraw Surface");
}
return(NULL);
}
const char* XMETHODCALLTYPE CTextureLoader::getAuthor() const
{
return("D-AIRY @ DogmaNet");
}
const char* XMETHODCALLTYPE CTextureLoader::getCopyright() const
{
return("Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2019");
}
const char* XMETHODCALLTYPE CTextureLoader::getDescription() const
{
return("DDS texture loader");
}
void XMETHODCALLTYPE CTextureLoader::getInfo(XTextureInfo *pTextureInfo)
{
pTextureInfo->type = getType();
pTextureInfo->uWidth = m_ddsHeader.width;
pTextureInfo->uHeight = m_ddsHeader.height;
pTextureInfo->uDepth = m_ddsHeader.depth;
pTextureInfo->uMipCount = 1;
if(m_ddsHeader.flags & DDS_HEADER_FLAGS_MIPMAP)
{
pTextureInfo->uMipCount = m_ddsHeader.mipMapCount;
}
}
bool XMETHODCALLTYPE CTextureLoader::open(const char *szFileName, const char *szArg)
{
assert(!m_pCurrentFile && "File already opened!");
if(m_pCurrentFile)
{
return(false);
}
m_pCurrentFile = m_pFileSystem->openFile(szFileName);
if(!m_pCurrentFile)
{
return(false);
}
IFile *pFile = m_pCurrentFile;
uint32_t uMagick = 0;
memset(&m_ddsHeader, 0, sizeof(m_ddsHeader));
memset(&m_dxt10Header, 0, sizeof(m_dxt10Header));
pFile->readBin(&uMagick, sizeof(uMagick));
if(uMagick != DDS_MAGIC)
{
return(false);
}
if(pFile->readBin(&m_ddsHeader, sizeof(m_ddsHeader)) != sizeof(m_ddsHeader))
{
return(false);
}
m_hasDXT10Header = (m_ddsHeader.ddspf.flags & DDS_FOURCC) && m_ddsHeader.ddspf.fourCC == MAKEFOURCC('D', 'X', '1', '0');
if(m_hasDXT10Header && pFile->readBin(&m_dxt10Header, sizeof(m_dxt10Header)) != sizeof(m_dxt10Header))
{
return(false);
}
return(true);
}
GXTEXTURE_TYPE XMETHODCALLTYPE CTextureLoader::getType() const
{
if(m_ddsHeader.caps2 & DDS_FLAGS_VOLUME)
{
return(GXTEXTURE_TYPE_3D);
}
if(m_ddsHeader.caps & DDS_SURFACE_FLAGS_CUBEMAP)
{
return(GXTEXTURE_TYPE_CUBE);
}
if(m_ddsHeader.caps & DDS_SURFACE_FLAGS_TEXTURE)
{
return(GXTEXTURE_TYPE_2D);
}
return(GXTEXTURE_TYPE_UNKNOWN);
}
bool XMETHODCALLTYPE CTextureLoader::loadAs2D(IXResourceTexture2D *pResource)
{
if(getType() != GXTEXTURE_TYPE_2D)
{
return(false);
}
return(true);
}
bool XMETHODCALLTYPE CTextureLoader::loadAsCube(IXResourceTextureCube *pResource)
{
if(getType() != GXTEXTURE_TYPE_CUBE)
{
return(false);
}
return(true);
}
void XMETHODCALLTYPE CTextureLoader::close()
{
mem_release(m_pCurrentFile);
}
#ifndef __TEXTURELOADER_H
#define __TEXTURELOADER_H
#include <xcommon/IXTextureLoader.h>
#include <xcommon/IFileSystem.h>
#include "DDSFile.h"
class CTextureLoader: public IXTextureLoader
{
public:
CTextureLoader(IFileSystem* pFileSystem);
UINT XMETHODCALLTYPE getVersion() override;
UINT XMETHODCALLTYPE getExtCount() const override;
const char* XMETHODCALLTYPE getExt(UINT uIndex) const override;
const char* XMETHODCALLTYPE getExtText(UINT uIndex) const override;
const char* XMETHODCALLTYPE getAuthor() const override;
const char* XMETHODCALLTYPE getCopyright() const override;
const char* XMETHODCALLTYPE getDescription() const override;
bool XMETHODCALLTYPE open(const char *szFileName, const char *szArg) override;
GXTEXTURE_TYPE XMETHODCALLTYPE getType() const override;
bool XMETHODCALLTYPE loadAs2D(IXResourceTexture2D *pResource) override;
bool XMETHODCALLTYPE loadAsCube(IXResourceTextureCube *pResource) override;
void XMETHODCALLTYPE getInfo(XTextureInfo *pTextureInfo) override;
void XMETHODCALLTYPE close() override;
protected:
IFileSystem *m_pFileSystem;
IFile *m_pCurrentFile = NULL;
DDS_HEADER m_ddsHeader;
bool m_hasDXT10Header = false;
DDS_HEADER_DXT10 m_dxt10Header;
};
#endif
/***********************************************************
Copyright Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
See the license in LICENSE
***********************************************************/
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
#include <xcommon/IXPlugin.h>
#include "TextureLoader.h"
class CDDSPlugin: public IXPlugin
{
public:
void XMETHODCALLTYPE startup(IXCore *pCore) override
{
m_pCore = pCore;
}
void XMETHODCALLTYPE shutdown() override
{
}
UINT XMETHODCALLTYPE getInterfaceCount() override
{
return(1);
}
const XGUID* XMETHODCALLTYPE getInterfaceGUID(UINT id) override
{
static XGUID s_guid;
switch(id)
{
case 0:
s_guid = IXTEXTURELOADER_GUID;
break;
default:
return(NULL);
}
return(&s_guid);
}
IXUnknown* XMETHODCALLTYPE getInterface(const XGUID &guid) override
{
if(guid == IXTEXTURELOADER_GUID)
{
return(new CTextureLoader(m_pCore->getFileSystem()));
}
return(NULL);
}
protected:
IXCore *m_pCore;
};
DECLARE_XPLUGIN(CDDSPlugin);
......@@ -3,11 +3,11 @@
#include <gdefines.h>
#include <core/IFile.h>
#include <graphix/graphix.h>
#include <xcommon/resource/IXResourceTexture.h>
// {95FBCCB6-D40F-4FC6-AFF4-8A52BD75DB3C}
#define IXTEXTURELOADER_GUID DEFINE_GUID(0x95fbccb6, 0xd40f, 0x4fc6, 0xaf, 0xf4, 0x8a, 0x52, 0xbd, 0x75, 0xdb, 0x3c)
#define IXTEXTURELOADER_GUID DEFINE_XGUID(0x95fbccb6, 0xd40f, 0x4fc6, 0xaf, 0xf4, 0x8a, 0x52, 0xbd, 0x75, 0xdb, 0x3c)
#define IXTEXTURELOADER_VERSION 1
//! возможная информация о текстуре
struct XTextureInfo
......@@ -41,8 +41,10 @@ public:
virtual const char* XMETHODCALLTYPE getCopyright() const = 0;
virtual const char* XMETHODCALLTYPE getDescription() const = 0;
virtual bool XMETHODCALLTYPE open(IFile *pFile) = 0;
virtual bool XMETHODCALLTYPE load(IXResourceTexture *pResource) = 0;
virtual bool XMETHODCALLTYPE open(const char *szFileName, const char *szArg) = 0;
virtual GXTEXTURE_TYPE XMETHODCALLTYPE getType() const = 0;
virtual bool XMETHODCALLTYPE loadAs2D(IXResourceTexture2D *pResource) = 0;
virtual bool XMETHODCALLTYPE loadAsCube(IXResourceTextureCube *pResource) = 0;
virtual void XMETHODCALLTYPE getInfo(XTextureInfo *pTextureInfo) = 0;
virtual void XMETHODCALLTYPE close() = 0;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment