Add BPP format management and optimization features
- Introduced BPPFormatManager for handling various bitmap formats (2BPP, 3BPP, 4BPP, 8BPP) with conversion capabilities. - Enhanced AtlasRenderer to support bitmap addition with BPP format optimization and added methods for optimized rendering. - Implemented GraphicsOptimizer for analyzing and optimizing graphics sheets based on BPP formats, including memory and performance considerations. - Developed BppFormatUI for user interface interactions related to BPP format selection and conversion previews. - Integrated BPP format management into the canvas system, allowing for format selection and conversion within the GUI. - Updated CMake configuration to include new source files related to BPP management and optimization.
This commit is contained in:
248
src/app/gui/bpp_format_ui.h
Normal file
248
src/app/gui/bpp_format_ui.h
Normal file
@@ -0,0 +1,248 @@
|
||||
#ifndef YAZE_APP_GUI_BPP_FORMAT_UI_H
|
||||
#define YAZE_APP_GUI_BPP_FORMAT_UI_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <functional>
|
||||
|
||||
#include "app/gfx/bpp_format_manager.h"
|
||||
#include "app/gfx/bitmap.h"
|
||||
#include "app/gfx/snes_palette.h"
|
||||
|
||||
namespace yaze {
|
||||
namespace gui {
|
||||
|
||||
/**
|
||||
* @brief BPP format selection and conversion UI component
|
||||
*
|
||||
* Provides a comprehensive UI for BPP format management in the YAZE ROM hacking editor.
|
||||
* Includes format selection, conversion preview, and analysis tools.
|
||||
*/
|
||||
class BppFormatUI {
|
||||
public:
|
||||
/**
|
||||
* @brief Constructor
|
||||
* @param id Unique identifier for this UI component
|
||||
*/
|
||||
explicit BppFormatUI(const std::string& id);
|
||||
|
||||
/**
|
||||
* @brief Render the BPP format selection UI
|
||||
* @param bitmap Current bitmap being edited
|
||||
* @param palette Current palette
|
||||
* @param on_format_changed Callback when format is changed
|
||||
* @return True if format was changed
|
||||
*/
|
||||
bool RenderFormatSelector(gfx::Bitmap* bitmap, const gfx::SnesPalette& palette,
|
||||
std::function<void(gfx::BppFormat)> on_format_changed);
|
||||
|
||||
/**
|
||||
* @brief Render format analysis panel
|
||||
* @param bitmap Bitmap to analyze
|
||||
* @param palette Palette to analyze
|
||||
*/
|
||||
void RenderAnalysisPanel(const gfx::Bitmap& bitmap, const gfx::SnesPalette& palette);
|
||||
|
||||
/**
|
||||
* @brief Render conversion preview
|
||||
* @param bitmap Source bitmap
|
||||
* @param target_format Target BPP format
|
||||
* @param palette Source palette
|
||||
*/
|
||||
void RenderConversionPreview(const gfx::Bitmap& bitmap, gfx::BppFormat target_format,
|
||||
const gfx::SnesPalette& palette);
|
||||
|
||||
/**
|
||||
* @brief Render graphics sheet analysis
|
||||
* @param sheet_data Graphics sheet data
|
||||
* @param sheet_id Sheet identifier
|
||||
* @param palette Sheet palette
|
||||
*/
|
||||
void RenderSheetAnalysis(const std::vector<uint8_t>& sheet_data, int sheet_id,
|
||||
const gfx::SnesPalette& palette);
|
||||
|
||||
/**
|
||||
* @brief Get currently selected BPP format
|
||||
* @return Selected BPP format
|
||||
*/
|
||||
gfx::BppFormat GetSelectedFormat() const { return selected_format_; }
|
||||
|
||||
/**
|
||||
* @brief Set the selected BPP format
|
||||
* @param format BPP format to select
|
||||
*/
|
||||
void SetSelectedFormat(gfx::BppFormat format) { selected_format_ = format; }
|
||||
|
||||
/**
|
||||
* @brief Check if format conversion is available
|
||||
* @param from_format Source format
|
||||
* @param to_format Target format
|
||||
* @return True if conversion is available
|
||||
*/
|
||||
bool IsConversionAvailable(gfx::BppFormat from_format, gfx::BppFormat to_format) const;
|
||||
|
||||
/**
|
||||
* @brief Get conversion efficiency score
|
||||
* @param from_format Source format
|
||||
* @param to_format Target format
|
||||
* @return Efficiency score (0-100)
|
||||
*/
|
||||
int GetConversionEfficiency(gfx::BppFormat from_format, gfx::BppFormat to_format) const;
|
||||
|
||||
private:
|
||||
std::string id_;
|
||||
gfx::BppFormat selected_format_;
|
||||
gfx::BppFormat preview_format_;
|
||||
bool show_analysis_;
|
||||
bool show_preview_;
|
||||
bool show_sheet_analysis_;
|
||||
|
||||
// Analysis cache
|
||||
std::unordered_map<int, gfx::GraphicsSheetAnalysis> cached_analysis_;
|
||||
|
||||
// UI state
|
||||
bool format_changed_;
|
||||
std::string last_analysis_sheet_;
|
||||
|
||||
// Helper methods
|
||||
void RenderFormatInfo(const gfx::BppFormatInfo& info);
|
||||
void RenderColorUsageChart(const std::vector<int>& color_usage);
|
||||
void RenderConversionHistory(const std::string& history);
|
||||
std::string GetFormatDescription(gfx::BppFormat format) const;
|
||||
ImVec4 GetFormatColor(gfx::BppFormat format) const;
|
||||
void UpdateAnalysisCache(int sheet_id, const gfx::GraphicsSheetAnalysis& analysis);
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief BPP format conversion dialog
|
||||
*/
|
||||
class BppConversionDialog {
|
||||
public:
|
||||
/**
|
||||
* @brief Constructor
|
||||
* @param id Unique identifier
|
||||
*/
|
||||
explicit BppConversionDialog(const std::string& id);
|
||||
|
||||
/**
|
||||
* @brief Show the conversion dialog
|
||||
* @param bitmap Bitmap to convert
|
||||
* @param palette Palette to use
|
||||
* @param on_convert Callback when conversion is confirmed
|
||||
*/
|
||||
void Show(const gfx::Bitmap& bitmap, const gfx::SnesPalette& palette,
|
||||
std::function<void(gfx::BppFormat, bool)> on_convert);
|
||||
|
||||
/**
|
||||
* @brief Render the dialog
|
||||
* @return True if dialog should remain open
|
||||
*/
|
||||
bool Render();
|
||||
|
||||
/**
|
||||
* @brief Check if dialog is open
|
||||
* @return True if dialog is open
|
||||
*/
|
||||
bool IsOpen() const { return is_open_; }
|
||||
|
||||
/**
|
||||
* @brief Close the dialog
|
||||
*/
|
||||
void Close() { is_open_ = false; }
|
||||
|
||||
private:
|
||||
std::string id_;
|
||||
bool is_open_;
|
||||
gfx::Bitmap source_bitmap_;
|
||||
gfx::SnesPalette source_palette_;
|
||||
gfx::BppFormat target_format_;
|
||||
bool preserve_palette_;
|
||||
std::function<void(gfx::BppFormat, bool)> convert_callback_;
|
||||
|
||||
// Preview data
|
||||
std::vector<uint8_t> preview_data_;
|
||||
gfx::Bitmap preview_bitmap_;
|
||||
bool preview_valid_;
|
||||
|
||||
// UI state
|
||||
bool show_preview_;
|
||||
float preview_scale_;
|
||||
|
||||
// Helper methods
|
||||
void UpdatePreview();
|
||||
void RenderFormatSelector();
|
||||
void RenderPreview();
|
||||
void RenderOptions();
|
||||
void RenderButtons();
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief BPP format comparison tool
|
||||
*/
|
||||
class BppComparisonTool {
|
||||
public:
|
||||
/**
|
||||
* @brief Constructor
|
||||
* @param id Unique identifier
|
||||
*/
|
||||
explicit BppComparisonTool(const std::string& id);
|
||||
|
||||
/**
|
||||
* @brief Set source bitmap for comparison
|
||||
* @param bitmap Source bitmap
|
||||
* @param palette Source palette
|
||||
*/
|
||||
void SetSource(const gfx::Bitmap& bitmap, const gfx::SnesPalette& palette);
|
||||
|
||||
/**
|
||||
* @brief Render the comparison tool
|
||||
*/
|
||||
void Render();
|
||||
|
||||
/**
|
||||
* @brief Check if tool is open
|
||||
* @return True if tool is open
|
||||
*/
|
||||
bool IsOpen() const { return is_open_; }
|
||||
|
||||
/**
|
||||
* @brief Open the tool
|
||||
*/
|
||||
void Open() { is_open_ = true; }
|
||||
|
||||
/**
|
||||
* @brief Close the tool
|
||||
*/
|
||||
void Close() { is_open_ = false; }
|
||||
|
||||
private:
|
||||
std::string id_;
|
||||
bool is_open_;
|
||||
|
||||
// Source data
|
||||
gfx::Bitmap source_bitmap_;
|
||||
gfx::SnesPalette source_palette_;
|
||||
bool has_source_;
|
||||
|
||||
// Comparison data
|
||||
std::unordered_map<gfx::BppFormat, gfx::Bitmap> comparison_bitmaps_;
|
||||
std::unordered_map<gfx::BppFormat, gfx::SnesPalette> comparison_palettes_;
|
||||
std::unordered_map<gfx::BppFormat, bool> comparison_valid_;
|
||||
|
||||
// UI state
|
||||
float comparison_scale_;
|
||||
bool show_metrics_;
|
||||
gfx::BppFormat selected_comparison_;
|
||||
|
||||
// Helper methods
|
||||
void GenerateComparisons();
|
||||
void RenderComparisonGrid();
|
||||
void RenderMetrics();
|
||||
void RenderFormatSelector();
|
||||
std::string CalculateMetrics(gfx::BppFormat format) const;
|
||||
};
|
||||
|
||||
} // namespace gui
|
||||
} // namespace yaze
|
||||
|
||||
#endif // YAZE_APP_GUI_BPP_FORMAT_UI_H
|
||||
Reference in New Issue
Block a user