yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
graphics_optimizer.h
Go to the documentation of this file.
1#ifndef YAZE_APP_GFX_GRAPHICS_OPTIMIZER_H
2#define YAZE_APP_GFX_GRAPHICS_OPTIMIZER_H
3
4#include <string>
5#include <unordered_map>
6#include <vector>
7
10
11namespace yaze {
12namespace gfx {
13
23
28 bool success;
29 std::string message;
33 std::vector<BppFormat> recommended_formats;
34 std::unordered_map<int, BppFormat> sheet_recommendations;
35
37 : success(false),
38 memory_saved(0),
39 performance_gain(0.0f),
40 quality_loss(0.0f) {}
41};
42
67
96 public:
97 static GraphicsOptimizer& Get();
98
102 void Initialize();
103
113 const std::vector<uint8_t>& sheet_data, int sheet_id,
114 const SnesPalette& palette,
116
125 const std::unordered_map<int, std::vector<uint8_t>>& sheets,
126 const std::unordered_map<int, SnesPalette>& palettes,
128
136 SheetOptimizationData AnalyzeSheet(const std::vector<uint8_t>& sheet_data,
137 int sheet_id, const SnesPalette& palette);
138
145 std::unordered_map<int, SheetOptimizationData> GetOptimizationRecommendations(
146 const std::unordered_map<int, std::vector<uint8_t>>& sheets,
147 const std::unordered_map<int, SnesPalette>& palettes);
148
157 const std::unordered_map<int, SheetOptimizationData>& recommendations,
158 std::unordered_map<int, std::vector<uint8_t>>& sheets,
159 std::unordered_map<int, SnesPalette>& palettes);
160
165 std::unordered_map<std::string, double> GetOptimizationStats() const;
166
170 void ClearCache();
171
178 void SetOptimizationParameters(float max_quality_loss = 0.1f,
179 size_t min_memory_savings = 1024,
180 float performance_threshold = 0.05f);
181
182 private:
183 GraphicsOptimizer() = default;
185
186 // Optimization parameters
190
191 // Statistics tracking
192 std::unordered_map<std::string, double> optimization_stats_;
193
194 // Cache for optimization results
195 std::unordered_map<std::string, SheetOptimizationData> optimization_cache_;
196
197 // Helper methods
198 BppFormat DetermineOptimalFormat(const std::vector<uint8_t>& data,
199 const SnesPalette& palette,
200 OptimizationStrategy strategy);
201 float CalculateQualityLoss(BppFormat from_format, BppFormat to_format,
202 const std::vector<uint8_t>& data);
203 size_t CalculateMemorySavings(BppFormat from_format, BppFormat to_format,
204 const std::vector<uint8_t>& data);
205 float CalculatePerformanceGain(BppFormat from_format, BppFormat to_format);
206 bool ShouldOptimize(const SheetOptimizationData& data,
207 OptimizationStrategy strategy);
208 std::string GenerateOptimizationReason(const SheetOptimizationData& data);
209
210 // Analysis helpers
211 int CountUsedColors(const std::vector<uint8_t>& data,
212 const SnesPalette& palette);
213 float CalculateColorEfficiency(const std::vector<uint8_t>& data,
214 const SnesPalette& palette);
215 std::vector<int> AnalyzeColorDistribution(const std::vector<uint8_t>& data);
216
217 // Cache management
218 std::string GenerateCacheKey(const std::vector<uint8_t>& data, int sheet_id);
219 void UpdateOptimizationStats(const std::string& operation, double value);
220};
221
226 public:
227 GraphicsOptimizationScope(OptimizationStrategy strategy, int sheet_count);
229
230 void AddSheet(int sheet_id, size_t original_size, size_t optimized_size);
231 void SetResult(const OptimizationResult& result);
232
233 private:
236 std::string operation_name_;
239};
240
241} // namespace gfx
242} // namespace yaze
243
244#endif // YAZE_APP_GFX_GRAPHICS_OPTIMIZER_H
RAII wrapper for graphics optimization operations.
void SetResult(const OptimizationResult &result)
GraphicsOptimizationScope(OptimizationStrategy strategy, int sheet_count)
void AddSheet(int sheet_id, size_t original_size, size_t optimized_size)
Comprehensive graphics optimization system for YAZE ROM hacking.
std::unordered_map< std::string, SheetOptimizationData > optimization_cache_
void UpdateOptimizationStats(const std::string &operation, double value)
float CalculateColorEfficiency(const std::vector< uint8_t > &data, const SnesPalette &palette)
void Initialize()
Initialize the graphics optimizer.
BppFormat DetermineOptimalFormat(const std::vector< uint8_t > &data, const SnesPalette &palette, OptimizationStrategy strategy)
float CalculatePerformanceGain(BppFormat from_format, BppFormat to_format)
std::unordered_map< int, SheetOptimizationData > GetOptimizationRecommendations(const std::unordered_map< int, std::vector< uint8_t > > &sheets, const std::unordered_map< int, SnesPalette > &palettes)
Get optimization recommendations for all sheets.
std::string GenerateOptimizationReason(const SheetOptimizationData &data)
int CountUsedColors(const std::vector< uint8_t > &data, const SnesPalette &palette)
static GraphicsOptimizer & Get()
std::unordered_map< std::string, double > optimization_stats_
OptimizationResult ApplyOptimizations(const std::unordered_map< int, SheetOptimizationData > &recommendations, std::unordered_map< int, std::vector< uint8_t > > &sheets, std::unordered_map< int, SnesPalette > &palettes)
Apply optimization recommendations.
SheetOptimizationData AnalyzeSheet(const std::vector< uint8_t > &sheet_data, int sheet_id, const SnesPalette &palette)
Analyze graphics sheet for optimization opportunities.
OptimizationResult OptimizeSheets(const std::unordered_map< int, std::vector< uint8_t > > &sheets, const std::unordered_map< int, SnesPalette > &palettes, OptimizationStrategy strategy=OptimizationStrategy::kBalanced)
Optimize multiple graphics sheets.
std::unordered_map< std::string, double > GetOptimizationStats() const
Get optimization statistics.
size_t CalculateMemorySavings(BppFormat from_format, BppFormat to_format, const std::vector< uint8_t > &data)
void SetOptimizationParameters(float max_quality_loss=0.1f, size_t min_memory_savings=1024, float performance_threshold=0.05f)
Set optimization parameters.
bool ShouldOptimize(const SheetOptimizationData &data, OptimizationStrategy strategy)
OptimizationResult OptimizeSheet(const std::vector< uint8_t > &sheet_data, int sheet_id, const SnesPalette &palette, OptimizationStrategy strategy=OptimizationStrategy::kBalanced)
Optimize a single graphics sheet.
float CalculateQualityLoss(BppFormat from_format, BppFormat to_format, const std::vector< uint8_t > &data)
void ClearCache()
Clear optimization cache.
std::vector< int > AnalyzeColorDistribution(const std::vector< uint8_t > &data)
std::string GenerateCacheKey(const std::vector< uint8_t > &data, int sheet_id)
RAII timer for automatic timing management.
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
OptimizationStrategy
Graphics optimization strategy.
@ kBalanced
Balance memory, performance, and quality.
@ kPerformanceOptimized
Maximize rendering performance.
@ kMemoryOptimized
Minimize memory usage.
@ kQualityOptimized
Maintain highest quality.
BppFormat
BPP format enumeration for SNES graphics.
@ kBpp8
8 bits per pixel (256 colors)
Graphics optimization result.
std::vector< BppFormat > recommended_formats
std::unordered_map< int, BppFormat > sheet_recommendations
Graphics sheet optimization data.