yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
dungeon_room_composite.cc
Go to the documentation of this file.
2
3#include <memory>
4#include <vector>
5
11
12namespace yaze::editor {
13
14namespace {
15
16constexpr int kRoomCompositeWidth = 512;
17constexpr int kRoomCompositeHeight = 512;
18
19} // namespace
20
22 : bitmap_(std::make_unique<gfx::Bitmap>()) {}
23
30
32 zelda3::Room& room, const zelda3::RoomLayerManager& layer_manager) {
33 room.PrepareForRender();
34 const uint64_t room_revision = room.composite_source_revision();
35 const uint64_t layer_signature = layer_manager.CompositeStateSignature();
36 if (!valid_ || rendered_room_ != &room ||
37 rendered_room_revision_ != room_revision ||
38 rendered_layer_signature_ != layer_signature) {
39 // Retire() releases the resources but deliberately preserves this Bitmap
40 // object's address because Canvas may still retain it. Recreate the SDL
41 // surface in place before RoomLayerManager reuses the output dimensions.
42 if (bitmap_->surface() == nullptr) {
43 bitmap_->Create(
44 kRoomCompositeWidth, kRoomCompositeHeight, 8,
45 std::vector<uint8_t>(kRoomCompositeWidth * kRoomCompositeHeight, 0));
46 }
47 room.RenderComposite(layer_manager, *bitmap_);
48 rendered_room_ = &room;
49 rendered_room_revision_ = room_revision;
50 rendered_layer_signature_ = layer_signature;
51 valid_ = true;
52 }
53 return *bitmap_;
54}
55
59 // Keep the shell at a stable address. Canvas and its modal helpers retain a
60 // raw Bitmap pointer across refreshes; the next Prepare() rebuilds resources
61 // in this same object.
62 rendered_room_ = nullptr;
65 valid_ = false;
66}
67
69 RoomCompositeOutput& output) {
70 zelda3::RoomLayerManager layer_manager;
71 layer_manager.ApplyLayerMerging(room.layer_merging());
72 layer_manager.ApplyRoomEffect(room.effect());
73 return output.Prepare(room, layer_manager);
74}
75
76} // namespace yaze::editor
std::unique_ptr< gfx::Bitmap > bitmap_
gfx::Bitmap & Prepare(zelda3::Room &room, const zelda3::RoomLayerManager &layer_manager)
void RetireBitmap(Bitmap &bitmap)
Explicitly retire resources owned by a bitmap that is being erased.
Definition arena.cc:63
static Arena & Get()
Definition arena.cc:24
Represents a bitmap image optimized for SNES ROM hacking.
Definition bitmap.h:69
static PaletteDebugger & Get()
void ClearCurrentBitmapIf(const gfx::Bitmap *bitmap)
RoomLayerManager - Manages layer visibility and compositing.
void ApplyLayerMerging(const LayerMergeType &merge_type)
void ApplyRoomEffect(EffectKey effect)
void RenderComposite(const RoomLayerManager &layer_mgr, gfx::Bitmap &output)
Definition room.cc:1116
void PrepareForRender(std::optional< uint8_t > entrance_blockset=std::nullopt)
Definition room.cc:980
const LayerMergeType & layer_merging() const
Definition room.h:939
EffectKey effect() const
Definition room.h:935
uint64_t composite_source_revision() const
Definition room.h:1028
Editors are the view controllers for the application.
gfx::Bitmap & PrepareCanonicalRoomComposite(zelda3::Room &room, RoomCompositeOutput &output)