Mercurial > sdl-ios-xcode
view test/automated/audio/audio.c @ 3333:b334b4f7dfa0
[SDL] Bad math in SDL_RenderCopy
Mason Wheeler to sdl
When I tried to render an image using something other than NULL for srcrect, it got horribly distorted. I traced it down to the fact that the math in the rectangle adjustments performed just before the call to renderer->RenderCopy is written inside out. It should look like this:
if (dstrect->w != real_dstrect.w) {
int deltax = (dstrect->x - real_dstrect.x);
int deltaw = (dstrect->w - real_dstrect.w);
real_srcrect.x += (deltax * real_srcrect.w) / dstrect->w;
real_srcrect.w += (deltaw * real_srcrect.w) / dstrect->w;
}
if (dstrect->h != real_dstrect.h) {
int deltay = (dstrect->y - real_dstrect.y);
int deltah = (dstrect->h - real_dstrect.h);
real_srcrect.y += (deltay * real_srcrect.h) / dstrect->h;
real_srcrect.h += (deltah * real_srcrect.h) / dstrect->h;
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 03 Oct 2009 16:23:16 +0000 |
parents | 22ac66da0765 |
children | c32c53fca10d |
line wrap: on
line source
/** * Automated SDL_RWops test. * * Written by Edgar Simo "bobbens" * * Released under Public Domain. */ #include "SDL.h" #include "SDL_at.h" /** * @brief Prints available devices. */ static int audio_printDevices( int iscapture ) { int i, n; /* Get number of devices. */ n = SDL_GetNumAudioDevices(iscapture); SDL_ATprintVerbose( 1, "%d %s Audio Devices\n", n, iscapture ? "Capture" : "Output" ); /* List devices. */ for (i=0; i<n; i++) { SDL_ATprintVerbose( 1, " %d) %s\n", i+1, SDL_GetAudioDeviceName( i, iscapture ) ); } return 0; } /** * @brief Makes sure parameters work properly. */ static void audio_testOpen (void) { int i, n; int ret; /* Begin testcase. */ SDL_ATbegin( "Audio Open" ); /* List drivers. */ n = SDL_GetNumAudioDrivers(); SDL_ATprintVerbose( 1, "%d Audio Drivers\n", n ); for (i=0; i<n; i++) { SDL_ATprintVerbose( 1, " %s\n", SDL_GetAudioDriver(i) ); } /* Start SDL. */ ret = SDL_Init( SDL_INIT_AUDIO ); if (SDL_ATvassert( ret==0, "SDL_Init( SDL_INIT_AUDIO ): %s", SDL_GetError())) return; /* Print devices. */ SDL_ATprintVerbose( 1, "Using Audio Driver '%s'\n", SDL_GetCurrentAudioDriver() ); audio_printDevices(0); audio_printDevices(1); /* Quit SDL. */ SDL_Quit(); /* End testcase. */ SDL_ATend(); } /** * @brief Entry point. */ #ifdef TEST_STANDALONE int main( int argc, const char *argv[] ) { (void) argc; (void) argv; #else /* TEST_STANDALONE */ int test_audio (void) { #endif /* TEST_STANDALONE */ SDL_ATinit( "SDL_Audio" ); audio_testOpen(); return SDL_ATfinish(); }