yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
snes_palette_layout.h
Go to the documentation of this file.
1#ifndef YAZE_APP_GFX_TYPES_SNES_PALETTE_LAYOUT_H_
2#define YAZE_APP_GFX_TYPES_SNES_PALETTE_LAYOUT_H_
3
4#include <cstddef>
5#include <cstdint>
6#include <optional>
7#include <utility>
8#include <vector>
9
10#include "absl/status/status.h"
11#include "absl/status/statusor.h"
12
13namespace yaze::gfx {
14
15struct PaletteGroup;
16
17namespace palette_group_internal {
18
20
21// A validated native span in normalized (copier-header-free) ROM coordinates.
22// Span/shape validation does not grant storage ownership.
24 public:
25 uint32_t pc_address() const { return pc_address_; }
26 uint32_t snes_address() const { return snes_address_; }
27 int color_count() const { return color_count_; }
28 size_t byte_size() const { return static_cast<size_t>(color_count_) * 2; }
29 absl::StatusOr<uint32_t> ColorAddress(int color_index) const;
30 absl::StatusOr<std::pair<uint32_t, uint32_t>> ColorWriteRange(
31 int color_index) const;
32
33 private:
34 friend absl::StatusOr<ResolvedPaletteRecord> ResolvePaletteRecord(
35 std::optional<uint32_t>, uint64_t, size_t);
36 ResolvedPaletteRecord(uint32_t pc, uint32_t snes, int colors)
37 : pc_address_(pc), snes_address_(snes), color_count_(colors) {}
38 uint32_t pc_address_;
39 uint32_t snes_address_;
41};
42
43absl::StatusOr<ResolvedPaletteRecord> ResolvePaletteRecord(
44 std::optional<uint32_t> snes_address, uint64_t color_count,
45 size_t normalized_rom_size);
46
47// Proposed capacity describes unbound slots, never an active native directory.
49 public:
52 // Includes unbound declared slots; Resolve is required before any use.
53 int RecordCount(OverworldPaletteKind kind) const;
54 absl::StatusOr<ResolvedPaletteRecord> Resolve(
55 OverworldPaletteKind kind, int selector,
56 size_t normalized_rom_size) const;
57
58 private:
59 explicit OverworldPaletteLayout(bool proposed) : proposed_(proposed) {}
61};
62
65 const std::vector<uint8_t>& normalized_rom_data, PaletteGroup& group);
66
67} // namespace palette_group_internal
68
69} // namespace yaze::gfx
70
71#endif // YAZE_APP_GFX_TYPES_SNES_PALETTE_LAYOUT_H_
absl::StatusOr< ResolvedPaletteRecord > Resolve(OverworldPaletteKind kind, int selector, size_t normalized_rom_size) const
ResolvedPaletteRecord(uint32_t pc, uint32_t snes, int colors)
friend absl::StatusOr< ResolvedPaletteRecord > ResolvePaletteRecord(std::optional< uint32_t >, uint64_t, size_t)
absl::StatusOr< std::pair< uint32_t, uint32_t > > ColorWriteRange(int color_index) const
absl::StatusOr< uint32_t > ColorAddress(int color_index) const
absl::Status LoadOverworldPaletteRecords(OverworldPaletteKind kind, const OverworldPaletteLayout &layout, const std::vector< uint8_t > &normalized_rom_data, PaletteGroup &group)
absl::StatusOr< ResolvedPaletteRecord > ResolvePaletteRecord(std::optional< uint32_t > snes_address, uint64_t color_count, size_t normalized_rom_size)
Contains classes for handling graphical data.
Represents a group of palettes.