diff options
| author | Colin Snover | 2017-07-03 20:12:39 -0500 |
|---|---|---|
| committer | Colin Snover | 2017-07-06 19:12:38 -0500 |
| commit | 7057f232d75732c320fb470a8632a4c2f055a47f (patch) | |
| tree | fe9bb0cb48530eee2c6a35fd911240e46efcce21 /engines/sci/engine | |
| parent | 8cb35442c073b5ed5a0f3fa7d5e627bdd85af229 (diff) | |
| download | scummvm-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.h | 25 |
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) { |
