Mercurial > sdl-ios-xcode
view test/automated/common/common.c @ 3468:789b97008d8a
My first OpenGL shader! Momma will be so proud!
This shader implements the software renderer mask semantics where the source pixel is multiplied by the color and alpha modulation values and then any pixel with non-zero alpha is fully opaque.
The OpenGL renderer on Mac OS X now passes all the automated render tests! :)
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 21 Nov 2009 05:29:31 +0000 |
parents | 6b182cbe38ac |
children | ab99313951cd |
line wrap: on
line source
/** * Automated SDL_Surface test. * * Written by Edgar Simo "bobbens" * * Released under Public Domain. */ #include "SDL.h" #include "SDL_at.h" #include "common/common.h" /** * @brief Compares a surface and a surface image for equality. */ int surface_compare( SDL_Surface *sur, const SurfaceImage_t *img ) { int ret; int i,j; int bpp; Uint8 *p, *pd; /* Make sure size is the same. */ if ((sur->w != img->width) || (sur->h != img->height)) return -1; SDL_LockSurface( sur ); ret = 0; bpp = sur->format->BytesPerPixel; /* Compare image - should be same format. */ for (j=0; j<sur->h; j++) { for (i=0; i<sur->w; i++) { p = (Uint8 *)sur->pixels + j * sur->pitch + i * bpp; pd = (Uint8 *)img->pixel_data + (j*img->width + i) * img->bytes_per_pixel; switch (bpp) { case 1: case 2: case 3: ret += 1; printf("%d BPP not supported yet.\n",bpp); break; case 4: { int dist = 0; Uint8 R, G, B, A; SDL_GetRGBA(*(Uint32*)p, sur->format, &R, &G, &B, &A); if (img->bytes_per_pixel == 3) { dist += (R-pd[0])*(R-pd[0]); dist += (G-pd[1])*(G-pd[1]); dist += (B-pd[2])*(B-pd[2]); } else { dist += (R-pd[0])*(R-pd[0]); dist += (G-pd[1])*(G-pd[1]); dist += (B-pd[2])*(B-pd[2]); dist += (A-pd[3])*(A-pd[3]); } /* Allow up to sqrt(32) difference in blending accuracy */ if (dist > 32) { /*printf("pixel %d,%d varies by %d\n", i, j, dist);*/ ++ret; } } break; } } } SDL_UnlockSurface( sur ); if (ret) { SDL_SaveBMP(sur, "fail.bmp"); SDL_LockSurface( sur ); bpp = sur->format->BytesPerPixel; /* Compare image - should be same format. */ if (bpp == 4) { for (j=0; j<sur->h; j++) { for (i=0; i<sur->w; i++) { p = (Uint8 *)sur->pixels + j * sur->pitch + i * bpp; pd = (Uint8 *)img->pixel_data + (j*img->width + i) * img->bytes_per_pixel; Uint8 R, G, B, A; R = pd[0]; G = pd[1]; B = pd[2]; if (img->bytes_per_pixel == 4) { A = pd[3]; } else { A = 0; } *(Uint32*)p = (A << 24) | (R << 16) | (G << 8) | B; } } } SDL_UnlockSurface( sur ); SDL_SaveBMP(sur, "good.bmp"); } return ret; }