Index PPI project layers

This commit is contained in:
2026-06-01 12:53:48 +02:00
parent 677d0b33a8
commit 7319cb9aa9
8 changed files with 317 additions and 47 deletions

View File

@@ -2,9 +2,12 @@
#include "foundation/result.h"
#include <array>
#include <cstddef>
#include <cstdint>
#include <span>
#include <string>
#include <vector>
namespace pp::assets {
@@ -64,6 +67,43 @@ struct PpiProjectSummary {
PpiBodySummary body;
};
struct PpiFacePayloadSummary {
bool has_data = false;
std::uint32_t x0 = 0;
std::uint32_t y0 = 0;
std::uint32_t x1 = 0;
std::uint32_t y1 = 0;
std::uint32_t body_payload_offset = 0;
std::uint32_t payload_bytes = 0;
std::uint32_t png_width = 0;
std::uint32_t png_height = 0;
};
struct PpiFrameSummary {
std::uint32_t duration_ms = 100;
std::array<PpiFacePayloadSummary, 6> faces;
};
struct PpiLayerSummary {
std::uint32_t stored_order = 0;
std::string name;
float opacity = 1.0F;
std::uint32_t blend_mode = 0;
bool alpha_locked = false;
bool visible = true;
std::vector<PpiFrameSummary> frames;
};
struct PpiBodyIndex {
PpiBodySummary summary;
std::vector<PpiLayerSummary> layers;
};
struct PpiProjectIndex {
PpiProjectLayout layout;
PpiBodyIndex body;
};
[[nodiscard]] pp::foundation::Result<PpiHeaderInfo> parse_ppi_header(
std::span<const std::byte> bytes) noexcept;
@@ -76,7 +116,14 @@ struct PpiProjectSummary {
PpiHeaderInfo header,
std::span<const std::byte> body) noexcept;
[[nodiscard]] pp::foundation::Result<PpiBodyIndex> parse_ppi_body_index(
PpiHeaderInfo header,
std::span<const std::byte> body);
[[nodiscard]] pp::foundation::Result<PpiProjectSummary> parse_ppi_project_summary(
std::span<const std::byte> bytes) noexcept;
[[nodiscard]] pp::foundation::Result<PpiProjectIndex> parse_ppi_project_index(
std::span<const std::byte> bytes);
}