123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #include "pch.h"
- //////////////////////////////////////////////////////////////////////////////
- //
- // Palette
- //
- //
- //
- //
- //
- //
- //
- //
- //
- //
- //////////////////////////////////////////////////////////////////////////////
- class PaletteImpl : public PrivatePalette {
- private:
- TVector<Color> m_pcolors;
- TRef<IDirectDrawPaletteX> m_pddpal;
- public:
- PaletteImpl(IDirectDrawPaletteX* pddpal) :
- m_pddpal(pddpal)
- {
- DWORD caps;
- DDCall(m_pddpal->GetCaps(&caps));
- int count;
- if (caps & DDPCAPS_4BIT) {
- count = 16;
- } else if (caps & DDPCAPS_8BIT) {
- count = 256;
- } else {
- ZError("Unsupported palette size");
- }
- PALETTEENTRY ppe[256];
- DDCall(m_pddpal->GetEntries(0, 0, count, ppe));
- m_pcolors.SetCount(count);
- for (int index = 0; index < count; index++) {
- float scale = (1.0f / 255);
- m_pcolors.Set(
- index,
- Color(
- ppe[index].peRed / 255.0f,
- ppe[index].peGreen / 255.0f,
- ppe[index].peBlue / 255.0f
- )
- );
- }
- }
- IDirectDrawPaletteX* GetDDPal() { return m_pddpal; }
- const Color& GetColor(int index) { return m_pcolors[index]; }
- };
- TRef<PrivatePalette> CreatePaletteImpl(IDirectDrawPaletteX* pddpal)
- {
- return new PaletteImpl(pddpal);
- }
|