sync with texmem branch
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 15 Mar 2006 17:48:00 +0000 (17:48 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 15 Mar 2006 17:48:00 +0000 (17:48 +0000)
src/mesa/main/dd.h
src/mesa/main/fbobject.c
src/mesa/main/fbobject.h

index 0df8cfa5b5daa63cde1f1e23fcaa4324b6d56f43..6af304fe26a27b26b424462f30e4af88f4f2a80c 100644 (file)
@@ -801,6 +801,8 @@ struct dd_function_table {
    /*@{*/
    struct gl_framebuffer * (*NewFramebuffer)(GLcontext *ctx, GLuint name);
    struct gl_renderbuffer * (*NewRenderbuffer)(GLcontext *ctx, GLuint name);
+   void (*BindFramebuffer)(GLcontext *ctx, GLenum target,
+                           struct gl_framebuffer *fb);
    void (*FramebufferRenderbuffer)(GLcontext *ctx, 
                                    struct gl_framebuffer *fb,
                                    GLenum attachment,
index 749115a799d33c866782949d25d801991c6d6575..8c428f8a2590da9f4a4f3257e6b7500fa4f9d740 100644 (file)
@@ -653,11 +653,14 @@ _mesa_GenRenderbuffersEXT(GLsizei n, GLuint *renderbuffers)
 /**
  * Given an internal format token for a render buffer, return the
  * corresponding base format.
+ * This is very similar to _mesa_base_tex_format() but the set of valid
+ * internal formats is somewhat different.
+ *
  * \return one of GL_RGB, GL_RGBA, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT
  *  GL_DEPTH_STENCIL_EXT or zero if error.
  */
-static GLenum
-base_internal_format(GLcontext *ctx, GLenum internalFormat)
+GLenum
+_mesa_base_fbo_format(GLcontext *ctx, GLenum internalFormat)
 {
    switch (internalFormat) {
    case GL_RGB:
@@ -717,7 +720,7 @@ _mesa_RenderbufferStorageEXT(GLenum target, GLenum internalFormat,
       return;
    }
 
-   baseFormat = base_internal_format(ctx, internalFormat);
+   baseFormat = _mesa_base_fbo_format(ctx, internalFormat);
    if (baseFormat == 0) {
       _mesa_error(ctx, GL_INVALID_ENUM,
                   "glRenderbufferStorageEXT(internalFormat)");
@@ -973,6 +976,10 @@ _mesa_BindFramebufferEXT(GLenum target, GLuint framebuffer)
       }
       ctx->DrawBuffer = newFb;
    }
+
+   if (ctx->Driver.BindFramebuffer) {
+      ctx->Driver.BindFramebuffer(ctx, target, newFb);
+   }
 }
 
 
index 71517adfd89fac97500b8fc0f4602003346e248c..3171aa7b1b96144e1736ca3fc5b1efe765985763 100644 (file)
@@ -54,6 +54,9 @@ _mesa_framebuffer_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb,
 extern void
 _mesa_test_framebuffer_completeness(GLcontext *ctx, struct gl_framebuffer *fb);
 
+extern GLenum
+_mesa_base_fbo_format(GLcontext *ctx, GLenum internalFormat);
+
 extern GLboolean GLAPIENTRY
 _mesa_IsRenderbufferEXT(GLuint renderbuffer);