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:
parent
7418f76968
commit
1341f7bf15
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
20
gDP.cpp
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user