Commit 1f8b7769 authored by Maciej Suminski's avatar Maciej Suminski
Browse files

gal: Check maximum framebuffer size (OpenGL).

parent 1855db54
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ void OPENGL_COMPOSITOR::Initialize()
    // We need framebuffer objects for drawing the screen contents
    // Generate framebuffer and a depth buffer
    glGenFramebuffersEXT( 1, &m_framebuffer );
    glBindFramebufferEXT( GL_FRAMEBUFFER, m_framebuffer );
    glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, m_framebuffer );
    m_currentFbo = m_framebuffer;

    // Allocate memory for the depth buffer
@@ -91,10 +91,12 @@ unsigned int OPENGL_COMPOSITOR::CreateBuffer()
{
    wxASSERT( m_initialized );

    unsigned int maxBuffers;
    unsigned int maxBuffers, maxWidth, maxHeight;

    // Get the maximum number of buffers
    // Get the maximum size & number of buffers
    glGetIntegerv( GL_MAX_COLOR_ATTACHMENTS, (GLint*) &maxBuffers );
    glGetIntegerv( GL_MAX_FRAMEBUFFER_WIDTH, (GLint*) &maxWidth );
    glGetIntegerv( GL_MAX_FRAMEBUFFER_HEIGHT, (GLint*) &maxHeight );

    if( usedBuffers() >= maxBuffers )
    {
@@ -104,6 +106,14 @@ unsigned int OPENGL_COMPOSITOR::CreateBuffer()
        return 0;    // Unfortunately we have no more free buffers left
    }

    if( m_width > maxWidth || m_height > maxHeight ) {
        DisplayError( NULL, wxString::Format( wxT( "Max handled framebuffer size is %d x %d,"
                            " but %x x %x is required." ),
                            maxWidth, maxHeight, m_width, m_height ) );

        return 0;
    }

    // GL_COLOR_ATTACHMENTn are consecutive integers
    GLuint attachmentPoint = GL_COLOR_ATTACHMENT0 + usedBuffers();
    GLuint textureTarget;