forked from len0rd/rockbox
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
This commit is contained in:
parent
2736363d71
commit
0242912a2d
2 changed files with 23 additions and 41 deletions
|
@ -16,7 +16,10 @@
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* $Log$
|
* $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
|
* 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
|
* Revision 1.11 2006-04-04 19:39:31 amiconn
|
||||||
|
@ -82,7 +85,7 @@ static unsigned char *gbuf;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CPU_COLDFIRE)
|
#if defined(CPU_COLDFIRE)
|
||||||
static char fastscreen[(LCD_WIDTH+1)*LCD_HEIGHT] IBSS_ATTR;
|
static char fastscreen[(LCD_WIDTH)*LCD_HEIGHT] IBSS_ATTR;
|
||||||
#endif
|
#endif
|
||||||
static fb_data palette[256] IBSS_ATTR;
|
static fb_data palette[256] IBSS_ATTR;
|
||||||
static fb_data *paldata=NULL;
|
static fb_data *paldata=NULL;
|
||||||
|
@ -468,6 +471,6 @@ void I_InitGraphics(void)
|
||||||
d_screens[0] = fastscreen;
|
d_screens[0] = fastscreen;
|
||||||
#else
|
#else
|
||||||
// Don't know if this will fit in other IRAMs
|
// 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
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -188,13 +188,11 @@ void V_InitColorTranslation(void)
|
||||||
// upper left origin and height and width dirty to minimize
|
// upper left origin and height and width dirty to minimize
|
||||||
// the amount of screen update necessary. No return.
|
// the amount of screen update necessary. No return.
|
||||||
//
|
//
|
||||||
#ifndef GL_DOOM
|
|
||||||
void V_MarkRect(int x, int y, int width, int height)
|
void V_MarkRect(int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
M_AddToBox(dirtybox, x, y);
|
M_AddToBox(dirtybox, x, y);
|
||||||
M_AddToBox(dirtybox, x+width-1, y+height-1);
|
M_AddToBox(dirtybox, x+width-1, y+height-1);
|
||||||
}
|
}
|
||||||
#endif /* GL_DOOM */
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// V_CopyRect
|
// V_CopyRect
|
||||||
|
@ -208,7 +206,6 @@ void V_MarkRect(int x, int y, int width, int height)
|
||||||
//
|
//
|
||||||
// No return.
|
// No return.
|
||||||
//
|
//
|
||||||
#ifndef GL_DOOM
|
|
||||||
void V_CopyRect(int srcx, int srcy, int srcscrn, int width,
|
void V_CopyRect(int srcx, int srcy, int srcscrn, int width,
|
||||||
int height, int destx, int desty, int destscrn,
|
int height, int destx, int desty, int destscrn,
|
||||||
enum patch_translation_e flags)
|
enum patch_translation_e flags)
|
||||||
|
@ -249,7 +246,6 @@ void V_CopyRect(int srcx, int srcy, int srcscrn, int width,
|
||||||
dest += SCREENWIDTH;
|
dest += SCREENWIDTH;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* GL_DOOM */
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// V_DrawBlock
|
// 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
|
// CPhipps - modified to take the patch translation flags. For now, only stretching is
|
||||||
// implemented, to support highres in the menus
|
// implemented, to support highres in the menus
|
||||||
//
|
//
|
||||||
#ifndef GL_DOOM
|
|
||||||
void V_DrawBlock(int x, int y, int scrn, int width, int height,
|
void V_DrawBlock(int x, int y, int scrn, int width, int height,
|
||||||
const byte *src, enum patch_translation_e flags)
|
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
|
* 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
|
* 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
|
* 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)
|
void V_DrawBackground(const char* flatname, int scrn)
|
||||||
{
|
{
|
||||||
/* erase the entire screen to a tiled background */
|
/* 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);
|
((SCREENHEIGHT-y) < 64) ? (SCREENHEIGHT-y) : 64, x, y, scrn, VPT_NONE);
|
||||||
W_UnlockLumpNum(lump);
|
W_UnlockLumpNum(lump);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// V_GetBlock
|
// V_GetBlock
|
||||||
|
@ -356,7 +348,6 @@ void V_DrawBackground(const char* flatname, int scrn)
|
||||||
// No return
|
// No return
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef GL_DOOM
|
|
||||||
void V_GetBlock(int x, int y, int scrn, int width, int height, byte *dest)
|
void V_GetBlock(int x, int y, int scrn, int width, int height, byte *dest)
|
||||||
{
|
{
|
||||||
byte *src;
|
byte *src;
|
||||||
|
@ -378,7 +369,6 @@ void V_GetBlock(int x, int y, int scrn, int width, int height, byte *dest)
|
||||||
dest += width;
|
dest += width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* GL_DOOM */
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// V_Init
|
// V_Init
|
||||||
|
@ -415,7 +405,6 @@ void V_Init (void)
|
||||||
// (indeed, laziness of the people who wrote the 'clones' of the original V_DrawPatch
|
// (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).
|
// 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,
|
void V_DrawMemPatch(int x, int y, int scrn, const patch_t *patch,
|
||||||
int cm, enum patch_translation_e flags)
|
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)
|
if (!trans)
|
||||||
flags &= ~VPT_TRANS;
|
flags &= ~VPT_TRANS;
|
||||||
|
|
||||||
// if (x<0
|
#ifdef RANGECHECK
|
||||||
// ||x+SHORT(patch->width) > ((flags & VPT_STRETCH) ? 320 : SCREENWIDTH)
|
if (x<0
|
||||||
// || y<0
|
||x+SHORT(patch->width) > ((flags & VPT_STRETCH) ? 320 : SCREENWIDTH)
|
||||||
// || y+SHORT(patch->height) > ((flags & VPT_STRETCH) ? 200 : SCREENHEIGHT))
|
|| y<0
|
||||||
// // killough 1/19/98: improved error message:
|
|| y+SHORT(patch->height) > ((flags & VPT_STRETCH) ? 200 : SCREENHEIGHT))
|
||||||
// I_Error("V_DrawMemPatch: Patch (%d,%d)-(%d,%d) exceeds LFB"
|
// killough 1/19/98: improved error message:
|
||||||
// "Bad V_DrawMemPatch (flags=%u)", x, y, x+SHORT(patch->width), y+SHORT(patch->height), flags);
|
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)) {
|
if (!(flags & VPT_STRETCH)) {
|
||||||
unsigned int col;
|
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;
|
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++ ) {
|
for ( col = 0; col <= w; x++, col+=DXI, desttop++ ) {
|
||||||
const column_t *column;
|
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
|
// height values of 240, this code cuts off
|
||||||
// thier bottom few pixels
|
// 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)
|
if (flags & VPT_TRANS)
|
||||||
while (count--) {
|
while (count--) {
|
||||||
*dest = trans[source[srccol>>16]];
|
*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
|
// 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.
|
// static inline; other compilers have different behaviour.
|
||||||
// This inline is _only_ for the function below
|
// This inline is _only_ for the function below
|
||||||
|
|
||||||
#ifndef GL_DOOM
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
inline
|
inline
|
||||||
#endif
|
#endif
|
||||||
|
@ -606,7 +593,6 @@ void V_DrawNumPatch(int x, int y, int scrn, int lump,
|
||||||
cm, flags);
|
cm, flags);
|
||||||
W_UnlockLumpNum(lump);
|
W_UnlockLumpNum(lump);
|
||||||
}
|
}
|
||||||
#endif // GL_DOOM
|
|
||||||
|
|
||||||
/* cph -
|
/* cph -
|
||||||
* V_NamePatchWidth - returns width of a patch.
|
* 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
|
// Returns a simple bitmap which contains the patch. See-through parts of the
|
||||||
// patch will be undefined (in fact black for now)
|
// patch will be undefined (in fact black for now)
|
||||||
|
|
||||||
#ifndef GL_DOOM
|
|
||||||
byte *V_PatchToBlock(const char* name, int cm,
|
byte *V_PatchToBlock(const char* name, int cm,
|
||||||
enum patch_translation_e flags,
|
enum patch_translation_e flags,
|
||||||
unsigned short* width, unsigned short* height)
|
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);
|
d_screens[1] = calloc(SCREENWIDTH*SCREENHEIGHT, 1);
|
||||||
|
|
||||||
patch = W_CacheLumpName(name);
|
patch = W_CacheLumpName(name);
|
||||||
V_DrawMemPatch(SHORT(patch->leftoffset), SHORT(patch->topoffset),
|
// One of those odd things that don't seem to have a purpose other then rangechecking
|
||||||
1, patch, cm, flags);
|
// On screens smaller than 320X200 this line causes problems.
|
||||||
|
// V_DrawMemPatch(SHORT(patch->leftoffset), SHORT(patch->topoffset),
|
||||||
|
// 1, patch, cm, flags);
|
||||||
|
|
||||||
#ifdef RANGECHECK
|
#ifdef RANGECHECK
|
||||||
if (flags & VPT_STRETCH)
|
if (flags & VPT_STRETCH)
|
||||||
|
@ -677,7 +664,6 @@ byte *V_PatchToBlock(const char* name, int cm,
|
||||||
d_screens[1] = oldscr;
|
d_screens[1] = oldscr;
|
||||||
return block;
|
return block;
|
||||||
}
|
}
|
||||||
#endif /* GL_DOOM */
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// V_SetPalette
|
// V_SetPalette
|
||||||
|
@ -687,19 +673,13 @@ byte *V_PatchToBlock(const char* name, int cm,
|
||||||
|
|
||||||
void V_SetPalette(int pal)
|
void V_SetPalette(int pal)
|
||||||
{
|
{
|
||||||
#ifndef GL_DOOM
|
|
||||||
I_SetPalette(pal);
|
I_SetPalette(pal);
|
||||||
#else
|
|
||||||
// proff 11/99: update the palette
|
|
||||||
gld_SetPalette(pal);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// V_FillRect
|
// V_FillRect
|
||||||
//
|
//
|
||||||
// CPhipps - New function to fill a rectangle with a given colour
|
// 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)
|
void V_FillRect(int scrn, int x, int y, int width, int height, byte colour)
|
||||||
{
|
{
|
||||||
byte* dest = d_screens[scrn] + x + y*SCREENWIDTH;
|
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;
|
dest += SCREENWIDTH;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue