sketch out some render-to-texture code
authorBrian <brian.paul@tungstengraphics.com>
Fri, 10 Aug 2007 17:17:26 +0000 (11:17 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Fri, 10 Aug 2007 17:17:26 +0000 (11:17 -0600)
src/mesa/state_tracker/st_cb_fbo.c

index bee7474e388886af51353543314223ba4fca0d9d..99c00916f4810298d885508c7284fb67444ed0f6 100644 (file)
@@ -43,7 +43,9 @@
 #include "pipe/p_defines.h"
 #include "st_context.h"
 #include "st_cb_fbo.h"
+#include "st_cb_texture.h"
 #include "st_format.h"
+#include "st_public.h"
 
 
 
@@ -281,10 +283,17 @@ st_render_texture(GLcontext *ctx,
                   struct gl_renderbuffer_attachment *att)
 {
    struct st_context *st = ctx->st;
+   struct pipe_context *pipe = st->pipe;
    struct pipe_framebuffer_state framebuffer;
    struct pipe_surface *texsurface;
+   struct pipe_mipmap_tree *mt;
 
-   texsurface = NULL;  /* find the mipmap level, cube face, etc */
+   mt = st_get_texobj_mipmap_tree(att->Texture);
+
+   texsurface = pipe->get_tex_surface(pipe, mt,
+                                      att->CubeMapFace,
+                                      att->TextureLevel,
+                                      att->Zoffset);
 
    /*
     * XXX basically like this... set the current color (or depth)
@@ -308,7 +317,12 @@ static void
 st_finish_render_texture(GLcontext *ctx,
                          struct gl_renderbuffer_attachment *att)
 {
-   /* restore drawing to normal framebuffer. may be a no-op */
+   struct st_renderbuffer *strb = st_renderbuffer(att->Renderbuffer);
+
+   pipe_surface_unreference(&strb->surface);
+
+   /* restore previous framebuffer state */
+   st_invalidate_state(ctx, _NEW_BUFFERS);
 }