1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +00:00

Frame buffer emulation fixes:

save pointer to the load tile in the frame buffer.

Game: Mario Tennis
This commit is contained in:
Sergey Lipskiy 2013-06-29 18:52:57 +07:00
parent 7418f76968
commit 1341f7bf15
3 changed files with 14 additions and 13 deletions

View File

@ -9,6 +9,7 @@
#include "DepthBuffer.h"
#include "RSP.h"
#include "RDP.h"
#include "gDP.h"
#include "Textures.h"
#include "Combiner.h"
#include "Types.h"
@ -516,8 +517,8 @@ void FrameBuffer_ActivateBufferTexture( s16 t, FrameBuffer *buffer )
const u32 factor = buffer->width << buffer->size >> 1;
if (gSP.textureTile[t]->loadType == LOADTYPE_TILE)
{
buffer->texture->offsetS = gDP.loadTile->uls;
buffer->texture->offsetT = (float)(buffer->height - (gDP.loadTile->ult + shift/factor));
buffer->texture->offsetS = buffer->loadTile->uls;
buffer->texture->offsetT = (float)(buffer->height - (buffer->loadTile->ult + shift/factor));
}
else
{

View File

@ -3,6 +3,7 @@
#include "Types.h"
#include "Textures.h"
struct gDPTile;
struct FrameBuffer
{
@ -13,6 +14,7 @@ struct FrameBuffer
u32 startAddress, endAddress;
u32 size, width, height, changed;
gDPTile *loadTile;
float scaleX, scaleY;
};

20
gDP.cpp
View File

@ -596,21 +596,19 @@ bool CheckForFrameBufferTexture(u32 _address)
//FrameBuffer_RemoveBuffer(pBuffer->startAddress); // Does not work with Zelda MM
return false;
}
pBuffer->loadTile = gDP.loadTile;
gDP.loadTile->frameBuffer = pBuffer;
gDP.loadTile->textureMode = TEXTUREMODE_FRAMEBUFFER;
gDP.changed |= CHANGED_TMEM;
u32 nTile = 8;;
if (gDP.tiles[gSP.texture.tile].tmem == gDP.loadTile->tmem)
nTile = gSP.texture.tile;
else if (gDP.tiles[gSP.texture.tile + 1].tmem == gDP.loadTile->tmem)
nTile = gSP.texture.tile + 1;
if (nTile < 8) {
gDPTile & curTile = gDP.tiles[nTile];
curTile.textureMode = gDP.loadTile->textureMode;
curTile.loadType = gDP.loadTile->loadType;
curTile.frameBuffer = gDP.loadTile->frameBuffer;
curTile.imageAddress = gDP.loadTile->imageAddress;
for (int nTile = gSP.texture.tile; nTile < 6; ++nTile) {
if (gDP.tiles[nTile].tmem == gDP.loadTile->tmem) {
gDPTile & curTile = gDP.tiles[nTile];
curTile.textureMode = gDP.loadTile->textureMode;
curTile.loadType = gDP.loadTile->loadType;
curTile.frameBuffer = gDP.loadTile->frameBuffer;
curTile.imageAddress = gDP.loadTile->imageAddress;
}
}
return true;