mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-25 05:55:13 +00:00
LibGfx: Add support for DDS images
This commit is contained in:
parent
9f42ccd639
commit
24c5b0e81c
Notes:
sideshowbarker
2024-07-18 17:52:48 +09:00
Author: https://github.com/stelar7 Commit: https://github.com/SerenityOS/serenity/commit/24c5b0e81c6 Pull-request: https://github.com/SerenityOS/serenity/pull/7162 Reviewed-by: https://github.com/IdanHo Reviewed-by: https://github.com/alimpfard Reviewed-by: https://github.com/drunderscore Reviewed-by: https://github.com/linusg
18 changed files with 1375 additions and 11 deletions
|
@ -66,6 +66,10 @@
|
||||||
#cmakedefine01 CURSOR_TOOL_DEBUG
|
#cmakedefine01 CURSOR_TOOL_DEBUG
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef DDS_DEBUG
|
||||||
|
#cmakedefine01 DDS_DEBUG
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef DEFERRED_INVOKE_DEBUG
|
#ifndef DEFERRED_INVOKE_DEBUG
|
||||||
#cmakedefine01 DEFERRED_INVOKE_DEBUG
|
#cmakedefine01 DEFERRED_INVOKE_DEBUG
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
[FileType]
|
[FileType]
|
||||||
|
dds=/bin/ImageViewer
|
||||||
pbm=/bin/ImageViewer
|
pbm=/bin/ImageViewer
|
||||||
pgm=/bin/ImageViewer
|
pgm=/bin/ImageViewer
|
||||||
png=/bin/ImageViewer
|
png=/bin/ImageViewer
|
||||||
|
|
|
@ -4,4 +4,4 @@ Executable=/bin/ImageViewer
|
||||||
Category=Graphics
|
Category=Graphics
|
||||||
|
|
||||||
[Launcher]
|
[Launcher]
|
||||||
FileTypes=pbm,pgm,png,ppm,gif,jpg,jpeg
|
FileTypes=pbm,pgm,png,ppm,gif,jpg,jpeg,dds
|
||||||
|
|
35
Base/res/html/misc/ddssuite.html
Normal file
35
Base/res/html/misc/ddssuite.html
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
<html>
|
||||||
|
<head><title>DDS test suite</title></head>
|
||||||
|
<body>
|
||||||
|
<table border="1" width="100%">
|
||||||
|
<tr>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Image</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">DXT1</td>
|
||||||
|
<td align="center"><img src="ddssuite_files/DXT1.dds"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">DXT3</td>
|
||||||
|
<td align="center"><img src="ddssuite_files/DXT3.dds"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">DXT5</td>
|
||||||
|
<td align="center"><img src="ddssuite_files/DXT5.dds"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">DXT3 - alpha</td>
|
||||||
|
<td align="center"><img src="ddssuite_files/DXT3-alpha.dds"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">DXT5 - alpha</td>
|
||||||
|
<td align="center"><img src="ddssuite_files/DXT5-alpha.dds"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">DXT1 - mipmap</td>
|
||||||
|
<td align="center"><img src="ddssuite_files/DXT1-mipmap.dds"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
BIN
Base/res/html/misc/ddssuite_files/DXT1-mipmap.dds
Normal file
BIN
Base/res/html/misc/ddssuite_files/DXT1-mipmap.dds
Normal file
Binary file not shown.
BIN
Base/res/html/misc/ddssuite_files/DXT1.dds
Normal file
BIN
Base/res/html/misc/ddssuite_files/DXT1.dds
Normal file
Binary file not shown.
BIN
Base/res/html/misc/ddssuite_files/DXT3-alpha.dds
Normal file
BIN
Base/res/html/misc/ddssuite_files/DXT3-alpha.dds
Normal file
Binary file not shown.
BIN
Base/res/html/misc/ddssuite_files/DXT3.dds
Normal file
BIN
Base/res/html/misc/ddssuite_files/DXT3.dds
Normal file
Binary file not shown.
BIN
Base/res/html/misc/ddssuite_files/DXT5-alpha.dds
Normal file
BIN
Base/res/html/misc/ddssuite_files/DXT5-alpha.dds
Normal file
Binary file not shown.
BIN
Base/res/html/misc/ddssuite_files/DXT5.dds
Normal file
BIN
Base/res/html/misc/ddssuite_files/DXT5.dds
Normal file
Binary file not shown.
|
@ -38,6 +38,7 @@ span#loadtime {
|
||||||
<p>This page loaded in <b><span id="loadtime"></span></b> ms</p>
|
<p>This page loaded in <b><span id="loadtime"></span></b> ms</p>
|
||||||
<p>Some small test pages:</p>
|
<p>Some small test pages:</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li><a href="ddssuite.html">DDS test suite</a></li>
|
||||||
<li><a href="websocket.html">WebSocket API Test</a></li>
|
<li><a href="websocket.html">WebSocket API Test</a></li>
|
||||||
<li><a href="cookie.html">document.cookie</a></li>
|
<li><a href="cookie.html">document.cookie</a></li>
|
||||||
<li><a href="last-of-type.html">CSS :last-of-type selector</a></li>
|
<li><a href="last-of-type.html">CSS :last-of-type selector</a></li>
|
||||||
|
|
|
@ -182,6 +182,7 @@ set(WASM_BINPARSER_DEBUG ON)
|
||||||
set(WASM_TRACE_DEBUG ON)
|
set(WASM_TRACE_DEBUG ON)
|
||||||
set(PDF_DEBUG ON)
|
set(PDF_DEBUG ON)
|
||||||
set(SOLITAIRE_DEBUG ON)
|
set(SOLITAIRE_DEBUG ON)
|
||||||
|
set(DDS_DEBUG ON)
|
||||||
|
|
||||||
# False positive: DEBUG is a flag but it works differently.
|
# False positive: DEBUG is a flag but it works differently.
|
||||||
# set(DEBUG ON)
|
# set(DEBUG ON)
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <LibGfx/BMPLoader.h>
|
#include <LibGfx/BMPLoader.h>
|
||||||
#include <LibGfx/Bitmap.h>
|
#include <LibGfx/Bitmap.h>
|
||||||
|
#include <LibGfx/DDSLoader.h>
|
||||||
#include <LibGfx/GIFLoader.h>
|
#include <LibGfx/GIFLoader.h>
|
||||||
#include <LibGfx/ICOLoader.h>
|
#include <LibGfx/ICOLoader.h>
|
||||||
#include <LibGfx/JPGLoader.h>
|
#include <LibGfx/JPGLoader.h>
|
||||||
|
|
|
@ -13,16 +13,17 @@
|
||||||
#include <LibGfx/Forward.h>
|
#include <LibGfx/Forward.h>
|
||||||
#include <LibGfx/Rect.h>
|
#include <LibGfx/Rect.h>
|
||||||
|
|
||||||
#define ENUMERATE_IMAGE_FORMATS \
|
#define ENUMERATE_IMAGE_FORMATS \
|
||||||
__ENUMERATE_IMAGE_FORMAT(pbm, ".pbm") \
|
__ENUMERATE_IMAGE_FORMAT(pbm, ".pbm") \
|
||||||
__ENUMERATE_IMAGE_FORMAT(pgm, ".pgm") \
|
__ENUMERATE_IMAGE_FORMAT(pgm, ".pgm") \
|
||||||
__ENUMERATE_IMAGE_FORMAT(png, ".png") \
|
__ENUMERATE_IMAGE_FORMAT(png, ".png") \
|
||||||
__ENUMERATE_IMAGE_FORMAT(ppm, ".ppm") \
|
__ENUMERATE_IMAGE_FORMAT(ppm, ".ppm") \
|
||||||
__ENUMERATE_IMAGE_FORMAT(gif, ".gif") \
|
__ENUMERATE_IMAGE_FORMAT(gif, ".gif") \
|
||||||
__ENUMERATE_IMAGE_FORMAT(bmp, ".bmp") \
|
__ENUMERATE_IMAGE_FORMAT(bmp, ".bmp") \
|
||||||
__ENUMERATE_IMAGE_FORMAT(ico, ".ico") \
|
__ENUMERATE_IMAGE_FORMAT(ico, ".ico") \
|
||||||
__ENUMERATE_IMAGE_FORMAT(jpg, ".jpg") \
|
__ENUMERATE_IMAGE_FORMAT(jpg, ".jpg") \
|
||||||
__ENUMERATE_IMAGE_FORMAT(jpg, ".jpeg")
|
__ENUMERATE_IMAGE_FORMAT(jpg, ".jpeg") \
|
||||||
|
__ENUMERATE_IMAGE_FORMAT(dds, ".dds")
|
||||||
|
|
||||||
namespace Gfx {
|
namespace Gfx {
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ set(SOURCES
|
||||||
ClassicStylePainter.cpp
|
ClassicStylePainter.cpp
|
||||||
ClassicWindowTheme.cpp
|
ClassicWindowTheme.cpp
|
||||||
Color.cpp
|
Color.cpp
|
||||||
|
DDSLoader.cpp
|
||||||
DisjointRectSet.cpp
|
DisjointRectSet.cpp
|
||||||
Emoji.cpp
|
Emoji.cpp
|
||||||
FontDatabase.cpp
|
FontDatabase.cpp
|
||||||
|
|
1054
Userland/Libraries/LibGfx/DDSLoader.cpp
Normal file
1054
Userland/Libraries/LibGfx/DDSLoader.cpp
Normal file
File diff suppressed because it is too large
Load diff
260
Userland/Libraries/LibGfx/DDSLoader.h
Normal file
260
Userland/Libraries/LibGfx/DDSLoader.h
Normal file
|
@ -0,0 +1,260 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021, the SerenityOS developers.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <LibGfx/Bitmap.h>
|
||||||
|
#include <LibGfx/ImageDecoder.h>
|
||||||
|
|
||||||
|
namespace Gfx {
|
||||||
|
|
||||||
|
enum MiscFlags : u32 {
|
||||||
|
DDS_RESOURCE_MISC_TEXTURECUBE = 0x4,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum Misc2Flags : u32 {
|
||||||
|
DDS_ALPHA_MODE_UNKNOWN = 0x0,
|
||||||
|
DDS_ALPHA_MODE_STRAIGHT = 0x1,
|
||||||
|
DDS_ALPHA_MODE_PREMULTIPLIED = 0x2,
|
||||||
|
DDS_ALPHA_MODE_OPAQUE = 0x3,
|
||||||
|
DDS_ALPHA_MODE_CUSTOM = 0x4,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum Caps1Flags : u32 {
|
||||||
|
DDSCAPS_COMPLEX = 0x8,
|
||||||
|
DDSCAPS_TEXTURE = 0x1000,
|
||||||
|
DDSCAPS_MIPMAP = 0x400000,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum Caps2Flags : u32 {
|
||||||
|
DDSCAPS2_CUBEMAP = 0x200,
|
||||||
|
DDSCAPS2_CUBEMAP_POSITIVEX = 0x400,
|
||||||
|
DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800,
|
||||||
|
DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000,
|
||||||
|
DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000,
|
||||||
|
DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000,
|
||||||
|
DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000,
|
||||||
|
DDSCAPS2_VOLUME = 0x200000,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum ResourceDimensions : u32 {
|
||||||
|
DDS_DIMENSION_UNKNOWN,
|
||||||
|
DDS_DIMENSION_BUFFER,
|
||||||
|
DDS_DIMENSION_TEXTURE1D = 2,
|
||||||
|
DDS_DIMENSION_TEXTURE2D = 3,
|
||||||
|
DDS_DIMENSION_TEXTURE3D = 4,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum DXGIFormat : u32 {
|
||||||
|
DXGI_FORMAT_UNKNOWN = 0,
|
||||||
|
DXGI_FORMAT_R32G32B32A32_TYPELESS,
|
||||||
|
DXGI_FORMAT_R32G32B32A32_FLOAT,
|
||||||
|
DXGI_FORMAT_R32G32B32A32_UINT,
|
||||||
|
DXGI_FORMAT_R32G32B32A32_SINT,
|
||||||
|
DXGI_FORMAT_R32G32B32_TYPELESS,
|
||||||
|
DXGI_FORMAT_R32G32B32_FLOAT,
|
||||||
|
DXGI_FORMAT_R32G32B32_UINT,
|
||||||
|
DXGI_FORMAT_R32G32B32_SINT,
|
||||||
|
DXGI_FORMAT_R16G16B16A16_TYPELESS,
|
||||||
|
DXGI_FORMAT_R16G16B16A16_FLOAT,
|
||||||
|
DXGI_FORMAT_R16G16B16A16_UNORM,
|
||||||
|
DXGI_FORMAT_R16G16B16A16_UINT,
|
||||||
|
DXGI_FORMAT_R16G16B16A16_SNORM,
|
||||||
|
DXGI_FORMAT_R16G16B16A16_SINT,
|
||||||
|
DXGI_FORMAT_R32G32_TYPELESS,
|
||||||
|
DXGI_FORMAT_R32G32_FLOAT,
|
||||||
|
DXGI_FORMAT_R32G32_UINT,
|
||||||
|
DXGI_FORMAT_R32G32_SINT,
|
||||||
|
DXGI_FORMAT_R32G8X24_TYPELESS,
|
||||||
|
DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
|
||||||
|
DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
|
||||||
|
DXGI_FORMAT_X32_TYPELESS_G8X24_UINT,
|
||||||
|
DXGI_FORMAT_R10G10B10A2_TYPELESS,
|
||||||
|
DXGI_FORMAT_R10G10B10A2_UNORM,
|
||||||
|
DXGI_FORMAT_R10G10B10A2_UINT,
|
||||||
|
DXGI_FORMAT_R11G11B10_FLOAT,
|
||||||
|
DXGI_FORMAT_R8G8B8A8_TYPELESS,
|
||||||
|
DXGI_FORMAT_R8G8B8A8_UNORM,
|
||||||
|
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
|
||||||
|
DXGI_FORMAT_R8G8B8A8_UINT,
|
||||||
|
DXGI_FORMAT_R8G8B8A8_SNORM,
|
||||||
|
DXGI_FORMAT_R8G8B8A8_SINT,
|
||||||
|
DXGI_FORMAT_R16G16_TYPELESS,
|
||||||
|
DXGI_FORMAT_R16G16_FLOAT,
|
||||||
|
DXGI_FORMAT_R16G16_UNORM,
|
||||||
|
DXGI_FORMAT_R16G16_UINT,
|
||||||
|
DXGI_FORMAT_R16G16_SNORM,
|
||||||
|
DXGI_FORMAT_R16G16_SINT,
|
||||||
|
DXGI_FORMAT_R32_TYPELESS,
|
||||||
|
DXGI_FORMAT_D32_FLOAT,
|
||||||
|
DXGI_FORMAT_R32_FLOAT,
|
||||||
|
DXGI_FORMAT_R32_UINT,
|
||||||
|
DXGI_FORMAT_R32_SINT,
|
||||||
|
DXGI_FORMAT_R24G8_TYPELESS,
|
||||||
|
DXGI_FORMAT_D24_UNORM_S8_UINT,
|
||||||
|
DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
|
||||||
|
DXGI_FORMAT_X24_TYPELESS_G8_UINT,
|
||||||
|
DXGI_FORMAT_R8G8_TYPELESS,
|
||||||
|
DXGI_FORMAT_R8G8_UNORM,
|
||||||
|
DXGI_FORMAT_R8G8_UINT,
|
||||||
|
DXGI_FORMAT_R8G8_SNORM,
|
||||||
|
DXGI_FORMAT_R8G8_SINT,
|
||||||
|
DXGI_FORMAT_R16_TYPELESS,
|
||||||
|
DXGI_FORMAT_R16_FLOAT,
|
||||||
|
DXGI_FORMAT_D16_UNORM,
|
||||||
|
DXGI_FORMAT_R16_UNORM,
|
||||||
|
DXGI_FORMAT_R16_UINT,
|
||||||
|
DXGI_FORMAT_R16_SNORM,
|
||||||
|
DXGI_FORMAT_R16_SINT,
|
||||||
|
DXGI_FORMAT_R8_TYPELESS,
|
||||||
|
DXGI_FORMAT_R8_UNORM,
|
||||||
|
DXGI_FORMAT_R8_UINT,
|
||||||
|
DXGI_FORMAT_R8_SNORM,
|
||||||
|
DXGI_FORMAT_R8_SINT,
|
||||||
|
DXGI_FORMAT_A8_UNORM,
|
||||||
|
DXGI_FORMAT_R1_UNORM,
|
||||||
|
DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
|
||||||
|
DXGI_FORMAT_R8G8_B8G8_UNORM,
|
||||||
|
DXGI_FORMAT_G8R8_G8B8_UNORM,
|
||||||
|
DXGI_FORMAT_BC1_TYPELESS,
|
||||||
|
DXGI_FORMAT_BC1_UNORM,
|
||||||
|
DXGI_FORMAT_BC1_UNORM_SRGB,
|
||||||
|
DXGI_FORMAT_BC2_TYPELESS,
|
||||||
|
DXGI_FORMAT_BC2_UNORM,
|
||||||
|
DXGI_FORMAT_BC2_UNORM_SRGB,
|
||||||
|
DXGI_FORMAT_BC3_TYPELESS,
|
||||||
|
DXGI_FORMAT_BC3_UNORM,
|
||||||
|
DXGI_FORMAT_BC3_UNORM_SRGB,
|
||||||
|
DXGI_FORMAT_BC4_TYPELESS,
|
||||||
|
DXGI_FORMAT_BC4_UNORM,
|
||||||
|
DXGI_FORMAT_BC4_SNORM,
|
||||||
|
DXGI_FORMAT_BC5_TYPELESS,
|
||||||
|
DXGI_FORMAT_BC5_UNORM,
|
||||||
|
DXGI_FORMAT_BC5_SNORM,
|
||||||
|
DXGI_FORMAT_B5G6R5_UNORM,
|
||||||
|
DXGI_FORMAT_B5G5R5A1_UNORM,
|
||||||
|
DXGI_FORMAT_B8G8R8A8_UNORM,
|
||||||
|
DXGI_FORMAT_B8G8R8X8_UNORM,
|
||||||
|
DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM,
|
||||||
|
DXGI_FORMAT_B8G8R8A8_TYPELESS,
|
||||||
|
DXGI_FORMAT_B8G8R8A8_UNORM_SRGB,
|
||||||
|
DXGI_FORMAT_B8G8R8X8_TYPELESS,
|
||||||
|
DXGI_FORMAT_B8G8R8X8_UNORM_SRGB,
|
||||||
|
DXGI_FORMAT_BC6H_TYPELESS,
|
||||||
|
DXGI_FORMAT_BC6H_UF16,
|
||||||
|
DXGI_FORMAT_BC6H_SF16,
|
||||||
|
DXGI_FORMAT_BC7_TYPELESS,
|
||||||
|
DXGI_FORMAT_BC7_UNORM,
|
||||||
|
DXGI_FORMAT_BC7_UNORM_SRGB,
|
||||||
|
DXGI_FORMAT_AYUV,
|
||||||
|
DXGI_FORMAT_Y410,
|
||||||
|
DXGI_FORMAT_Y416,
|
||||||
|
DXGI_FORMAT_NV12,
|
||||||
|
DXGI_FORMAT_P010,
|
||||||
|
DXGI_FORMAT_P016,
|
||||||
|
DXGI_FORMAT_420_OPAQUE,
|
||||||
|
DXGI_FORMAT_YUY2,
|
||||||
|
DXGI_FORMAT_Y210,
|
||||||
|
DXGI_FORMAT_Y216,
|
||||||
|
DXGI_FORMAT_NV11,
|
||||||
|
DXGI_FORMAT_AI44,
|
||||||
|
DXGI_FORMAT_IA44,
|
||||||
|
DXGI_FORMAT_P8,
|
||||||
|
DXGI_FORMAT_A8P8,
|
||||||
|
DXGI_FORMAT_B4G4R4A4_UNORM,
|
||||||
|
DXGI_FORMAT_P208,
|
||||||
|
DXGI_FORMAT_V208,
|
||||||
|
DXGI_FORMAT_V408,
|
||||||
|
DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE,
|
||||||
|
DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE,
|
||||||
|
DXGI_FORMAT_FORCE_UINT
|
||||||
|
};
|
||||||
|
|
||||||
|
enum DDSFlags : u32 {
|
||||||
|
DDSD_CAPS = 0x1,
|
||||||
|
DDSD_HEIGHT = 0x2,
|
||||||
|
DDSD_WIDTH = 0x4,
|
||||||
|
DDSD_PITCH = 0x8,
|
||||||
|
DDSD_PIXELFORMAT = 0x1000,
|
||||||
|
DDSD_MIPMAPCOUNT = 0x20000,
|
||||||
|
DDSD_LINEARSIZE = 0x80000,
|
||||||
|
DDSD_DEPTH = 0x800000,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum PixelFormatFlags : u32 {
|
||||||
|
DDPF_ALPHAPIXELS = 0x1,
|
||||||
|
DDPF_ALPHA = 0x2,
|
||||||
|
DDPF_FOURCC = 0x4,
|
||||||
|
DDPF_PALETTEINDEXED8 = 0x20,
|
||||||
|
DDPF_RGB = 0x40,
|
||||||
|
DDPF_YUV = 0x200,
|
||||||
|
DDPF_LUMINANCE = 0x20000,
|
||||||
|
DDPF_BUMPDUDV = 0x80000,
|
||||||
|
DDPF_NORMAL = 0x80000000,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DDSPixelFormat {
|
||||||
|
u32 size {};
|
||||||
|
u32 flags {};
|
||||||
|
u32 four_cc {};
|
||||||
|
u32 rgb_bit_count {};
|
||||||
|
u32 r_bit_mask {};
|
||||||
|
u32 g_bit_mask {};
|
||||||
|
u32 b_bit_mask {};
|
||||||
|
u32 a_bit_mask {};
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DDSHeader {
|
||||||
|
u32 size {};
|
||||||
|
u32 flags {};
|
||||||
|
u32 height {};
|
||||||
|
u32 width {};
|
||||||
|
u32 pitch {};
|
||||||
|
u32 depth {};
|
||||||
|
u32 mip_map_count {};
|
||||||
|
u32 reserved[11];
|
||||||
|
DDSPixelFormat pixel_format;
|
||||||
|
u32 caps1 {};
|
||||||
|
u32 caps2 {};
|
||||||
|
u32 caps3 {};
|
||||||
|
u32 caps4 {};
|
||||||
|
u32 reserved2 {};
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DDSHeaderDXT10 {
|
||||||
|
DXGIFormat format {};
|
||||||
|
u32 resource_dimension {};
|
||||||
|
u32 misc_flag {};
|
||||||
|
u32 array_size {};
|
||||||
|
u32 misc_flag2 {};
|
||||||
|
};
|
||||||
|
|
||||||
|
RefPtr<Gfx::Bitmap> load_dds(String const& path);
|
||||||
|
RefPtr<Gfx::Bitmap> load_dds_from_memory(const u8*, size_t);
|
||||||
|
|
||||||
|
struct DDSLoadingContext;
|
||||||
|
|
||||||
|
class DDSImageDecoderPlugin final : public ImageDecoderPlugin {
|
||||||
|
public:
|
||||||
|
virtual ~DDSImageDecoderPlugin() override;
|
||||||
|
DDSImageDecoderPlugin(const u8*, size_t);
|
||||||
|
|
||||||
|
virtual IntSize size() override;
|
||||||
|
virtual RefPtr<Gfx::Bitmap> bitmap() override;
|
||||||
|
virtual void set_volatile() override;
|
||||||
|
[[nodiscard]] virtual bool set_nonvolatile() override;
|
||||||
|
virtual bool sniff() override;
|
||||||
|
virtual bool is_animated() override;
|
||||||
|
virtual size_t loop_count() override;
|
||||||
|
virtual size_t frame_count() override;
|
||||||
|
virtual ImageFrameDescriptor frame(size_t i) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
OwnPtr<DDSLoadingContext> m_context;
|
||||||
|
void dump_debug();
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -5,6 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LibGfx/BMPLoader.h>
|
#include <LibGfx/BMPLoader.h>
|
||||||
|
#include <LibGfx/DDSLoader.h>
|
||||||
#include <LibGfx/GIFLoader.h>
|
#include <LibGfx/GIFLoader.h>
|
||||||
#include <LibGfx/ICOLoader.h>
|
#include <LibGfx/ICOLoader.h>
|
||||||
#include <LibGfx/ImageDecoder.h>
|
#include <LibGfx/ImageDecoder.h>
|
||||||
|
@ -50,6 +51,10 @@ ImageDecoder::ImageDecoder(const u8* data, size_t size)
|
||||||
if (m_plugin->sniff())
|
if (m_plugin->sniff())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
m_plugin = make<DDSImageDecoderPlugin>(data, size);
|
||||||
|
if (m_plugin->sniff())
|
||||||
|
return;
|
||||||
|
|
||||||
m_plugin = nullptr;
|
m_plugin = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue