xenia/third_party/crunch/crnlib/crn_dxt5a.h

67 lines
1.5 KiB
C++

// 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<uint8> m_unique_values;
crnlib::vector<uint> m_unique_value_weights;
crnlib::vector<uint8> m_trial_selectors;
crnlib::vector<uint8> 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