diff options
Diffstat (limited to 'engines/sci/gfx/gfx_resource.cpp')
-rw-r--r-- | engines/sci/gfx/gfx_resource.cpp | 191 |
1 files changed, 0 insertions, 191 deletions
diff --git a/engines/sci/gfx/gfx_resource.cpp b/engines/sci/gfx/gfx_resource.cpp index 387f6e596b..0335a3ea21 100644 --- a/engines/sci/gfx/gfx_resource.cpp +++ b/engines/sci/gfx/gfx_resource.cpp @@ -202,197 +202,6 @@ gfx_pixmap_t *gfxr_endianness_adjust(gfx_pixmap_t *pixmap, gfx_mode_t *mode) { return pixmap; } -} // End of namespace Sci - -// Now construct the pixmap scaling functions -#define EXTRA_BYTE_OFFSET 0 -#define SIZETYPE uint8 -#define FUNCNAME _gfx_xlate_pixmap_unfiltered_1 -#define FUNCNAME_LINEAR _gfx_xlate_pixmap_linear_1 -#define FUNCNAME_TRILINEAR _gfx_xlate_pixmap_trilinear_1 -#define COPY_BYTES 1 -#include "gfx_pixmap_scale.cpp" -#undef COPY_BYTES - -#define SIZETYPE uint16 -#define FUNCNAME _gfx_xlate_pixmap_unfiltered_2 -#define FUNCNAME_LINEAR _gfx_xlate_pixmap_linear_2 -#define FUNCNAME_TRILINEAR _gfx_xlate_pixmap_trilinear_2 -#define COPY_BYTES 2 -#include "gfx_pixmap_scale.cpp" -#undef COPY_BYTES - -#ifdef SCUMM_BIG_ENDIAN -# undef EXTRA_BYTE_OFFSET -# define EXTRA_BYTE_OFFSET 1 -#endif // SCUMM_BIG_ENDIAN -#define SIZETYPE uint32 -#define FUNCNAME _gfx_xlate_pixmap_unfiltered_3 -#define FUNCNAME_LINEAR _gfx_xlate_pixmap_linear_3 -#define FUNCNAME_TRILINEAR _gfx_xlate_pixmap_trilinear_3 -#define COPY_BYTES 3 -#include "gfx_pixmap_scale.cpp" -#undef COPY_BYTES -#ifdef SCUMM_BIG_ENDIAN -# undef EXTRA_BYTE_OFFSET -# define EXTRA_BYTE_OFFSET 0 -#endif // SCUMM_BIG_ENDIAN - -#define SIZETYPE uint32 -#define FUNCNAME _gfx_xlate_pixmap_unfiltered_4 -#define FUNCNAME_LINEAR _gfx_xlate_pixmap_linear_4 -#define FUNCNAME_TRILINEAR _gfx_xlate_pixmap_trilinear_4 -#define COPY_BYTES 4 -#include "gfx_pixmap_scale.cpp" -#undef COPY_BYTES -#undef EXTRA_BYTE_OFFSET -#undef SIZETYPE - -namespace Sci { - -static void _gfx_xlate_pixmap_unfiltered(gfx_mode_t *mode, gfx_pixmap_t *pxm, int scale) { - switch (mode->bytespp) { - - case 1: - _gfx_xlate_pixmap_unfiltered_1(mode, pxm, scale); - break; - - case 2: - _gfx_xlate_pixmap_unfiltered_2(mode, pxm, scale); - break; - - case 3: - _gfx_xlate_pixmap_unfiltered_3(mode, pxm, scale); - break; - - case 4: - _gfx_xlate_pixmap_unfiltered_4(mode, pxm, scale); - break; - - default: - GFXERROR("Invalid mode->bytespp=%d\n", mode->bytespp); - - } - - if (pxm->flags & GFX_PIXMAP_FLAG_SCALED_INDEX) { - pxm->width = pxm->index_width; - pxm->height = pxm->index_height; - } else { - pxm->width = pxm->index_width * mode->xfact; - pxm->height = pxm->index_height * mode->yfact; - } -} - -static void _gfx_xlate_pixmap_linear(gfx_mode_t *mode, gfx_pixmap_t *pxm, int scale) { - if (mode->palette || !scale) { // fall back to unfiltered - _gfx_xlate_pixmap_unfiltered(mode, pxm, scale); - return; - } - - pxm->width = pxm->index_width * mode->xfact; - pxm->height = pxm->index_height * mode->yfact; - - switch (mode->bytespp) { - - case 1: - _gfx_xlate_pixmap_linear_1(mode, pxm, scale); - break; - - case 2: - _gfx_xlate_pixmap_linear_2(mode, pxm, scale); - break; - - case 3: - _gfx_xlate_pixmap_linear_3(mode, pxm, scale); - break; - - case 4: - _gfx_xlate_pixmap_linear_4(mode, pxm, scale); - break; - - default: - GFXERROR("Invalid mode->bytespp=%d\n", mode->bytespp); - - } - -} - -static void _gfx_xlate_pixmap_trilinear(gfx_mode_t *mode, gfx_pixmap_t *pxm, int scale) { - if (mode->palette || !scale) { // fall back to unfiltered - _gfx_xlate_pixmap_unfiltered(mode, pxm, scale); - return; - } - - pxm->width = pxm->index_width * mode->xfact; - pxm->height = pxm->index_height * mode->yfact; - - switch (mode->bytespp) { - case 1: - _gfx_xlate_pixmap_trilinear_1(mode, pxm, scale); - break; - - case 2: - _gfx_xlate_pixmap_trilinear_2(mode, pxm, scale); - break; - - case 3: - _gfx_xlate_pixmap_trilinear_3(mode, pxm, scale); - break; - - case 4: - _gfx_xlate_pixmap_trilinear_4(mode, pxm, scale); - break; - - default: - GFXERROR("Invalid mode->bytespp=%d\n", mode->bytespp); - - } -} - -void gfx_xlate_pixmap(gfx_pixmap_t *pxm, gfx_mode_t *mode, gfx_xlate_filter_t filter) { - int was_allocated = 0; - - if (mode->palette) { - if (pxm->palette && pxm->palette != mode->palette) - pxm->palette->mergeInto(mode->palette); - } - - - if (!pxm->data) { - pxm->data = (byte*)sci_malloc(mode->xfact * mode->yfact * pxm->index_width * pxm->index_height * mode->bytespp + 1); - // +1: Eases coying on BE machines in 24 bpp packed mode - // Assume that memory, if allocated already, will be sufficient - - // Allocate alpha map - if (!mode->alpha_mask && pxm->colors_nr() < GFX_PIC_COLORS) - pxm->alpha_map = (byte*)sci_malloc(mode->xfact * mode->yfact * pxm->index_width * pxm->index_height + 1); - } else - was_allocated = 1; - - switch (filter) { - case GFX_XLATE_FILTER_NONE: - _gfx_xlate_pixmap_unfiltered(mode, pxm, !(pxm->flags & GFX_PIXMAP_FLAG_SCALED_INDEX)); - break; - - case GFX_XLATE_FILTER_LINEAR: - _gfx_xlate_pixmap_linear(mode, pxm, !(pxm->flags & GFX_PIXMAP_FLAG_SCALED_INDEX)); - break; - - case GFX_XLATE_FILTER_TRILINEAR: - _gfx_xlate_pixmap_trilinear(mode, pxm, !(pxm->flags & GFX_PIXMAP_FLAG_SCALED_INDEX)); - break; - - default: - GFXERROR("Attempt to filter pixmap %04x in invalid mode #%d\n", pxm->ID, filter); - - if (!was_allocated) { - if (!mode->alpha_mask && pxm->colors_nr() < GFX_PIC_COLORS) - free(pxm->alpha_map); - free(pxm->data); - } - } -} - void gfxr_free_pic(gfxr_pic_t *pic) { gfx_free_pixmap(pic->visual_map); gfx_free_pixmap(pic->priority_map); |