replace old renderer access pattern

This commit is contained in:
scawful
2024-08-09 18:58:07 -04:00
parent a37f3bbd43
commit 9a2c8ae17a
16 changed files with 129 additions and 154 deletions

View File

@@ -303,7 +303,7 @@ absl::Status Controller::OnEntry(std::string filename) {
master_editor_.emulator().set_audio_device_id(audio_device_);
}
InitializeKeymap();
master_editor_.SetupScreen(renderer_, filename);
master_editor_.SetupScreen(filename);
active_ = true;
return absl::OkStatus();
}
@@ -367,9 +367,10 @@ absl::Status Controller::OnLoad() {
void Controller::DoRender() const {
ImGui::Render();
SDL_RenderClear(renderer_.get());
ImGui_ImplSDLRenderer2_RenderDrawData(ImGui::GetDrawData(), renderer_.get());
SDL_RenderPresent(renderer_.get());
SDL_RenderClear(Renderer::GetInstance().renderer());
ImGui_ImplSDLRenderer2_RenderDrawData(ImGui::GetDrawData(),
Renderer::GetInstance().renderer());
SDL_RenderPresent(Renderer::GetInstance().renderer());
}
void Controller::OnExit() {
@@ -420,18 +421,7 @@ absl::Status Controller::CreateSDL_Window() {
}
absl::Status Controller::CreateRenderer() {
renderer_ = std::unique_ptr<SDL_Renderer, sdl_deleter>(
SDL_CreateRenderer(window_.get(), -1,
SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC),
sdl_deleter());
if (renderer_ == nullptr) {
return absl::InternalError(
absl::StrFormat("SDL_CreateRenderer: %s\n", SDL_GetError()));
} else {
SDL_SetRenderDrawBlendMode(renderer_.get(), SDL_BLENDMODE_BLEND);
SDL_SetRenderDrawColor(renderer_.get(), 0x00, 0x00, 0x00, 0x00);
}
return absl::OkStatus();
return Renderer::GetInstance().CreateRenderer(window_.get());
}
absl::Status Controller::CreateGuiContext() {
@@ -446,8 +436,9 @@ absl::Status Controller::CreateGuiContext() {
}
// Initialize ImGui for SDL
ImGui_ImplSDL2_InitForSDLRenderer(window_.get(), renderer_.get());
ImGui_ImplSDLRenderer2_Init(renderer_.get());
ImGui_ImplSDL2_InitForSDLRenderer(window_.get(),
Renderer::GetInstance().renderer());
ImGui_ImplSDLRenderer2_Init(Renderer::GetInstance().renderer());
if (flags()->kLoadSystemFonts) {
LoadSystemFonts();

View File

@@ -2,6 +2,7 @@
#define YAZE_APP_CORE_CONTROLLER_H
#include <SDL.h>
#include "imgui/backends/imgui_impl_sdl2.h"
#include "imgui/backends/imgui_impl_sdlrenderer2.h"
#include "imgui/imconfig.h"
@@ -12,6 +13,7 @@
#include "absl/status/status.h"
#include "app/core/common.h"
#include "app/core/platform/renderer.h"
#include "app/editor/master_editor.h"
#include "app/editor/utils/editor.h"
#include "app/gui/icons.h"
@@ -45,13 +47,12 @@ class Controller : public ExperimentFlags {
absl::Status CreateGuiContext();
absl::Status LoadFontFamilies() const;
absl::Status LoadAudioDevice();
void SetupScreen() {
master_editor_.SetupScreen(renderer_);
}
void SetupScreen() { master_editor_.SetupScreen(); }
auto master_editor() -> editor::MasterEditor & { return master_editor_; }
auto renderer() -> SDL_Renderer * { return renderer_.get(); }
auto renderer() -> SDL_Renderer * {
return Renderer::GetInstance().renderer();
}
auto window() -> SDL_Window * { return window_.get(); }
private:
@@ -81,7 +82,6 @@ class Controller : public ExperimentFlags {
int16_t *audio_buffer_;
SDL_AudioDeviceID audio_device_;
std::shared_ptr<SDL_Window> window_;
std::shared_ptr<SDL_Renderer> renderer_;
};
} // namespace core

View File

@@ -1,9 +1,8 @@
#include "dungeon_editor.h"
#include "imgui/imgui.h"
#include "app/core/common.h"
#include "app/core/labeling.h"
#include "app/core/platform/renderer.h"
#include "app/gfx/snes_palette.h"
#include "app/gui/canvas.h"
#include "app/gui/color.h"
@@ -12,12 +11,15 @@
#include "app/rom.h"
#include "app/zelda3/dungeon/object_names.h"
#include "app/zelda3/dungeon/room_names.h"
#include "imgui/imgui.h"
#include "zelda3/dungeon/room.h"
namespace yaze {
namespace app {
namespace editor {
using core::Renderer;
using ImGui::BeginChild;
using ImGui::BeginTabBar;
using ImGui::BeginTabItem;
@@ -120,14 +122,14 @@ absl::Status DungeonEditor::RefreshGraphics() {
int block = rooms_[current_room_id_].blocks()[i];
RETURN_IF_ERROR(graphics_bin_[block].ApplyPaletteWithTransparent(
current_palette_group_[current_palette_id_], 0));
rom()->UpdateBitmap(&graphics_bin_[block], true);
Renderer::GetInstance().UpdateBitmap(&graphics_bin_[block], true);
}
auto sprites_aux1_pal_group = rom()->palette_group().sprites_aux1;
for (int i = 9; i < 16; i++) {
int block = rooms_[current_room_id_].blocks()[i];
RETURN_IF_ERROR(graphics_bin_[block].ApplyPaletteWithTransparent(
sprites_aux1_pal_group[current_palette_id_], 0));
rom()->UpdateBitmap(&graphics_bin_[block], true);
Renderer::GetInstance().UpdateBitmap(&graphics_bin_[block], true);
}
return absl::OkStatus();
}
@@ -547,7 +549,7 @@ void DungeonEditor::DrawObjectRenderer() {
current_object_ = i;
object_renderer_.LoadObject(i,
rooms_[current_room_id_].mutable_blocks());
rom()->RenderBitmap(object_renderer_.bitmap());
Renderer::GetInstance().RenderBitmap(object_renderer_.bitmap());
object_loaded_ = true;
}
i += 1;

View File

@@ -13,6 +13,8 @@
#include "app/gfx/compression.h"
#include "app/gfx/scad_format.h"
#include "app/gfx/snes_palette.h"
#include "app/core/platform/renderer.h"
#include "app/gfx/snes_tile.h"
#include "app/gui/asset_browser.h"
#include "app/gui/canvas.h"
@@ -25,6 +27,8 @@ namespace yaze {
namespace app {
namespace editor {
using core::Renderer;
using gfx::kPaletteGroupAddressesKeys;
using ImGui::Button;
using ImGui::InputInt;
@@ -142,7 +146,7 @@ void GraphicsEditor::DrawGfxEditToolset() {
->mutable_bitmap_manager()
->mutable_bitmap(current_sheet_)
->Create(width, height, 8, png_data);
rom()->UpdateBitmap(
Renderer::GetInstance().UpdateBitmap(
rom()->mutable_bitmap_manager()->mutable_bitmap(current_sheet_));
}
}
@@ -291,7 +295,7 @@ absl::Status GraphicsEditor::UpdateGfxTabView() {
auto draw_tile_event = [&]() {
current_sheet_canvas_.DrawTileOnBitmap(tile_size_, &current_bitmap,
current_color_);
rom()->UpdateBitmap(&current_bitmap, true);
Renderer::GetInstance().UpdateBitmap(&current_bitmap, true);
};
current_sheet_canvas_.UpdateColorPainter(
@@ -367,7 +371,7 @@ absl::Status GraphicsEditor::UpdatePaletteColumn() {
RETURN_IF_ERROR(
rom()->bitmap_manager()[current_sheet_].ApplyPaletteWithTransparent(
palette, edit_palette_sub_index_));
rom()->UpdateBitmap(
Renderer::GetInstance().UpdateBitmap(
rom()->mutable_bitmap_manager()->mutable_bitmap(current_sheet_),
true);
refresh_graphics_ = false;
@@ -462,7 +466,7 @@ absl::Status GraphicsEditor::UpdateScadView() {
for (int i = 0; i < graphics_bin_.size(); i++) {
status_ = graphics_bin_[i].ApplyPalette(
col_file_palette_group_[current_palette_index_]);
rom()->UpdateBitmap(&graphics_bin_[i]);
Renderer::GetInstance().UpdateBitmap(&graphics_bin_[i]);
}
refresh_graphics_ = false;
}
@@ -535,7 +539,7 @@ absl::Status GraphicsEditor::DrawCgxImport() {
cgx_bitmap_.Create(0x80, 0x200, 8, decoded_cgx_);
if (col_file_) {
cgx_bitmap_.ApplyPalette(decoded_col_);
rom()->RenderBitmap(&cgx_bitmap_);
Renderer::GetInstance().RenderBitmap(&cgx_bitmap_);
}
}
@@ -570,7 +574,7 @@ absl::Status GraphicsEditor::DrawScrImport() {
scr_bitmap_.Create(0x100, 0x100, 8, decoded_scr_data_);
if (scr_loaded_) {
scr_bitmap_.ApplyPalette(decoded_col_);
rom()->RenderBitmap(&scr_bitmap_);
Renderer::GetInstance().RenderBitmap(&scr_bitmap_);
}
}
@@ -775,7 +779,7 @@ absl::Status GraphicsEditor::DecompressImportData(int size) {
}
}
rom()->RenderBitmap(&bin_bitmap_);
Renderer::GetInstance().RenderBitmap(&bin_bitmap_);
gfx_loaded_ = true;
return absl::OkStatus();
@@ -805,7 +809,7 @@ absl::Status GraphicsEditor::DecompressSuperDonkey() {
status_ = graphics_bin_[i].ApplyPalette(z3_rom_palette_);
}
rom()->RenderBitmap(&graphics_bin_[i]);
Renderer::GetInstance().RenderBitmap(&graphics_bin_[i]);
i++;
}
@@ -830,7 +834,7 @@ absl::Status GraphicsEditor::DecompressSuperDonkey() {
status_ = graphics_bin_[i].ApplyPalette(z3_rom_palette_);
}
rom()->RenderBitmap(&graphics_bin_[i]);
Renderer::GetInstance().RenderBitmap(&graphics_bin_[i]);
i++;
}
super_donkey_ = true;

View File

@@ -17,6 +17,7 @@
#include "app/gfx/snes_tile.h"
#include "app/gfx/tilesheet.h"
#include "app/gui/canvas.h"
#include "app/core/platform/renderer.h"
#include "app/gui/icons.h"
#include "app/gui/input.h"
#include "app/zelda3/dungeon/room.h"
@@ -25,6 +26,8 @@ namespace yaze {
namespace app {
namespace editor {
using core::Renderer;
absl::Status ScreenEditor::Update() {
TAB_BAR("##TabBar")
TAB_ITEM("Dungeon Maps")
@@ -235,13 +238,13 @@ absl::Status ScreenEditor::LoadDungeonMapTile16() {
RETURN_IF_ERROR(tile16_sheet_.mutable_bitmap()->ApplyPalette(
*rom()->mutable_dungeon_palette(3)));
rom()->RenderBitmap(&*tile16_sheet_.mutable_bitmap().get());
Renderer::GetInstance().RenderBitmap(&*tile16_sheet_.mutable_bitmap().get());
for (int i = 0; i < tile16_sheet_.num_tiles(); ++i) {
if (tile16_individual_.count(i) == 0) {
auto tile = tile16_sheet_.GetTile16(i);
tile16_individual_[i] = tile;
rom()->RenderBitmap(&tile16_individual_[i]);
Renderer::GetInstance().RenderBitmap(&tile16_individual_[i]);
}
}
@@ -279,7 +282,7 @@ void ScreenEditor::DrawDungeonMapsTabs() {
if (tile16_individual_.count(tile16_id) == 0) {
auto tile = tile16_sheet_.GetTile16(tile16_id);
std::cout << "Tile16: " << tile16_id << std::endl;
rom()->RenderBitmap(&tile);
Renderer::GetInstance().RenderBitmap(&tile);
tile16_individual_[tile16_id] = tile;
}
screen_canvas_.DrawBitmap(tile16_individual_[tile16_id], (posX * 2),

View File

@@ -1,12 +1,11 @@
#include "tile16_editor.h"
#include "ImGuiFileDialog/ImGuiFileDialog.h"
#include "imgui/imgui.h"
#include <cmath>
#include "ImGuiFileDialog/ImGuiFileDialog.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "app/core/platform/renderer.h"
#include "app/editor/graphics/palette_editor.h"
#include "app/editor/utils/editor.h"
#include "app/gfx/bitmap.h"
@@ -19,11 +18,14 @@
#include "app/gui/style.h"
#include "app/rom.h"
#include "app/zelda3/overworld/overworld.h"
#include "imgui/imgui.h"
namespace yaze {
namespace app {
namespace editor {
using core::Renderer;
using ImGui::BeginChild;
using ImGui::BeginMenu;
using ImGui::BeginMenuBar;
@@ -146,7 +148,7 @@ absl::Status Tile16Editor::UpdateBlockset() {
auto ow_main_pal_group = rom()->palette_group().overworld_main;
RETURN_IF_ERROR(current_tile16_bmp_->ApplyPalette(
ow_main_pal_group[current_palette_]));
rom()->RenderBitmap(current_tile16_bmp_);
Renderer::GetInstance().RenderBitmap(current_tile16_bmp_);
}
}
@@ -197,7 +199,8 @@ absl::Status Tile16Editor::UpdateTile16Edit() {
RETURN_IF_ERROR(
current_gfx_individual_[current_tile8_].ApplyPaletteWithTransparent(
ow_main_pal_group[0], current_palette_));
rom()->UpdateBitmap(&current_gfx_individual_[current_tile8_]);
Renderer::GetInstance().UpdateBitmap(
&current_gfx_individual_[current_tile8_]);
}
tile8_source_canvas_.DrawBitmap(current_gfx_bmp_, 0, 0, 4.0f);
tile8_source_canvas_.DrawGrid();
@@ -214,7 +217,8 @@ absl::Status Tile16Editor::UpdateTile16Edit() {
RETURN_IF_ERROR(
current_gfx_individual_[current_tile8_].ApplyPaletteWithTransparent(
ow_main_pal_group[0], current_palette_));
rom()->UpdateBitmap(&current_gfx_individual_[current_tile8_]);
Renderer::GetInstance().UpdateBitmap(
&current_gfx_individual_[current_tile8_]);
}
if (BeginChild("Tile16 Editor Options",
@@ -227,7 +231,7 @@ absl::Status Tile16Editor::UpdateTile16Edit() {
current_gfx_individual_[current_tile8_], 16, 2.0f)) {
RETURN_IF_ERROR(
DrawToCurrentTile16(tile16_edit_canvas_.drawn_tile_position()));
rom()->UpdateBitmap(current_tile16_bmp_);
Renderer::GetInstance().UpdateBitmap(current_tile16_bmp_);
}
}
tile16_edit_canvas_.DrawGrid();
@@ -260,8 +264,8 @@ absl::Status Tile16Editor::DrawTileEditControls() {
current_gfx_bmp_.ApplyPaletteWithTransparent(palette, value));
RETURN_IF_ERROR(
current_tile16_bmp_->ApplyPaletteWithTransparent(palette, value));
rom()->UpdateBitmap(&current_gfx_bmp_);
rom()->UpdateBitmap(current_tile16_bmp_);
Renderer::GetInstance().UpdateBitmap(&current_gfx_bmp_);
Renderer::GetInstance().UpdateBitmap(current_tile16_bmp_);
}
}
@@ -310,7 +314,7 @@ absl::Status Tile16Editor::LoadTile8() {
current_gfx_individual_[index].Create(0x08, 0x08, 0x08, tile_data);
RETURN_IF_ERROR(current_gfx_individual_[index].ApplyPaletteWithTransparent(
ow_main_pal_group[0], current_palette_));
rom()->RenderBitmap(&current_gfx_individual_[index]);
Renderer::GetInstance().RenderBitmap(&current_gfx_individual_[index]);
}
map_blockset_loaded_ = true;
@@ -371,7 +375,7 @@ absl::Status Tile16Editor::UpdateTransferTileCanvas() {
palette_ = transfer_overworld_.AreaPalette();
// Create the tile16 blockset image
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(
RETURN_IF_ERROR(Renderer::GetInstance().CreateAndRenderBitmap(
0x80, 0x2000, 0x80, transfer_overworld_.Tile16Blockset(),
transfer_blockset_bmp_, palette_));
transfer_blockset_loaded_ = true;
@@ -391,7 +395,7 @@ absl::Status Tile16Editor::SetCurrentTile(int id) {
auto ow_main_pal_group = rom()->palette_group().overworld_main;
RETURN_IF_ERROR(
current_tile16_bmp_->ApplyPalette(ow_main_pal_group[current_palette_]));
rom()->RenderBitmap(current_tile16_bmp_);
Renderer::GetInstance().RenderBitmap(current_tile16_bmp_);
return absl::OkStatus();
}

View File

@@ -3,17 +3,11 @@
#include "ImGuiColorTextEdit/TextEditor.h"
#include "ImGuiFileDialog/ImGuiFileDialog.h"
#include "abseil-cpp/absl/strings/match.h"
#include "imgui/backends/imgui_impl_sdl2.h"
#include "imgui/backends/imgui_impl_sdlrenderer2.h"
#include "imgui/imgui.h"
#include "imgui/misc/cpp/imgui_stdlib.h"
#include "imgui_internal.h"
#include "imgui_memory_editor.h"
#include "absl/status/status.h"
#include "app/core/common.h"
#include "app/core/constants.h"
#include "app/core/platform/file_dialog.h"
#include "app/core/platform/renderer.h"
#include "app/editor/code/assembly_editor.h"
#include "app/editor/dungeon/dungeon_editor.h"
#include "app/editor/graphics/graphics_editor.h"
@@ -32,6 +26,12 @@
#include "app/gui/input.h"
#include "app/gui/style.h"
#include "app/rom.h"
#include "imgui/backends/imgui_impl_sdl2.h"
#include "imgui/backends/imgui_impl_sdlrenderer2.h"
#include "imgui/imgui.h"
#include "imgui/misc/cpp/imgui_stdlib.h"
#include "imgui_internal.h"
#include "imgui_memory_editor.h"
namespace yaze {
namespace app {
@@ -40,9 +40,9 @@ namespace editor {
using namespace ImGui;
namespace {
bool BeginCentered(const char *name) {
ImGuiIO const &io = GetIO();
bool BeginCentered(const char* name) {
ImGuiIO const& io = GetIO();
ImVec2 pos(io.DisplaySize.x * 0.5f, io.DisplaySize.y * 0.5f);
SetNextWindowPos(pos, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
ImGuiWindowFlags flags =
@@ -58,10 +58,7 @@ bool IsEditorActive(Editor* editor, std::vector<Editor*>& active_editors) {
} // namespace
void MasterEditor::SetupScreen(std::shared_ptr<SDL_Renderer> renderer,
std::string filename) {
sdl_renderer_ = renderer;
rom()->SetupRenderer(renderer);
void MasterEditor::SetupScreen(std::string filename) {
if (!filename.empty()) {
PRINT_IF_ERROR(rom()->LoadFromFile(filename));
}
@@ -656,7 +653,6 @@ void MasterEditor::DrawTestMenu() {
MenuItem("Run Tests", nullptr, &show_tests_);
EndMenu();
}
}
void MasterEditor::DrawProjectMenu() {

View File

@@ -5,10 +5,6 @@
#include "ImGuiColorTextEdit/TextEditor.h"
#include "ImGuiFileDialog/ImGuiFileDialog.h"
#include "imgui/imgui.h"
#include "imgui/misc/cpp/imgui_stdlib.h"
#include "imgui_memory_editor.h"
#include "absl/status/status.h"
#include "app/core/common.h"
#include "app/core/constants.h"
@@ -32,6 +28,9 @@
#include "app/gui/icons.h"
#include "app/gui/input.h"
#include "app/rom.h"
#include "imgui/imgui.h"
#include "imgui/misc/cpp/imgui_stdlib.h"
#include "imgui_memory_editor.h"
namespace yaze {
namespace app {
@@ -69,8 +68,7 @@ class MasterEditor : public SharedRom,
active_editors_.push_back(&message_editor_);
}
void SetupScreen(std::shared_ptr<SDL_Renderer> renderer,
std::string filename = "");
void SetupScreen(std::string filename = "");
absl::Status Update();
auto emulator() -> emu::Emulator& { return emulator_; }
@@ -111,8 +109,6 @@ class MasterEditor : public SharedRom,
absl::Status status_;
absl::Status prev_status_;
std::shared_ptr<SDL_Renderer> sdl_renderer_;
emu::Emulator emulator_;
Project current_project_;

View File

@@ -11,6 +11,7 @@
#include "absl/strings/str_replace.h"
#include "absl/strings/str_split.h"
#include "app/core/common.h"
#include "app/core/platform/renderer.h"
#include "app/editor/utils/editor.h"
#include "app/gfx/bitmap.h"
#include "app/gfx/snes_palette.h"
@@ -24,6 +25,8 @@ namespace yaze {
namespace app {
namespace editor {
using core::Renderer;
using ImGui::Begin;
using ImGui::BeginChild;
using ImGui::BeginTable;
@@ -212,7 +215,7 @@ void MessageEditor::DrawCurrentMessage() {
Text("Message Preview");
if (Button("Refresh Bitmap")) {
rom()->UpdateBitmap(&current_font_gfx16_bitmap_);
Renderer::GetInstance().UpdateBitmap(&current_font_gfx16_bitmap_);
}
gui::BeginPadding(1);
BeginChild("CurrentGfxFont", ImVec2(0, 0), true,
@@ -260,7 +263,7 @@ absl::Status MessageEditor::Initialize() {
font_gfx16_data = gfx::SnesTo8bppSheet(data, /*bpp=*/2);
// 4bpp
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(
RETURN_IF_ERROR(Renderer::GetInstance().CreateAndRenderBitmap(
128, 128, 8, font_gfx16_data, font_gfx_bitmap_, font_preview_colors_))
current_font_gfx16_data_.reserve(172 * 4096);
@@ -269,7 +272,7 @@ absl::Status MessageEditor::Initialize() {
}
// 8bpp
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(
RETURN_IF_ERROR(Renderer::GetInstance().CreateAndRenderBitmap(
172, 4096, 64, current_font_gfx16_data_, current_font_gfx16_bitmap_,
font_preview_colors_))

View File

@@ -1,9 +1,12 @@
#include "app/core/platform/renderer.h"
#include "app/editor/overworld_editor.h"
namespace yaze {
namespace app {
namespace editor {
using core::Renderer;
void OverworldEditor::RefreshChildMap(int map_index) {
overworld_.mutable_overworld_map(map_index)->LoadAreaGraphics();
status_ = overworld_.mutable_overworld_map(map_index)->BuildTileset();
@@ -50,7 +53,7 @@ void OverworldEditor::RefreshOverworldMap() {
int n = is_large ? 4 : 1;
// We do texture updating on the main thread
for (int i = 0; i < n; ++i) {
rom()->UpdateBitmap(&maps_bmp_[indices[i]]);
Renderer::GetInstance().UpdateBitmap(&maps_bmp_[indices[i]]);
}
}
@@ -106,7 +109,7 @@ absl::Status OverworldEditor::RefreshTile16Blockset() {
overworld_.set_current_map(current_map_);
palette_ = overworld_.AreaPalette();
// Create the tile16 blockset image
rom()->UpdateBitmap(&tile16_blockset_bmp_);
Renderer::GetInstance().UpdateBitmap(&tile16_blockset_bmp_);
RETURN_IF_ERROR(tile16_blockset_bmp_.ApplyPalette(palette_));
// Copy the tile16 data into individual tiles.
@@ -146,7 +149,7 @@ absl::Status OverworldEditor::RefreshTile16Blockset() {
// Render the bitmaps of each tile.
for (int id = 0; id < 4096; id++) {
RETURN_IF_ERROR(tile16_individual_[id].ApplyPalette(palette_));
rom()->UpdateBitmap(&tile16_individual_[id]);
Renderer::GetInstance().UpdateBitmap(&tile16_individual_[id]);
}
return absl::OkStatus();

View File

@@ -11,6 +11,7 @@
#include "app/core/common.h"
#include "app/core/constants.h"
#include "app/core/platform/clipboard.h"
#include "app/core/platform/renderer.h"
#include "app/editor/graphics/palette_editor.h"
#include "app/editor/overworld/entity.h"
#include "app/gfx/bitmap.h"
@@ -29,6 +30,8 @@ namespace yaze {
namespace app {
namespace editor {
using core::Renderer;
using ImGui::BeginChild;
using ImGui::BeginTabBar;
using ImGui::BeginTabItem;
@@ -589,7 +592,7 @@ absl::Status OverworldEditor::CheckForCurrentMap() {
ImGui::IsMouseClicked(ImGuiMouseButton_Right)) {
RefreshOverworldMap();
RETURN_IF_ERROR(RefreshTile16Blockset());
rom()->UpdateBitmap(&maps_bmp_[current_map_]);
Renderer::GetInstance().UpdateBitmap(&maps_bmp_[current_map_]);
maps_bmp_[current_map_].set_modified(false);
}
@@ -709,7 +712,7 @@ absl::Status OverworldEditor::DrawAreaGraphics() {
overworld_.set_current_map(current_map_);
palette_ = overworld_.AreaPalette();
gfx::Bitmap bmp;
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(
RETURN_IF_ERROR(Renderer::GetInstance().CreateAndRenderBitmap(
0x80, kOverworldMapSize, 0x08, overworld_.current_graphics(), bmp,
palette_));
current_graphics_set_[current_map_] = bmp;
@@ -981,14 +984,14 @@ absl::Status OverworldEditor::LoadGraphics() {
palette_ = overworld_.AreaPalette();
// Create the area graphics image
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(0x80, kOverworldMapSize, 0x40,
overworld_.current_graphics(),
current_gfx_bmp_, palette_));
RETURN_IF_ERROR(Renderer::GetInstance().CreateAndRenderBitmap(
0x80, kOverworldMapSize, 0x40, overworld_.current_graphics(),
current_gfx_bmp_, palette_));
// Create the tile16 blockset image
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(0x80, 0x2000, 0x08,
overworld_.Tile16Blockset(),
tile16_blockset_bmp_, palette_));
RETURN_IF_ERROR(Renderer::GetInstance().CreateAndRenderBitmap(
0x80, 0x2000, 0x08, overworld_.Tile16Blockset(), tile16_blockset_bmp_,
palette_));
map_blockset_loaded_ = true;
// Copy the tile16 data into individual tiles.
@@ -1016,7 +1019,7 @@ absl::Status OverworldEditor::LoadGraphics() {
// Render the bitmaps of each tile.
for (int id = 0; id < 4096; id++) {
tile16_individual_.emplace_back();
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(
RETURN_IF_ERROR(Renderer::GetInstance().CreateAndRenderBitmap(
0x10, 0x10, 0x80, tile16_individual_data_[id], tile16_individual_[id],
palette_));
}
@@ -1025,7 +1028,7 @@ absl::Status OverworldEditor::LoadGraphics() {
for (int i = 0; i < zelda3::overworld::kNumOverworldMaps; ++i) {
overworld_.set_current_map(i);
auto palette = overworld_.AreaPalette();
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(
RETURN_IF_ERROR(Renderer::GetInstance().CreateAndRenderBitmap(
kOverworldMapSize, kOverworldMapSize, 0x200, overworld_.BitmapData(),
maps_bmp_[i], palette));
}
@@ -1047,7 +1050,7 @@ absl::Status OverworldEditor::LoadSpriteGraphics() {
auto spr_gfx = sprite.PreviewGraphics();
sprite_previews_[sprite.id()].Create(width, height, depth, spr_gfx);
RETURN_IF_ERROR(sprite_previews_[sprite.id()].ApplyPalette(palette_));
rom()->RenderBitmap(&(sprite_previews_[sprite.id()]));
Renderer::GetInstance().RenderBitmap(&(sprite_previews_[sprite.id()]));
}
return absl::OkStatus();
}
@@ -1321,7 +1324,7 @@ absl::Status OverworldEditor::LoadAnimatedMaps() {
}
RETURN_IF_ERROR(map.BuildBitmap(blockset));
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(
RETURN_IF_ERROR(Renderer::GetInstance().CreateAndRenderBitmap(
kOverworldMapSize, kOverworldMapSize, 0x200, map.bitmap_data(),
animated_maps_[world_index], *map.mutable_current_palette()));

View File

@@ -1,18 +1,18 @@
#include "app/emu/emulator.h"
#include "imgui/imgui.h"
#include "imgui_memory_editor.h"
#include <cstdint>
#include <vector>
#include "app/core/constants.h"
#include "app/core/platform/file_dialog.h"
#include "app/core/platform/renderer.h"
#include "app/emu/snes.h"
#include "app/gui/icons.h"
#include "app/gui/input.h"
#include "app/gui/zeml.h"
#include "app/rom.h"
#include "imgui/imgui.h"
#include "imgui_memory_editor.h"
namespace yaze {
namespace app {
@@ -52,9 +52,9 @@ using ImGui::Text;
void Emulator::Run() {
static bool loaded = false;
if (!snes_.running() && rom()->is_loaded()) {
ppu_texture_ =
SDL_CreateTexture(rom()->renderer().get(), SDL_PIXELFORMAT_ARGB8888,
SDL_TEXTUREACCESS_STREAMING, 512, 480);
ppu_texture_ = SDL_CreateTexture(core::Renderer::GetInstance().renderer(),
SDL_PIXELFORMAT_ARGB8888,
SDL_TEXTUREACCESS_STREAMING, 512, 480);
if (ppu_texture_ == NULL) {
printf("Failed to create texture: %s\n", SDL_GetError());
return;

View File

@@ -3,6 +3,7 @@
#include <cmath>
#include <string>
#include "app/core/platform/renderer.h"
#include "app/editor/graphics/graphics_editor.h"
#include "app/gfx/bitmap.h"
#include "app/gui/color.h"
@@ -15,6 +16,8 @@ namespace yaze {
namespace app {
namespace gui {
using core::Renderer;
using ImGui::BeginMenu;
using ImGui::BeginPopup;
using ImGui::EndMenu;
@@ -133,19 +136,19 @@ void Canvas::DrawContextMenu(gfx::Bitmap *bitmap) {
if (BeginMenu("Bitmap Format")) {
if (MenuItem("Indexed")) {
bitmap->Reformat(gfx::BitmapFormat::kIndexed);
rom()->UpdateBitmap(bitmap);
Renderer::GetInstance().UpdateBitmap(bitmap);
}
if (MenuItem("2BPP")) {
bitmap->Reformat(gfx::BitmapFormat::k2bpp);
rom()->UpdateBitmap(bitmap);
Renderer::GetInstance().UpdateBitmap(bitmap);
}
if (MenuItem("4BPP")) {
bitmap->Reformat(gfx::BitmapFormat::k4bpp);
rom()->UpdateBitmap(bitmap);
Renderer::GetInstance().UpdateBitmap(bitmap);
}
if (MenuItem("8BPP")) {
bitmap->Reformat(gfx::BitmapFormat::k8bpp);
rom()->UpdateBitmap(bitmap);
Renderer::GetInstance().UpdateBitmap(bitmap);
}
EndMenu();
}
@@ -170,7 +173,7 @@ void Canvas::DrawContextMenu(gfx::Bitmap *bitmap) {
if (refresh_graphics_) {
auto status = bitmap->ApplyPaletteWithTransparent(
*palette, edit_palette_sub_index_);
rom()->UpdateBitmap(bitmap);
Renderer::GetInstance().UpdateBitmap(bitmap);
refresh_graphics_ = false;
}
ImGui::EndChild();

View File

@@ -20,15 +20,17 @@
#include "absl/strings/str_cat.h" // for StrCat
#include "absl/strings/string_view.h" // for string_view, operator==
#include "app/core/constants.h" // for Bytes, ASSIGN_OR_RETURN
#include "app/gfx/bitmap.h" // for Bitmap, BitmapTable
#include "app/gfx/compression.h" // for DecompressV2
#include "app/gfx/snes_color.h" // for SNESColor
#include "app/gfx/snes_palette.h" // for PaletteGroup
#include "app/gfx/snes_tile.h" // for SnesTo8bppSheet
#include "app/core/platform/renderer.h"
#include "app/gfx/bitmap.h" // for Bitmap, BitmapTable
#include "app/gfx/compression.h" // for DecompressV2
#include "app/gfx/snes_color.h" // for SNESColor
#include "app/gfx/snes_palette.h" // for PaletteGroup
#include "app/gfx/snes_tile.h" // for SnesTo8bppSheet
namespace yaze {
namespace app {
using core::Renderer;
constexpr int Uncompressed3BPPSize = 0x0600;
constexpr int kEntranceGfxGroup = 0x5D97;
@@ -74,7 +76,7 @@ absl::Status Rom::LoadLinkGraphics() {
core::kTilesheetDepth, link_sheet_8bpp);
RETURN_IF_ERROR(
link_graphics_[i].ApplyPaletteWithTransparent(link_palette_, 0));
RenderBitmap(&link_graphics_[i]);
Renderer::GetInstance().RenderBitmap(&link_graphics_[i]);
}
return absl::OkStatus();
@@ -104,7 +106,7 @@ absl::Status Rom::LoadAllGraphicsData() {
auto converted_sheet = gfx::SnesTo8bppSheet(sheet, 3);
graphics_sheets_[i].Create(core::kTilesheetWidth, core::kTilesheetHeight,
core::kTilesheetDepth, converted_sheet);
graphics_sheets_[i].CreateTexture(renderer_);
graphics_sheets_[i].CreateTexture(Renderer::GetInstance().renderer());
if (flags()->kUseBitmapManager) {
graphics_manager_.LoadBitmap(i, converted_sheet, core::kTilesheetWidth,
@@ -118,12 +120,12 @@ absl::Status Rom::LoadAllGraphicsData() {
RETURN_IF_ERROR(graphics_manager_[i].ApplyPaletteWithTransparent(
palette_groups_.dungeon_main[0], 0));
}
graphics_manager_[i].CreateTexture(renderer_);
graphics_manager_[i].CreateTexture(Renderer::GetInstance().renderer());
}
graphics_bin_[i] =
gfx::Bitmap(core::kTilesheetWidth, core::kTilesheetHeight,
core::kTilesheetDepth, converted_sheet);
graphics_bin_.at(i).CreateTexture(renderer_);
graphics_bin_.at(i).CreateTexture(Renderer::GetInstance().renderer());
if (flags()->kUseBitmapManager) {
for (int j = 0; j < graphics_manager_[i].size(); ++j) {

View File

@@ -445,7 +445,6 @@ class Rom : public core::ExperimentFlags {
auto filename() const { return filename_; }
auto is_loaded() const { return is_loaded_; }
auto version() const { return version_; }
auto renderer() const { return renderer_; }
uint8_t& operator[](int i) {
if (i > size_) {
@@ -465,41 +464,6 @@ class Rom : public core::ExperimentFlags {
}
const uint8_t* operator&() { return rom_data_.data(); }
void SetupRenderer(std::shared_ptr<SDL_Renderer> renderer) {
renderer_ = renderer;
}
absl::Status CreateAndRenderBitmap(int width, int height, int depth,
const Bytes& data, gfx::Bitmap& bitmap,
gfx::SnesPalette& palette) {
bitmap.Create(width, height, depth, data);
RETURN_IF_ERROR(bitmap.ApplyPalette(palette));
RenderBitmap(&bitmap);
return absl::OkStatus();
}
/**
* @brief Used to render a bitmap to the screen.
*/
void RenderBitmap(gfx::Bitmap* bitmap) {
if (flags()->kLoadTexturesAsStreaming) {
bitmap->CreateTexture(renderer_.get());
} else {
bitmap->CreateTexture(renderer_);
}
}
/**
* @brief Used to update a bitmap on the screen.
*/
void UpdateBitmap(gfx::Bitmap* bitmap, bool use_sdl_update = false) {
if (flags()->kLoadTexturesAsStreaming) {
bitmap->UpdateTexture(renderer_.get(), use_sdl_update);
} else {
bitmap->UpdateTexture(renderer_);
}
}
std::vector<std::vector<uint8_t>> main_blockset_ids;
std::vector<std::vector<uint8_t>> room_blockset_ids;
std::vector<std::vector<uint8_t>> spriteset_ids;
@@ -579,8 +543,6 @@ class Rom : public core::ExperimentFlags {
gfx::SnesPalette link_palette_;
gfx::PaletteGroupMap palette_groups_;
core::ResourceLabelManager resource_label_manager_;
std::shared_ptr<SDL_Renderer> renderer_;
};
/**

View File

@@ -1,5 +1,6 @@
#include "inventory.h"
#include "app/core/platform/renderer.h"
#include "app/gfx/bitmap.h"
#include "app/gfx/snes_tile.h"
#include "app/gui/canvas.h"
@@ -10,6 +11,8 @@ namespace app {
namespace zelda3 {
namespace screen {
using core::Renderer;
absl::Status Inventory::Create() {
data_.reserve(256 * 256);
for (int i = 0; i < 256 * 256; i++) {
@@ -65,7 +68,7 @@ absl::Status Inventory::Create() {
bitmap_.Create(256, 256, 8, data_);
RETURN_IF_ERROR(bitmap_.ApplyPalette(palette_));
rom()->RenderBitmap(&bitmap_);
Renderer::GetInstance().RenderBitmap(&bitmap_);
return absl::OkStatus();
}
@@ -84,7 +87,7 @@ absl::Status Inventory::BuildTileset() {
auto hud_pal_group = rom()->palette_group().hud;
palette_ = hud_pal_group[0];
RETURN_IF_ERROR(tilesheets_bmp_.ApplyPalette(palette_))
rom()->RenderBitmap(&tilesheets_bmp_);
Renderer::GetInstance().RenderBitmap(&tilesheets_bmp_);
return absl::OkStatus();
}