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

73 lines
1.7 KiB
C
Raw Normal View History

#ifndef FRAMEBUFFER_H
#define FRAMEBUFFER_H
#include <list>
#include "Types.h"
#include "Textures.h"
struct gDPTile;
struct DepthBuffer;
struct FrameBuffer
{
FrameBuffer();
FrameBuffer(FrameBuffer && _other);
~FrameBuffer();
u32 m_startAddress, m_endAddress;
u32 m_size, m_width, m_height, m_fillcolor;
float m_scaleX, m_scaleY;
bool m_cleared;
GLuint m_FBO;
gDPTile *m_pLoadTile;
CachedTexture *m_pTexture;
DepthBuffer *m_pDepthBuffer;
};
class FrameBufferList
{
public:
void init();
void destroy();
void saveBuffer( u32 _address, u16 _format, u16 _size, u16 _width, u16 _height );
void removeBuffer( u32 _address );
void attachDepthBuffer();
FrameBuffer * findBuffer(u32 _address);
FrameBuffer * findTmpBuffer(u32 _address);
FrameBuffer * getCurrent() const {return m_pCurrent;}
void renderBuffer(u32 _address);
bool isFboMode() const {return m_drawBuffer == GL_FRAMEBUFFER;}
2014-09-04 12:46:46 +00:00
static FrameBufferList & get()
{
static FrameBufferList frameBufferList;
return frameBufferList;
}
private:
FrameBufferList() : m_pCurrent(NULL), m_drawBuffer(GL_BACK) {}
2014-09-04 12:46:46 +00:00
FrameBufferList(const FrameBufferList &);
typedef std::list<FrameBuffer> FrameBuffers;
FrameBuffers m_list;
FrameBuffer * m_pCurrent;
GLenum m_drawBuffer;
};
2014-09-04 12:46:46 +00:00
inline
FrameBufferList & frameBufferList()
{
return FrameBufferList::get();
}
void FrameBuffer_Init();
void FrameBuffer_Destroy();
void FrameBuffer_CopyToRDRAM( u32 address, bool bSync );
void FrameBuffer_CopyFromRDRAM( u32 address, bool bUseAlpha );
2013-11-12 08:41:19 +00:00
void FrameBuffer_CopyDepthBuffer( u32 address );
void FrameBuffer_ActivateBufferTexture(s16 t, FrameBuffer *pBuffer);
void FrameBuffer_ActivateBufferTextureBG(s16 t, FrameBuffer *pBuffer);
#endif