add texture border width to x/y/zoffset in gl[Copy]TexSubImage*D() functions to accom...
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 30 Mar 2001 21:12:15 +0000 (21:12 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Fri, 30 Mar 2001 21:12:15 +0000 (21:12 +0000)
src/mesa/main/teximage.c

index 6f13cc5..ae1ef01 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: teximage.c,v 1.90 2001/03/30 15:31:44 brianp Exp $ */
+/* $Id: teximage.c,v 1.91 2001/03/30 21:12:15 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -1644,6 +1644,9 @@ _mesa_TexSubImage1D( GLenum target, GLint level,
    if (width == 0 || !pixels)
       return;  /* no-op, not an error */
 
+   /* If we have a border, xoffset=-1 is legal.  Bias by border width */
+   xoffset += texImage->Border;
+
    ASSERT(ctx->Driver.TexSubImage1D);
    (*ctx->Driver.TexSubImage1D)(ctx, target, level, xoffset, width,
                                 format, type, pixels, &ctx->Unpack,
@@ -1688,6 +1691,10 @@ _mesa_TexSubImage2D( GLenum target, GLint level,
    if (width == 0 || height == 0 || !pixels)
       return;  /* no-op, not an error */
 
+   /* If we have a border, xoffset=-1 is legal.  Bias by border width */
+   xoffset += texImage->Border;
+   yoffset += texImage->Border;
+
    ASSERT(ctx->Driver.TexSubImage2D);
    (*ctx->Driver.TexSubImage2D)(ctx, target, level, xoffset, yoffset,
                                 width, height, format, type, pixels,
@@ -1726,6 +1733,11 @@ _mesa_TexSubImage3D( GLenum target, GLint level,
    if (width == 0 || height == 0 || height == 0 || !pixels)
       return;  /* no-op, not an error */
 
+   /* If we have a border, xoffset=-1 is legal.  Bias by border width */
+   xoffset += texImage->Border;
+   yoffset += texImage->Border;
+   zoffset += texImage->Border;
+
    ASSERT(ctx->Driver.TexSubImage3D);
    (*ctx->Driver.TexSubImage3D)(ctx, target, level,
                                 xoffset, yoffset, zoffset,
@@ -1862,6 +1874,9 @@ void
 _mesa_CopyTexSubImage1D( GLenum target, GLint level,
                          GLint xoffset, GLint x, GLint y, GLsizei width )
 {
+   struct gl_texture_unit *texUnit;
+   struct gl_texture_object *texObj;
+   struct gl_texture_image *texImage;
    GLsizei postConvWidth = width;
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
@@ -1876,6 +1891,13 @@ _mesa_CopyTexSubImage1D( GLenum target, GLint level,
                                    xoffset, 0, 0, postConvWidth, 1))
       return;
 
+   texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
+   texObj = _mesa_select_tex_object(ctx, texUnit, target);
+   texImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+
+   /* If we have a border, xoffset=-1 is legal.  Bias by border width */
+   xoffset += texImage->Border;
+
    ASSERT(ctx->Driver.CopyTexSubImage1D);
    (*ctx->Driver.CopyTexSubImage1D)(ctx, target, level, xoffset, x, y, width);
    ctx->NewState |= _NEW_TEXTURE;
@@ -1888,6 +1910,9 @@ _mesa_CopyTexSubImage2D( GLenum target, GLint level,
                          GLint xoffset, GLint yoffset,
                          GLint x, GLint y, GLsizei width, GLsizei height )
 {
+   struct gl_texture_unit *texUnit;
+   struct gl_texture_object *texObj;
+   struct gl_texture_image *texImage;
    GLsizei postConvWidth = width, postConvHeight = height;
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
@@ -1902,6 +1927,14 @@ _mesa_CopyTexSubImage2D( GLenum target, GLint level,
                                    postConvWidth, postConvHeight))
       return;
 
+   texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
+   texObj = _mesa_select_tex_object(ctx, texUnit, target);
+   texImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+
+   /* If we have a border, xoffset=-1 is legal.  Bias by border width */
+   xoffset += texImage->Border;
+   yoffset += texImage->Border;
+
    ASSERT(ctx->Driver.CopyTexSubImage2D);
    (*ctx->Driver.CopyTexSubImage2D)(ctx, target, level,
                                     xoffset, yoffset, x, y, width, height);
@@ -1915,6 +1948,9 @@ _mesa_CopyTexSubImage3D( GLenum target, GLint level,
                          GLint xoffset, GLint yoffset, GLint zoffset,
                          GLint x, GLint y, GLsizei width, GLsizei height )
 {
+   struct gl_texture_unit *texUnit;
+   struct gl_texture_object *texObj;
+   struct gl_texture_image *texImage;
    GLsizei postConvWidth = width, postConvHeight = height;
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
@@ -1929,6 +1965,15 @@ _mesa_CopyTexSubImage3D( GLenum target, GLint level,
                                    zoffset, postConvWidth, postConvHeight))
       return;
 
+   texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
+   texObj = _mesa_select_tex_object(ctx, texUnit, target);
+   texImage = _mesa_select_tex_image(ctx, texUnit, target, level);
+
+   /* If we have a border, xoffset=-1 is legal.  Bias by border width */
+   xoffset += texImage->Border;
+   yoffset += texImage->Border;
+   zoffset += texImage->Border;
+
    ASSERT(ctx->Driver.CopyTexSubImage3D);
    (*ctx->Driver.CopyTexSubImage3D)(ctx, target, level,
                                     xoffset, yoffset, zoffset,