30 glGenFramebuffers ( 1, &mFBO );
31 OPENGL_CHECK_ERROR_THROW;
32 glBindFramebuffer ( GL_FRAMEBUFFER, mFBO );
33 OPENGL_CHECK_ERROR_THROW;
36 glGenTextures ( 1, &mColorBuffer );
37 OPENGL_CHECK_ERROR_THROW;
38 glBindTexture ( GL_TEXTURE_2D, mColorBuffer );
39 OPENGL_CHECK_ERROR_THROW;
40 glTexImage2D ( GL_TEXTURE_2D, 0, GL_RGB, 800, 600, 0, GL_RGB, GL_UNSIGNED_BYTE,
nullptr );
41 OPENGL_CHECK_ERROR_THROW;
42 glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
43 OPENGL_CHECK_ERROR_THROW;
44 glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
45 OPENGL_CHECK_ERROR_THROW;
46 glBindTexture ( GL_TEXTURE_2D, 0 );
47 OPENGL_CHECK_ERROR_THROW;
49 glFramebufferTexture2D ( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mColorBuffer, 0 );
50 OPENGL_CHECK_ERROR_THROW;
52 glGenRenderbuffers ( 1, &mRBO );
53 OPENGL_CHECK_ERROR_THROW;
54 glBindRenderbuffer ( GL_RENDERBUFFER, mRBO );
55 OPENGL_CHECK_ERROR_THROW;
56 glRenderbufferStorage ( GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 800, 600 );
57 OPENGL_CHECK_ERROR_THROW;
58 glBindRenderbuffer ( GL_RENDERBUFFER, 0 );
59 OPENGL_CHECK_ERROR_THROW;
61 glFramebufferRenderbuffer ( GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, mRBO );
62 OPENGL_CHECK_ERROR_THROW;
63 if ( glCheckFramebufferStatus ( GL_FRAMEBUFFER ) != GL_FRAMEBUFFER_COMPLETE )
66 throw std::runtime_error (
"Incomplete Framebuffer." );
68 OPENGL_CHECK_ERROR_THROW;
70 glBindFramebuffer ( GL_FRAMEBUFFER, 0 );
71 OPENGL_CHECK_ERROR_THROW;
76 if ( glIsRenderbuffer ( mRBO ) )
78 OPENGL_CHECK_ERROR_NO_THROW;
79 glDeleteRenderbuffers ( 1, &mRBO );
80 OPENGL_CHECK_ERROR_NO_THROW;
83 if ( glIsTexture ( mColorBuffer ) )
85 OPENGL_CHECK_ERROR_NO_THROW;
86 glDeleteTextures ( 1, &mColorBuffer );
87 OPENGL_CHECK_ERROR_NO_THROW;
90 if ( glIsFramebuffer ( mFBO ) )
92 OPENGL_CHECK_ERROR_NO_THROW;
93 glDeleteFramebuffers ( 1, &mFBO );
94 OPENGL_CHECK_ERROR_NO_THROW;
97 OPENGL_CHECK_ERROR_NO_THROW;
102 glBindTexture ( GL_TEXTURE_2D, mColorBuffer );
103 glTexImage2D ( GL_TEXTURE_2D, 0, GL_RGB, aWidth, aHeight, 0, GL_RGB, GL_UNSIGNED_BYTE,
nullptr );
104 glBindRenderbuffer ( GL_RENDERBUFFER, mRBO );
105 glRenderbufferStorage ( GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, aWidth, aHeight );
106 glBindRenderbuffer ( GL_RENDERBUFFER, 0 );
123 OpenGLFrameBuffer::OpenGLFrameBuffer ( OpenGLFrameBuffer&& aOpenGLFrameBuffer )
125 std::swap ( mFBO, aOpenGLFrameBuffer.mFBO );
126 std::swap ( mColorBuffer, aOpenGLFrameBuffer.mColorBuffer );
127 std::swap ( mRBO, aOpenGLFrameBuffer.mRBO );