palette.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "pch.h"
  2. //////////////////////////////////////////////////////////////////////////////
  3. //
  4. // Palette
  5. //
  6. //
  7. //
  8. //
  9. //
  10. //
  11. //
  12. //
  13. //
  14. //
  15. //////////////////////////////////////////////////////////////////////////////
  16. class PaletteImpl : public PrivatePalette {
  17. private:
  18. TVector<Color> m_pcolors;
  19. TRef<IDirectDrawPaletteX> m_pddpal;
  20. public:
  21. PaletteImpl(IDirectDrawPaletteX* pddpal) :
  22. m_pddpal(pddpal)
  23. {
  24. DWORD caps;
  25. DDCall(m_pddpal->GetCaps(&caps));
  26. int count;
  27. if (caps & DDPCAPS_4BIT) {
  28. count = 16;
  29. } else if (caps & DDPCAPS_8BIT) {
  30. count = 256;
  31. } else {
  32. ZError("Unsupported palette size");
  33. }
  34. PALETTEENTRY ppe[256];
  35. DDCall(m_pddpal->GetEntries(0, 0, count, ppe));
  36. m_pcolors.SetCount(count);
  37. for (int index = 0; index < count; index++) {
  38. float scale = (1.0f / 255);
  39. m_pcolors.Set(
  40. index,
  41. Color(
  42. ppe[index].peRed / 255.0f,
  43. ppe[index].peGreen / 255.0f,
  44. ppe[index].peBlue / 255.0f
  45. )
  46. );
  47. }
  48. }
  49. IDirectDrawPaletteX* GetDDPal() { return m_pddpal; }
  50. const Color& GetColor(int index) { return m_pcolors[index]; }
  51. };
  52. TRef<PrivatePalette> CreatePaletteImpl(IDirectDrawPaletteX* pddpal)
  53. {
  54. return new PaletteImpl(pddpal);
  55. }