| 1566 | #endif // GL_VERSION_3_2 |
| 1567 | |
| 1568 | void * CreateGLRenderbuffer( GLsizei width, GLsizei height, |
| 1569 | GLenum attachment, GLenum glFormat, |
| 1570 | GLenum internalFormat, GLenum glType, |
| 1571 | ExplicitType type, |
| 1572 | GLuint *outFramebuffer, |
| 1573 | GLuint *outRenderbuffer, |
| 1574 | int *outError, MTdata d, bool allocateMem ) |
| 1575 | { |
| 1576 | *outError = CreateGLRenderbufferRaw( width, height, attachment, glFormat, internalFormat, |
| 1577 | glType, outFramebuffer, outRenderbuffer ); |
| 1578 | |
| 1579 | if( *outError != 0 ) |
| 1580 | return NULL; |
| 1581 | |
| 1582 | GLenum err = 0; |
| 1583 | |
| 1584 | // Generate a renderbuffer and bind |
| 1585 | glGenRenderbuffersEXT( 1, outRenderbuffer ); |
| 1586 | glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, *outRenderbuffer ); |
| 1587 | |
| 1588 | // Allocate storage to the renderbuffer |
| 1589 | glGetError(); |
| 1590 | glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, internalFormat, (GLsizei)width, (GLsizei)height ); |
| 1591 | err = glGetError(); |
| 1592 | if( err != GL_NO_ERROR ) |
| 1593 | { |
| 1594 | *outError = 1701; |
| 1595 | log_error("Failed to allocate render buffer storage!\n"); |
| 1596 | return NULL; |
| 1597 | } |
| 1598 | |
| 1599 | GLint realInternalFormat; |
| 1600 | glGetRenderbufferParameterivEXT( GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_INTERNAL_FORMAT_EXT, &realInternalFormat ); |
| 1601 | internalFormat = realInternalFormat; |
| 1602 | |
| 1603 | #ifdef DEBUG |
| 1604 | GLint rsize, gsize, bsize, asize; |
| 1605 | glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_RED_SIZE_EXT,&rsize); |
| 1606 | glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_GREEN_SIZE_EXT,&gsize); |
| 1607 | glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_BLUE_SIZE_EXT,&bsize); |
| 1608 | glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_ALPHA_SIZE_EXT,&asize); |
| 1609 | |
| 1610 | log_info("Renderbuffer internal format requested: %s actual: %s sizes: r=%d g=%d b=%d a=%d\n", |
| 1611 | GetGLFormatName( internalFormat ), GetGLFormatName( realInternalFormat ), |
| 1612 | rsize, gsize, bsize, asize ); |
| 1613 | #endif |
| 1614 | |
| 1615 | // Create and bind a framebuffer to render with |
| 1616 | glGenFramebuffersEXT( 1, outFramebuffer ); |
| 1617 | glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, *outFramebuffer ); |
| 1618 | if( err != GL_NO_ERROR ) |
| 1619 | { |
| 1620 | log_error( "ERROR: Unable to bind framebuffer : Error %s\n", |
| 1621 | gluErrorString( err )); |
| 1622 | |
| 1623 | *outError = -1; |
| 1624 | return NULL; |
| 1625 | } |