Haio
0.2.X
Homebrew Asset IO/CDN
Toggle main menu visibility
Loading...
Searching...
No Matches
encode.cpp
Go to the documentation of this file.
1
#include <
haio_codec.hpp
>
2
#include <
haio_convert.hpp
>
3
#include <
haio_util.hpp
>
4
5
namespace
Haio::Codecs
{
6
namespace
{
7
8
template
<Color P>
9
Result<Blob>
encodeKtx(
Image<P>
img) {
10
const
Size
size{img.
width
, img.
height
};
11
HAIO_TRY
(expected,
sizeOf
(P, size));
12
if
(img.
data
.size() != expected)
HAIO_FAIL
(
InvalidInput
,
"ktx payload does not match its size"
);
13
14
HAIO_TRY
(profile,
Util::GPU::profileFor
(P, size));
15
std::vector<uint8_t> out = {0xab, 0x4b, 0x54, 0x58, 0x20, 0x31, 0x31, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a};
16
for
(
auto
v : {0x04030201u, profile.glType,
Util::GPU::typeSize
(profile), profile.glFormat, profile.glInternal,
17
profile.glBase,
static_cast<
uint32_t
>
(size.
width
),
static_cast<
uint32_t
>
(size.
height
),
18
0u, 0u, 1u, 1u, 0u}) {
19
Util::appendU32LE
(out, v);
20
}
21
Util::appendU32LE
(out,
static_cast<
uint32_t
>
(img.
data
.size()));
22
out.insert(out.end(), img.
data
.begin(), img.
data
.end());
23
while
(out.size() % 4) out.push_back(0);
24
25
return
Blob
{
Format::KTX
, P,
"image/ktx"
, {}, std::move(out)};
26
}
27
28
}
29
30
/**
31
* @addtogroup encode
32
* @{
33
*/
34
template
<>
35
Result<Blob>
Encode<Format::KTX, Color::ETC1>
(
Image<Color::ETC1>
img) {
36
return
encodeKtx<Color::ETC1>(std::move(img));
37
}
38
/** @} */
39
40
/**
41
* @addtogroup encode
42
* @{
43
*/
44
template
<>
45
Result<Blob>
Encode<Format::KTX, Color::RGB565>
(
Image<Color::RGB565>
img) {
46
return
encodeKtx<Color::RGB565>(std::move(img));
47
}
48
/** @} */
49
50
/**
51
* @addtogroup encode
52
* @{
53
*/
54
template
<>
55
Result<Blob>
Encode<Format::KTX, Color::RGBA8888>
(
Image<Color::RGBA8888>
img) {
56
return
encodeKtx<Color::RGBA8888>(std::move(img));
57
}
58
/** @} */
59
60
}
Haio::Codecs::Encode< Format::KTX, Color::ETC1 >
Result< Blob > Encode< Format::KTX, Color::ETC1 >(Image< Color::ETC1 > img)
Definition
encode.cpp:35
Haio::Codecs::Encode< Format::KTX, Color::RGB565 >
Result< Blob > Encode< Format::KTX, Color::RGB565 >(Image< Color::RGB565 > img)
Definition
encode.cpp:45
Haio::Codecs::Encode< Format::KTX, Color::RGBA8888 >
Result< Blob > Encode< Format::KTX, Color::RGBA8888 >(Image< Color::RGBA8888 > img)
Definition
encode.cpp:55
haio_codec.hpp
HAIO_TRY
#define HAIO_TRY(name, expr)
Definition
haio_codec.hpp:246
HAIO_FAIL
#define HAIO_FAIL(why, message)
Definition
haio_codec.hpp:258
haio_convert.hpp
haio_util.hpp
Haio::Codecs
Definition
haio_codec.hpp:136
Haio::Util::GPU::profileFor
Result< Profile > profileFor(Color color, Size size)
Definition
gpu.cpp:20
Haio::Util::GPU::typeSize
uint32_t typeSize(const Profile &profile)
Definition
gpu.cpp:34
Haio::Util::appendU32LE
void appendU32LE(std::vector< uint8_t > &out, uint32_t value)
Definition
bytes.cpp:9
Haio::Result
std::expected< T, Error > Result
Definition
haio_codec.hpp:32
Haio::sizeOf
Result< size_t > sizeOf(Color color, Size size)
Definition
sizes.cpp:6
Haio::Size::height
int height
Definition
haio_object.hpp:14
Haio::Format::KTX
@ KTX
Definition
haio_formats.hpp:39
Haio::ErrorCode::InvalidInput
@ InvalidInput
Definition
haio_codec.hpp:18
Haio::Size::width
int width
Definition
haio_object.hpp:13
Haio::Blob
Definition
haio_codec.hpp:122
Haio::Size
Definition
haio_object.hpp:12
Haio::Image
Definition
haio_codec.hpp:36
Haio::Image::height
int height
Definition
haio_codec.hpp:39
Haio::Image::width
int width
Definition
haio_codec.hpp:38
Haio::Image::data
std::vector< uint8_t > data
Definition
haio_codec.hpp:40
library
backend
codecs
container
ktx
encode.cpp
Generated by
1.18.0