// File: crn_dxt5a.h // See Copyright Notice and license at the end of inc/crnlib.h #pragma once #include "crn_dxt.h" namespace crnlib { class dxt5_endpoint_optimizer { public: dxt5_endpoint_optimizer(); struct params { params() : m_block_index(0), m_pPixels(NULL), m_num_pixels(0), m_comp_index(3), m_quality(cCRNDXTQualityUber), m_use_both_block_types(true) { } uint m_block_index; const color_quad_u8* m_pPixels; uint m_num_pixels; uint m_comp_index; crn_dxt_quality m_quality; bool m_use_both_block_types; }; struct results { uint8* m_pSelectors; uint64 m_error; uint8 m_first_endpoint; uint8 m_second_endpoint; uint8 m_block_type; // 1 if 6-alpha, otherwise 8-alpha }; bool compute(const params& p, results& r); private: const params* m_pParams; results* m_pResults; crnlib::vector m_unique_values; crnlib::vector m_unique_value_weights; crnlib::vector m_trial_selectors; crnlib::vector m_best_selectors; int m_unique_value_map[256]; sparse_bit_array m_flags; void evaluate_solution(uint low_endpoint, uint high_endpoint); }; } // namespace crnlib