Browse Source

add texture border width to x/y/zoffset in gl[Copy]TexSubImage*D() functions to accomodate negative offsets correctly

tags/mesa_3_5
Brian Paul 24 years ago
parent
commit
347b3f0daf
1 changed files with 46 additions and 1 deletions
  1. 46
    1
      src/mesa/main/teximage.c

+ 46
- 1
src/mesa/main/teximage.c View 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,

Loading…
Cancel
Save