From e529e6ca342fa2144d1f8e03a33d4c72523e8de9 Mon Sep 17 00:00:00 2001 From: scawful Date: Sun, 26 Nov 2023 16:50:29 -0500 Subject: [PATCH] SDL_Texture streaming in ROM, dungeon housekeeping --- src/app/rom.cc | 4 ++-- src/app/rom.h | 23 ++++++++++++++++++----- src/app/zelda3/dungeon/room_object.h | 2 +- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/app/rom.cc b/src/app/rom.cc index dd35976d..e247649f 100644 --- a/src/app/rom.cc +++ b/src/app/rom.cc @@ -203,8 +203,8 @@ absl::StatusOr ROM::Load2BppGraphics() { } absl::Status ROM::LoadLinkGraphics() { - const auto link_gfx_offset = 0x80000; - const auto link_gfx_length = 0x500; + const auto link_gfx_offset = 81920; // $10:8000 + const auto link_gfx_length = 0x800; // Load Links graphics from the ROM for (int i = 0; i < 14; i++) { diff --git a/src/app/rom.h b/src/app/rom.h index a09f03fb..7de27c41 100644 --- a/src/app/rom.h +++ b/src/app/rom.h @@ -475,14 +475,27 @@ class ROM : public core::ExperimentFlags { renderer_ = renderer; } - void RenderBitmap(gfx::Bitmap* bitmap) const { - bitmap->CreateTexture(renderer_); + void RenderBitmap(gfx::Bitmap* bitmap) { + if (flags()->kLoadTexturesAsStreaming) { + // bitmaps_to_create_.emplace(bitmap); + bitmap->CreateTexture(renderer_.get()); + } else { + bitmap->CreateTexture(renderer_); + } } - void UpdateBitmap(gfx::Bitmap* bitmap) const { - bitmap->UpdateTexture(renderer_); + void UpdateBitmap(gfx::Bitmap* bitmap) { + if (flags()->kLoadTexturesAsStreaming) { + // bitmaps_to_render_.emplace(bitmap); + bitmap->UpdateTexture(renderer_.get()); + } else { + bitmap->UpdateTexture(renderer_); + } } + std::stack bitmaps_to_create_; + std::stack bitmaps_to_render_; + auto bitmap_manager() { return graphics_manager_; } std::vector> main_blockset_ids; @@ -604,7 +617,7 @@ class SharedROM { return rom; } - private: + // private: static std::shared_ptr shared_rom_; }; diff --git a/src/app/zelda3/dungeon/room_object.h b/src/app/zelda3/dungeon/room_object.h index c9cf9499..3e609871 100644 --- a/src/app/zelda3/dungeon/room_object.h +++ b/src/app/zelda3/dungeon/room_object.h @@ -188,7 +188,7 @@ class DungeonObjectRenderer : public SharedROM { emu::MemoryImpl memory_; emu::ClockImpl clock_; emu::CPU cpu{memory_, clock_}; - emu::PPU ppu{memory_, clock_}; + emu::Ppu ppu{memory_, clock_}; gfx::Bitmap bitmap_; PseudoVram vram_; };