10 if (activeToken_ ==
token)
return PackState::Ready;
11 if (pendingToken_ ==
token)
return PackState::Loading;
12 return PackState::Unloaded;
15 ModernTokenPreview::PackResult ModernTokenPreview::loadPack(std::filesystem::path
directory)
noexcept
24 if (!result.frames[
index])
return {};
26 result.complete =
true;
29 catch (...) {
return {}; }
32 std::shared_ptr<const data::LegacyBitmapRGBA8>
33 ModernTokenPreview::decode(
const std::filesystem::path&
path)
36 std::ifstream
input(
path, std::ios::binary | std::ios::ate);
37 if (!
input)
return {};
40 std::vector<std::byte>
bytes(
static_cast<std::size_t
>(size));
42 if (!
input.read(
reinterpret_cast<char*
>(
bytes.data()),
static_cast<std::streamsize
>(
bytes.size())))
return {};
45 if (!
decoded || (*decoded)->width != 768 || (*decoded)->height != 640 ||
46 (*decoded)->rgba.size() != 768U * 640U * 4U)
return {};
48 for (std::size_t
index = 3;
index < (*decoded)->rgba.size();
index += 4)
51 visible |= (*decoded)->rgba[
index] != 0;
54 return std::make_shared<const data::LegacyBitmapRGBA8>(
55 data::LegacyBitmapRGBA8{768, 640, (*decoded)->rgba});
58 std::shared_ptr<const data::LegacyBitmapRGBA8>
67 if (!attemptedThumbnails_[
token])
69 attemptedThumbnails_[
token] =
true;
72 return thumbnails_[
token];
76 if (pending_.wait_for(std::chrono::seconds(0)) != std::future_status::ready)
return {};
79 try { completed = pending_.get(); }
81 pendingToken_.reset();
85 frames_ = std::move(completed.frames);
90 if (failedPacks_[
token])
return {};
91 if (activeToken_ ==
token)
return frames_[
frame];
96 pending_ = std::async(std::launch::async, &ModernTokenPreview::loadPack,
directory);
97 pendingToken_ =
token;
102 if (
frame == 255) attemptedThumbnails_[
token] =
true;
103 else failedPacks_[
token] =
true;
std::vector< std::byte > bytes
std::filesystem::path directory
std::expected< std::shared_ptr< const ModernTextureImage >, MeshRuntimeError > decodeModernImage(std::span< const std::byte > bytes, ModernImageEncoding encoding, ModernImageDecodeLimits limits)
const std::array< ModernTokenDefinition, ModernTokenCount > & modernTokenDefinitions() noexcept
constexpr std::size_t ModernTokenCount