aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine
diff options
context:
space:
mode:
authorColin Snover2017-07-03 20:12:39 -0500
committerColin Snover2017-07-06 19:12:38 -0500
commit7057f232d75732c320fb470a8632a4c2f055a47f (patch)
treefe9bb0cb48530eee2c6a35fd911240e46efcce21 /engines/sci/engine
parent8cb35442c073b5ed5a0f3fa7d5e627bdd85af229 (diff)
downloadscummvm-rg350-7057f232d75732c320fb470a8632a4c2f055a47f.tar.gz
scummvm-rg350-7057f232d75732c320fb470a8632a4c2f055a47f.tar.bz2
scummvm-rg350-7057f232d75732c320fb470a8632a4c2f055a47f.zip
SCI32: Improve kPlayVMD rendering
1. Added a new game option for linear interpolation when scaling overlay-mode video in ScummVM builds with USE_RGB_COLOR; 2. Implemented SCI2.1-variant of the VMD player renderer (fixes Trac#9857), which bypasses the engine's normal rendering pipeline; 3. Improved accuracy of the SCI3-variant of the VMD player by writing HunkPalettes into the VMD's CelObjMem instead of submitting palettes directly to GfxPalette32.
Diffstat (limited to 'engines/sci/engine')
-rw-r--r--engines/sci/engine/segment.h25
1 files changed, 13 insertions, 12 deletions
diff --git a/engines/sci/engine/segment.h b/engines/sci/engine/segment.h
index adc8f138be..8eca6713b3 100644
--- a/engines/sci/engine/segment.h
+++ b/engines/sci/engine/segment.h
@@ -29,6 +29,9 @@
#include "sci/engine/vm.h"
#include "sci/engine/vm_types.h" // for reg_t
#include "sci/util.h"
+#ifdef ENABLE_SCI32
+#include "sci/graphics/palette32.h"
+#endif
namespace Sci {
@@ -1026,7 +1029,7 @@ public:
setRemap(remap);
setDataSize(width * height);
WRITE_SCI11ENDIAN_UINT32(_data + 16, 0);
- setHunkPaletteOffset(paletteSize > 0 ? (width * height) : 0);
+ setHunkPaletteOffset(paletteSize > 0 ? (bitmapHeaderSize + width * height) : 0);
setDataOffset(bitmapHeaderSize);
setUncompressedDataOffset(bitmapHeaderSize);
setControlOffset(0);
@@ -1099,17 +1102,7 @@ public:
BITMAP_PROPERTY(32, DataSize, 12);
- inline uint32 getHunkPaletteOffset() const {
- return READ_SCI11ENDIAN_UINT32(_data + 20);
- }
-
- inline void setHunkPaletteOffset(uint32 hunkPaletteOffset) {
- if (hunkPaletteOffset) {
- hunkPaletteOffset += getBitmapHeaderSize();
- }
-
- WRITE_SCI11ENDIAN_UINT32(_data + 20, hunkPaletteOffset);
- }
+ BITMAP_PROPERTY(32, HunkPaletteOffset, 20);
BITMAP_PROPERTY(32, DataOffset, 24);
@@ -1162,6 +1155,14 @@ public:
return _data + getHunkPaletteOffset();
}
+ inline void setPalette(const Palette &palette) {
+ byte *paletteData = getHunkPalette();
+ if (paletteData != nullptr) {
+ SciSpan<byte> paletteSpan(paletteData, getRawSize() - getHunkPaletteOffset());
+ HunkPalette::write(paletteSpan, palette);
+ }
+ }
+
virtual void saveLoadWithSerializer(Common::Serializer &ser);
void applyRemap(SciArray &clut) {