@@ -26,9 +26,9 @@ GLRenderCtx::~GLRenderCtx() {
2626}
2727
2828void GLRenderCtx::cleanup () {
29- if (m_depth ) {
30- glDeleteRenderbuffers (1 , &m_depth );
31- m_depth = 0 ;
29+ if (m_depthStencil ) {
30+ glDeleteRenderbuffers (1 , &m_depthStencil );
31+ m_depthStencil = 0 ;
3232 }
3333 if (m_texture) {
3434 log::info (" deleting texture {}" , m_texture);
@@ -53,6 +53,10 @@ ImVec2 GLRenderCtx::size() const {
5353}
5454
5555bool GLRenderCtx::begin () {
56+ // save currently bound fbo
57+ glGetIntegerv (GL_DRAW_FRAMEBUFFER_BINDING, &m_prevDrawBuffer);
58+ glGetIntegerv (GL_READ_FRAMEBUFFER_BINDING, &m_prevReadBuffer);
59+
5660 if (!m_buffer) {
5761 glGenFramebuffers (1 , &m_buffer);
5862 glBindFramebuffer (GL_FRAMEBUFFER, m_buffer);
@@ -80,15 +84,15 @@ bool GLRenderCtx::begin() {
8084 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
8185 }
8286
83- if (!m_depth ) {
84- glGenRenderbuffers (1 , &m_depth );
85- glBindRenderbuffer (GL_RENDERBUFFER, m_depth );
87+ if (!m_depthStencil ) {
88+ glGenRenderbuffers (1 , &m_depthStencil );
89+ glBindRenderbuffer (GL_RENDERBUFFER, m_depthStencil );
8690 glRenderbufferStorage (
87- GL_RENDERBUFFER, GL_DEPTH_COMPONENT ,
91+ GL_RENDERBUFFER, GL_DEPTH24_STENCIL8 ,
8892 static_cast <GLsizei>(m_size.x ),
8993 static_cast <GLsizei>(m_size.y )
9094 );
91- glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT , GL_RENDERBUFFER, m_depth );
95+ glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT , GL_RENDERBUFFER, m_depthStencil );
9296
9397 glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_texture, 0 );
9498 }
@@ -99,14 +103,17 @@ bool GLRenderCtx::begin() {
99103 return false ;
100104 }
101105
106+ // bind our framebuffer
102107 glBindFramebuffer (GL_FRAMEBUFFER, m_buffer);
103108
104109 return true ;
105110}
106111
107112void GLRenderCtx::end () {
108- glBindFramebuffer (GL_FRAMEBUFFER, 0 );
109- glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
110- glFlush ();
113+ // bind the framebuffer that was bound before us
114+ glBindFramebuffer (GL_DRAW_FRAMEBUFFER, m_prevDrawBuffer);
115+ glBindFramebuffer (GL_READ_FRAMEBUFFER, m_prevReadBuffer);
116+ glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
117+ // glFlush();
111118}
112119
0 commit comments