Ticket #9019: 16bit_step2.patch

File 16bit_step2.patch, 2.5 KB (added by SF/upthorn, 10 years ago)

Part 2 -- making the vCUPhe subengine display a 16bit gradient to test step1.

  • dists/msvc8/scumm.vcproj

     
    11<?xml version="1.0" encoding="windows-1252"?>
    22<VisualStudioProject
    33        ProjectType="Visual C++"
    4         Version="8,00"
     4        Version="8.00"
    55        Name="scumm"
    66        ProjectGUID="{B6AFD548-63D2-40CD-A652-E87095AFCBAF}"
    77        RootNamespace="scumm"
     
    4343                                Optimization="0"
    4444                                InlineFunctionExpansion="0"
    4545                                AdditionalIncludeDirectories="../../;../../engines"
    46                                 PreprocessorDefinitions="WIN32;_DEBUG;ENABLE_SCUMM_7_8;ENABLE_HE;USE_ZLIB;USE_MAD;USE_VORBIS"
     46                                PreprocessorDefinitions="WIN32;_DEBUG;ENABLE_SCUMM_7_8;ENABLE_HE;USE_ZLIB;USE_MAD;USE_VORBIS; ENABLE_16BIT"
    4747                                MinimalRebuild="true"
    4848                                ExceptionHandling="1"
    4949                                BasicRuntimeChecks="3"
  • engines/scumm/he/cup_player_he.cpp

     
    6969                        _sfxQueuePos = 0;
    7070                        _lastSfxChannel = -1;
    7171
     72#ifdef ENABLE_16BIT
     73                        _offscreenBuffer = (uint8 *)malloc(_width * _height * 2);
     74                        memset(_offscreenBuffer, 0, _width * _height * 2);
     75#else
    7276                        _offscreenBuffer = (uint8 *)malloc(_width * _height);
    7377                        memset(_offscreenBuffer, 0, _width * _height);
     78#endif
    7479
    7580                        opened = true;
    7681                }
     
    9196}
    9297
    9398void CUP_Player::play() {
     99#ifdef ENABLE_16BIT
     100        while (!_vm->shouldQuit()) {
     101
     102                for (int16 y = 0; y < _height; y++) {
     103                        uint8 *dst = _offscreenBuffer + (y * _width * 2);
     104                        for (int16 x = 0; x < _width; x++) {
     105                                uint16 color = (x * y) & 0xFFFF;
     106                                *dst++ = color & 0xFF;
     107                                *dst++ = color >> 8;
     108                        }
     109                }
     110                Common::Rect r;
     111                r.top = 0;
     112                r.left = 0;
     113                r.bottom = _height - 1;
     114                r.right = _width - 1;
     115                copyRectToScreen(r);
     116                updateScreen();
     117        }
     118#else
    94119        while (parseNextHeaderTag(_fileStream)) {
    95120                if (_fileStream.ioFailed()) {
    96121                        return;
     
    116141                _vm->parseEvents();
    117142                ticks = _system->getMillis();
    118143        }
     144        #endif
    119145}
    120146
    121147void CUP_Player::copyRectToScreen(const Common::Rect &r) {
    122148        const uint8 *src = _offscreenBuffer + r.top * _width + r.left;
     149#ifdef ENABLE_16BIT
     150        _system->copyRectToScreen(src, _width * 2, r.left, r.top, r.width() + 1, r.height() + 1);
     151#else
    123152        _system->copyRectToScreen(src, _width, r.left, r.top, r.width() + 1, r.height() + 1);
     153#endif 
    124154}
    125155
    126156void CUP_Player::updateScreen() {