mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-02 09:03:37 +00:00
FBWrite draft implementation.
This commit is contained in:
parent
646a88139c
commit
857ae8a360
|
@ -101,14 +101,38 @@ private:
|
|||
class RDRAMtoFrameBuffer
|
||||
{
|
||||
public:
|
||||
RDRAMtoFrameBuffer() : m_pTexture(NULL), m_PBO(0) {}
|
||||
RDRAMtoFrameBuffer()
|
||||
: m_uly(0)
|
||||
, m_lry(0)
|
||||
, m_stride(0)
|
||||
, m_pCurBuffer(nullptr)
|
||||
, m_pTexture(nullptr)
|
||||
, m_PBO(0) {
|
||||
}
|
||||
|
||||
void Init();
|
||||
void Destroy();
|
||||
|
||||
void CopyFromRDRAM( u32 _address, bool _bUseAlpha);
|
||||
void AddAddress(u32 _address);
|
||||
void CopyFromRDRAM(u32 _address, bool _bUseAlpha);
|
||||
|
||||
private:
|
||||
class Cleaner {
|
||||
public:
|
||||
Cleaner(RDRAMtoFrameBuffer * _p) : m_p(_p) {}
|
||||
~Cleaner() {
|
||||
m_p->m_uly = 0;
|
||||
m_p->m_lry = 0;
|
||||
m_p->m_stride = 0;
|
||||
m_p->m_pCurBuffer = nullptr;
|
||||
}
|
||||
private:
|
||||
RDRAMtoFrameBuffer * m_p;
|
||||
};
|
||||
|
||||
u32 m_uly, m_lry;
|
||||
u32 m_stride;
|
||||
FrameBuffer * m_pCurBuffer;
|
||||
CachedTexture * m_pTexture;
|
||||
#ifndef GLES2
|
||||
GLuint m_PBO;
|
||||
|
@ -1521,6 +1545,24 @@ void RDRAMtoFrameBuffer::Destroy()
|
|||
#endif
|
||||
}
|
||||
|
||||
void RDRAMtoFrameBuffer::AddAddress(u32 _address)
|
||||
{
|
||||
if (m_pCurBuffer == nullptr) {
|
||||
m_pCurBuffer = frameBufferList().findBuffer(_address);
|
||||
if (m_pCurBuffer == nullptr)
|
||||
return;
|
||||
m_stride = m_pCurBuffer->m_width << m_pCurBuffer->m_size >> 1;
|
||||
m_uly = m_lry = (_address - m_pCurBuffer->m_startAddress) / m_stride;
|
||||
return;
|
||||
}
|
||||
|
||||
const u32 y = (_address - m_pCurBuffer->m_startAddress) / m_stride;
|
||||
if (y < m_uly)
|
||||
m_uly = y;
|
||||
else if (y > m_lry)
|
||||
m_lry = y;
|
||||
}
|
||||
|
||||
void RDRAMtoFrameBuffer::CopyFromRDRAM( u32 _address, bool _bUseAlpha)
|
||||
{
|
||||
FrameBuffer *pBuffer = frameBufferList().findBuffer(_address);
|
||||
|
@ -1657,3 +1699,8 @@ void FrameBuffer_CopyFromRDRAM( u32 address, bool bUseAlpha )
|
|||
{
|
||||
g_RDRAMtoFB.CopyFromRDRAM(address, bUseAlpha);
|
||||
}
|
||||
|
||||
void FrameBuffer_AddAddress(u32 address)
|
||||
{
|
||||
g_RDRAMtoFB.AddAddress(address);
|
||||
}
|
||||
|
|
|
@ -121,7 +121,8 @@ void FrameBuffer_Destroy();
|
|||
void FrameBuffer_CopyToRDRAM( u32 _address , bool _sync );
|
||||
void FrameBuffer_CopyChunkToRDRAM(u32 _address);
|
||||
void FrameBuffer_CopyFromRDRAM(u32 address, bool bUseAlpha);
|
||||
bool FrameBuffer_CopyDepthBuffer( u32 address );
|
||||
void FrameBuffer_AddAddress(u32 address);
|
||||
bool FrameBuffer_CopyDepthBuffer(u32 address);
|
||||
bool FrameBuffer_CopyDepthBufferChunk(u32 address);
|
||||
void FrameBuffer_ActivateBufferTexture(s16 t, FrameBuffer *pBuffer);
|
||||
void FrameBuffer_ActivateBufferTextureBG(s16 t, FrameBuffer *pBuffer);
|
||||
|
|
|
@ -9,7 +9,10 @@
|
|||
|
||||
void FrameBufferWrite(u32 addr, u32 size)
|
||||
{
|
||||
// TODO: remove debug print
|
||||
debugPrint("FBWrite addr=%08lx size=%u\n", addr, size);
|
||||
|
||||
FrameBuffer_AddAddress(RSP_SegmentToPhysical(addr));
|
||||
}
|
||||
|
||||
void FrameBufferWriteList(FrameBufferModifyEntry *plist, u32 size)
|
||||
|
|
Loading…
Reference in New Issue
Block a user