--- a/src/video/directfb/SDL_DirectFB_render.c Wed Aug 15 03:18:24 2007 +0000
+++ b/src/video/directfb/SDL_DirectFB_render.c Wed Aug 15 03:19:21 2007 +0000
@@ -505,27 +505,31 @@
DirectFB_TextureData *data = (DirectFB_TextureData *) texture->driverdata;
DirectFB_RenderData *renderdata =
(DirectFB_RenderData *) renderer->driverdata;
-
- if (data->pixels) {
- Uint8 *src, *dst;
- int row;
- size_t length;
+ DFBResult ret;
+ Uint8 *dpixels;
+ int dpitch;
+ Uint8 *src, *dst;
+ int row;
+ size_t length;
- src = (Uint8 *) pixels;
- dst =
- (Uint8 *) data->pixels + rect->y * data->pitch +
- rect->x * SDL_BYTESPERPIXEL(texture->format);
- length = rect->w * SDL_BYTESPERPIXEL(texture->format);
- for (row = 0; row < rect->h; ++row) {
- SDL_memcpy(dst, src, length);
- src += pitch;
- dst += data->pitch;
- }
- } else {
- SDL_SetError("FIXME: Update without lock!\n");
- return -1;
+ SDL_DFB_CHECKERR(data->surface->Lock(data->surface,
+ DSLF_WRITE | DSLF_READ, &dpixels,
+ &dpitch));
+ src = (Uint8 *) pixels;
+ dst =
+ (Uint8 *) dpixels + rect->y * dpitch +
+ rect->x * SDL_BYTESPERPIXEL(texture->format);
+ length = rect->w * SDL_BYTESPERPIXEL(texture->format);
+ for (row = 0; row < rect->h; ++row) {
+ SDL_memcpy(dst, src, length);
+ src += pitch;
+ dst += dpitch;
}
+ SDL_DFB_CHECKERR(data->surface->Unlock(data->surface) );
return 0;
+error:
+ return 1;
+
}
static int