fix double free on tile16_blockset_bmp
This commit is contained in:
@@ -263,10 +263,6 @@ void GfxGroupEditor::DrawPaletteViewer() {
|
|||||||
DrawPaletteFromPaletteGroup(spr_aux_pal3);
|
DrawPaletteFromPaletteGroup(spr_aux_pal3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GfxGroupEditor::InitBlockset(gfx::Bitmap tile16_blockset) {
|
|
||||||
tile16_blockset_bmp_ = tile16_blockset;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace editor
|
} // namespace editor
|
||||||
} // namespace app
|
} // namespace app
|
||||||
} // namespace yaze
|
} // namespace yaze
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
|
|
||||||
#include "absl/status/status.h"
|
#include "absl/status/status.h"
|
||||||
#include "absl/status/statusor.h"
|
#include "absl/status/statusor.h"
|
||||||
#include "app/editor/utils/editor.h"
|
|
||||||
#include "app/editor/modules/palette_editor.h"
|
#include "app/editor/modules/palette_editor.h"
|
||||||
|
#include "app/editor/utils/editor.h"
|
||||||
#include "app/gfx/bitmap.h"
|
#include "app/gfx/bitmap.h"
|
||||||
#include "app/gfx/snes_palette.h"
|
#include "app/gfx/snes_palette.h"
|
||||||
#include "app/gfx/snes_tile.h"
|
#include "app/gfx/snes_tile.h"
|
||||||
@@ -42,7 +42,9 @@ class GfxGroupEditor : public SharedRom {
|
|||||||
selected_spriteset_ = spriteset;
|
selected_spriteset_ = spriteset;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitBlockset(gfx::Bitmap tile16_blockset);
|
void InitBlockset(gfx::Bitmap* tile16_blockset) {
|
||||||
|
tile16_blockset_bmp_ = tile16_blockset;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int preview_palette_id_ = 0;
|
int preview_palette_id_ = 0;
|
||||||
@@ -60,7 +62,7 @@ class GfxGroupEditor : public SharedRom {
|
|||||||
|
|
||||||
gfx::SnesPalette palette_;
|
gfx::SnesPalette palette_;
|
||||||
gfx::PaletteGroup palette_group_;
|
gfx::PaletteGroup palette_group_;
|
||||||
gfx::Bitmap tile16_blockset_bmp_;
|
gfx::Bitmap* tile16_blockset_bmp_;
|
||||||
|
|
||||||
std::vector<Bytes> tile16_individual_data_;
|
std::vector<Bytes> tile16_individual_data_;
|
||||||
std::vector<gfx::Bitmap> tile16_individual_;
|
std::vector<gfx::Bitmap> tile16_individual_;
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ absl::Status Tile16Editor::UpdateBlockset() {
|
|||||||
{
|
{
|
||||||
blockset_canvas_.DrawContextMenu();
|
blockset_canvas_.DrawContextMenu();
|
||||||
blockset_canvas_.DrawTileSelector(32);
|
blockset_canvas_.DrawTileSelector(32);
|
||||||
blockset_canvas_.DrawBitmap(tile16_blockset_bmp_, 0, map_blockset_loaded_);
|
blockset_canvas_.DrawBitmap(*tile16_blockset_bmp_, 0, map_blockset_loaded_);
|
||||||
blockset_canvas_.DrawGrid();
|
blockset_canvas_.DrawGrid();
|
||||||
blockset_canvas_.DrawOverlay();
|
blockset_canvas_.DrawOverlay();
|
||||||
ImGui::EndChild();
|
ImGui::EndChild();
|
||||||
@@ -123,11 +123,11 @@ absl::Status Tile16Editor::UpdateBlockset() {
|
|||||||
notify_tile16.apply_changes();
|
notify_tile16.apply_changes();
|
||||||
if (notify_tile16.modified()) {
|
if (notify_tile16.modified()) {
|
||||||
current_tile16_ = notify_tile16.get();
|
current_tile16_ = notify_tile16.get();
|
||||||
current_tile16_bmp_ = tile16_individual_[notify_tile16];
|
current_tile16_bmp_ = &tile16_individual_[notify_tile16];
|
||||||
auto ow_main_pal_group = rom()->palette_group().overworld_main;
|
auto ow_main_pal_group = rom()->palette_group().overworld_main;
|
||||||
RETURN_IF_ERROR(current_tile16_bmp_.ApplyPalette(
|
RETURN_IF_ERROR(current_tile16_bmp_->ApplyPalette(
|
||||||
ow_main_pal_group[current_palette_]));
|
ow_main_pal_group[current_palette_]));
|
||||||
rom()->RenderBitmap(¤t_tile16_bmp_);
|
rom()->RenderBitmap(current_tile16_bmp_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,7 +158,7 @@ absl::Status Tile16Editor::DrawToCurrentTile16(ImVec2 click_position) {
|
|||||||
int pixel_index =
|
int pixel_index =
|
||||||
(start_position.y + y) * tile16_size + ((start_position.x) + x);
|
(start_position.y + y) * tile16_size + ((start_position.x) + x);
|
||||||
int gfx_pixel_index = y * tile8_size + x;
|
int gfx_pixel_index = y * tile8_size + x;
|
||||||
current_tile16_bmp_.WriteToPixel(
|
current_tile16_bmp_->WriteToPixel(
|
||||||
pixel_index,
|
pixel_index,
|
||||||
current_gfx_individual_[current_tile8_].data()[gfx_pixel_index]);
|
current_gfx_individual_[current_tile8_].data()[gfx_pixel_index]);
|
||||||
}
|
}
|
||||||
@@ -202,14 +202,14 @@ absl::Status Tile16Editor::UpdateTile16Edit() {
|
|||||||
if (ImGui::BeginChild("Tile16 Editor Options",
|
if (ImGui::BeginChild("Tile16 Editor Options",
|
||||||
ImVec2(ImGui::GetContentRegionAvail().x, 0x50), true)) {
|
ImVec2(ImGui::GetContentRegionAvail().x, 0x50), true)) {
|
||||||
tile16_edit_canvas_.DrawBackground();
|
tile16_edit_canvas_.DrawBackground();
|
||||||
tile16_edit_canvas_.DrawContextMenu(¤t_tile16_bmp_);
|
tile16_edit_canvas_.DrawContextMenu(current_tile16_bmp_);
|
||||||
tile16_edit_canvas_.DrawBitmap(current_tile16_bmp_, 0, 0, 4.0f);
|
tile16_edit_canvas_.DrawBitmap(*current_tile16_bmp_, 0, 0, 4.0f);
|
||||||
if (!tile8_source_canvas_.points().empty()) {
|
if (!tile8_source_canvas_.points().empty()) {
|
||||||
if (tile16_edit_canvas_.DrawTilePainter(
|
if (tile16_edit_canvas_.DrawTilePainter(
|
||||||
current_gfx_individual_[current_tile8_], 16, 2.0f)) {
|
current_gfx_individual_[current_tile8_], 16, 2.0f)) {
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
DrawToCurrentTile16(tile16_edit_canvas_.drawn_tile_position()));
|
DrawToCurrentTile16(tile16_edit_canvas_.drawn_tile_position()));
|
||||||
rom()->UpdateBitmap(¤t_tile16_bmp_);
|
rom()->UpdateBitmap(current_tile16_bmp_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tile16_edit_canvas_.DrawGrid();
|
tile16_edit_canvas_.DrawGrid();
|
||||||
@@ -241,9 +241,9 @@ absl::Status Tile16Editor::DrawTileEditControls() {
|
|||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
current_gfx_bmp_.ApplyPaletteWithTransparent(palette, value));
|
current_gfx_bmp_.ApplyPaletteWithTransparent(palette, value));
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
current_tile16_bmp_.ApplyPaletteWithTransparent(palette, value));
|
current_tile16_bmp_->ApplyPaletteWithTransparent(palette, value));
|
||||||
rom()->UpdateBitmap(¤t_gfx_bmp_);
|
rom()->UpdateBitmap(¤t_gfx_bmp_);
|
||||||
rom()->UpdateBitmap(¤t_tile16_bmp_);
|
rom()->UpdateBitmap(current_tile16_bmp_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -353,9 +353,9 @@ absl::Status Tile16Editor::UpdateTransferTileCanvas() {
|
|||||||
palette_ = transfer_overworld_.AreaPalette();
|
palette_ = transfer_overworld_.AreaPalette();
|
||||||
|
|
||||||
// Create the tile16 blockset image
|
// Create the tile16 blockset image
|
||||||
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(0x80, 0x2000, 0x80,
|
RETURN_IF_ERROR(rom()->CreateAndRenderBitmap(
|
||||||
transfer_overworld_.Tile16Blockset(),
|
0x80, 0x2000, 0x80, transfer_overworld_.Tile16Blockset(),
|
||||||
transfer_blockset_bmp_, palette_));
|
transfer_blockset_bmp_, palette_));
|
||||||
transfer_blockset_loaded_ = true;
|
transfer_blockset_loaded_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class Tile16Editor : public context::GfxContext, public SharedRom {
|
|||||||
|
|
||||||
absl::Status UpdateTransferTileCanvas();
|
absl::Status UpdateTransferTileCanvas();
|
||||||
|
|
||||||
void InitBlockset(const gfx::Bitmap& tile16_blockset_bmp,
|
void InitBlockset(gfx::Bitmap* tile16_blockset_bmp,
|
||||||
gfx::Bitmap current_gfx_bmp,
|
gfx::Bitmap current_gfx_bmp,
|
||||||
const std::vector<gfx::Bitmap>& tile16_individual,
|
const std::vector<gfx::Bitmap>& tile16_individual,
|
||||||
uint8_t all_tiles_types[0x200]) {
|
uint8_t all_tiles_types[0x200]) {
|
||||||
@@ -59,11 +59,11 @@ class Tile16Editor : public context::GfxContext, public SharedRom {
|
|||||||
|
|
||||||
absl::Status set_tile16(int id) {
|
absl::Status set_tile16(int id) {
|
||||||
current_tile16_ = id;
|
current_tile16_ = id;
|
||||||
current_tile16_bmp_ = tile16_individual_[id];
|
current_tile16_bmp_ = &tile16_individual_[id];
|
||||||
auto ow_main_pal_group = rom()->palette_group().overworld_main;
|
auto ow_main_pal_group = rom()->palette_group().overworld_main;
|
||||||
RETURN_IF_ERROR(
|
RETURN_IF_ERROR(
|
||||||
current_tile16_bmp_.ApplyPalette(ow_main_pal_group[current_palette_]));
|
current_tile16_bmp_->ApplyPalette(ow_main_pal_group[current_palette_]));
|
||||||
rom()->RenderBitmap(¤t_tile16_bmp_);
|
rom()->RenderBitmap(current_tile16_bmp_);
|
||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,13 +97,13 @@ class Tile16Editor : public context::GfxContext, public SharedRom {
|
|||||||
// Tile16 blockset for selecting the tile to edit
|
// Tile16 blockset for selecting the tile to edit
|
||||||
gui::Canvas blockset_canvas_{ImVec2(0x100, 0x4000),
|
gui::Canvas blockset_canvas_{ImVec2(0x100, 0x4000),
|
||||||
gui::CanvasGridSize::k32x32};
|
gui::CanvasGridSize::k32x32};
|
||||||
gfx::Bitmap tile16_blockset_bmp_;
|
gfx::Bitmap* tile16_blockset_bmp_;
|
||||||
|
|
||||||
// Canvas for editing the selected tile
|
// Canvas for editing the selected tile
|
||||||
gui::Canvas tile16_edit_canvas_{ImVec2(0x40, 0x40),
|
gui::Canvas tile16_edit_canvas_{ImVec2(0x40, 0x40),
|
||||||
gui::CanvasGridSize::k64x64};
|
gui::CanvasGridSize::k64x64};
|
||||||
gfx::Bitmap current_tile16_bmp_;
|
gfx::Bitmap* current_tile16_bmp_;
|
||||||
gfx::Bitmap current_tile8_bmp_;
|
gfx::Bitmap* current_tile8_bmp_;
|
||||||
|
|
||||||
// Tile8 canvas to get the tile to drawing in the tile16_edit_canvas_
|
// Tile8 canvas to get the tile to drawing in the tile16_edit_canvas_
|
||||||
gui::Canvas tile8_source_canvas_{
|
gui::Canvas tile8_source_canvas_{
|
||||||
|
|||||||
@@ -65,10 +65,10 @@ void OverworldEditor::InitializeZeml() {
|
|||||||
absl::Status OverworldEditor::Update() {
|
absl::Status OverworldEditor::Update() {
|
||||||
status_ = absl::OkStatus();
|
status_ = absl::OkStatus();
|
||||||
if (rom()->is_loaded() && !all_gfx_loaded_) {
|
if (rom()->is_loaded() && !all_gfx_loaded_) {
|
||||||
tile16_editor_.InitBlockset(tile16_blockset_bmp_, current_gfx_bmp_,
|
tile16_editor_.InitBlockset(&tile16_blockset_bmp_, current_gfx_bmp_,
|
||||||
tile16_individual_,
|
tile16_individual_,
|
||||||
*overworld_.mutable_all_tiles_types());
|
*overworld_.mutable_all_tiles_types());
|
||||||
gfx_group_editor_.InitBlockset(tile16_blockset_bmp_);
|
gfx_group_editor_.InitBlockset(&tile16_blockset_bmp_);
|
||||||
RETURN_IF_ERROR(LoadEntranceTileTypes(*rom()));
|
RETURN_IF_ERROR(LoadEntranceTileTypes(*rom()));
|
||||||
all_gfx_loaded_ = true;
|
all_gfx_loaded_ = true;
|
||||||
} else if (!rom()->is_loaded() && all_gfx_loaded_) {
|
} else if (!rom()->is_loaded() && all_gfx_loaded_) {
|
||||||
|
|||||||
Reference in New Issue
Block a user