1
0
Fork 0

Handle the gfx loving based on the source bpp

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2496
This commit is contained in:
Sjoerd van der Berg 2006-02-13 08:22:18 +00:00
parent df62fa5c20
commit c7f66d9a40
2 changed files with 36 additions and 19 deletions

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: render.cpp,v 1.41 2006-02-12 23:43:54 harekiet Exp $ */
/* $Id: render.cpp,v 1.42 2006-02-13 08:22:17 harekiet Exp $ */
#include <sys/types.h>
#include <dirent.h>
@ -278,8 +278,26 @@ forcenormal:
xscale = simpleBlock->xscale;
yscale = simpleBlock->yscale;
}
if (render.src.bpp != 8)
gfx_flags |= GFX_RGBONLY;
switch (render.src.bpp) {
case 8:
if (gfx_flags & GFX_CAN_8)
gfx_flags |= GFX_LOVE_8;
else
gfx_flags |= GFX_LOVE_32;
break;
case 15:
gfx_flags |= GFX_LOVE_15;
gfx_flags = (gfx_flags & ~GFX_CAN_8) | GFX_RGBONLY;
break;
case 16:
gfx_flags |= GFX_LOVE_16;
gfx_flags = (gfx_flags & ~GFX_CAN_8) | GFX_RGBONLY;
break;
case 32:
gfx_flags |= GFX_LOVE_32;
gfx_flags = (gfx_flags & ~GFX_CAN_8) | GFX_RGBONLY;
break;
}
gfx_flags=GFX_GetBestMode(gfx_flags);
if (!gfx_flags) {
if (!complexBlock && simpleBlock == &ScaleNormal1x)
@ -287,7 +305,6 @@ forcenormal:
else
goto forcenormal;
}
/* Special test for normal2x to switch to normal with hardware scaling */
width *= xscale;
if (gfx_flags & GFX_SCALING) {
height = MakeAspectTable(render.src.height, yscale, yscale );

View file

@ -158,7 +158,7 @@ ScalerLineBlock_t ScalerCache = {
};
ScalerSimpleBlock_t ScaleNormal1x = {
GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_8,
GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32,
1,1,
Normal1x_8_8_L, Normal1x_8_15_L, Normal1x_8_16_L, Normal1x_8_32_L,
0, Normal1x_15_15_L, Normal1x_15_16_L, Normal1x_15_32_L,
@ -173,7 +173,7 @@ ScalerSimpleBlock_t ScaleNormal1x = {
};
ScalerSimpleBlock_t ScaleNormalDw = {
GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_8,
GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32,
2,1,
NormalDw_8_8_L, NormalDw_8_15_L, NormalDw_8_16_L, NormalDw_8_32_L,
0, NormalDw_15_15_L, NormalDw_15_16_L, NormalDw_15_32_L,
@ -188,7 +188,7 @@ ScalerSimpleBlock_t ScaleNormalDw = {
};
ScalerSimpleBlock_t ScaleNormalDh = {
GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_8,
GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32,
1,2,
NormalDh_8_8_L, NormalDh_8_15_L, NormalDh_8_16_L, NormalDh_8_32_L,
0, NormalDh_15_15_L, NormalDh_15_16_L, NormalDh_15_32_L,
@ -203,7 +203,7 @@ ScalerSimpleBlock_t ScaleNormalDh = {
};
ScalerSimpleBlock_t ScaleNormal2x = {
GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_8,
GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32,
2,2,
Normal2x_8_8_L, Normal2x_8_15_L, Normal2x_8_16_L, Normal2x_8_32_L,
0, Normal2x_15_15_L, Normal2x_15_16_L, Normal2x_15_32_L,
@ -218,7 +218,7 @@ ScalerSimpleBlock_t ScaleNormal2x = {
};
ScalerSimpleBlock_t ScaleNormal3x = {
GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_8,
GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32,
3,3,
Normal3x_8_8_L, Normal3x_8_15_L, Normal3x_8_16_L, Normal3x_8_32_L,
0, Normal3x_15_15_L, Normal3x_15_16_L, Normal3x_15_32_L,
@ -233,7 +233,7 @@ ScalerSimpleBlock_t ScaleNormal3x = {
};
ScalerSimpleBlock_t ScaleTV2x = {
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_32|GFX_RGBONLY,
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY,
2,2,
0, TV2x_8_15_L, TV2x_8_16_L, TV2x_8_32_L,
0, TV2x_15_15_L, TV2x_15_16_L, TV2x_15_32_L,
@ -248,7 +248,7 @@ ScalerSimpleBlock_t ScaleTV2x = {
};
ScalerSimpleBlock_t ScaleTV3x = {
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_32|GFX_RGBONLY,
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY,
3,3,
0, TV3x_8_15_L, TV3x_8_16_L, TV3x_8_32_L,
0, TV3x_15_15_L, TV3x_15_16_L, TV3x_15_32_L,
@ -263,7 +263,7 @@ ScalerSimpleBlock_t ScaleTV3x = {
};
ScalerSimpleBlock_t ScaleScan2x = {
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_32|GFX_RGBONLY,
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY,
2,2,
0, Scan2x_8_15_L, Scan2x_8_16_L, Scan2x_8_32_L,
0, Scan2x_15_15_L, Scan2x_15_16_L, Scan2x_15_32_L,
@ -278,7 +278,7 @@ ScalerSimpleBlock_t ScaleScan2x = {
};
ScalerSimpleBlock_t ScaleScan3x = {
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_32|GFX_RGBONLY,
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY,
3,3,
0, Scan3x_8_15_L, Scan3x_8_16_L, Scan3x_8_32_L,
0, Scan3x_15_15_L, Scan3x_15_16_L, Scan3x_15_32_L,
@ -293,7 +293,7 @@ ScalerSimpleBlock_t ScaleScan3x = {
};
ScalerSimpleBlock_t ScaleRGB2x = {
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_32|GFX_RGBONLY,
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY,
2,2,
0, RGB2x_8_15_L, RGB2x_8_16_L, RGB2x_8_32_L,
0, RGB2x_15_15_L, RGB2x_15_16_L, RGB2x_15_32_L,
@ -308,7 +308,7 @@ ScalerSimpleBlock_t ScaleRGB2x = {
};
ScalerSimpleBlock_t ScaleRGB3x = {
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_32|GFX_RGBONLY,
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY,
3,3,
0, RGB3x_8_15_L, RGB3x_8_16_L, RGB3x_8_32_L,
0, RGB3x_15_15_L, RGB3x_15_16_L, RGB3x_15_32_L,
@ -326,14 +326,14 @@ ScalerSimpleBlock_t ScaleRGB3x = {
/* Complex scalers */
ScalerComplexBlock_t ScaleAdvMame2x ={
GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_8,
GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32,
2,2,
AdvMame2x_8_L,AdvMame2x_16_L,AdvMame2x_16_L,AdvMame2x_32_L,
AdvMame2x_8_R,AdvMame2x_16_R,AdvMame2x_16_R,AdvMame2x_32_R
};
ScalerComplexBlock_t ScaleAdvMame3x = {
GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_8,
GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32,
3,3,
AdvMame3x_8_L,AdvMame3x_16_L,AdvMame3x_16_L,AdvMame3x_32_L,
AdvMame3x_8_R,AdvMame3x_16_R,AdvMame3x_16_R,AdvMame3x_32_R
@ -341,14 +341,14 @@ ScalerComplexBlock_t ScaleAdvMame3x = {
/* These need specific 15bpp versions */
ScalerComplexBlock_t ScaleAdvInterp2x = {
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_32|GFX_RGBONLY,
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY,
2,2,
0,AdvInterp2x_15_L,AdvInterp2x_16_L,AdvInterp2x_32_L,
0,AdvInterp2x_15_R,AdvInterp2x_16_R,AdvInterp2x_32_R
};
ScalerComplexBlock_t ScaleAdvInterp3x = {
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_LOVE_32|GFX_RGBONLY,
GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY,
3,3,
0,AdvInterp3x_15_L,AdvInterp3x_16_L,AdvInterp3x_32_L,
0,AdvInterp3x_15_R,AdvInterp3x_16_R,AdvInterp3x_32_R