Add very primitive AlphaBlend test.
authorGregor Anich <blight@blight.eu.org>
Fri, 4 Nov 2005 23:25:03 +0000 (23:25 +0000)
committerGregor Anich <blight@blight.eu.org>
Fri, 4 Nov 2005 23:25:03 +0000 (23:25 +0000)
svn path=/trunk/; revision=19007

reactos/apps/utils/rosperf/alphablend.c [new file with mode: 0644]
reactos/apps/utils/rosperf/rosperf.h
reactos/apps/utils/rosperf/rosperf.xml
reactos/apps/utils/rosperf/testlist.c

diff --git a/reactos/apps/utils/rosperf/alphablend.c b/reactos/apps/utils/rosperf/alphablend.c
new file mode 100644 (file)
index 0000000..75e4084
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ *  ReactOS RosPerf - ReactOS GUI performance test program
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <windows.h>
+#include <wingdi.h>
+#include "rosperf.h"
+
+typedef struct _ALPHABLEND_CONTEXT {
+  HDC BitmapDc;
+  HBITMAP Bitmap;
+} ALPHABLEND_CONTEXT, *PALPHABLEND_CONTEXT;
+
+unsigned
+AlphaBlendInit(void **Context, PPERF_INFO PerfInfo, unsigned Reps)
+{
+  PALPHABLEND_CONTEXT ctx = HeapAlloc(GetProcessHeap(), 0, sizeof (ALPHABLEND_CONTEXT));
+  INT x, y;
+
+  ctx->BitmapDc = CreateCompatibleDC(PerfInfo->BackgroundDc);
+  ctx->Bitmap = CreateCompatibleBitmap(PerfInfo->BackgroundDc, PerfInfo->WndWidth, PerfInfo->WndHeight);
+  SelectObject(ctx->BitmapDc, ctx->Bitmap);
+
+  for (y = 0; y < PerfInfo->WndHeight; y++)
+    {
+      for (x = 0; x < PerfInfo->WndWidth; x++)
+        {
+          SetPixel(ctx->BitmapDc, x, y, RGB(0xff, 0x00, 0x00));
+        }
+    }
+
+  *Context = ctx;
+
+  return Reps;
+}
+
+void
+AlphaBlendCleanup(void *Context, PPERF_INFO PerfInfo)
+{
+  PALPHABLEND_CONTEXT ctx = Context;
+  DeleteDC(ctx->BitmapDc);
+  DeleteObject(ctx->Bitmap);
+  HeapFree(GetProcessHeap(), 0, ctx);
+}
+
+
+ULONG
+DbgPrint(
+  IN PCH  Format,
+  IN ...);
+
+void
+AlphaBlendProc(void *Context, PPERF_INFO PerfInfo, unsigned Reps)
+{
+  PALPHABLEND_CONTEXT ctx = Context;
+  unsigned Rep;
+  BLENDFUNCTION BlendFunc = { AC_SRC_OVER, 0, 0, 0 };
+
+  for (Rep = 0; Rep < Reps; Rep++)
+    {
+      BlendFunc.SourceConstantAlpha = 255 * Rep / Reps;
+#if 0
+      PatBlt(PerfInfo->BackgroundDc, 0, 0, PerfInfo->WndWidth, PerfInfo->WndHeight, PATCOPY);
+#endif
+      if (!AlphaBlend(PerfInfo->BackgroundDc, 0, 0, PerfInfo->WndWidth, PerfInfo->WndHeight,
+                      ctx->BitmapDc, 0, 0, PerfInfo->WndWidth, PerfInfo->WndHeight,
+                      BlendFunc))
+        {
+          DbgPrint("AlphaBlend failed (0x%lx)\n", GetLastError());
+        }
+    }
+}
+
+/* EOF */
index 8d486d4..7889f8c 100644 (file)
@@ -61,6 +61,10 @@ void LinesProc(void *Context, PPERF_INFO PerfInfo, unsigned Reps);
 
 void TextProc(void *Context, PPERF_INFO PerfInfo, unsigned Reps);
 
+unsigned AlphaBlendInit(void **Context, PPERF_INFO PerfInfo, unsigned Reps);
+void AlphaBlendCleanup(void *Context, PPERF_INFO PerfInfo);
+void AlphaBlendProc(void *Context, PPERF_INFO PerfInfo, unsigned Reps);
+
 #endif /* ROSPERF_H_INCLUDED */
 
 /* EOF */
index d9d6042..23dcc5c 100644 (file)
@@ -2,7 +2,9 @@
     <include base="rosperf">.</include>
     <define name="__USE_W32API" />
     <define name="UNICODE" />
+    <define name="WINVER">0x0500</define>
     <library>version</library>
+    <library>msimg32</library>
     <library>gdi32</library>
     <library>user32</library>
     <library>kernel32</library>
@@ -11,6 +13,7 @@
     <file>lines.c</file>
     <file>fill.c</file>
     <file>text.c</file>
+    <file>alphablend.c</file>
     <file>testlist.c</file>
     <file>rosperf.rc</file>
 </module>
index 73317da..eeee97f 100644 (file)
@@ -26,7 +26,8 @@ static TEST TestList[] =
     { L"hlines", L"Horizontal Lines", NullInit, LinesHorizontalProc, NullCleanup, NullCleanup },
     { L"vlines", L"Vertical Lines", NullInit, LinesVerticalProc, NullCleanup, NullCleanup },
     { L"lines", L"Lines", NullInit, LinesProc, NullCleanup, NullCleanup },
-    { L"text", L"Text", NullInit, TextProc, NullCleanup, NullCleanup }
+    { L"text", L"Text", NullInit, TextProc, NullCleanup, NullCleanup },
+    { L"alpha", L"Alpha Blend", AlphaBlendInit, AlphaBlendProc, NullCleanup, AlphaBlendCleanup }
   };