Images.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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* makeFromPCX(const struct SH3PcxFile& pcx, size_t fileSize);
  39. static CImage* makeFromDEF(const struct SH3DefFile& def, size_t fileSize);
  40. static class CPalettedBitmap* makeFromDEFSprite(
  41. const struct SH3DefSprite& spr, CPaletteRGBA& pal);
  42. virtual ~CImage();
  43. inline ui32 getWidth() { return width; };
  44. inline ui32 getHeight() { return height; };
  45. void loadToVideoRAM();
  46. void unloadFromVideoRAM();
  47. void bindTexture();
  48. virtual void putAt(Point p) = 0;
  49. virtual void putAt(Point p, TransformFlags flags) = 0;
  50. virtual void putAt(Point p, TransformFlags flags, float scale) = 0;
  51. virtual void putAt(Point p, TransformFlags flags, Rect clipRect) = 0;
  52. virtual void putAt(Point p, TransformFlags flags, const ColorMatrix cm) = 0;
  53. virtual void putWithPlrColor(Point p, ColorRGBA c) = 0;
  54. virtual void putWithPlrColor(Point p, ColorRGBA c, float scale) = 0;
  55. };
  56. class CBitmap32 : public CImage
  57. {
  58. friend class CImage;
  59. ColorRGBA* buffer;
  60. struct CoordBind {
  61. Point texture, vertex;
  62. inline CoordBind() : texture(0, 0) {};
  63. };
  64. class QuadInstance {
  65. CoordBind coords[4];
  66. public:
  67. QuadInstance(Point p);
  68. QuadInstance(const CoordBind c[4]);
  69. void setOffset(TransformFlags flags, si32 x, si32 y);
  70. void transform(TransformFlags flags, ui32 w0, ui32 h0, ui32 w, ui32 h);
  71. void putToGL() const;
  72. };
  73. protected:
  74. CBitmap32(ui32 w, ui32 h, const ColorRGB pixBuff[]); // 24bit RGB source
  75. virtual void textureTransfer();
  76. public:
  77. virtual ~CBitmap32();
  78. virtual void putAt(Point p);
  79. virtual void putAt(Point p, TransformFlags flags);
  80. virtual void putAt(Point p, TransformFlags flags, float scale);
  81. virtual void putAt(Point p, TransformFlags flags, Rect clipRect);
  82. virtual void putAt(Point p, TransformFlags flags, const ColorMatrix cm);
  83. virtual void putWithPlrColor(Point p, ColorRGBA c);
  84. virtual void putWithPlrColor(Point p, ColorRGBA c, float scale);
  85. };
  86. class CPalettedBitmap : public CImage
  87. {
  88. friend class CImage;
  89. protected:
  90. CPaletteRGBA& palette;
  91. ui8* buffer;
  92. CPalettedBitmap(ui32 w, ui32 h, CPaletteRGBA& pal, const ui8 pixBuff[]);
  93. CPalettedBitmap(ui32 w, ui32 h, CPaletteRGBA& pal, const ui8 pixBuff[], ui32 format);
  94. virtual void textureTransfer();
  95. public:
  96. virtual ~CPalettedBitmap();
  97. virtual void putAt(Point p);
  98. virtual void putAt(Point p, TransformFlags flags);
  99. virtual void putAt(Point p, TransformFlags flags, float scale);
  100. virtual void putAt(Point p, TransformFlags flags, Rect clipRect);
  101. virtual void putAt(Point p, TransformFlags flags, const ColorMatrix cm);
  102. virtual void putWithPlrColor(Point p, ColorRGBA c);
  103. virtual void putWithPlrColor(Point p, ColorRGBA c, float scale);
  104. };
  105. class CPalBitmapWithMargin : public CPalettedBitmap
  106. {
  107. friend class CImage;
  108. ui32 leftMargin;
  109. ui32 topMargin;
  110. ui32 intWidth;
  111. ui32 intHeight;
  112. protected:
  113. CPalBitmapWithMargin(ui32 fw, ui32 fh, ui32 lm, ui32 tm, ui32 iw, ui32 ih,
  114. CPaletteRGBA& pal, const ui8 pixBuff[]);
  115. CPalBitmapWithMargin(ui32 fw, ui32 fh, ui32 lm, ui32 tm, ui32 iw, ui32 ih,
  116. CPaletteRGBA& pal, const ui8 pixBuff[], ui32 format);
  117. virtual void textureTransfer();
  118. public:
  119. virtual void putAt(Point p);
  120. virtual void putAt(Point p, TransformFlags flags);
  121. virtual void putAt(Point p, TransformFlags flags, float scale);
  122. virtual void putAt(Point p, TransformFlags flags, Rect clipRect);
  123. virtual void putAt(Point p, TransformFlags flags, const ColorMatrix cm);
  124. virtual void putWithPlrColor(Point p, ColorRGBA c);
  125. virtual void putWithPlrColor(Point p, ColorRGBA c, float scale);
  126. };
  127. }