Rely on surface pitch instead of screenwidth in OpenGL mode (Bug #956)

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2672 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
mcmartin
2007-01-18 08:45:17 +00:00
parent 1e68d8f721
commit 16122a71da
2 changed files with 9 additions and 4 deletions
+3
View File
@@ -1,4 +1,7 @@
Changes towards version 0.7: Changes towards version 0.7:
- OpenGL texture loading uses surface pitch instead of screen width.
This should head off future bugs similar to Bug #740 (this issue was
reported as Bug #956) - Michael
0.6.2 (maintenance release): 0.6.2 (maintenance release):
- A bit more debug info for failed connects. - SvdB - A bit more debug info for failed connects. - SvdB
+6 -4
View File
@@ -388,7 +388,8 @@ TFB_GL_Unscaled_ScreenLayer (SCREEN screen, Uint8 a, SDL_Rect *rect)
if (GL_Screens[screen].dirty) if (GL_Screens[screen].dirty)
{ {
glPixelStorei (GL_UNPACK_ROW_LENGTH, ScreenWidth); int PitchWords = SDL_Screens[screen]->pitch / 4;
glPixelStorei (GL_UNPACK_ROW_LENGTH, PitchWords);
/* Matrox OpenGL drivers do not handle GL_UNPACK_SKIP_* /* Matrox OpenGL drivers do not handle GL_UNPACK_SKIP_*
correctly */ correctly */
glPixelStorei (GL_UNPACK_SKIP_ROWS, 0); glPixelStorei (GL_UNPACK_SKIP_ROWS, 0);
@@ -400,7 +401,7 @@ TFB_GL_Unscaled_ScreenLayer (SCREEN screen, Uint8 a, SDL_Rect *rect)
GL_Screens[screen].updated.h, GL_Screens[screen].updated.h,
GL_RGBA, GL_UNSIGNED_BYTE, GL_RGBA, GL_UNSIGNED_BYTE,
(Uint32 *)SDL_Screens[screen]->pixels + (Uint32 *)SDL_Screens[screen]->pixels +
(GL_Screens[screen].updated.y * ScreenWidth + (GL_Screens[screen].updated.y * PitchWords +
GL_Screens[screen].updated.x)); GL_Screens[screen].updated.x));
SDL_UnlockSurface (SDL_Screens[screen]); SDL_UnlockSurface (SDL_Screens[screen]);
GL_Screens[screen].dirty = FALSE; GL_Screens[screen].dirty = FALSE;
@@ -434,8 +435,9 @@ TFB_GL_Scaled_ScreenLayer (SCREEN screen, Uint8 a, SDL_Rect *rect)
if (GL_Screens[screen].dirty) if (GL_Screens[screen].dirty)
{ {
int PitchWords = GL_Screens[screen].scaled->pitch / 4;
scaler (SDL_Screens[screen], GL_Screens[screen].scaled, &GL_Screens[screen].updated); scaler (SDL_Screens[screen], GL_Screens[screen].scaled, &GL_Screens[screen].updated);
glPixelStorei (GL_UNPACK_ROW_LENGTH, ScreenWidth * 2); glPixelStorei (GL_UNPACK_ROW_LENGTH, PitchWords);
/* Matrox OpenGL drivers do not handle GL_UNPACK_SKIP_* /* Matrox OpenGL drivers do not handle GL_UNPACK_SKIP_*
correctly */ correctly */
@@ -448,7 +450,7 @@ TFB_GL_Scaled_ScreenLayer (SCREEN screen, Uint8 a, SDL_Rect *rect)
GL_Screens[screen].updated.h * 2, GL_Screens[screen].updated.h * 2,
GL_RGBA, GL_UNSIGNED_BYTE, GL_RGBA, GL_UNSIGNED_BYTE,
(Uint32 *)GL_Screens[screen].scaled->pixels + (Uint32 *)GL_Screens[screen].scaled->pixels +
(GL_Screens[screen].updated.y * 4 * ScreenWidth + (GL_Screens[screen].updated.y * 2 * PitchWords +
GL_Screens[screen].updated.x * 2)); GL_Screens[screen].updated.x * 2));
SDL_UnlockSurface (GL_Screens[screen].scaled); SDL_UnlockSurface (GL_Screens[screen].scaled);
GL_Screens[screen].dirty = FALSE; GL_Screens[screen].dirty = FALSE;