diff --git a/FrameBuffer.cpp b/FrameBuffer.cpp index 87559396..4e8f27a0 100644 --- a/FrameBuffer.cpp +++ b/FrameBuffer.cpp @@ -513,3 +513,18 @@ void FrameBuffer_ActivateBufferTexture( s16 t, FrameBuffer *buffer ) // FrameBuffer_RenderBuffer(buffer->startAddress); TextureCache_ActivateTexture( t, buffer->texture ); } + +void FrameBuffer_ActivateBufferTextureBG( s16 t, FrameBuffer *buffer ) +{ + buffer->texture->scaleS = OGL.scaleX / (float)buffer->texture->realWidth; + buffer->texture->scaleT = OGL.scaleY / (float)buffer->texture->realHeight; + + buffer->texture->shiftScaleS = 1.0f; + buffer->texture->shiftScaleT = 1.0f; + + buffer->texture->offsetS = gSP.bgImage.imageX; + buffer->texture->offsetT = (float)buffer->height - gSP.bgImage.imageY; + + // FrameBuffer_RenderBuffer(buffer->startAddress); + TextureCache_ActivateTexture( t, buffer->texture ); +} diff --git a/FrameBuffer.h b/FrameBuffer.h index 323252fc..6b868a72 100644 --- a/FrameBuffer.h +++ b/FrameBuffer.h @@ -33,5 +33,6 @@ void FrameBuffer_RestoreBuffer( u32 address, u16 size, u16 width ); void FrameBuffer_RemoveBuffer( u32 address ); FrameBuffer *FrameBuffer_FindBuffer( u32 address ); void FrameBuffer_ActivateBufferTexture( s16 t, FrameBuffer *buffer ); +void FrameBuffer_ActivateBufferTextureBG( s16 t, FrameBuffer *buffer ); #endif diff --git a/Textures.cpp b/Textures.cpp index 9c25de7a..0b657232 100644 --- a/Textures.cpp +++ b/Textures.cpp @@ -863,15 +863,16 @@ void TextureCache_Update( u32 t ) TextureCache_Init(); } - if (gDP.textureMode == TEXTUREMODE_BGIMAGE) - { + switch(gDP.textureMode) { + case TEXTUREMODE_BGIMAGE: TextureCache_UpdateBackground(); return; - } - else if (gDP.textureMode == TEXTUREMODE_FRAMEBUFFER) - { + case TEXTUREMODE_FRAMEBUFFER: FrameBuffer_ActivateBufferTexture( t, gDP.loadTile->frameBuffer ); return; + case TEXTUREMODE_FRAMEBUFFER_BG: + FrameBuffer_ActivateBufferTextureBG( t, gDP.loadTile->frameBuffer ); + return; } maxTexels = imageFormat[gSP.textureTile[t]->size][gSP.textureTile[t]->format].maxTexels;