PvrTcPacket.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //============================================================================
  2. //
  3. // Modulation data specifies weightings of colorA to colorB for each pixel
  4. //
  5. // For mode = 0
  6. // 00: 0/8
  7. // 01: 3/8
  8. // 10: 5/8
  9. // 11: 8/8
  10. //
  11. // For mode = 1
  12. // 00: 0/8
  13. // 01: 4/8
  14. // 10: 4/8 with alpha punchthrough
  15. // 11: 8/8
  16. //
  17. // For colorIsOpaque=0
  18. // 3 bits A
  19. // 4 bits R
  20. // 4 bits G
  21. // 3/4 bits B
  22. //
  23. // For colorIsOpaque=1
  24. // 5 bits R
  25. // 5 bits G
  26. // 4/5 bits B
  27. //
  28. //============================================================================
  29. #pragma once
  30. #include "ColorRgba.h"
  31. //============================================================================
  32. namespace Javelin
  33. {
  34. //============================================================================
  35. struct PvrTcPacket
  36. {
  37. unsigned int modulationData;
  38. unsigned usePunchthroughAlpha : 1;
  39. unsigned colorA : 14;
  40. unsigned colorAIsOpaque : 1;
  41. unsigned colorB : 15;
  42. unsigned colorBIsOpaque : 1;
  43. ColorRgb<int> GetColorRgbA() const;
  44. ColorRgb<int> GetColorRgbB() const;
  45. ColorRgba<int> GetColorRgbaA() const;
  46. ColorRgba<int> GetColorRgbaB() const;
  47. void SetColorA(const ColorRgb<unsigned char>& c);
  48. void SetColorB(const ColorRgb<unsigned char>& c);
  49. void SetColorA(const ColorRgba<unsigned char>& c);
  50. void SetColorB(const ColorRgba<unsigned char>& c);
  51. static const unsigned char BILINEAR_FACTORS[16][4];
  52. static const unsigned char WEIGHTS[8][4];
  53. };
  54. //============================================================================
  55. } // namespace Javelin
  56. //============================================================================