st_create_framebuffer() working
authorBrian <brian.paul@tungstengraphics.com>
Sat, 3 Nov 2007 15:39:12 +0000 (09:39 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Mon, 5 Nov 2007 15:04:48 +0000 (08:04 -0700)
src/mesa/state_tracker/st_framebuffer.c

index 3997681..1866971 100644 (file)
 
 #include "main/imports.h"
 #include "main/context.h"
+#include "main/framebuffer.h"
+#include "main/renderbuffer.h"
 #include "st_public.h"
 #include "st_context.h"
+#include "st_cb_fbo.h"
 
 
 struct st_framebuffer *st_create_framebuffer( const __GLcontextModes *visual )
@@ -37,64 +40,48 @@ struct st_framebuffer *st_create_framebuffer( const __GLcontextModes *visual )
    struct st_framebuffer *stfb
       = CALLOC_STRUCT(st_framebuffer);
    if (stfb) {
+      GLboolean swStencil = (visual->stencilBits > 0 &&
+                             visual->depthBits != 24);
+      GLenum rgbFormat = (visual->redBits == 5 ? GL_RGB5 : GL_RGBA8);
 
-#if 0
-      /* from intel driver... */
-
-      GLboolean swStencil = (mesaVis->stencilBits > 0 &&
-                             mesaVis->depthBits != 24);
-      GLenum rgbFormat = (mesaVis->redBits == 5 ? GL_RGB5 : GL_RGBA8);
-
-      struct intel_framebuffer *intel_fb = CALLOC_STRUCT(intel_framebuffer);
-      if (!intel_fb)
-        return GL_FALSE;
-
-      _mesa_initialize_framebuffer(&intel_fb->Base, mesaVis);
-
-      /*
-       * XXX Create pipe_surfaces for front/back buffers,
-       * hand them to state tracker to create a framebuffer object.
-       */
+      _mesa_initialize_framebuffer(&stfb->Base, visual);
 
       {
         /* fake frontbuffer */
         /* XXX allocation should only happen in the unusual case
             it's actually needed */
          struct gl_renderbuffer *rb = st_new_renderbuffer_fb(rgbFormat);
-         _mesa_add_renderbuffer(&intel_fb->Base, BUFFER_FRONT_LEFT, rb);
+         _mesa_add_renderbuffer(&stfb->Base, BUFFER_FRONT_LEFT, rb);
       }
 
-      if (mesaVis->doubleBufferMode) {
+      if (visual->doubleBufferMode) {
          struct gl_renderbuffer *rb = st_new_renderbuffer_fb(rgbFormat);
-         _mesa_add_renderbuffer(&intel_fb->Base, BUFFER_BACK_LEFT, rb);
+         _mesa_add_renderbuffer(&stfb->Base, BUFFER_BACK_LEFT, rb);
       }
 
-      if (mesaVis->depthBits == 24 && mesaVis->stencilBits == 8) {
+      if (visual->depthBits == 24 && visual->stencilBits == 8) {
          /* combined depth/stencil buffer */
          struct gl_renderbuffer *depthStencilRb
             = st_new_renderbuffer_fb(GL_DEPTH24_STENCIL8_EXT);
          /* note: bind RB to two attachment points */
-         _mesa_add_renderbuffer(&intel_fb->Base, BUFFER_DEPTH, depthStencilRb);
-         _mesa_add_renderbuffer(&intel_fb->Base, BUFFER_STENCIL,depthStencilRb);
+         _mesa_add_renderbuffer(&stfb->Base, BUFFER_DEPTH, depthStencilRb);
+         _mesa_add_renderbuffer(&stfb->Base, BUFFER_STENCIL,depthStencilRb);
       }
-      else if (mesaVis->depthBits == 16) {
+      else if (visual->depthBits == 16) {
          /* just 16-bit depth buffer, no hw stencil */
          struct gl_renderbuffer *depthRb
             = st_new_renderbuffer_fb(GL_DEPTH_COMPONENT16);
-         _mesa_add_renderbuffer(&intel_fb->Base, BUFFER_DEPTH, depthRb);
+         _mesa_add_renderbuffer(&stfb->Base, BUFFER_DEPTH, depthRb);
       }
 
 
       /* now add any/all software-based renderbuffers we may need */
-      _mesa_add_soft_renderbuffers(&intel_fb->Base,
+      _mesa_add_soft_renderbuffers(&stfb->Base,
                                    GL_FALSE, /* never sw color */
                                    GL_FALSE, /* never sw depth */
-                                   swStencil, mesaVis->accumRedBits > 0,
+                                   swStencil, visual->accumRedBits > 0,
                                    GL_FALSE, /* never sw alpha */
                                    GL_FALSE  /* never sw aux */ );
-      driDrawPriv->driverPrivate = (void *) intel_fb;
-
-#endif
 
    }
    return stfb;