From d9b53399fed5631d9c8fc9700d595c0a3aa34e3a Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 26 Jan 2023 14:49:23 -0800 Subject: [PATCH] Added an SDL render logical size test --- test/testautomation_render.c | 90 ++++++++++++++++++++++++++++++++++-- 1 file changed, 85 insertions(+), 5 deletions(-) diff --git a/test/testautomation_render.c b/test/testautomation_render.c index 510edbb49..e167a6177 100644 --- a/test/testautomation_render.c +++ b/test/testautomation_render.c @@ -13,9 +13,7 @@ #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_CLEAR 0xFF000000 #define RENDER_COLOR_GREEN 0xFF00FF00 #define ALLOWABLE_ERROR_OPAQUE 0 @@ -838,7 +836,83 @@ int render_testViewport(void *arg) 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); + compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE); + + /* Make current */ + SDL_RenderPresent(renderer); + + SDL_DestroySurface(referenceSurface); + + return TEST_COMPLETED; +} + +/** + * @brief Test logical size + */ +int render_testLogicalSize(void *arg) +{ + int ret; + SDL_Surface *referenceSurface; + SDL_Rect viewport; + SDL_FRect rect; + int w, h; + const int factor = 2; + + viewport.x = ((TESTRENDER_SCREEN_W / 4) / factor) * factor; + viewport.y = ((TESTRENDER_SCREEN_H / 4) / factor) * factor; + viewport.w = ((TESTRENDER_SCREEN_W / 2) / factor) * factor; + viewport.h = ((TESTRENDER_SCREEN_H / 2) / factor) * factor; + + /* 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 logical size and do a fill operation */ + ret = SDL_GetRendererOutputSize(renderer, &w, &h); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_GetRendererOutputSize, expected: 0, got: %i", ret); + ret = SDL_SetRenderLogicalSize(renderer, w / factor, h / factor); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderLogicalSize, 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); + rect.x = (float)viewport.x / factor; + rect.y = (float)viewport.y / factor; + rect.w = (float)viewport.w / factor; + rect.h = (float)viewport.h / factor; + ret = SDL_RenderFillRect(renderer, &rect); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret); + + /* Check to see if final image matches. */ + compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE); + + /* Clear surface. */ + clearScreen(); + + /* Set the logical size and viewport and do a fill operation */ + ret = SDL_GetRendererOutputSize(renderer, &w, &h); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_GetRendererOutputSize, expected: 0, got: %i", ret); + ret = SDL_SetRenderLogicalSize(renderer, w / factor, h / factor); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderLogicalSize, expected: 0, got: %i", ret); + viewport.x = (TESTRENDER_SCREEN_W / 4) / factor; + viewport.y = (TESTRENDER_SCREEN_H / 4) / factor; + viewport.w = (TESTRENDER_SCREEN_W / 2) / factor; + viewport.h = (TESTRENDER_SCREEN_H / 2) / factor; + 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_OPAQUE); /* Make current */ SDL_RenderPresent(renderer); @@ -1208,9 +1282,15 @@ static const SDLTest_TestCaseReference renderTest8 = { (SDLTest_TestCaseFp)render_testViewport, "render_testViewport", "Tests viewport", TEST_ENABLED }; +static const SDLTest_TestCaseReference renderTest9 = { + (SDLTest_TestCaseFp)render_testLogicalSize, "render_testLogicalSize", "Tests logical size", TEST_ENABLED +}; + /* Sequence of Render test cases */ static const SDLTest_TestCaseReference *renderTests[] = { - &renderTest1, &renderTest2, &renderTest3, &renderTest4, &renderTest5, &renderTest6, &renderTest7, &renderTest8, NULL + &renderTest1, &renderTest2, &renderTest3, &renderTest4, + &renderTest5, &renderTest6, &renderTest7, &renderTest8, + &renderTest9, NULL }; /* Render test suite (global) */