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

PostProcessor refactor: - rename process() to doBlur(). - move Blur() init and destroy to separate functions.

This commit is contained in:
gonetz 2015-12-23 16:21:55 +06:00 committed by Sergey Lipskiy
parent 99ad1983e4
commit 330603e2b6
5 changed files with 28 additions and 13 deletions

View File

@ -97,7 +97,7 @@ FrameBuffer::FrameBuffer() :
m_scaleX(0), m_scaleY(0),
m_copiedToRdram(false), m_fingerprint(false), m_cleared(false), m_changed(false), m_cfb(false),
m_isDepthBuffer(false), m_isPauseScreen(false), m_isOBScreen(false), m_needHeightCorrection(false),
m_postProcessed(false), m_pLoadTile(NULL),
m_postProcessed(0), m_pLoadTile(NULL),
m_pDepthBuffer(NULL), m_pResolveTexture(NULL), m_resolveFBO(0), m_resolved(false)
{
m_pTexture = textureCache().addFrameBufferTexture();
@ -545,7 +545,7 @@ void FrameBufferList::saveBuffer(u32 _address, u16 _format, u16 _size, u16 _widt
m_pCurrent->m_isDepthBuffer = _address == gDP.depthImageAddress;
m_pCurrent->m_isPauseScreen = m_pCurrent->m_isOBScreen = false;
m_pCurrent->m_postProcessed = false;
m_pCurrent->m_postProcessed = 0;
}
void FrameBufferList::copyAux()
@ -739,7 +739,7 @@ void FrameBufferList::renderBuffer(u32 _address)
#endif // GLESX
render.updateScissor(pBuffer);
PostProcessor::get().process(pBuffer);
PostProcessor::get().doBlur(pBuffer);
// glDisable(GL_SCISSOR_TEST) does not affect glBlitFramebuffer, at least on AMD
glScissor(0, 0, ogl.getScreenWidth(), ogl.getScreenHeight() + ogl.getHeightOffset());
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
@ -804,7 +804,7 @@ void FrameBufferList::renderBuffer(u32 _address)
OGLVideo & ogl = video();
ogl.getRender().updateScissor(pBuffer);
PostProcessor::get().process(pBuffer);
PostProcessor::get().doBlur(pBuffer);
ogl.getRender().dropRenderState();
gSP.changed = gDP.changed = 0;

View File

@ -36,7 +36,7 @@ struct FrameBuffer
bool m_isPauseScreen;
bool m_isOBScreen;
bool m_needHeightCorrection;
bool m_postProcessed;
u32 m_postProcessed;
GLuint m_FBO;
gDPTile *m_pLoadTile;

View File

@ -1393,8 +1393,7 @@ void OGLRender::_initData()
Combiner_Init();
TextDrawer::get().init();
TFH.init();
if (config.bloomFilter.enable != 0)
PostProcessor::get().init();
PostProcessor::get().init();
m_renderState = rsNone;
gSP.changed = gDP.changed = 0xFFFFFFFF;

View File

@ -297,7 +297,7 @@ GLuint _createFBO(CachedTexture * _pTexture)
return FBO;
}
void PostProcessor::init()
void PostProcessor::_initBlur()
{
m_pTextureOriginal = _createTexture();
m_FBO_original = _createFBO(m_pTextureOriginal);
@ -362,7 +362,13 @@ void PostProcessor::init()
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
}
void PostProcessor::destroy()
void PostProcessor::init()
{
if (config.bloomFilter.enable != 0)
_initBlur();
}
void PostProcessor::_destroyBlur()
{
if (m_copyProgram != 0)
glDeleteProgram(m_copyProgram);
@ -401,6 +407,12 @@ void PostProcessor::destroy()
m_pTextureBlur = NULL;
}
void PostProcessor::destroy()
{
_destroyBlur();
}
PostProcessor & PostProcessor::get()
{
static PostProcessor processor;
@ -431,15 +443,15 @@ void _setGLState() {
gDP.changed |= CHANGED_RENDERMODE;
}
void PostProcessor::process(FrameBuffer * _pBuffer)
void PostProcessor::doBlur(FrameBuffer * _pBuffer)
{
if (config.bloomFilter.enable == 0)
return;
if (_pBuffer == NULL || _pBuffer->m_postProcessed)
if (_pBuffer == NULL || (_pBuffer->m_postProcessed&PostProcessor::postEffectBlur) == PostProcessor::postEffectBlur)
return;
_pBuffer->m_postProcessed = true;
_pBuffer->m_postProcessed |= PostProcessor::postEffectBlur;
_setGLState();
OGLVideo & ogl = video();

View File

@ -10,16 +10,20 @@ public:
void init();
void destroy();
void process(FrameBuffer * _pBuffer);
void doBlur(FrameBuffer * _pBuffer);
static PostProcessor & get();
static const u32 postEffectBlur = 1U;
private:
PostProcessor() :
m_extractBloomProgram(0), m_seperableBlurProgram(0), m_glowProgram(0), m_bloomProgram(0), m_copyProgram(0),
m_FBO_original(0), m_FBO_glowMap(0), m_FBO_blur(0),
m_pTextureOriginal(NULL), m_pTextureGlowMap(NULL), m_pTextureBlur(NULL) {}
PostProcessor(const PostProcessor & _other);
void _initBlur();
void _destroyBlur();
GLuint m_extractBloomProgram;
GLuint m_seperableBlurProgram;