123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- #pragma once
- #include "EtcColorFloatRGBA.h"
- #include "EtcErrorMetric.h"
- #include <assert.h>
- #include <float.h>
- namespace Etc
- {
- class Block4x4;
-
- class Block4x4Encoding
- {
- public:
- static const unsigned int ROWS = 4;
- static const unsigned int COLUMNS = 4;
- static const unsigned int PIXELS = ROWS * COLUMNS;
- static const float LUMA_WEIGHT;
- static const float CHROMA_BLUE_WEIGHT;
- typedef enum
- {
- MODE_UNKNOWN,
-
- MODE_ETC1,
- MODE_T,
- MODE_H,
- MODE_PLANAR,
- MODE_R11,
- MODE_RG11,
-
- MODES
- } Mode;
- Block4x4Encoding(void);
-
- virtual ~Block4x4Encoding(void) {}
- virtual void InitFromSource(Block4x4 *a_pblockParent,
- ColorFloatRGBA *a_pafrgbaSource,
- unsigned char *a_paucEncodingBits, ErrorMetric a_errormetric) = 0;
- virtual void InitFromEncodingBits(Block4x4 *a_pblockParent,
- unsigned char *a_paucEncodingBits,
- ColorFloatRGBA *a_pafrgbaSource,
- ErrorMetric a_errormetric) = 0;
-
-
- virtual void PerformIteration(float a_fEffort) = 0;
- void CalcBlockError(void);
- inline float GetError(void)
- {
- assert(m_fError >= 0.0f);
- return m_fError;
- }
- inline ColorFloatRGBA * GetDecodedColors(void)
- {
- return m_afrgbaDecodedColors;
- }
- inline float * GetDecodedAlphas(void)
- {
- return m_afDecodedAlphas;
- }
- virtual void SetEncodingBits(void) = 0;
- virtual bool GetFlip(void) = 0;
- virtual bool IsDifferential(void) = 0;
- virtual bool HasSeverelyBentDifferentialColors(void) const = 0;
- inline Mode GetMode(void)
- {
- return m_mode;
- }
- inline bool IsDone(void)
- {
- return m_boolDone;
- }
- inline void SetDoneIfPerfect()
- {
- if (GetError() == 0.0f)
- {
- m_boolDone = true;
- }
- }
- float CalcPixelError(ColorFloatRGBA a_frgbaDecodedColor, float a_fDecodedAlpha,
- ColorFloatRGBA a_frgbaSourcePixel);
- protected:
- void Init(Block4x4 *a_pblockParent,
- ColorFloatRGBA *a_pafrgbaSource,
- ErrorMetric a_errormetric);
- Block4x4 *m_pblockParent;
- ColorFloatRGBA *m_pafrgbaSource;
- bool m_boolBorderPixels;
- ColorFloatRGBA m_afrgbaDecodedColors[PIXELS];
- float m_afDecodedAlphas[PIXELS];
- float m_fError;
-
- Mode m_mode;
- unsigned int m_uiEncodingIterations;
- bool m_boolDone;
- ErrorMetric m_errormetric;
- private:
- };
- }
|