Changeset View
Changeset View
Standalone View
Standalone View
source/renderer/PostprocManager.cpp
Show First 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | CPostprocManager::~CPostprocManager() | ||||
Cleanup(); | Cleanup(); | ||||
} | } | ||||
void CPostprocManager::Cleanup() | void CPostprocManager::Cleanup() | ||||
{ | { | ||||
if (!m_IsInitialized) // Only cleanup if previously used | if (!m_IsInitialized) // Only cleanup if previously used | ||||
return; | return; | ||||
if (m_PingFbo) pglDeleteFramebuffersEXT(1, &m_PingFbo); | if (m_PingFbo) glDeleteFramebuffersEXT(1, &m_PingFbo); | ||||
if (m_PongFbo) pglDeleteFramebuffersEXT(1, &m_PongFbo); | if (m_PongFbo) glDeleteFramebuffersEXT(1, &m_PongFbo); | ||||
if (m_BloomFbo) pglDeleteFramebuffersEXT(1, &m_BloomFbo); | if (m_BloomFbo) glDeleteFramebuffersEXT(1, &m_BloomFbo); | ||||
m_PingFbo = m_PongFbo = m_BloomFbo = 0; | m_PingFbo = m_PongFbo = m_BloomFbo = 0; | ||||
if (m_ColorTex1) glDeleteTextures(1, &m_ColorTex1); | if (m_ColorTex1) glDeleteTextures(1, &m_ColorTex1); | ||||
if (m_ColorTex2) glDeleteTextures(1, &m_ColorTex2); | if (m_ColorTex2) glDeleteTextures(1, &m_ColorTex2); | ||||
if (m_DepthTex) glDeleteTextures(1, &m_DepthTex); | if (m_DepthTex) glDeleteTextures(1, &m_DepthTex); | ||||
m_ColorTex1 = m_ColorTex2 = m_DepthTex = 0; | m_ColorTex1 = m_ColorTex2 = m_DepthTex = 0; | ||||
if (m_BlurTex2a) glDeleteTextures(1, &m_BlurTex2a); | if (m_BlurTex2a) glDeleteTextures(1, &m_BlurTex2a); | ||||
▲ Show 20 Lines • Show All 75 Lines • ▼ Show 20 Lines | void CPostprocManager::RecreateBuffers() | ||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | ||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | ||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); | ||||
glBindTexture(GL_TEXTURE_2D, 0); | glBindTexture(GL_TEXTURE_2D, 0); | ||||
// Set up the framebuffers with some initial textures. | // Set up the framebuffers with some initial textures. | ||||
pglGenFramebuffersEXT(1, &m_PingFbo); | glGenFramebuffersEXT(1, &m_PingFbo); | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PingFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PingFbo); | ||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, | ||||
GL_TEXTURE_2D, m_ColorTex1, 0); | GL_TEXTURE_2D, m_ColorTex1, 0); | ||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT, | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT, | ||||
GL_TEXTURE_2D, m_DepthTex, 0); | GL_TEXTURE_2D, m_DepthTex, 0); | ||||
GLenum status = pglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); | GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); | ||||
if (status != GL_FRAMEBUFFER_COMPLETE_EXT) | if (status != GL_FRAMEBUFFER_COMPLETE_EXT) | ||||
{ | { | ||||
LOGWARNING("Framebuffer object incomplete (A): 0x%04X", status); | LOGWARNING("Framebuffer object incomplete (A): 0x%04X", status); | ||||
} | } | ||||
pglGenFramebuffersEXT(1, &m_PongFbo); | glGenFramebuffersEXT(1, &m_PongFbo); | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PongFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PongFbo); | ||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, | ||||
GL_TEXTURE_2D, m_ColorTex2, 0); | GL_TEXTURE_2D, m_ColorTex2, 0); | ||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT, | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT, | ||||
GL_TEXTURE_2D, m_DepthTex, 0); | GL_TEXTURE_2D, m_DepthTex, 0); | ||||
status = pglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); | status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); | ||||
if (status != GL_FRAMEBUFFER_COMPLETE_EXT) | if (status != GL_FRAMEBUFFER_COMPLETE_EXT) | ||||
{ | { | ||||
LOGWARNING("Framebuffer object incomplete (B): 0x%04X", status); | LOGWARNING("Framebuffer object incomplete (B): 0x%04X", status); | ||||
} | } | ||||
pglGenFramebuffersEXT(1, &m_BloomFbo); | glGenFramebuffersEXT(1, &m_BloomFbo); | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_BloomFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_BloomFbo); | ||||
/* | /* | ||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, | ||||
GL_TEXTURE_2D, m_BloomTex1, 0); | GL_TEXTURE_2D, m_BloomTex1, 0); | ||||
status = pglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); | status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); | ||||
if (status != GL_FRAMEBUFFER_COMPLETE_EXT) | if (status != GL_FRAMEBUFFER_COMPLETE_EXT) | ||||
{ | { | ||||
LOGWARNING("Framebuffer object incomplete (B): 0x%04X", status); | LOGWARNING("Framebuffer object incomplete (B): 0x%04X", status); | ||||
} | } | ||||
*/ | */ | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); | ||||
} | } | ||||
void CPostprocManager::ApplyBlurDownscale2x(GLuint inTex, GLuint outTex, int inWidth, int inHeight) | void CPostprocManager::ApplyBlurDownscale2x(GLuint inTex, GLuint outTex, int inWidth, int inHeight) | ||||
{ | { | ||||
// Bind inTex to framebuffer for rendering. | // Bind inTex to framebuffer for rendering. | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_BloomFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_BloomFbo); | ||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, outTex, 0); | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, outTex, 0); | ||||
// Get bloom shader with instructions to simply copy texels. | // Get bloom shader with instructions to simply copy texels. | ||||
CShaderDefines defines; | CShaderDefines defines; | ||||
defines.Add(str_BLOOM_NOP, str_1); | defines.Add(str_BLOOM_NOP, str_1); | ||||
CShaderTechniquePtr tech = g_Renderer.GetShaderManager().LoadEffect(str_bloom, | CShaderTechniquePtr tech = g_Renderer.GetShaderManager().LoadEffect(str_bloom, | ||||
g_Renderer.GetSystemShaderDefines(), defines); | g_Renderer.GetSystemShaderDefines(), defines); | ||||
tech->BeginPass(); | tech->BeginPass(); | ||||
CShaderProgramPtr shader = tech->GetShader(); | CShaderProgramPtr shader = tech->GetShader(); | ||||
GLuint renderedTex = inTex; | GLuint renderedTex = inTex; | ||||
// Cheat by creating high quality mipmaps for inTex, so the copying operation actually | // Cheat by creating high quality mipmaps for inTex, so the copying operation actually | ||||
// produces good scaling due to hardware filtering. | // produces good scaling due to hardware filtering. | ||||
glBindTexture(GL_TEXTURE_2D, renderedTex); | glBindTexture(GL_TEXTURE_2D, renderedTex); | ||||
pglGenerateMipmapEXT(GL_TEXTURE_2D); | glGenerateMipmapEXT(GL_TEXTURE_2D); | ||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); | ||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | ||||
glBindTexture(GL_TEXTURE_2D, 0); | glBindTexture(GL_TEXTURE_2D, 0); | ||||
shader->BindTexture(str_renderedTex, renderedTex); | shader->BindTexture(str_renderedTex, renderedTex); | ||||
const SViewPort oldVp = g_Renderer.GetViewport(); | const SViewPort oldVp = g_Renderer.GetViewport(); | ||||
const SViewPort vp = { 0, 0, inWidth / 2, inHeight / 2 }; | const SViewPort vp = { 0, 0, inWidth / 2, inHeight / 2 }; | ||||
Show All 25 Lines | void CPostprocManager::ApplyBlurDownscale2x(GLuint inTex, GLuint outTex, int inWidth, int inHeight) | ||||
g_Renderer.SetViewport(oldVp); | g_Renderer.SetViewport(oldVp); | ||||
tech->EndPass(); | tech->EndPass(); | ||||
} | } | ||||
void CPostprocManager::ApplyBlurGauss(GLuint inOutTex, GLuint tempTex, int inWidth, int inHeight) | void CPostprocManager::ApplyBlurGauss(GLuint inOutTex, GLuint tempTex, int inWidth, int inHeight) | ||||
{ | { | ||||
// Set tempTex as our rendering target. | // Set tempTex as our rendering target. | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_BloomFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_BloomFbo); | ||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, tempTex, 0); | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, tempTex, 0); | ||||
// Get bloom shader, for a horizontal Gaussian blur pass. | // Get bloom shader, for a horizontal Gaussian blur pass. | ||||
CShaderDefines defines2; | CShaderDefines defines2; | ||||
defines2.Add(str_BLOOM_PASS_H, str_1); | defines2.Add(str_BLOOM_PASS_H, str_1); | ||||
CShaderTechniquePtr tech = g_Renderer.GetShaderManager().LoadEffect(str_bloom, | CShaderTechniquePtr tech = g_Renderer.GetShaderManager().LoadEffect(str_bloom, | ||||
g_Renderer.GetSystemShaderDefines(), defines2); | g_Renderer.GetSystemShaderDefines(), defines2); | ||||
tech->BeginPass(); | tech->BeginPass(); | ||||
Show All 28 Lines | void CPostprocManager::ApplyBlurGauss(GLuint inOutTex, GLuint tempTex, int inWidth, int inHeight) | ||||
shader->AssertPointersBound(); | shader->AssertPointersBound(); | ||||
glDrawArrays(GL_TRIANGLES, 0, 6); | glDrawArrays(GL_TRIANGLES, 0, 6); | ||||
g_Renderer.SetViewport(oldVp); | g_Renderer.SetViewport(oldVp); | ||||
tech->EndPass(); | tech->EndPass(); | ||||
// Set result texture as our render target. | // Set result texture as our render target. | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_BloomFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_BloomFbo); | ||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, inOutTex, 0); | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, inOutTex, 0); | ||||
// Get bloom shader, for a vertical Gaussian blur pass. | // Get bloom shader, for a vertical Gaussian blur pass. | ||||
CShaderDefines defines3; | CShaderDefines defines3; | ||||
defines3.Add(str_BLOOM_PASS_V, str_1); | defines3.Add(str_BLOOM_PASS_V, str_1); | ||||
tech = g_Renderer.GetShaderManager().LoadEffect(str_bloom, | tech = g_Renderer.GetShaderManager().LoadEffect(str_bloom, | ||||
g_Renderer.GetSystemShaderDefines(), defines3); | g_Renderer.GetSystemShaderDefines(), defines3); | ||||
tech->BeginPass(); | tech->BeginPass(); | ||||
Show All 32 Lines | void CPostprocManager::ApplyBlur() | ||||
// We do the same thing for each scale, incrementally adding more and more blur. | // We do the same thing for each scale, incrementally adding more and more blur. | ||||
SCALE_AND_BLUR(m_WhichBuffer ? m_ColorTex1 : m_ColorTex2, m_BlurTex2a, m_BlurTex2b); | SCALE_AND_BLUR(m_WhichBuffer ? m_ColorTex1 : m_ColorTex2, m_BlurTex2a, m_BlurTex2b); | ||||
SCALE_AND_BLUR(m_BlurTex2a, m_BlurTex4a, m_BlurTex4b); | SCALE_AND_BLUR(m_BlurTex2a, m_BlurTex4a, m_BlurTex4b); | ||||
SCALE_AND_BLUR(m_BlurTex4a, m_BlurTex8a, m_BlurTex8b); | SCALE_AND_BLUR(m_BlurTex4a, m_BlurTex8a, m_BlurTex8b); | ||||
#undef SCALE_AND_BLUR | #undef SCALE_AND_BLUR | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, originalFBO); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, originalFBO); | ||||
} | } | ||||
void CPostprocManager::CaptureRenderOutput() | void CPostprocManager::CaptureRenderOutput() | ||||
{ | { | ||||
ENSURE(m_IsInitialized); | ENSURE(m_IsInitialized); | ||||
// clear both FBOs and leave m_PingFbo selected for rendering; | // clear both FBOs and leave m_PingFbo selected for rendering; | ||||
// m_WhichBuffer stays true at this point | // m_WhichBuffer stays true at this point | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PongFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PongFbo); | ||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | ||||
GLenum buffers[] = { GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT }; | GLenum buffers[] = { GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT }; | ||||
pglDrawBuffers(1, buffers); | glDrawBuffers(1, buffers); | ||||
nwtour: If I turn on post-processing, it crashes here. But I can’t guarantee that it doesn’t crash in… | |||||
Done Inline ActionsCan you test now that @vladislavbelov worked around your bug? Stan: Can you test now that @vladislavbelov worked around your bug? | |||||
Done Inline ActionsInvestigation: glDravBuffers introduced in opengl 2.0 and should not work with my 1.4 - so this is not a GLAD bug --- a/source/renderer/RenderingOptions.cpp +++ b/source/renderer/RenderingOptions.cpp @@ -186,7 +186,14 @@ void CRenderingOptions::ReadConfigAndSetupHooks() SetShadowPCF(enabled); }); - m_ConfigHooks->Setup("postproc", m_PostProc); + m_ConfigHooks->Setup("postproc", [this]() { + bool enabled; + CFG_GET_VAL("postproc", enabled); + if (!GLAD_GL_VERSION_2_0 && enabled) + LOGWARNING("PostProc has been disabled, because it is not supported OpenGL < 2.0."); + else + SetPostProc(enabled); + }); m_ConfigHooks->Setup("antialiasing", []() { if (CRenderer::IsInitialised()) nwtour: Investigation: glDravBuffers introduced in opengl 2.0 and should not work with my 1.4 - so this… | |||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PingFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PingFbo); | ||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | ||||
pglDrawBuffers(1, buffers); | glDrawBuffers(1, buffers); | ||||
m_WhichBuffer = true; | m_WhichBuffer = true; | ||||
} | } | ||||
void CPostprocManager::ReleaseRenderOutput() | void CPostprocManager::ReleaseRenderOutput() | ||||
{ | { | ||||
ENSURE(m_IsInitialized); | ENSURE(m_IsInitialized); | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); | ||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | ||||
// we blit to screen from the previous active buffer | // we blit to screen from the previous active buffer | ||||
if (m_WhichBuffer) | if (m_WhichBuffer) | ||||
pglBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, m_PingFbo); | glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, m_PingFbo); | ||||
else | else | ||||
pglBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, m_PongFbo); | glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, m_PongFbo); | ||||
pglBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0); | glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0); | ||||
pglBlitFramebufferEXT(0, 0, m_Width, m_Height, 0, 0, m_Width, m_Height, | glBlitFramebufferEXT(0, 0, m_Width, m_Height, 0, 0, m_Width, m_Height, | ||||
GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, GL_NEAREST); | GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, GL_NEAREST); | ||||
pglBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0); | glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0); | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); | ||||
} | } | ||||
void CPostprocManager::ApplyEffect(CShaderTechniquePtr &shaderTech1, int pass) | void CPostprocManager::ApplyEffect(CShaderTechniquePtr &shaderTech1, int pass) | ||||
{ | { | ||||
// select the other FBO for rendering | // select the other FBO for rendering | ||||
if (!m_WhichBuffer) | if (!m_WhichBuffer) | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PingFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PingFbo); | ||||
else | else | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PongFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PongFbo); | ||||
glDisable(GL_DEPTH_TEST); | glDisable(GL_DEPTH_TEST); | ||||
glDepthMask(GL_FALSE); | glDepthMask(GL_FALSE); | ||||
shaderTech1->BeginPass(pass); | shaderTech1->BeginPass(pass); | ||||
CShaderProgramPtr shader = shaderTech1->GetShader(pass); | CShaderProgramPtr shader = shaderTech1->GetShader(pass); | ||||
shader->Bind(); | shader->Bind(); | ||||
▲ Show 20 Lines • Show All 58 Lines • ▼ Show 20 Lines | |||||
void CPostprocManager::ApplyPostproc() | void CPostprocManager::ApplyPostproc() | ||||
{ | { | ||||
ENSURE(m_IsInitialized); | ENSURE(m_IsInitialized); | ||||
// Don't do anything if we are using the default effect. | // Don't do anything if we are using the default effect. | ||||
if (m_PostProcEffect == L"default") | if (m_PostProcEffect == L"default") | ||||
return; | return; | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PongFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PongFbo); | ||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, 0, 0); | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, 0, 0); | ||||
GLenum buffers[] = { GL_COLOR_ATTACHMENT0_EXT }; | GLenum buffers[] = { GL_COLOR_ATTACHMENT0_EXT }; | ||||
pglDrawBuffers(1, buffers); | glDrawBuffers(1, buffers); | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PingFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PingFbo); | ||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, 0, 0); | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, 0, 0); | ||||
pglDrawBuffers(1, buffers); | glDrawBuffers(1, buffers); | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PongFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PongFbo); | ||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, 0); | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, 0); | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PingFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PingFbo); | ||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, 0); | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, 0); | ||||
// First render blur textures. Note that this only happens ONLY ONCE, before any effects are applied! | // First render blur textures. Note that this only happens ONLY ONCE, before any effects are applied! | ||||
// (This may need to change depending on future usage, however that will have a fps hit) | // (This may need to change depending on future usage, however that will have a fps hit) | ||||
ApplyBlur(); | ApplyBlur(); | ||||
for (int pass = 0; pass < m_PostProcTech->GetNumPasses(); ++pass) | for (int pass = 0; pass < m_PostProcTech->GetNumPasses(); ++pass) | ||||
ApplyEffect(m_PostProcTech, pass); | ApplyEffect(m_PostProcTech, pass); | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PongFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PongFbo); | ||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, m_DepthTex, 0); | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, m_DepthTex, 0); | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PingFbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PingFbo); | ||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, m_DepthTex, 0); | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, m_DepthTex, 0); | ||||
} | } | ||||
// Generate list of available effect-sets | // Generate list of available effect-sets | ||||
std::vector<CStrW> CPostprocManager::GetPostEffects() | std::vector<CStrW> CPostprocManager::GetPostEffects() | ||||
{ | { | ||||
std::vector<CStrW> effects; | std::vector<CStrW> effects; | ||||
▲ Show 20 Lines • Show All 94 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator
If I turn on post-processing, it crashes here. But I can’t guarantee that it doesn’t crash in the svn version. So just FYI