Images.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. #pragma once
  2. #include "CPaletteRGBA.h"
  3. #include "../UIFramework/GL2D.h"
  4. namespace Gfx
  5. {
  6. struct Point
  7. {
  8. si32 x;
  9. si32 y;
  10. inline Point() {};
  11. inline Point(si32 _x, si32 _y) : x(_x), y(_y) {};
  12. };
  13. struct Rect
  14. {
  15. Point lt;
  16. Point rb;
  17. inline ui32 width() { return rb.x - lt.x; };
  18. inline ui32 height() { return rb.y - lt.y; };
  19. };
  20. enum TransformFlags
  21. {
  22. NONE = 0,
  23. MIRROR_HORIZ = 1,
  24. MIRROR_VERTIC = 2,
  25. ROTATE_90_DEG = 4
  26. };
  27. /* Color transform matrix for: grayscale, clone, bloodlust, etc */
  28. typedef float ColorMatrix[4][4];
  29. class CImage
  30. {
  31. protected:
  32. ui32 texHandle;
  33. ui32 width;
  34. ui32 height;
  35. inline CImage(ui32 w, ui32 h) : texHandle(0), width(w), height(h) {};
  36. virtual void textureTransfer() = 0;
  37. public:
  38. static CImage* makeBySDL(void* data, size_t fileSize, const char* fileExt);
  39. static CImage* makeFromPCX(const struct SH3PcxFile& pcx, size_t fileSize);
  40. static CImage* makeFromDEF(const struct SH3DefFile& def, size_t fileSize);
  41. static class CPalettedBitmap* makeFromDEFSprite(
  42. const struct SH3DefSprite& spr, CPaletteRGBA& pal);
  43. virtual ~CImage();
  44. inline ui32 getWidth() { return width; };
  45. inline ui32 getHeight() { return height; };
  46. void loadToVideoRAM();
  47. void unloadFromVideoRAM();
  48. void bindTexture();
  49. virtual void putAt(Point p) = 0;
  50. virtual void putAt(Point p, TransformFlags flags) = 0;
  51. virtual void putAt(Point p, TransformFlags flags, float scale) = 0;
  52. virtual void putAt(Point p, TransformFlags flags, Rect clipRect) = 0;
  53. virtual void putAt(Point p, TransformFlags flags, const ColorMatrix cm) = 0;
  54. virtual void putWithPlrColor(Point p, ColorRGBA c) = 0;
  55. virtual void putWithPlrColor(Point p, ColorRGBA c, float scale) = 0;
  56. };
  57. class CBitmap32 : public CImage
  58. {
  59. friend class CImage;
  60. ColorRGBA* buffer;
  61. bool formatBGRA;
  62. struct CoordBind {
  63. Point texture, vertex;
  64. inline CoordBind() : texture(0, 0) {};
  65. };
  66. class QuadInstance {
  67. CoordBind coords[4];
  68. public:
  69. QuadInstance(Point p);
  70. QuadInstance(const CoordBind c[4]);
  71. void setOffset(TransformFlags flags, si32 x, si32 y);
  72. void transform(TransformFlags flags, ui32 w0, ui32 h0, ui32 w, ui32 h);
  73. void putToGL() const;
  74. };
  75. protected:
  76. CBitmap32(ui32 w, ui32 h, const ColorRGB pixBuff[], bool bgra); // 24bit RGB source
  77. CBitmap32(ui32 w, ui32 h, const ColorRGBA pixBuff[], bool bgra); // 32bit RGBA source
  78. virtual void textureTransfer();
  79. public:
  80. virtual ~CBitmap32();
  81. virtual void putAt(Point p);
  82. virtual void putAt(Point p, TransformFlags flags);
  83. virtual void putAt(Point p, TransformFlags flags, float scale);
  84. virtual void putAt(Point p, TransformFlags flags, Rect clipRect);
  85. virtual void putAt(Point p, TransformFlags flags, const ColorMatrix cm);
  86. virtual void putWithPlrColor(Point p, ColorRGBA c);
  87. virtual void putWithPlrColor(Point p, ColorRGBA c, float scale);
  88. };
  89. class CPalettedBitmap : public CImage
  90. {
  91. friend class CImage;
  92. protected:
  93. CPaletteRGBA& palette;
  94. ui8* buffer;
  95. ui32 realWidth;
  96. ui32 realHeight;
  97. CPalettedBitmap(ui32 w, ui32 h, CPaletteRGBA& pal, const ui8 pixBuff[]);
  98. CPalettedBitmap(ui32 w, ui32 h, CPaletteRGBA& pal, const ui8 pixBuff[], ui32 format);
  99. virtual void textureTransfer();
  100. public:
  101. virtual ~CPalettedBitmap();
  102. virtual void putAt(Point p);
  103. virtual void putAt(Point p, TransformFlags flags);
  104. virtual void putAt(Point p, TransformFlags flags, float scale);
  105. virtual void putAt(Point p, TransformFlags flags, Rect clipRect);
  106. virtual void putAt(Point p, TransformFlags flags, const ColorMatrix cm);
  107. virtual void putWithPlrColor(Point p, ColorRGBA c);
  108. virtual void putWithPlrColor(Point p, ColorRGBA c, float scale);
  109. };
  110. class CPalBitmapWithMargin : public CPalettedBitmap
  111. {
  112. friend class CImage;
  113. ui32 leftMargin;
  114. ui32 topMargin;
  115. protected:
  116. CPalBitmapWithMargin(ui32 fw, ui32 fh, ui32 lm, ui32 tm, ui32 iw, ui32 ih,
  117. CPaletteRGBA& pal, const ui8 pixBuff[]);
  118. CPalBitmapWithMargin(ui32 fw, ui32 fh, ui32 lm, ui32 tm, ui32 iw, ui32 ih,
  119. CPaletteRGBA& pal, const ui8 pixBuff[], ui32 format);
  120. public:
  121. virtual void putAt(Point p);
  122. virtual void putAt(Point p, TransformFlags flags);
  123. virtual void putAt(Point p, TransformFlags flags, float scale);
  124. virtual void putAt(Point p, TransformFlags flags, Rect clipRect);
  125. virtual void putAt(Point p, TransformFlags flags, const ColorMatrix cm);
  126. virtual void putWithPlrColor(Point p, ColorRGBA c);
  127. virtual void putWithPlrColor(Point p, ColorRGBA c, float scale);
  128. };
  129. }