From c708ddd66fcf68431e241e5f75b18419aa7bfc84 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 26 Jan 2023 13:58:38 -0800 Subject: [PATCH] Added a SDL render viewport test --- test/testautomation_render.c | 63 ++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 3 deletions(-) diff --git a/test/testautomation_render.c b/test/testautomation_render.c index aff12c5b9..510edbb49 100644 --- a/test/testautomation_render.c +++ b/test/testautomation_render.c @@ -13,6 +13,10 @@ #define RENDER_COMPARE_FORMAT SDL_PIXELFORMAT_ARGB8888 +#define RENDER_COLOR_CLEAR 0x00000000 +#define RENDER_COLOR_BLACK 0xFF000000 +#define RENDER_COLOR_WHITE 0xFFFFFFFF +#define RENDER_COLOR_GREEN 0xFF00FF00 #define ALLOWABLE_ERROR_OPAQUE 0 #define ALLOWABLE_ERROR_BLENDED 64 @@ -586,8 +590,6 @@ int render_testBlitAlpha(void *arg) return TEST_COMPLETED; } -/* Helper functions */ - /** * @brief Tests a blend mode. * @@ -801,6 +803,53 @@ int render_testBlitBlend(void *arg) return TEST_COMPLETED; } +/** + * @brief Test viewport + */ +int render_testViewport(void *arg) +{ + int ret; + SDL_Surface *referenceSurface; + SDL_Rect viewport; + + viewport.x = TESTRENDER_SCREEN_W / 3; + viewport.y = TESTRENDER_SCREEN_H / 3; + viewport.w = TESTRENDER_SCREEN_W / 2; + viewport.h = TESTRENDER_SCREEN_H / 2; + + /* Create expected result */ + referenceSurface = SDL_CreateSurface(TESTRENDER_SCREEN_W, TESTRENDER_SCREEN_H, RENDER_COMPARE_FORMAT); + ret = SDL_FillSurfaceRect(referenceSurface, NULL, RENDER_COLOR_CLEAR); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_FillSurfaceRect, expected: 0, got: %i", ret); + ret = SDL_FillSurfaceRect(referenceSurface, &viewport, RENDER_COLOR_GREEN); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_FillSurfaceRect, expected: 0, got: %i", ret); + + /* Clear surface. */ + clearScreen(); + + /* Set the viewport and do a fill operation */ + ret = SDL_SetRenderViewport(renderer, &viewport); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderViewport, expected: 0, got: %i", ret); + ret = SDL_SetRenderDrawColor(renderer, 0, 255, 0, SDL_ALPHA_OPAQUE); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret); + ret = SDL_RenderFillRect(renderer, NULL); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret); + ret = SDL_SetRenderViewport(renderer, NULL); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderViewport, expected: 0, got: %i", ret); + + /* Check to see if final image matches. */ + compare(referenceSurface, ALLOWABLE_ERROR_BLENDED); + + /* Make current */ + SDL_RenderPresent(renderer); + + SDL_DestroySurface(referenceSurface); + + return TEST_COMPLETED; +} + +/* Helper functions */ + /** * @brief Checks to see if functionality is supported. Helper function. */ @@ -1106,6 +1155,10 @@ clearScreen(void) /* Make current */ SDL_RenderPresent(renderer); + + /* Clear screen. */ + ret = SDL_RenderClear(renderer); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderClear, expected: 0, got: %i", ret); /* Set defaults. */ ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE); @@ -1151,9 +1204,13 @@ static const SDLTest_TestCaseReference renderTest7 = { (SDLTest_TestCaseFp)render_testBlitBlend, "render_testBlitBlend", "Tests blitting with blending", TEST_DISABLED }; +static const SDLTest_TestCaseReference renderTest8 = { + (SDLTest_TestCaseFp)render_testViewport, "render_testViewport", "Tests viewport", TEST_ENABLED +}; + /* Sequence of Render test cases */ static const SDLTest_TestCaseReference *renderTests[] = { - &renderTest1, &renderTest2, &renderTest3, &renderTest4, &renderTest5, &renderTest6, &renderTest7, NULL + &renderTest1, &renderTest2, &renderTest3, &renderTest4, &renderTest5, &renderTest6, &renderTest7, &renderTest8, NULL }; /* Render test suite (global) */