1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-04 10:03:36 +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 "DepthBuffer.h"
#include "RSP.h" #include "RSP.h"
#include "RDP.h" #include "RDP.h"
#include "gDP.h"
#include "Textures.h" #include "Textures.h"
#include "Combiner.h" #include "Combiner.h"
#include "Types.h" #include "Types.h"
@ -516,8 +517,8 @@ void FrameBuffer_ActivateBufferTexture( s16 t, FrameBuffer *buffer )
const u32 factor = buffer->width << buffer->size >> 1; const u32 factor = buffer->width << buffer->size >> 1;
if (gSP.textureTile[t]->loadType == LOADTYPE_TILE) if (gSP.textureTile[t]->loadType == LOADTYPE_TILE)
{ {
buffer->texture->offsetS = gDP.loadTile->uls; buffer->texture->offsetS = buffer->loadTile->uls;
buffer->texture->offsetT = (float)(buffer->height - (gDP.loadTile->ult + shift/factor)); buffer->texture->offsetT = (float)(buffer->height - (buffer->loadTile->ult + shift/factor));
} }
else else
{ {

View File

@ -3,6 +3,7 @@
#include "Types.h" #include "Types.h"
#include "Textures.h" #include "Textures.h"
struct gDPTile;
struct FrameBuffer struct FrameBuffer
{ {
@ -13,6 +14,7 @@ struct FrameBuffer
u32 startAddress, endAddress; u32 startAddress, endAddress;
u32 size, width, height, changed; u32 size, width, height, changed;
gDPTile *loadTile;
float scaleX, scaleY; 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 //FrameBuffer_RemoveBuffer(pBuffer->startAddress); // Does not work with Zelda MM
return false; return false;
} }
pBuffer->loadTile = gDP.loadTile;
gDP.loadTile->frameBuffer = pBuffer; gDP.loadTile->frameBuffer = pBuffer;
gDP.loadTile->textureMode = TEXTUREMODE_FRAMEBUFFER; gDP.loadTile->textureMode = TEXTUREMODE_FRAMEBUFFER;
gDP.changed |= CHANGED_TMEM; gDP.changed |= CHANGED_TMEM;
u32 nTile = 8;; for (int nTile = gSP.texture.tile; nTile < 6; ++nTile) {
if (gDP.tiles[gSP.texture.tile].tmem == gDP.loadTile->tmem) if (gDP.tiles[nTile].tmem == gDP.loadTile->tmem) {
nTile = gSP.texture.tile; gDPTile & curTile = gDP.tiles[nTile];
else if (gDP.tiles[gSP.texture.tile + 1].tmem == gDP.loadTile->tmem) curTile.textureMode = gDP.loadTile->textureMode;
nTile = gSP.texture.tile + 1; curTile.loadType = gDP.loadTile->loadType;
if (nTile < 8) { curTile.frameBuffer = gDP.loadTile->frameBuffer;
gDPTile & curTile = gDP.tiles[nTile]; curTile.imageAddress = gDP.loadTile->imageAddress;
curTile.textureMode = gDP.loadTile->textureMode; }
curTile.loadType = gDP.loadTile->loadType;
curTile.frameBuffer = gDP.loadTile->frameBuffer;
curTile.imageAddress = gDP.loadTile->imageAddress;
} }
return true; return true;