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 <vector>
5#include <unordered_map>
6#include <string>
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};
38
58
87 public:
88 static GraphicsOptimizer& Get();
89
93 void Initialize();
94
103 OptimizationResult OptimizeSheet(const std::vector<uint8_t>& sheet_data,
104 int sheet_id,
105 const SnesPalette& palette,
107
115 OptimizationResult OptimizeSheets(const std::unordered_map<int, std::vector<uint8_t>>& sheets,
116 const std::unordered_map<int, SnesPalette>& palettes,
118
126 SheetOptimizationData AnalyzeSheet(const std::vector<uint8_t>& sheet_data,
127 int sheet_id,
128 const SnesPalette& palette);
129
136 std::unordered_map<int, SheetOptimizationData> GetOptimizationRecommendations(
137 const std::unordered_map<int, std::vector<uint8_t>>& sheets,
138 const std::unordered_map<int, SnesPalette>& palettes);
139
148 const std::unordered_map<int, SheetOptimizationData>& recommendations,
149 std::unordered_map<int, std::vector<uint8_t>>& sheets,
150 std::unordered_map<int, SnesPalette>& palettes);
151
156 std::unordered_map<std::string, double> GetOptimizationStats() const;
157
161 void ClearCache();
162
169 void SetOptimizationParameters(float max_quality_loss = 0.1f,
170 size_t min_memory_savings = 1024,
171 float performance_threshold = 0.05f);
172
173 private:
174 GraphicsOptimizer() = default;
176
177 // Optimization parameters
181
182 // Statistics tracking
183 std::unordered_map<std::string, double> optimization_stats_;
184
185 // Cache for optimization results
186 std::unordered_map<std::string, SheetOptimizationData> optimization_cache_;
187
188 // Helper methods
189 BppFormat DetermineOptimalFormat(const std::vector<uint8_t>& data,
190 const SnesPalette& palette,
191 OptimizationStrategy strategy);
192 float CalculateQualityLoss(BppFormat from_format, BppFormat to_format,
193 const std::vector<uint8_t>& data);
194 size_t CalculateMemorySavings(BppFormat from_format, BppFormat to_format,
195 const std::vector<uint8_t>& data);
196 float CalculatePerformanceGain(BppFormat from_format, BppFormat to_format);
198 std::string GenerateOptimizationReason(const SheetOptimizationData& data);
199
200 // Analysis helpers
201 int CountUsedColors(const std::vector<uint8_t>& data, const SnesPalette& palette);
202 float CalculateColorEfficiency(const std::vector<uint8_t>& data, const SnesPalette& palette);
203 std::vector<int> AnalyzeColorDistribution(const std::vector<uint8_t>& data);
204
205 // Cache management
206 std::string GenerateCacheKey(const std::vector<uint8_t>& data, int sheet_id);
207 void UpdateOptimizationStats(const std::string& operation, double value);
208};
209
214 public:
215 GraphicsOptimizationScope(OptimizationStrategy strategy, int sheet_count);
217
218 void AddSheet(int sheet_id, size_t original_size, size_t optimized_size);
219 void SetResult(const OptimizationResult& result);
220
221 private:
224 std::string operation_name_;
227};
228
229} // namespace gfx
230} // namespace yaze
231
232#endif // YAZE_APP_GFX_GRAPHICS_OPTIMIZER_H
RAII wrapper for graphics optimization operations.
void SetResult(const OptimizationResult &result)
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)
Main namespace for the application.
Graphics optimization result.
std::vector< BppFormat > recommended_formats
std::unordered_map< int, BppFormat > sheet_recommendations
Graphics sheet optimization data.