CPaletteRGBA.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "StdInc.h"
  2. #include <SDL_opengl.h>
  3. #include "CPaletteRGBA.h"
  4. namespace Gfx
  5. {
  6. CPaletteRGBA::CPaletteRGBA(const ColorRGBA palBuff[]) : texHandle(0), shared(false)
  7. {
  8. memcpy(buffer, palBuff, 256);
  9. }
  10. CPaletteRGBA::CPaletteRGBA(const ui8 palBuff[][3], int alphaMode, bool shr) : texHandle(0), shared(shr)
  11. {
  12. static const ui8 defPalette[10][4] = {{0,0,0,0}, {0,0,0,32}, {0,0,0,64}, {0,0,0,128}, {0,0,0,128},
  13. {255,255,255,0}, {255,255,255,0}, {255,255,255,0}, {0,0,0,192}, {0,0,0,192}};
  14. if (alphaMode > 0)
  15. {
  16. if (alphaMode > 10) alphaMode = 10;
  17. memcpy(buffer, defPalette, alphaMode*sizeof(ColorRGBA));
  18. }
  19. for (ui32 it = alphaMode; it<256; ++it)
  20. {
  21. memcpy(&buffer[it], palBuff[it], 3);
  22. buffer[it].comp.A = 255;
  23. }
  24. }
  25. CPaletteRGBA::~CPaletteRGBA()
  26. {
  27. unloadFromVideoRAM();
  28. }
  29. void CPaletteRGBA::Unlink()
  30. {
  31. if (!shared) delete this;
  32. }
  33. void CPaletteRGBA::loadToVideoRAM()
  34. {
  35. if (texHandle > 0) return;
  36. glGenTextures(1, &texHandle);
  37. glBindTexture(GL_TEXTURE_1D, texHandle);
  38. glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  39. glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA8, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
  40. }
  41. void CPaletteRGBA::unloadFromVideoRAM()
  42. {
  43. glDeleteTextures(1, &texHandle);
  44. texHandle = 0;
  45. }
  46. }