Ticket #9095: fix.patch

File fix.patch, 3.1 KB (added by bluddy, 15 years ago)

fixes flickering (hopefully)

  • backends/platform/psp/osys_psp.cpp

     
    109109};
    110110
    111111
    112 OSystem_PSP::OSystem_PSP() : _screenWidth(0), _screenHeight(0), _overlayWidth(0), _overlayHeight(0), _offscreen(0), _overlayBuffer(0), _overlayVisible(false), _shakePos(0), _lastScreenUpdate(0), _mouseBuf(0), _prevButtons(0), _lastPadCheck(0), _padAccel(0), _mixer(0) {
     112OSystem_PSP::OSystem_PSP() : _screenWidth(0), _screenHeight(0), _overlayWidth(0), _overlayHeight(0),
     113        _offscreen(0), _overlayBuffer(0), _overlayVisible(false), _shakePos(0), _lastScreenUpdate(0), _mouseBuf(0), _prevButtons(0), _lastPadCheck(0), _padAccel(0), _mixer(0) {
     114
    113115        memset(_palette, 0, sizeof(_palette));
    114116
    115117        _cursorPaletteDisabled = true;
     
    251253
    252254void OSystem_PSP::initSize(uint width, uint height, const Graphics::PixelFormat *format) {
    253255        PSPDebugTrace("initSize\n");
     256
    254257        _screenWidth = width;
    255258        _screenHeight = height;
    256259
     
    258261        _overlayHeight = PSP_SCREEN_HEIGHT;     //height;
    259262
    260263//      _offscreen = (byte *)offscreen256;
    261         _overlayBuffer = (OverlayColor *)0x44000000 + PSP_FRAME_SIZE;
     264//      _overlayBuffer = (OverlayColor *)0x44000000 + PSP_FRAME_SIZE;
     265        if(_overlayBuffer) {
     266                free(_overlayBuffer);
     267                _overlayBuffer = 0;
     268        }
     269        _overlayBuffer = (OverlayColor *)memalign(16, _overlayWidth * _overlayHeight * sizeof(OverlayColor));
    262270
    263         _offscreen = (byte *)_overlayBuffer + _overlayWidth * _overlayHeight * sizeof(OverlayColor);
    264         bzero(_offscreen, width * height);
     271//      _offscreen = (byte *)_overlayBuffer + _overlayWidth * _overlayHeight * sizeof(OverlayColor);
     272        if(_offscreen) {
     273                free(_offscreen);
     274                _offscreen = 0;
     275        }
     276        if(format) {
     277                _offscreen = (byte *)memalign(16, _screenWidth * _screenHeight * format->bytesPerPixel);
     278                bzero(_offscreen, _screenWidth * _screenHeight * format->bytesPerPixel);
     279        }
     280        else { // Assume maximum
     281                _offscreen = (byte *)memalign(16, _screenWidth * _screenHeight * 4);
     282                bzero(_offscreen, _screenWidth * _screenHeight * 4);
     283        }
     284
    265285        clearOverlay();
    266286        memset(_palette, 0xFFFF, 256 * sizeof(unsigned short));
    267287        _kbdClut[0] = 0xFFFF;
     
    347367
    348368
    349369        byte *dst = _offscreen + y * _screenWidth + x;
     370        dst = (byte *)((unsigned int)dst | 0x40000000); // Make this an uncached write
    350371
    351372        if (_screenWidth == pitch && pitch == w)
    352373        {
    353374                memcpy(dst, buf, h * w);
    354 /*
    355                 sceGuStart(0, displayList);
    356                 sceGuCopyImage( 3, 0, 0, w/2, h, w/2, (void *)buf, x/2, y, _screenWidth /2, _offscreen);
    357                 sceGuFinish();
    358                 sceGuSync(0,0);
    359 */
    360375        }
    361376         else
    362377        {
     
    367382                        dst += _screenWidth;
    368383                } while (--h);
    369384        }
     385
    370386}
    371387
    372388Graphics::Surface *OSystem_PSP::lockScreen() {
     
    647663                sceGuDrawArray(GU_SPRITES, GU_TEXTURE_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_2D, 2, 0, vertKB);
    648664                sceGuDisable(GU_BLEND);
    649665        }
    650         //sceKernelDcacheWritebackAll();
    651666
    652667        sceGuFinish();
    653668        sceGuSync(0,0);
    654669
    655670        sceDisplayWaitVblankStart();
    656671        sceGuSwapBuffers();
    657 
    658         //sceKernelDcacheWritebackAll();
    659672}
    660673
    661674void OSystem_PSP::setShakePos(int shakeOffset) {