Refactor bitmap update methods to remove unnecessary parameters; simplify texture updating in Renderer and Bitmap classes
This commit is contained in:
@@ -52,8 +52,8 @@ class Renderer {
|
|||||||
/**
|
/**
|
||||||
* @brief Used to update a bitmap on the screen.
|
* @brief Used to update a bitmap on the screen.
|
||||||
*/
|
*/
|
||||||
void UpdateBitmap(gfx::Bitmap *bitmap, bool use_sdl_update = false) {
|
void UpdateBitmap(gfx::Bitmap *bitmap) {
|
||||||
bitmap->UpdateTexture(renderer_.get(), use_sdl_update);
|
bitmap->UpdateTexture(renderer_.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
absl::Status CreateAndRenderBitmap(int width, int height, int depth,
|
absl::Status CreateAndRenderBitmap(int width, int height, int depth,
|
||||||
|
|||||||
@@ -119,14 +119,14 @@ absl::Status DungeonEditor::RefreshGraphics() {
|
|||||||
int block = rooms_[current_room_id_].blocks()[i];
|
int block = rooms_[current_room_id_].blocks()[i];
|
||||||
RETURN_IF_ERROR(graphics_bin_[block].ApplyPaletteWithTransparent(
|
RETURN_IF_ERROR(graphics_bin_[block].ApplyPaletteWithTransparent(
|
||||||
current_palette_group_[current_palette_id_], 0));
|
current_palette_group_[current_palette_id_], 0));
|
||||||
Renderer::GetInstance().UpdateBitmap(&graphics_bin_[block], true);
|
Renderer::GetInstance().UpdateBitmap(&graphics_bin_[block]);
|
||||||
}
|
}
|
||||||
auto sprites_aux1_pal_group = rom()->palette_group().sprites_aux1;
|
auto sprites_aux1_pal_group = rom()->palette_group().sprites_aux1;
|
||||||
for (int i = 9; i < 16; i++) {
|
for (int i = 9; i < 16; i++) {
|
||||||
int block = rooms_[current_room_id_].blocks()[i];
|
int block = rooms_[current_room_id_].blocks()[i];
|
||||||
RETURN_IF_ERROR(graphics_bin_[block].ApplyPaletteWithTransparent(
|
RETURN_IF_ERROR(graphics_bin_[block].ApplyPaletteWithTransparent(
|
||||||
sprites_aux1_pal_group[current_palette_id_], 0));
|
sprites_aux1_pal_group[current_palette_id_], 0));
|
||||||
Renderer::GetInstance().UpdateBitmap(&graphics_bin_[block], true);
|
Renderer::GetInstance().UpdateBitmap(&graphics_bin_[block]);
|
||||||
}
|
}
|
||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,7 +294,7 @@ absl::Status GraphicsEditor::UpdateGfxTabView() {
|
|||||||
auto draw_tile_event = [&]() {
|
auto draw_tile_event = [&]() {
|
||||||
current_sheet_canvas_.DrawTileOnBitmap(tile_size_, ¤t_bitmap,
|
current_sheet_canvas_.DrawTileOnBitmap(tile_size_, ¤t_bitmap,
|
||||||
current_color_);
|
current_color_);
|
||||||
Renderer::GetInstance().UpdateBitmap(¤t_bitmap, true);
|
Renderer::GetInstance().UpdateBitmap(¤t_bitmap);
|
||||||
};
|
};
|
||||||
|
|
||||||
current_sheet_canvas_.UpdateColorPainter(
|
current_sheet_canvas_.UpdateColorPainter(
|
||||||
@@ -373,7 +373,7 @@ absl::Status GraphicsEditor::UpdatePaletteColumn() {
|
|||||||
->data()[current_sheet_]
|
->data()[current_sheet_]
|
||||||
.ApplyPaletteWithTransparent(palette, edit_palette_sub_index_));
|
.ApplyPaletteWithTransparent(palette, edit_palette_sub_index_));
|
||||||
Renderer::GetInstance().UpdateBitmap(
|
Renderer::GetInstance().UpdateBitmap(
|
||||||
&rom()->mutable_gfx_sheets()->data()[current_sheet_], true);
|
&rom()->mutable_gfx_sheets()->data()[current_sheet_]);
|
||||||
refresh_graphics_ = false;
|
refresh_graphics_ = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -307,7 +307,7 @@ void Bitmap::CreateTexture(SDL_Renderer *renderer) {
|
|||||||
SDL_UnlockTexture(texture_.get());
|
SDL_UnlockTexture(texture_.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bitmap::UpdateTexture(SDL_Renderer *renderer, bool use_sdl_update) {
|
void Bitmap::UpdateTexture(SDL_Renderer *renderer) {
|
||||||
SDL_Surface *converted_surface =
|
SDL_Surface *converted_surface =
|
||||||
SDL_ConvertSurfaceFormat(surface_.get(), SDL_PIXELFORMAT_ARGB8888, 0);
|
SDL_ConvertSurfaceFormat(surface_.get(), SDL_PIXELFORMAT_ARGB8888, 0);
|
||||||
if (converted_surface) {
|
if (converted_surface) {
|
||||||
@@ -319,28 +319,11 @@ void Bitmap::UpdateTexture(SDL_Renderer *renderer, bool use_sdl_update) {
|
|||||||
|
|
||||||
SDL_LockTexture(texture_.get(), nullptr, (void **)&texture_pixels,
|
SDL_LockTexture(texture_.get(), nullptr, (void **)&texture_pixels,
|
||||||
&converted_surface_->pitch);
|
&converted_surface_->pitch);
|
||||||
if (use_sdl_update) {
|
memcpy(texture_pixels, converted_surface_->pixels,
|
||||||
SDL_UpdateTexture(texture_.get(), nullptr, converted_surface_->pixels,
|
converted_surface_->h * converted_surface_->pitch);
|
||||||
converted_surface_->pitch);
|
|
||||||
} else {
|
|
||||||
memcpy(texture_pixels, converted_surface_->pixels,
|
|
||||||
converted_surface_->h * converted_surface_->pitch);
|
|
||||||
}
|
|
||||||
SDL_UnlockTexture(texture_.get());
|
SDL_UnlockTexture(texture_.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bitmap::CreateTexture(std::shared_ptr<SDL_Renderer> renderer) {
|
|
||||||
texture_ = std::shared_ptr<SDL_Texture>{
|
|
||||||
SDL_CreateTextureFromSurface(renderer.get(), surface_.get()),
|
|
||||||
SDL_Texture_Deleter{}};
|
|
||||||
}
|
|
||||||
|
|
||||||
void Bitmap::UpdateTexture(std::shared_ptr<SDL_Renderer> renderer) {
|
|
||||||
texture_ = std::shared_ptr<SDL_Texture>{
|
|
||||||
SDL_CreateTextureFromSurface(renderer.get(), surface_.get()),
|
|
||||||
SDL_Texture_Deleter{}};
|
|
||||||
}
|
|
||||||
|
|
||||||
absl::Status Bitmap::ApplyPalette(const SnesPalette &palette) {
|
absl::Status Bitmap::ApplyPalette(const SnesPalette &palette) {
|
||||||
if (surface_ == nullptr) {
|
if (surface_ == nullptr) {
|
||||||
return absl::FailedPreconditionError(
|
return absl::FailedPreconditionError(
|
||||||
|
|||||||
@@ -108,14 +108,12 @@ class Bitmap {
|
|||||||
* Converts the surface from a RGB to ARGB format.
|
* Converts the surface from a RGB to ARGB format.
|
||||||
* Uses SDL_TEXTUREACCESS_STREAMING to allow for live updates.
|
* Uses SDL_TEXTUREACCESS_STREAMING to allow for live updates.
|
||||||
*/
|
*/
|
||||||
void CreateTexture(std::shared_ptr<SDL_Renderer> renderer);
|
void CreateTexture(SDL_Renderer *renderer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Updates the underlying SDL_Texture when it already exists.
|
* @brief Updates the underlying SDL_Texture when it already exists.
|
||||||
*/
|
*/
|
||||||
void UpdateTexture(std::shared_ptr<SDL_Renderer> renderer);
|
void UpdateTexture(SDL_Renderer *renderer);
|
||||||
void CreateTexture(SDL_Renderer *renderer);
|
|
||||||
void UpdateTexture(SDL_Renderer *renderer, bool use_sdl_update = false);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Copy color data from the SnesPalette into the SDL_Palette
|
* @brief Copy color data from the SnesPalette into the SDL_Palette
|
||||||
|
|||||||
Reference in New Issue
Block a user