/** * @brief Compares screen pixels with image pixels. Helper function. * * @param s Image to compare against. * * \sa * http://wiki.libsdl.org/moin.cgi/SDL_RenderReadPixels * http://wiki.libsdl.org/moin.cgi/SDL_CreateRGBSurfaceFrom * http://wiki.libsdl.org/moin.cgi/SDL_FreeSurface */ static void _compare(SDL_Surface *referenceSurface, int allowable_error) { int result; SDL_Rect rect; Uint8 *pixels; SDL_Surface *testSurface; /* Read pixels. */ pixels = (Uint8 *)SDL_malloc(4*TESTRENDER_SCREEN_W*TESTRENDER_SCREEN_H); SDLTest_AssertCheck(pixels != NULL, "Validate allocated temp pixel buffer"); if (pixels == NULL) return; /* Explicitly specify the rect in case the window isn't the expected size... */ rect.x = 0; rect.y = 0; rect.w = TESTRENDER_SCREEN_W; rect.h = TESTRENDER_SCREEN_H; result = SDL_RenderReadPixels(renderer, &rect, RENDER_COMPARE_FORMAT, pixels, 80*4 ); SDLTest_AssertCheck(result == 0, "Validate result from SDL_RenderReadPixels, expected: 0, got: %i", result); /* Create surface. */ testSurface = SDL_CreateRGBSurfaceFrom(pixels, TESTRENDER_SCREEN_W, TESTRENDER_SCREEN_H, 32, TESTRENDER_SCREEN_W*4, RENDER_COMPARE_RMASK, RENDER_COMPARE_GMASK, RENDER_COMPARE_BMASK, RENDER_COMPARE_AMASK); SDLTest_AssertCheck(testSurface != NULL, "Verify result from SDL_CreateRGBSurfaceFrom is not NULL"); /* Compare surface. */ result = SDLTest_CompareSurfaces( testSurface, referenceSurface, allowable_error ); SDLTest_AssertCheck(result == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", result); /* Clean up. */ SDL_free(pixels); SDL_FreeSurface(testSurface); }
/* ! * Tests surface conversion. */ int surface_testSurfaceConversion(void *arg) { SDL_Surface *rface = NULL, *face = NULL; int ret = 0; /* Create sample surface */ face = SDLTest_ImageFace(); SDLTest_AssertCheck(face != NULL, "Verify face surface is not NULL"); if (face == NULL) return TEST_ABORTED; /* Set transparent pixel as the pixel at (0,0) */ if (face->format->palette) { ret = SDL_SetColorKey(face, SDL_RLEACCEL, *(Uint8 *) face->pixels); SDLTest_AssertPass("Call to SDL_SetColorKey()"); SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetColorKey, expected: 0, got: %i", ret); } /* Convert to 32 bit to compare. */ rface = SDL_ConvertSurface( face, testSurface->format, 0 ); SDLTest_AssertPass("Call to SDL_ConvertSurface()"); SDLTest_AssertCheck(rface != NULL, "Verify result from SDL_ConvertSurface is not NULL"); /* Compare surface. */ ret = SDLTest_CompareSurfaces( rface, face, 0 ); SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); /* Clean up. */ if (face != NULL) { SDL_FreeSurface( face ); face = NULL; } if (rface != NULL) { SDL_FreeSurface( rface ); rface = NULL; } return TEST_COMPLETED; }