From d885c383b2dd4c6cfe00b7e37e5f361ce9d5481a Mon Sep 17 00:00:00 2001 From: rogerman Date: Fri, 9 Oct 2015 20:45:49 +0000 Subject: [PATCH] =?UTF-8?q?GPU:=20-=20Also=20skip=20mosaic=20rendering=20i?= =?UTF-8?q?f=20the=20mosaic=20values=20themselves=20aren=E2=80=99t=20set.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- desmume/src/GPU.cpp | 19 +++++++++++++++++-- desmume/src/GPU.h | 2 ++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/desmume/src/GPU.cpp b/desmume/src/GPU.cpp index a46124330..370748781 100644 --- a/desmume/src/GPU.cpp +++ b/desmume/src/GPU.cpp @@ -401,6 +401,13 @@ void GPUEngineBase::_Reset_Base() this->_BGLayer[GPULayerID_BG2].extPalette = (u16 **)&MMU.ExtPal[this->_engineID][GPULayerID_BG2]; this->_BGLayer[GPULayerID_BG3].extPalette = (u16 **)&MMU.ExtPal[this->_engineID][GPULayerID_BG3]; + this->_mosaicWidthBG = &GPUEngineBase::_mosaicLookup.table[0][0]; + this->_mosaicHeightBG = &GPUEngineBase::_mosaicLookup.table[0][0]; + this->_mosaicWidthOBJ = &GPUEngineBase::_mosaicLookup.table[0][0]; + this->_mosaicHeightOBJ = &GPUEngineBase::_mosaicLookup.table[0][0]; + this->_isBGMosaicSet = false; + this->_isOBJMosaicSet = false; + this->_curr_win[0] = GPUEngineBase::_winEmpty; this->_curr_win[1] = GPUEngineBase::_winEmpty; this->_needUpdateWINH[0] = true; @@ -1240,6 +1247,11 @@ void GPUEngineBase::_MosaicSpriteLinePixel(const size_t x, u16 l, u16 *__restric void GPUEngineBase::_MosaicSpriteLine(u16 l, u16 *__restrict dst, u8 *__restrict dst_alpha, u8 *__restrict typeTab, u8 *__restrict prioTab) { + if (!this->_isOBJMosaicSet) + { + return; + } + for (size_t i = 0; i < GPU_FRAMEBUFFER_NATIVE_WIDTH; i++) { this->_MosaicSpriteLinePixel(i, l, dst, dst_alpha, typeTab, prioTab); @@ -2385,6 +2397,9 @@ void GPUEngineBase::ParseReg_MOSAIC() this->_mosaicHeightBG = &GPUEngineBase::_mosaicLookup.table[this->_IORegisterMap->MOSAIC.BG_MosaicV][0]; this->_mosaicWidthOBJ = &GPUEngineBase::_mosaicLookup.table[this->_IORegisterMap->MOSAIC.OBJ_MosaicH][0]; this->_mosaicHeightOBJ = &GPUEngineBase::_mosaicLookup.table[this->_IORegisterMap->MOSAIC.OBJ_MosaicV][0]; + + this->_isBGMosaicSet = (this->_IORegisterMap->MOSAIC.BG_MosaicH != 0) && (this->_IORegisterMap->MOSAIC.BG_MosaicV != 0); + this->_isOBJMosaicSet = (this->_IORegisterMap->MOSAIC.OBJ_MosaicH != 0) && (this->_IORegisterMap->MOSAIC.OBJ_MosaicV != 0); } void GPUEngineBase::ParseReg_BLDCNT() @@ -2880,7 +2895,7 @@ void GPUEngineA::_RenderLine_Layer(const u16 l, u16 *dstColorLine, const size_t } #ifndef DISABLE_MOSAIC - if (this->_BGLayer[layerID].isMosaic) + if (this->_BGLayer[layerID].isMosaic && this->_isBGMosaicSet) { switch (layerID) { @@ -3744,7 +3759,7 @@ void GPUEngineB::_RenderLine_Layer(const u16 l, u16 *dstColorLine, const size_t if (this->_enableLayer[layerID]) { #ifndef DISABLE_MOSAIC - if (this->_BGLayer[layerID].isMosaic) + if (this->_BGLayer[layerID].isMosaic && this->_isBGMosaicSet) { switch (layerID) { diff --git a/desmume/src/GPU.h b/desmume/src/GPU.h index ef82a1f96..67aeffd97 100644 --- a/desmume/src/GPU.h +++ b/desmume/src/GPU.h @@ -1177,6 +1177,8 @@ protected: MosaicLookup::TableEntry *_mosaicHeightBG; MosaicLookup::TableEntry *_mosaicWidthOBJ; MosaicLookup::TableEntry *_mosaicHeightOBJ; + bool _isBGMosaicSet; + bool _isOBJMosaicSet; u8 _BLDALPHA_EVA; u8 _BLDALPHA_EVB;