1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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__
|