aboutsummaryrefslogtreecommitdiff
path: root/backends
diff options
context:
space:
mode:
authorMax Horn2003-06-19 16:16:35 +0000
committerMax Horn2003-06-19 16:16:35 +0000
commited43323597f6d2b7896033e9cece5a0e87f3f30e (patch)
tree2c2a971568beed31d214ea884fcac4c8c41079e7 /backends
parent440100606c60124ad7beb0b3195fc8669498d1bc (diff)
downloadscummvm-rg350-ed43323597f6d2b7896033e9cece5a0e87f3f30e.tar.gz
scummvm-rg350-ed43323597f6d2b7896033e9cece5a0e87f3f30e.tar.bz2
scummvm-rg350-ed43323597f6d2b7896033e9cece5a0e87f3f30e.zip
some fixes for the GL backend - but there are still many things broken, e.g. Ctrl-B only acts on the second (of two) GL textures (which makes the black vertical line stand out even more)
svn-id: r8560
Diffstat (limited to 'backends')
-rw-r--r--backends/sdl/sdl.cpp8
-rw-r--r--backends/sdl/sdl_gl.cpp147
2 files changed, 77 insertions, 78 deletions
diff --git a/backends/sdl/sdl.cpp b/backends/sdl/sdl.cpp
index d5b5d1656c..2caa4d2d67 100644
--- a/backends/sdl/sdl.cpp
+++ b/backends/sdl/sdl.cpp
@@ -61,7 +61,7 @@ void OSystem_SDL::set_palette(const byte *colors, uint start, uint num) {
const byte *b = colors;
uint i;
SDL_Color *base = _currentPalette + start;
- for(i = 0; i < num; i++) {
+ for (i = 0; i < num; i++) {
base[i].r = b[0];
base[i].g = b[1];
base[i].b = b[2];
@@ -283,7 +283,7 @@ void OSystem_SDL::update_screen() {
if (_scaler_proc == Normal1x) {
SDL_Surface *target = _overlayVisible ? _tmpscreen : _screen;
- for(r = _dirty_rect_list; r != last_rect; ++r) {
+ for (r = _dirty_rect_list; r != last_rect; ++r) {
dst = *r;
if (_overlayVisible) {
@@ -296,7 +296,7 @@ void OSystem_SDL::update_screen() {
}
} else {
if (!_overlayVisible) {
- for(r = _dirty_rect_list; r != last_rect; ++r) {
+ for (r = _dirty_rect_list; r != last_rect; ++r) {
dst = *r;
dst.x++; // Shift rect by one since 2xSai needs to acces the data around
dst.y++; // any pixel to scale it, and we want to avoid mem access crashes.
@@ -311,7 +311,7 @@ void OSystem_SDL::update_screen() {
srcPitch = _tmpscreen->pitch;
dstPitch = _hwscreen->pitch;
- for(r = _dirty_rect_list; r != last_rect; ++r) {
+ for (r = _dirty_rect_list; r != last_rect; ++r) {
register int dst_y = r->y + _currentShakePos;
register int dst_h = 0;
if (dst_y < _screenHeight) {
diff --git a/backends/sdl/sdl_gl.cpp b/backends/sdl/sdl_gl.cpp
index 88485b5bad..46b3634c82 100644
--- a/backends/sdl/sdl_gl.cpp
+++ b/backends/sdl/sdl_gl.cpp
@@ -91,7 +91,7 @@ void OSystem_SDL_OpenGL::set_palette(const byte *colors, uint start, uint num) {
const byte *b = colors;
uint i;
SDL_Color *base = _currentPalette + start;
- for(i = 0; i < num; i++) {
+ for (i = 0; i < num; i++) {
base[i].r = b[0];
base[i].g = b[1];
base[i].b = b[2];
@@ -386,46 +386,23 @@ void OSystem_SDL_OpenGL::update_screen() {
if (_num_dirty_rects > 0) {
SDL_Rect *r;
+ SDL_Rect dst;
uint32 srcPitch, dstPitch;
SDL_Rect *last_rect = _dirty_rect_list + _num_dirty_rects;
- // Convert appropriate parts of the 8bpp image into 16bpp
- SDL_Rect dst;
- if (!_overlayVisible) {
- for(r = _dirty_rect_list; r != last_rect; ++r) {
- dst = *r;
- dst.x++; // Shift rect by one since 2xSai needs to acces the data around
- dst.y++; // any pixel to scale it, and we want to avoid mem access crashes.
- if (_scaler_proc == Normal1x) {
- if (_usingOpenGL) {
- if (SDL_BlitSurface(_screen, r, _tmpscreen, &dst) != 0)
- error("SDL_BlitSurface failed: %s", SDL_GetError());
- }
- else { // SDL backend
- if (SDL_BlitSurface(_screen, r, _hwscreen, &dst) != 0)
- error("SDL_BlitSurface failed: %s", SDL_GetError());
- }
- } else { // _scaler_proc != Normal1x
+
+ if (_usingOpenGL) {
+
+ if (!_overlayVisible) {
+ for (r = _dirty_rect_list; r != last_rect; ++r) {
+ dst = *r;
+ dst.x++; // Shift rect by one since 2xSai needs to acces the data around
+ dst.y++; // any pixel to scale it, and we want to avoid mem access crashes.
if (SDL_BlitSurface(_screen, r, _tmpscreen, &dst) != 0)
error("SDL_BlitSurface failed: %s", SDL_GetError());
}
}
- } else {
- if (!_usingOpenGL) {
- SDL_Surface *target = _overlayVisible ? _tmpscreen : _screen;
- for(r = _dirty_rect_list; r != last_rect; ++r) {
- dst = *r;
- // FIXME: I don't understand why this is necessary...
- dst.x--;
- dst.y--;
- if (SDL_BlitSurface(target, r, _hwscreen, &dst) != 0)
- error("SDL_BlitSurface failed: %s", SDL_GetError());
- }
- }
- }
-
-
- if (_usingOpenGL) {
+
// Almost the same thing as SDL_UpdateRects
fb2gl.blit16(
_tmpscreen,
@@ -447,49 +424,71 @@ void OSystem_SDL_OpenGL::update_screen() {
}
fb2gl.display();
- }
- else { // SDL backend
-
- if (_scaler_proc != Normal1x) {
- SDL_LockSurface(_tmpscreen);
- SDL_LockSurface(_hwscreen);
-
- srcPitch = _tmpscreen->pitch;
- dstPitch = _hwscreen->pitch;
-
- for(r = _dirty_rect_list; r != last_rect; ++r) {
- register int dst_y = r->y + _currentShakePos;
- register int dst_h = 0;
- if (dst_y < _screenHeight) {
- dst_h = r->h;
- if (dst_h > _screenHeight - dst_y)
- dst_h = _screenHeight - dst_y;
-
- dst_y *= _scaleFactor;
-
- _scaler_proc((byte *)_tmpscreen->pixels + (r->x * 2 + 2) + (r->y + 1) * srcPitch, srcPitch,
- (byte *)_hwscreen->pixels + r->x * 2 * _scaleFactor + dst_y * dstPitch, dstPitch, r->w, dst_h);
+ } else { // SDL backend
+
+ if (_scaler_proc == Normal1x) {
+ SDL_Surface *target = _overlayVisible ? _tmpscreen : _screen;
+ for (r = _dirty_rect_list; r != last_rect; ++r) {
+ dst = *r;
+
+ if (_overlayVisible) {
+ // FIXME: I don't understand why this is necessary...
+ dst.x--;
+ dst.y--;
+ }
+ if (SDL_BlitSurface(target, r, _hwscreen, &dst) != 0)
+ error("SDL_BlitSurface failed: %s", SDL_GetError());
+ }
+ } else {
+ if (!_overlayVisible) {
+ for (r = _dirty_rect_list; r != last_rect; ++r) {
+ dst = *r;
+ dst.x++; // Shift rect by one since 2xSai needs to acces the data around
+ dst.y++; // any pixel to scale it, and we want to avoid mem access crashes.
+ if (SDL_BlitSurface(_screen, r, _tmpscreen, &dst) != 0)
+ error("SDL_BlitSurface failed: %s", SDL_GetError());
+ }
+ }
+
+ SDL_LockSurface(_tmpscreen);
+ SDL_LockSurface(_hwscreen);
+
+ srcPitch = _tmpscreen->pitch;
+ dstPitch = _hwscreen->pitch;
+
+ for (r = _dirty_rect_list; r != last_rect; ++r) {
+ register int dst_y = r->y + _currentShakePos;
+ register int dst_h = 0;
+ if (dst_y < _screenHeight) {
+ dst_h = r->h;
+ if (dst_h > _screenHeight - dst_y)
+ dst_h = _screenHeight - dst_y;
+
+ dst_y *= _scaleFactor;
+
+ _scaler_proc((byte *)_tmpscreen->pixels + (r->x * 2 + 2) + (r->y + 1) * srcPitch, srcPitch,
+ (byte *)_hwscreen->pixels + r->x * 2 * _scaleFactor + dst_y * dstPitch, dstPitch, r->w, dst_h);
+ }
+
+ r->x *= _scaleFactor;
+ r->y = dst_y;
+ r->w *= _scaleFactor;
+ r->h = dst_h * _scaleFactor;
}
- r->x *= _scaleFactor;
- r->y = dst_y;
- r->w *= _scaleFactor;
- r->h = dst_h * _scaleFactor;
+ SDL_UnlockSurface(_tmpscreen);
+ SDL_UnlockSurface(_hwscreen);
}
-
- SDL_UnlockSurface(_tmpscreen);
- SDL_UnlockSurface(_hwscreen);
- }
-
- // Readjust the dirty rect list in case we are doing a full update.
- // This is necessary if shaking is active.
- if (_forceFull) {
- _dirty_rect_list[0].y = 0;
- _dirty_rect_list[0].h = _screenHeight * _scaleFactor;
- }
-
- // Finally, blit all our changes to the screen
- SDL_UpdateRects(_hwscreen, _num_dirty_rects, _dirty_rect_list);
+
+ // Readjust the dirty rect list in case we are doing a full update.
+ // This is necessary if shaking is active.
+ if (_forceFull) {
+ _dirty_rect_list[0].y = 0;
+ _dirty_rect_list[0].h = _screenHeight * _scaleFactor;
+ }
+
+ // Finally, blit all our changes to the screen
+ SDL_UpdateRects(_hwscreen, _num_dirty_rects, _dirty_rect_list);
} // END OF "SDL backend"
} // if (num_dirty_rects > 0) ...