summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorKarl Kurbjun <kkurbjun@gmail.com>2006-04-06 21:31:49 +0000
committerKarl Kurbjun <kkurbjun@gmail.com>2006-04-06 21:31:49 +0000
commit0242912a2d390128fa46703f660aa11e3fee9f3a (patch)
tree91daa773d135b948cccfea6f963dbd70d43f1289 /apps
parent2736363d715e9810cd9b720ffe4aca625cdadf8f (diff)
downloadrockbox-0242912a2d390128fa46703f660aa11e3fee9f3a.tar.gz
rockbox-0242912a2d390128fa46703f660aa11e3fee9f3a.zip
Scaling code fixed by clamping down the width to a max of SCREENWIDTH. Removed some #ifdefs for glprboom
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9542 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/plugins/doom/i_video.c9
-rw-r--r--apps/plugins/doom/v_video.c55
2 files changed, 23 insertions, 41 deletions
diff --git a/apps/plugins/doom/i_video.c b/apps/plugins/doom/i_video.c
index f7de1aa84c..917dace45d 100644
--- a/apps/plugins/doom/i_video.c
+++ b/apps/plugins/doom/i_video.c
@@ -16,7 +16,10 @@
* GNU General Public License for more details.
*
* $Log$
- * Revision 1.12 2006/04/05 06:37:37 kkurbjun
+ * Revision 1.13 2006/04/06 21:31:49 kkurbjun
+ * Scaling code fixed by clamping down the width to a max of SCREENWIDTH. Removed some #ifdefs for glprboom
+ *
+ * Revision 1.12 2006-04-05 06:37:37 kkurbjun
* Fix finale text and try and prevent some data corruption due to the scaling code. Also allows the non-standard GP32 mods to work with some bounds checking. More comments are in v_video.c
*
* Revision 1.11 2006-04-04 19:39:31 amiconn
@@ -82,7 +85,7 @@ static unsigned char *gbuf;
#endif
#if defined(CPU_COLDFIRE)
-static char fastscreen[(LCD_WIDTH+1)*LCD_HEIGHT] IBSS_ATTR;
+static char fastscreen[(LCD_WIDTH)*LCD_HEIGHT] IBSS_ATTR;
#endif
static fb_data palette[256] IBSS_ATTR;
static fb_data *paldata=NULL;
@@ -468,6 +471,6 @@ void I_InitGraphics(void)
d_screens[0] = fastscreen;
#else
// Don't know if this will fit in other IRAMs
- d_screens[0] = malloc ((SCREENWIDTH+1) * SCREENHEIGHT * sizeof(unsigned char));
+ d_screens[0] = malloc ((SCREENWIDTH) * SCREENHEIGHT * sizeof(unsigned char));
#endif
}
diff --git a/apps/plugins/doom/v_video.c b/apps/plugins/doom/v_video.c
index bd4d507510..c713351cbe 100644
--- a/apps/plugins/doom/v_video.c
+++ b/apps/plugins/doom/v_video.c
@@ -188,13 +188,11 @@ void V_InitColorTranslation(void)
// upper left origin and height and width dirty to minimize
// the amount of screen update necessary. No return.
//
-#ifndef GL_DOOM
void V_MarkRect(int x, int y, int width, int height)
{
M_AddToBox(dirtybox, x, y);
M_AddToBox(dirtybox, x+width-1, y+height-1);
}
-#endif /* GL_DOOM */
//
// V_CopyRect
@@ -208,7 +206,6 @@ void V_MarkRect(int x, int y, int width, int height)
//
// No return.
//
-#ifndef GL_DOOM
void V_CopyRect(int srcx, int srcy, int srcscrn, int width,
int height, int destx, int desty, int destscrn,
enum patch_translation_e flags)
@@ -249,7 +246,6 @@ void V_CopyRect(int srcx, int srcy, int srcscrn, int width,
dest += SCREENWIDTH;
}
}
-#endif /* GL_DOOM */
//
// V_DrawBlock
@@ -266,7 +262,6 @@ void V_CopyRect(int srcx, int srcy, int srcscrn, int width,
// CPhipps - modified to take the patch translation flags. For now, only stretching is
// implemented, to support highres in the menus
//
-#ifndef GL_DOOM
void V_DrawBlock(int x, int y, int scrn, int width, int height,
const byte *src, enum patch_translation_e flags)
{
@@ -317,7 +312,6 @@ void V_DrawBlock(int x, int y, int scrn, int width, int height,
}
}
}
-#endif /* GL_DOOM */
/*
* V_DrawBackground tiles a 64x64 patch over the entire screen, providing the
@@ -325,7 +319,6 @@ void V_DrawBlock(int x, int y, int scrn, int width, int height,
* cphipps - used to have M_DrawBackground, but that was used the framebuffer
* directly, so this is my code from the equivalent function in f_finale.c
*/
-#ifndef GL_DOOM
void V_DrawBackground(const char* flatname, int scrn)
{
/* erase the entire screen to a tiled background */
@@ -344,7 +337,6 @@ void V_DrawBackground(const char* flatname, int scrn)
((SCREENHEIGHT-y) < 64) ? (SCREENHEIGHT-y) : 64, x, y, scrn, VPT_NONE);
W_UnlockLumpNum(lump);
}
-#endif
//
// V_GetBlock
@@ -356,7 +348,6 @@ void V_DrawBackground(const char* flatname, int scrn)
// No return
//
-#ifndef GL_DOOM
void V_GetBlock(int x, int y, int scrn, int width, int height, byte *dest)
{
byte *src;
@@ -378,7 +369,6 @@ void V_GetBlock(int x, int y, int scrn, int width, int height, byte *dest)
dest += width;
}
}
-#endif /* GL_DOOM */
//
// V_Init
@@ -415,7 +405,6 @@ void V_Init (void)
// (indeed, laziness of the people who wrote the 'clones' of the original V_DrawPatch
// means that their inner loops weren't so well optimised, so merging code may even speed them).
//
-#ifndef GL_DOOM
void V_DrawMemPatch(int x, int y, int scrn, const patch_t *patch,
int cm, enum patch_translation_e flags)
{
@@ -437,13 +426,15 @@ void V_DrawMemPatch(int x, int y, int scrn, const patch_t *patch,
if (!trans)
flags &= ~VPT_TRANS;
-// if (x<0
-// ||x+SHORT(patch->width) > ((flags & VPT_STRETCH) ? 320 : SCREENWIDTH)
-// || y<0
-// || y+SHORT(patch->height) > ((flags & VPT_STRETCH) ? 200 : SCREENHEIGHT))
-// // killough 1/19/98: improved error message:
-// I_Error("V_DrawMemPatch: Patch (%d,%d)-(%d,%d) exceeds LFB"
-// "Bad V_DrawMemPatch (flags=%u)", x, y, x+SHORT(patch->width), y+SHORT(patch->height), flags);
+#ifdef RANGECHECK
+ if (x<0
+ ||x+SHORT(patch->width) > ((flags & VPT_STRETCH) ? 320 : SCREENWIDTH)
+ || y<0
+ || y+SHORT(patch->height) > ((flags & VPT_STRETCH) ? 200 : SCREENHEIGHT))
+ // killough 1/19/98: improved error message:
+ I_Error("V_DrawMemPatch: Patch (%d,%d)-(%d,%d) exceeds LFB Bad V_DrawMemPatch (flags=%u)",
+ x, y, x+SHORT(patch->width), y+SHORT(patch->height), flags);
+#endif
if (!(flags & VPT_STRETCH)) {
unsigned int col;
@@ -546,6 +537,10 @@ void V_DrawMemPatch(int x, int y, int scrn, const patch_t *patch,
desttop = d_screens[scrn] + stretchy * SCREENWIDTH + stretchx;
+ // Clamp down the screenwidth
+ if(w>>16>=319)
+ w=(SCREENWIDTH-1)*DXI;
+
for ( col = 0; col <= w; x++, col+=DXI, desttop++ ) {
const column_t *column;
{
@@ -564,12 +559,6 @@ void V_DrawMemPatch(int x, int y, int scrn, const patch_t *patch,
// height values of 240, this code cuts off
// thier bottom few pixels
- // NOTE: This scaling code does not work correctly on at least the H300's, this can be seen
- // in the intro graphic along the left side, the pixels are not correct. A more blatant
- // example is the bunnyscroller at the end of retail doom episode 3. I've added one extra
- // width to d_screens[0] and this seemed to stop the freeze at the end of the game. This
- // needs to be fixed properly.
-
if (flags & VPT_TRANS)
while (count--) {
*dest = trans[source[srccol>>16]];
@@ -587,7 +576,6 @@ void V_DrawMemPatch(int x, int y, int scrn, const patch_t *patch,
}
}
}
-#endif // GL_DOOM
// CPhipps - some simple, useful wrappers for that function, for drawing patches from wads
@@ -595,7 +583,6 @@ void V_DrawMemPatch(int x, int y, int scrn, const patch_t *patch,
// static inline; other compilers have different behaviour.
// This inline is _only_ for the function below
-#ifndef GL_DOOM
#ifdef __GNUC__
inline
#endif
@@ -606,7 +593,6 @@ void V_DrawNumPatch(int x, int y, int scrn, int lump,
cm, flags);
W_UnlockLumpNum(lump);
}
-#endif // GL_DOOM
/* cph -
* V_NamePatchWidth - returns width of a patch.
@@ -646,7 +632,6 @@ int V_NamePatchHeight(const char* name)
// Returns a simple bitmap which contains the patch. See-through parts of the
// patch will be undefined (in fact black for now)
-#ifndef GL_DOOM
byte *V_PatchToBlock(const char* name, int cm,
enum patch_translation_e flags,
unsigned short* width, unsigned short* height)
@@ -658,8 +643,10 @@ byte *V_PatchToBlock(const char* name, int cm,
d_screens[1] = calloc(SCREENWIDTH*SCREENHEIGHT, 1);
patch = W_CacheLumpName(name);
- V_DrawMemPatch(SHORT(patch->leftoffset), SHORT(patch->topoffset),
- 1, patch, cm, flags);
+// One of those odd things that don't seem to have a purpose other then rangechecking
+// On screens smaller than 320X200 this line causes problems.
+// V_DrawMemPatch(SHORT(patch->leftoffset), SHORT(patch->topoffset),
+// 1, patch, cm, flags);
#ifdef RANGECHECK
if (flags & VPT_STRETCH)
@@ -677,7 +664,6 @@ byte *V_PatchToBlock(const char* name, int cm,
d_screens[1] = oldscr;
return block;
}
-#endif /* GL_DOOM */
//
// V_SetPalette
@@ -687,19 +673,13 @@ byte *V_PatchToBlock(const char* name, int cm,
void V_SetPalette(int pal)
{
-#ifndef GL_DOOM
I_SetPalette(pal);
-#else
- // proff 11/99: update the palette
- gld_SetPalette(pal);
-#endif
}
//
// V_FillRect
//
// CPhipps - New function to fill a rectangle with a given colour
-#ifndef GL_DOOM
void V_FillRect(int scrn, int x, int y, int width, int height, byte colour)
{
byte* dest = d_screens[scrn] + x + y*SCREENWIDTH;
@@ -708,4 +688,3 @@ void V_FillRect(int scrn, int x, int y, int width, int height, byte colour)
dest += SCREENWIDTH;
}
}
-#endif