# HG changeset patch # User nkeynes # Date 1217732127 0 # Node ID eb5c0d1863cd937d8be25a2e5326b382abc09952 # Parent 3bb52a384b640410019b3ed48ed76ff5fd04ead6 Check the MAX_COLOR_ATTACHMENTS value rather than assuming it's at least 4, since it may in fact be less. --- a/src/drivers/gl_fbo.c Fri Aug 01 03:58:25 2008 +0000 +++ b/src/drivers/gl_fbo.c Sun Aug 03 02:55:27 2008 +0000 @@ -33,7 +33,7 @@ #ifdef HAVE_OPENGL_FBO #define MAX_FRAMEBUFFERS 2 -#define MAX_TEXTURES_PER_FB 4 +#define MAX_TEXTURES_PER_FB 16 static render_buffer_t gl_fbo_create_render_buffer( uint32_t width, uint32_t height ); static void gl_fbo_destroy_render_buffer( render_buffer_t buffer ); @@ -56,10 +56,10 @@ int width, height; }; +static GLint gl_fbo_max_attachments = 0; static struct gl_fbo_info fbo[MAX_FRAMEBUFFERS]; -const static int ATTACHMENT_POINTS[MAX_TEXTURES_PER_FB] = { - GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT, - GL_COLOR_ATTACHMENT2_EXT, GL_COLOR_ATTACHMENT3_EXT }; + +#define ATTACHMENT_POINT(n) (GL_COLOR_ATTACHMENT0_EXT+(n)) static int last_used_fbo; gboolean gl_fbo_is_supported() @@ -77,6 +77,7 @@ GLuint fbids[MAX_FRAMEBUFFERS]; GLuint rbids[MAX_FRAMEBUFFERS*2]; /* depth buffer, stencil buffer per fb */ + glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &gl_fbo_max_attachments); glGenFramebuffersEXT( MAX_FRAMEBUFFERS, &fbids[0] ); glGenRenderbuffersEXT( MAX_FRAMEBUFFERS*2, &rbids[0] ); for( i=0; ibuf_id ) { glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo[i].fb_id); - glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, ATTACHMENT_POINTS[j], + glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, ATTACHMENT_POINT(j), GL_TEXTURE_RECTANGLE_ARB, GL_NONE, 0 ); fbo[i].tex_ids[j] = -1; }