1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-04 10:03:36 +00:00
GLideN64/DepthBuffer.h
Sergey Lipskiy 34d638a0a3 Don't copy depth buffer if it was not cleared.
Uncleared depth buffer most likely is used as auxilary color buffer.

Fix pause screen in Mickey USA when copy depth to RDRAM is enabled, issue #85.
2015-05-13 10:18:14 +06:00

77 lines
1.7 KiB
C++

#ifndef DEPTHBUFFER_H
#define DEPTHBUFFER_H
#include "Types.h"
#include "Textures.h"
struct DepthBuffer
{
DepthBuffer();
DepthBuffer(DepthBuffer && _other);
~DepthBuffer();
void initDepthImageTexture(FrameBuffer * _pBuffer);
void initDepthBufferTexture(FrameBuffer * _pBuffer);
CachedTexture * resolveDepthBufferTexture(FrameBuffer * _pBuffer);
void setDepthAttachment();
void activateDepthBufferTexture(FrameBuffer * _pBuffer);
void bindDepthImageTexture();
u32 m_address, m_width;
GLuint m_FBO;
CachedTexture *m_pDepthImageTexture;
CachedTexture *m_pDepthBufferTexture;
bool m_cleared;
// multisampling
CachedTexture *m_pResolveDepthBufferTexture;
bool m_resolved;
private:
void _initDepthBufferTexture(FrameBuffer * _pBuffer, CachedTexture *_pTexture, bool _multisample);
};
class DepthBufferList
{
public:
void init();
void destroy();
void saveBuffer(u32 _address);
void removeBuffer(u32 _address);
void clearBuffer();
void setNotCleared();
DepthBuffer *findBuffer(u32 _address);
DepthBuffer * getCurrent() const {return m_pCurrent;}
static DepthBufferList & get()
{
static DepthBufferList depthBufferList;
return depthBufferList;
}
const u16 * const getZLUT() const {return m_pzLUT;}
private:
DepthBufferList() : m_pCurrent(NULL), m_pzLUT(NULL) {}
DepthBufferList(const FrameBufferList &);
typedef std::list<DepthBuffer> DepthBuffers;
DepthBuffers m_list;
DepthBuffer *m_pCurrent;
u16 * m_pzLUT;
};
inline
DepthBufferList & depthBufferList()
{
return DepthBufferList::get();
}
extern const GLuint ZlutImageUnit;
extern const GLuint TlutImageUnit;
extern const GLuint depthImageUnit;
void DepthBuffer_Init();
void DepthBuffer_Destroy();
#endif