Ticket #8450: residual-smush.diff

File residual-smush.diff, 2.2 KB (added by eriktorbjorn, 19 years ago)

Patch against an August 12 CVS snapshot

  • engine.cpp

    diff -ur residual-cvs20050812/engine.cpp residual-cvs20050812+smush/engine.cpp
    old new  
    135135        unsigned int frameCounter = 0;
    136136        unsigned int timeAccum = 0;
    137137        unsigned int frameTimeCollection = 0;
     138        int prevSmushFrame = 0;
    138139        char fps[8] = "";
    139140        _savegameLoadRequest = false;
    140141        _savegameSaveRequest = false;
     
    230231                        // Run asynchronous tasks
    231232                        lua_runtasks();
    232233
     234                bool doFlip = true;
     235
    233236                if (_mode == ENGINE_MODE_SMUSH) {
    234237                        if (g_smush->isPlaying()) {
    235238                                _movieTime = g_smush->getMovieTime();
     
    237240                                        g_driver->prepareSmushFrame(g_smush->getWidth(), g_smush->getHeight(), g_smush->getDstPtr());
    238241                                        g_smush->clearUpdateNeeded();
    239242                                }
    240                                 if (g_smush->getFrame() > 0) {
    241                                         g_driver->drawSmushFrame(g_smush->getX(), g_smush->getY());
    242                                         if (SHOWFPS_GLOBAL)
    243                                                 g_driver->drawEmergString(550, 25, fps, Color(255, 255, 255));
     243                                int frame = g_smush->getFrame();
     244                                if (frame > 0) {
     245                                        if (frame != prevSmushFrame) {
     246                                                prevSmushFrame = g_smush->getFrame();
     247                                                g_driver->drawSmushFrame(g_smush->getX(), g_smush->getY());
     248                                                if (SHOWFPS_GLOBAL)
     249                                                        g_driver->drawEmergString(550, 25, fps, Color(255, 255, 255));
     250                                        } else
     251                                                doFlip = false;
    244252                                }
    245253                        }
    246254                } else if (_mode == ENGINE_MODE_NORMAL) {
     255                        prevSmushFrame = 0;
    247256                        g_driver->clearScreen();
    248257
    249258                        // Update actor costumes & sets
     
    326335                // Draw Primitives
    327336                for (PrimitiveListType::iterator i = _primitiveObjects.begin(); i != _primitiveObjects.end(); i++) {
    328337                        (*i)->draw();
     338                        doFlip = true;
    329339                }
    330340
    331341                // Draw text
    332342                for (TextListType::iterator i = _textObjects.begin(); i != _textObjects.end(); i++) {
    333343                        (*i)->draw();
     344                        doFlip = true;
    334345                }
    335346
    336347                g_imuse->flushTracks();
    337348                g_imuse->refreshScripts();
    338349
    339                 g_driver->flipBuffer();
     350                if (doFlip)
     351                        g_driver->flipBuffer();
    340352
    341353                // don't kill CPU
    342354                SDL_Delay(1);
     
    360372                setMovieTime(_movieTime);
    361373                lua_endblock();
    362374
    363                 if (SHOWFPS_GLOBAL) {
     375                if (SHOWFPS_GLOBAL && doFlip) {
    364376                        frameCounter++;
    365377                        timeAccum += _frameTime;
    366378                        if (timeAccum > 1000) {