summaryrefslogtreecommitdiff
path: root/osframework/source/SexyAppFramework/MI_BltRotated_Additive.inc
diff options
context:
space:
mode:
Diffstat (limited to 'osframework/source/SexyAppFramework/MI_BltRotated_Additive.inc')
-rw-r--r--osframework/source/SexyAppFramework/MI_BltRotated_Additive.inc71
1 files changed, 71 insertions, 0 deletions
diff --git a/osframework/source/SexyAppFramework/MI_BltRotated_Additive.inc b/osframework/source/SexyAppFramework/MI_BltRotated_Additive.inc
new file mode 100644
index 0000000..a22b75b
--- /dev/null
+++ b/osframework/source/SexyAppFramework/MI_BltRotated_Additive.inc
@@ -0,0 +1,71 @@
+{
+ double aCos = cos(theRot);
+ double aSin = sin(theRot);
+
+ int aCosLong = (int) (aCos * 0x10000);
+ int aSinLong = (int) (aSin * 0x10000);
+
+#ifdef OPTIMIZE_SOFTWARE_DRAWING
+ int aRotCenterXLong = (int)(theRotCenterX * 0x10000);
+ int aRotCenterYLong = (int)(theRotCenterY * 0x10000);
+#endif
+
+ ulong* aDestPixelsRow = GetBits() + ((int)aDestRect.mY * mWidth) + (int)aDestRect.mX;
+ int aDestPixelsPitch = mWidth;
+
+ if (theColor == Color::White)
+ {
+ #define DEST_PIXEL_TYPE ulong
+ #define WRITE_PIXEL\
+ {\
+ ulong dest = *aDestPixels;\
+ int a = a1+a2+a3+a4; \
+ if(a==0) /* transparent */ \
+ aDestPixels++;\
+ else \
+ { \
+ ulong r = aMaxTable[((((src1&0xFF0000)*a1) + ((src2&0xFF0000)*a2) + ((src3&0xFF0000)*a3) + ((src4&0xFF0000)*a4))>>24) + ((dest&0xFF0000)>>16)]; \
+ ulong g = aMaxTable[((((src1&0x00FF00)*a1) + ((src2&0x00FF00)*a2) + ((src3&0x00FF00)*a3) + ((src4&0x00FF00)*a4))>>16) + ((dest&0x00FF00)>>8)]; \
+ ulong b = aMaxTable[((((src1&0x0000FF)*a1) + ((src2&0x0000FF)*a2) + ((src3&0x0000FF)*a3) + ((src4&0x0000FF)*a4))>>8) + (dest&0x0000FF)]; \
+ \
+ *aDestPixels++ = (dest & 0xFF000000) | (r<<16) | (g<<8) | b; \
+ } \
+ }
+
+ #include "BltRotatedHelper.inc"
+
+ #undef WRITE_PIXEL
+ #undef DEST_PIXEL_TYPE
+ }
+ else
+ {
+ int ca = theColor.mAlpha;
+ int cr = (theColor.mRed * ca) / 255;
+ int cg = (theColor.mGreen * ca) / 255;
+ int cb = (theColor.mBlue * ca) / 255;
+
+ #define DEST_PIXEL_TYPE ulong
+ #define WRITE_PIXEL\
+ {\
+ ulong dest = *aDestPixels;\
+ int a = a1+a2+a3+a4; \
+ if(a==0) /* transparent */ \
+ aDestPixels++; \
+ else \
+ { \
+ ulong destPixel = *aDestPixels; \
+ \
+ ulong r = aMaxTable[((((((src1&0xFF0000)*a1) + ((src2&0xFF0000)*a2) + ((src3&0xFF0000)*a3) + ((src4&0xFF0000)*a4))>>24)*cr)>>8) + ((dest&0xFF0000)>>16)]; \
+ ulong g = aMaxTable[(((((src1&0x00FF00)*a1) + ((src2&0x00FF00)*a2) + ((src3&0x00FF00)*a3) + ((src4&0x00FF00)*a4))*cg)>>24) + ((dest&0x00FF00)>>8)]; \
+ ulong b = aMaxTable[(((((src1&0x0000FF)*a1) + ((src2&0x0000FF)*a2) + ((src3&0x0000FF)*a3) + ((src4&0x0000FF)*a4))*cb)>>16) + (dest&0x0000FF)]; \
+ \
+ *aDestPixels++ = (dest & 0xFF000000) | (r<<16) | (g<<8) | b; \
+ }\
+ }
+
+ #include "BltRotatedHelper.inc"
+
+ #undef WRITE_PIXEL
+ #undef DEST_PIXEL_TYPE
+ }
+} \ No newline at end of file