From e21bca531d32d69df50872e19641364a72e27ccc Mon Sep 17 00:00:00 2001 From: Gregor Anich Date: Fri, 4 Nov 2005 23:25:03 +0000 Subject: [PATCH] Add very primitive AlphaBlend test. svn path=/trunk/; revision=19007 --- reactos/apps/utils/rosperf/alphablend.c | 88 +++++++++++++++++++++++++ reactos/apps/utils/rosperf/rosperf.h | 4 ++ reactos/apps/utils/rosperf/rosperf.xml | 3 + reactos/apps/utils/rosperf/testlist.c | 3 +- 4 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 reactos/apps/utils/rosperf/alphablend.c diff --git a/reactos/apps/utils/rosperf/alphablend.c b/reactos/apps/utils/rosperf/alphablend.c new file mode 100644 index 00000000000..75e4084f2ab --- /dev/null +++ b/reactos/apps/utils/rosperf/alphablend.c @@ -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 +#include +#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 */ diff --git a/reactos/apps/utils/rosperf/rosperf.h b/reactos/apps/utils/rosperf/rosperf.h index 8d486d4b541..7889f8ca7c0 100644 --- a/reactos/apps/utils/rosperf/rosperf.h +++ b/reactos/apps/utils/rosperf/rosperf.h @@ -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 */ diff --git a/reactos/apps/utils/rosperf/rosperf.xml b/reactos/apps/utils/rosperf/rosperf.xml index d9d6042b4bd..23dcc5ca438 100644 --- a/reactos/apps/utils/rosperf/rosperf.xml +++ b/reactos/apps/utils/rosperf/rosperf.xml @@ -2,7 +2,9 @@ . + 0x0500 version + msimg32 gdi32 user32 kernel32 @@ -11,6 +13,7 @@ lines.c fill.c text.c + alphablend.c testlist.c rosperf.rc diff --git a/reactos/apps/utils/rosperf/testlist.c b/reactos/apps/utils/rosperf/testlist.c index 73317daf704..eeee97f6fcc 100644 --- a/reactos/apps/utils/rosperf/testlist.c +++ b/reactos/apps/utils/rosperf/testlist.c @@ -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 } }; -- 2.17.1