Images.h 4.1 KB

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