Subversion Repositories AndroidProjects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
244 chris 1
{
2
	double aCos = cos(theRot);
3
	double aSin = sin(theRot);
4
 
5
	int aCosLong = (int) (aCos * 0x10000);
6
	int aSinLong = (int) (aSin * 0x10000);
7
 
8
#ifdef OPTIMIZE_SOFTWARE_DRAWING
9
	int aRotCenterXLong = (int)(theRotCenterX * 0x10000);
10
	int aRotCenterYLong = (int)(theRotCenterY * 0x10000);
11
#endif
12
 
13
	if (!LockSurface())
14
		return;
15
 
16
	int* aMaxRedTable = mDDInterface->mRedAddTable;
17
	int* aMaxGreenTable = mDDInterface->mGreenAddTable;
18
	int* aMaxBlueTable = mDDInterface->mBlueAddTable;
19
 
20
	int aRedShift = mDDInterface->mRedShift;
21
	int aGreenShift = mDDInterface->mGreenShift;
22
	int aBlueShift = mDDInterface->mBlueShift;
23
 
24
	int aRedRightShift = 32 - mDDInterface->mRedBits;
25
	int aGreenRightShift = 24 - mDDInterface->mGreenBits;
26
	int aBlueRightShift = 16 - mDDInterface->mBlueBits;
27
 
28
	ulong aRMask = mLockedSurfaceDesc.ddpfPixelFormat.dwRBitMask;
29
	ulong aGMask = mLockedSurfaceDesc.ddpfPixelFormat.dwGBitMask;
30
	ulong aBMask = mLockedSurfaceDesc.ddpfPixelFormat.dwBBitMask;
31
 
32
	ulong aRRoundAdd = aRMask >> 1;
33
	ulong aGRoundAdd = aGMask >> 1;
34
	ulong aBRoundAdd = aBMask >> 1;
35
 
36
	if (mLockedSurfaceDesc.ddpfPixelFormat.dwRGBBitCount == 16)
37
	{
38
		ushort* aDestPixelsRow = ((ushort*) mLockedSurfaceDesc.lpSurface) + ((int)aDestRect.mY * mLockedSurfaceDesc.lPitch/2) + (int)aDestRect.mX;
39
		int aDestPixelsPitch = mLockedSurfaceDesc.lPitch/2;
40
 
41
		//TODO: if (theColor == Color::White)
42
		{
43
			int ca = theColor.mAlpha;
44
			int cr = (theColor.mRed * ca) / 255;
45
			int cg = (theColor.mGreen * ca) / 255;
46
			int cb = (theColor.mBlue * ca) / 255;
47
 
48
			#define DEST_PIXEL_TYPE ushort
49
			#define WRITE_PIXEL\
50
			{\
51
				ushort dest = *aDestPixels;\
52
				\
53
				int r = aMaxRedTable[((dest & aRMask)>>aRedShift) + \
54
					((((((src1 & 0xFF0000) * a1) + \
55
						((src2 & 0xFF0000) * a2) + \
56
						((src3 & 0xFF0000) * a3) + \
57
						((src4 & 0xFF0000) * a4)) >> aRedRightShift) * cr) >> 8)];\
58
				int g = aMaxGreenTable[((dest & aGMask)>>aGreenShift) + \
59
					(((((src1 & 0x00FF00) * a1) + \
60
						((src2 & 0x00FF00) * a2) + \
61
						((src3 & 0x00FF00) * a3) + \
62
						((src4 & 0x00FF00) * a4)) * cg) >> (aGreenRightShift + 8))];\
63
				int b = aMaxBlueTable[((dest & aBMask)>>aBlueShift) + \
64
					(((((src1 & 0x0000FF) * a1) + \
65
						((src2 & 0x0000FF) * a2) + \
66
						((src3 & 0x0000FF) * a3) + \
67
						((src4 & 0x0000FF) * a4)) * cb) >> (aBlueRightShift + 8))];\
68
				\
69
				*(aDestPixels++) = \
70
					(r << aRedShift) | \
71
					(g << aGreenShift) | \
72
					(b << aBlueShift); \
73
			}
74
			#include "BltRotatedHelper.inc"
75
 
76
			#undef WRITE_PIXEL
77
			#undef DEST_PIXEL_TYPE
78
		}
79
		/*else
80
		{
81
 
82
		}*/
83
	}
84
	else if (mLockedSurfaceDesc.ddpfPixelFormat.dwRGBBitCount == 32)
85
	{
86
		ulong* aDestPixelsRow = ((ulong*) mLockedSurfaceDesc.lpSurface) + ((int)aDestRect.mY * mLockedSurfaceDesc.lPitch/4) + (int)aDestRect.mX;
87
		int aDestPixelsPitch = mLockedSurfaceDesc.lPitch/4;
88
 
89
		//if (theColor == Color::White)
90
		{
91
			int ca = theColor.mAlpha;
92
			int cr = (theColor.mRed * ca) / 255;
93
			int cg = (theColor.mGreen * ca) / 255;
94
			int cb = (theColor.mBlue * ca) / 255;
95
 
96
 
97
			#define DEST_PIXEL_TYPE ulong
98
			#define WRITE_PIXEL\
99
			{\
100
				ulong dest = *aDestPixels;\
101
				\
102
				int r = aMaxRedTable[((dest & aRMask)>>aRedShift) + \
103
					((((((src1 & 0xFF0000) * a1) + \
104
						((src2 & 0xFF0000) * a2) + \
105
						((src3 & 0xFF0000) * a3) + \
106
						((src4 & 0xFF0000) * a4)) >> aRedRightShift) * cr) >> 8)];\
107
				int g = aMaxGreenTable[((dest & aGMask)>>aGreenShift) + \
108
					(((((src1 & 0x00FF00) * a1) + \
109
						((src2 & 0x00FF00) * a2) + \
110
						((src3 & 0x00FF00) * a3) + \
111
						((src4 & 0x00FF00) * a4)) * cg) >> (aGreenRightShift + 8))];\
112
				int b = aMaxBlueTable[((dest & aBMask)>>aBlueShift) + \
113
					(((((src1 & 0x0000FF) * a1) + \
114
						((src2 & 0x0000FF) * a2) + \
115
						((src3 & 0x0000FF) * a3) + \
116
						((src4 & 0x0000FF) * a4)) * cb) >> (aBlueRightShift + 8))];\
117
				\
118
				*(aDestPixels++) = \
119
					(r << aRedShift) | \
120
					(g << aGreenShift) | \
121
					(b << aBlueShift);\
122
			}
123
 
124
			#include "BltRotatedHelper.inc"
125
 
126
			#undef WRITE_PIXEL
127
			#undef DEST_PIXEL_TYPE
128
 
129
 
130
		}
131
		/*else
132
		{
133
 
134
		}*/
135
	}
136
 
137
	UnlockSurface();
138
}