summaryrefslogtreecommitdiff
path: root/osframework/source/SexyAppFramework/MemoryImage.h
diff options
context:
space:
mode:
Diffstat (limited to 'osframework/source/SexyAppFramework/MemoryImage.h')
-rw-r--r--osframework/source/SexyAppFramework/MemoryImage.h113
1 files changed, 113 insertions, 0 deletions
diff --git a/osframework/source/SexyAppFramework/MemoryImage.h b/osframework/source/SexyAppFramework/MemoryImage.h
new file mode 100644
index 0000000..9f6eab1
--- /dev/null
+++ b/osframework/source/SexyAppFramework/MemoryImage.h
@@ -0,0 +1,113 @@
+#ifndef __MEMORYIMAGE_H__
+#define __MEMORYIMAGE_H__
+
+#include "Image.h"
+
+#define OPTIMIZE_SOFTWARE_DRAWING
+#ifdef OPTIMIZE_SOFTWARE_DRAWING
+extern bool gOptimizeSoftwareDrawing;
+#endif
+
+namespace Sexy
+{
+
+const ulong MEMORYCHECK_ID = 0x4BEEFADE;
+
+class NativeDisplay;
+class SexyAppBase;
+
+class MemoryImage : public Image
+{
+public:
+ ulong* mBits;
+ int mBitsChangedCount;
+ void* mD3DData;
+ DWORD mD3DFlags; // see D3DInterface.h for possible values
+
+ ulong* mColorTable;
+ uchar* mColorIndices;
+
+ bool mForcedMode;
+ bool mHasTrans;
+ bool mHasAlpha;
+ bool mIsVolatile;
+ bool mPurgeBits;
+ bool mWantPal;
+
+ ulong* mNativeAlphaData;
+ uchar* mRLAlphaData;
+ uchar* mRLAdditiveData;
+
+ bool mBitsChanged;
+ SexyAppBase* mApp;
+
+private:
+ void Init();
+
+public:
+ virtual void* GetNativeAlphaData(NativeDisplay *theNative);
+ virtual uchar* GetRLAlphaData();
+ virtual uchar* GetRLAdditiveData(NativeDisplay *theNative);
+ virtual void PurgeBits();
+ virtual void DeleteSWBuffers();
+ virtual void Delete3DBuffers();
+ virtual void DeleteExtraBuffers();
+ virtual void ReInit();
+
+ virtual void BitsChanged();
+ virtual void CommitBits();
+
+ virtual void DeleteNativeData();
+
+ void NormalBlt(Image* theImage, int theX, int theY, const Rect& theSrcRect, const Color& theColor);
+ void AdditiveBlt(Image* theImage, int theX, int theY, const Rect& theSrcRect, const Color& theColor);
+
+ void NormalDrawLine(double theStartX, double theStartY, double theEndX, double theEndY, const Color& theColor);
+ void AdditiveDrawLine(double theStartX, double theStartY, double theEndX, double theEndY, const Color& theColor);
+
+ void NormalDrawLineAA(double theStartX, double theStartY, double theEndX, double theEndY, const Color& theColor);
+ void AdditiveDrawLineAA(double theStartX, double theStartY, double theEndX, double theEndY, const Color& theColor);
+
+ void SlowStretchBlt(Image* theImage, const Rect& theDestRect, const FRect& theSrcRect, const Color& theColor, int theDrawMode);
+ void FastStretchBlt(Image* theImage, const Rect& theDestRect, const FRect& theSrcRect, const Color& theColor, int theDrawMode);
+ bool BltRotatedClipHelper(float &theX, float &theY, const Rect &theSrcRect, const Rect &theClipRect, double theRot, FRect &theDestRect, float theRotCenterX, float theRotCenterY);
+ bool StretchBltClipHelper(const Rect &theSrcRect, const Rect &theClipRect, const Rect &theDestRect, FRect &theSrcRectOut, Rect &theDestRectOut);
+ bool StretchBltMirrorClipHelper(const Rect &theSrcRect, const Rect &theClipRect, const Rect &theDestRect, FRect &theSrcRectOut, Rect &theDestRectOut);
+ void BltMatrixHelper(Image* theImage, float x, float y, const SexyMatrix3 &theMatrix, const Rect& theClipRect, const Color& theColor, int theDrawMode, const Rect &theSrcRect, void *theSurface, int theBytePitch, int thePixelFormat, bool blend);
+ void BltTrianglesTexHelper(Image *theTexture, const TriVertex theVertices[][3], int theNumTriangles, const Rect &theClipRect, const Color &theColor, int theDrawMode, void *theSurface, int theBytePitch, int thePixelFormat, float tx, float ty, bool blend);
+
+ void FillScanLinesWithCoverage(Span* theSpans, int theSpanCount, const Color& theColor, int theDrawMode, const BYTE* theCoverage, int theCoverX, int theCoverY, int theCoverWidth, int theCoverHeight);
+
+
+public:
+ MemoryImage();
+ MemoryImage(SexyAppBase* theApp);
+ MemoryImage(const MemoryImage& theMemoryImage);
+ virtual ~MemoryImage();
+
+ virtual void Clear();
+ virtual void SetBits(ulong* theBits, int theWidth, int theHeight, bool commitBits = true);
+ virtual void Create(int theWidth, int theHeight);
+ virtual ulong* GetBits();
+
+ virtual void FillRect(const Rect& theRect, const Color& theColor, int theDrawMode);
+ virtual void ClearRect(const Rect& theRect);
+ virtual void DrawLine(double theStartX, double theStartY, double theEndX, double theEndY, const Color& theColor, int theDrawMode);
+ virtual void DrawLineAA(double theStartX, double theStartY, double theEndX, double theEndY, const Color& theColor, int theDrawMode);
+
+ virtual void Blt(Image* theImage, int theX, int theY, const Rect& theSrcRect, const Color& theColor, int theDrawMode);
+ virtual void BltF(Image* theImage, float theX, float theY, const Rect& theSrcRect, const Rect &theClipRect, const Color& theColor, int theDrawMode);
+ virtual void BltRotated(Image* theImage, float theX, float theY, const Rect &theSrcRect, const Rect& theClipRect, const Color& theColor, int theDrawMode, double theRot, float theRotCenterX, float theRotCenterY);
+ virtual void StretchBlt(Image* theImage, const Rect& theDestRect, const Rect& theSrcRect, const Rect& theClipRect, const Color& theColor, int theDrawMode, bool fastStretch);
+ virtual void BltMatrix(Image* theImage, float x, float y, const SexyMatrix3 &theMatrix, const Rect& theClipRect, const Color& theColor, int theDrawMode, const Rect &theSrcRect, bool blend);
+ virtual void BltTrianglesTex(Image *theTexture, const TriVertex theVertices[][3], int theNumTriangles, const Rect& theClipRect, const Color &theColor, int theDrawMode, float tx, float ty, bool blend);
+
+ virtual void SetImageMode(bool hasTrans, bool hasAlpha);
+ virtual void SetVolatile(bool isVolatile);
+
+ virtual bool Palletize();
+};
+
+}
+
+#endif //__MEMORYIMAGE_H__ \ No newline at end of file