97 lines
2.5 KiB
C++
97 lines
2.5 KiB
C++
|
/*
|
||
|
* Copyright 2015 The Etc2Comp Authors.
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include "EtcBlock4x4Encoding_ETC1.h"
|
||
|
|
||
|
namespace Etc
|
||
|
{
|
||
|
|
||
|
class Block4x4Encoding_RGB8 : public Block4x4Encoding_ETC1
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
Block4x4Encoding_RGB8(void);
|
||
|
virtual ~Block4x4Encoding_RGB8(void);
|
||
|
|
||
|
virtual void InitFromEncodingBits(Block4x4 *a_pblockParent,
|
||
|
unsigned char *a_paucEncodingBits,
|
||
|
ColorFloatRGBA *a_pafrgbaSource,
|
||
|
|
||
|
ErrorMetric a_errormetric);
|
||
|
|
||
|
virtual void PerformIteration(float a_fEffort);
|
||
|
|
||
|
virtual void SetEncodingBits(void);
|
||
|
|
||
|
inline ColorFloatRGBA GetColor3(void) const
|
||
|
{
|
||
|
return m_frgbaColor3;
|
||
|
}
|
||
|
|
||
|
protected:
|
||
|
|
||
|
static const unsigned int PLANAR_CORNER_COLORS = 3;
|
||
|
static const unsigned int MAX_PLANAR_REGRESSION_SIZE = 4;
|
||
|
static const unsigned int TH_DISTANCES = 8;
|
||
|
|
||
|
static float s_afTHDistanceTable[TH_DISTANCES];
|
||
|
|
||
|
void TryPlanar(unsigned int a_uiRadius);
|
||
|
void TryTAndH(unsigned int a_uiRadius);
|
||
|
|
||
|
void InitFromEncodingBits_Planar(void);
|
||
|
|
||
|
ColorFloatRGBA m_frgbaColor3; // used for planar
|
||
|
|
||
|
void SetEncodingBits_T(void);
|
||
|
void SetEncodingBits_H(void);
|
||
|
void SetEncodingBits_Planar(void);
|
||
|
|
||
|
// state shared between iterations
|
||
|
ColorFloatRGBA m_frgbaOriginalColor1_TAndH;
|
||
|
ColorFloatRGBA m_frgbaOriginalColor2_TAndH;
|
||
|
|
||
|
void CalculateBaseColorsForTAndH(void);
|
||
|
void TryT(unsigned int a_uiRadius);
|
||
|
void TryT_BestSelectorCombination(void);
|
||
|
void TryH(unsigned int a_uiRadius);
|
||
|
void TryH_BestSelectorCombination(void);
|
||
|
|
||
|
private:
|
||
|
|
||
|
void InitFromEncodingBits_T(void);
|
||
|
void InitFromEncodingBits_H(void);
|
||
|
|
||
|
void CalculatePlanarCornerColors(void);
|
||
|
|
||
|
void ColorRegression(ColorFloatRGBA *a_pafrgbaPixels, unsigned int a_uiPixels,
|
||
|
ColorFloatRGBA *a_pfrgbaSlope, ColorFloatRGBA *a_pfrgbaOffset);
|
||
|
|
||
|
bool TwiddlePlanar(void);
|
||
|
bool TwiddlePlanarR();
|
||
|
bool TwiddlePlanarG();
|
||
|
bool TwiddlePlanarB();
|
||
|
|
||
|
void DecodePixels_T(void);
|
||
|
void DecodePixels_H(void);
|
||
|
void DecodePixels_Planar(void);
|
||
|
|
||
|
};
|
||
|
|
||
|
} // namespace Etc
|