summaryrefslogtreecommitdiffstats
path: root/src/mesa/swrast
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2006-10-22 17:18:50 +0000
committerBrian Paul <[email protected]>2006-10-22 17:18:50 +0000
commit0b26e826bda0da7aeec9a79ee07fe21d54bb1263 (patch)
treecad7fe6571832fc55e6916f024aa1d1365ea410f /src/mesa/swrast
parent919cd2c3ba39bf4d8d2ffcea0daec7bab8645d34 (diff)
Color clamping fixes.
Diffstat (limited to 'src/mesa/swrast')
-rw-r--r--src/mesa/swrast/s_readpix.c16
-rw-r--r--src/mesa/swrast/s_span.c2
2 files changed, 12 insertions, 6 deletions
diff --git a/src/mesa/swrast/s_readpix.c b/src/mesa/swrast/s_readpix.c
index 0189b0e797d..cbfb7712d82 100644
--- a/src/mesa/swrast/s_readpix.c
+++ b/src/mesa/swrast/s_readpix.c
@@ -202,7 +202,8 @@ fast_read_rgba_pixels( GLcontext *ctx,
GLsizei width, GLsizei height,
GLenum format, GLenum type,
GLvoid *pixels,
- const struct gl_pixelstore_attrib *packing )
+ const struct gl_pixelstore_attrib *packing,
+ GLbitfield transferOps)
{
struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
@@ -213,7 +214,7 @@ fast_read_rgba_pixels( GLcontext *ctx,
ASSERT(y + height <= rb->Height);
/* check for things we can't handle here */
- if (ctx->_ImageTransferState ||
+ if (transferOps ||
packing->SwapBytes ||
packing->LsbFirst) {
return GL_FALSE;
@@ -309,15 +310,20 @@ read_rgba_pixels( GLcontext *ctx,
const struct gl_pixelstore_attrib *packing )
{
SWcontext *swrast = SWRAST_CONTEXT(ctx);
- const GLbitfield transferOps = ctx->_ImageTransferState;
+ GLbitfield transferOps = ctx->_ImageTransferState;
struct gl_framebuffer *fb = ctx->ReadBuffer;
struct gl_renderbuffer *rb = fb->_ColorReadBuffer;
ASSERT(rb);
+ if (type == GL_FLOAT && ((ctx->Color.ClampReadColor == GL_TRUE) ||
+ (ctx->Color.ClampReadColor == GL_FIXED_ONLY_ARB &&
+ rb->DataType != GL_FLOAT)))
+ transferOps |= IMAGE_CLAMP_BIT;
+
/* Try optimized path first */
if (fast_read_rgba_pixels(ctx, x, y, width, height,
- format, type, pixels, packing)) {
+ format, type, pixels, packing, transferOps)) {
return; /* done! */
}
@@ -419,7 +425,7 @@ read_rgba_pixels( GLcontext *ctx,
/* pack the row of RGBA pixels into user's buffer */
_mesa_pack_rgba_span_float(ctx, width, rgba, format, type, dst,
- packing, ctx->_ImageTransferState);
+ packing, transferOps);
dst += dstStride;
}
diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c
index ad55e1b10c3..2e20f7a2965 100644
--- a/src/mesa/swrast/s_span.c
+++ b/src/mesa/swrast/s_span.c
@@ -1583,7 +1583,7 @@ _swrast_write_rgba_span( GLcontext *ctx, SWspan *span)
}
/* Clamp color/alpha values over the range [0.0, 1.0] before storage */
- if (ctx->Color.ClampFragmentColor &&
+ if (ctx->Color.ClampFragmentColor == GL_TRUE &&
span->array->ChanType == GL_FLOAT) {
clamp_colors(span);
}