--- a/src/video/SDL_stretch.c Sun May 16 19:02:19 2004 +0000
+++ b/src/video/SDL_stretch.c Sun May 16 21:08:55 2004 +0000
@@ -181,6 +181,8 @@
int SDL_SoftStretch(SDL_Surface *src, SDL_Rect *srcrect,
SDL_Surface *dst, SDL_Rect *dstrect)
{
+ int src_locked;
+ int dst_locked;
int pos, inc;
int dst_width;
int dst_maxrow;
@@ -229,6 +231,28 @@
dstrect = &full_dst;
}
+ /* Lock the destination if it's in hardware */
+ dst_locked = 0;
+ if ( SDL_MUSTLOCK(dst) ) {
+ if ( SDL_LockSurface(dst) < 0 ) {
+ SDL_SetError("Unable to lock destination surface");
+ return(-1);
+ }
+ dst_locked = 1;
+ }
+ /* Lock the source if it's in hardware */
+ src_locked = 0;
+ if ( SDL_MUSTLOCK(src) ) {
+ if ( SDL_LockSurface(src) < 0 ) {
+ if ( dst_locked ) {
+ SDL_UnlockSurface(dst);
+ }
+ SDL_SetError("Unable to lock source surface");
+ return(-1);
+ }
+ src_locked = 1;
+ }
+
/* Set up the data... */
pos = 0x10000;
inc = (srcrect->h << 16) / dstrect->h;
@@ -307,6 +331,14 @@
#endif
pos += inc;
}
+
+ /* We need to unlock the surfaces if they're locked */
+ if ( dst_locked ) {
+ SDL_UnlockSurface(dst);
+ }
+ if ( src_locked ) {
+ SDL_UnlockSurface(src);
+ }
return(0);
}