diff options
author | Brian <brian.paul@tungstengraphics.com> | 2007-11-03 09:39:12 -0600 |
---|---|---|
committer | Brian <brian.paul@tungstengraphics.com> | 2007-11-05 08:04:48 -0700 |
commit | e49efdab4a05d41f4b2f0bf989cdf036ab25879c (patch) | |
tree | a0bb31ed5dfaf90683cb142b8e26e2f572bc73fa /src/mesa/state_tracker/st_framebuffer.c | |
parent | bffed01e272b9a848aa7980ae72ae291d2677d05 (diff) |
st_create_framebuffer() working
Diffstat (limited to 'src/mesa/state_tracker/st_framebuffer.c')
-rw-r--r-- | src/mesa/state_tracker/st_framebuffer.c | 47 |
1 files changed, 17 insertions, 30 deletions
diff --git a/src/mesa/state_tracker/st_framebuffer.c b/src/mesa/state_tracker/st_framebuffer.c index 3997681f36..18669712c2 100644 --- a/src/mesa/state_tracker/st_framebuffer.c +++ b/src/mesa/state_tracker/st_framebuffer.c @@ -28,8 +28,11 @@ #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; |