Ensure the proper default framebuffer is bound when activating a RenderWindow. Fixes #1471.

This commit is contained in:
binary1248 2018-09-15 21:36:53 +02:00 committed by Lukas Dürrenberger
parent 5e10e1f0c9
commit 8554d210df
2 changed files with 21 additions and 4 deletions

View File

@ -177,6 +177,13 @@ protected:
///
////////////////////////////////////////////////////////////
virtual void onResize();
private:
////////////////////////////////////////////////////////////
// Member data
////////////////////////////////////////////////////////////
unsigned int m_defaultFrameBuffer; ///< Framebuffer to bind when targeting this window
};
} // namespace sf

View File

@ -34,14 +34,16 @@
namespace sf
{
////////////////////////////////////////////////////////////
RenderWindow::RenderWindow()
RenderWindow::RenderWindow() :
m_defaultFrameBuffer(0)
{
// Nothing to do
}
////////////////////////////////////////////////////////////
RenderWindow::RenderWindow(VideoMode mode, const String& title, Uint32 style, const ContextSettings& settings)
RenderWindow::RenderWindow(VideoMode mode, const String& title, Uint32 style, const ContextSettings& settings) :
m_defaultFrameBuffer(0)
{
// Don't call the base class constructor because it contains virtual function calls
create(mode, title, style, settings);
@ -49,7 +51,8 @@ RenderWindow::RenderWindow(VideoMode mode, const String& title, Uint32 style, co
////////////////////////////////////////////////////////////
RenderWindow::RenderWindow(WindowHandle handle, const ContextSettings& settings)
RenderWindow::RenderWindow(WindowHandle handle, const ContextSettings& settings) :
m_defaultFrameBuffer(0)
{
// Don't call the base class constructor because it contains virtual function calls
create(handle, settings);
@ -83,7 +86,7 @@ bool RenderWindow::setActive(bool active)
// try to draw to the default framebuffer of the RenderWindow
if (active && result && priv::RenderTextureImplFBO::isAvailable())
{
priv::RenderTextureImplFBO::unbind();
glCheck(GLEXT_glBindFramebuffer(GLEXT_GL_FRAMEBUFFER, m_defaultFrameBuffer));
return true;
}
@ -108,6 +111,13 @@ Image RenderWindow::capture() const
////////////////////////////////////////////////////////////
void RenderWindow::onCreate()
{
if (priv::RenderTextureImplFBO::isAvailable())
{
// Retrieve the framebuffer ID we have to bind when targeting the window for rendering
// We assume that this window's context is still active at this point
glCheck(glGetIntegerv(GLEXT_GL_FRAMEBUFFER_BINDING, reinterpret_cast<GLint*>(&m_defaultFrameBuffer)));
}
// Just initialize the render target part
RenderTarget::initialize();
}