X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fswrast%2Fs_bitmap.c;h=8bd9854f0ca9bf68df1238ddfd896e5126df673e;hb=7576b9b19d433f90c7f9daae01888e7bfea7e7b9;hp=6757fa496cab2cd537107ad334d728e4be565a62;hpb=983bc3e018ad6a36f0feeac70974cb30a90698b8;p=mesa.git diff --git a/src/mesa/swrast/s_bitmap.c b/src/mesa/swrast/s_bitmap.c index 6757fa496ca..8bd9854f0ca 100644 --- a/src/mesa/swrast/s_bitmap.c +++ b/src/mesa/swrast/s_bitmap.c @@ -1,10 +1,8 @@ -/* $Id: s_bitmap.c,v 1.16 2002/02/17 17:30:23 brianp Exp $ */ - /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 6.1 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -33,7 +31,6 @@ #include "glheader.h" #include "image.h" #include "macros.h" -#include "mmath.h" #include "pixel.h" #include "s_context.h" @@ -56,16 +53,23 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, struct sw_span span; ASSERT(ctx->RenderMode == GL_RENDER); - ASSERT(bitmap); + + bitmap = (const GLubyte *) _swrast_validate_pbo_access(unpack, width, + height, 1, + GL_COLOR_INDEX, GL_BITMAP, + (GLvoid *) bitmap); + if (!bitmap) { + /* XXX GL_INVALID_OPERATION? */ + return; + } RENDER_START(swrast,ctx); if (SWRAST_CONTEXT(ctx)->NewState) _swrast_validate_derived( ctx ); - INIT_SPAN(span); - span.arrayMask |= SPAN_XY; - span.end = width; + INIT_SPAN(span, GL_BITMAP, width, 0, SPAN_XY); + if (ctx->Visual.rgbMode) { span.interpMask |= SPAN_RGBA; span.red = FloatToFixed(ctx->Current.RasterColor[0] * CHAN_MAXF); @@ -76,14 +80,16 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, } else { span.interpMask |= SPAN_INDEX; - span.index = ChanToFixed(ctx->Current.RasterIndex); + span.index = FloatToFixed(ctx->Current.RasterIndex); span.indexStep = 0; } if (ctx->Depth.Test) - _mesa_span_default_z(ctx, &span); + _swrast_span_default_z(ctx, &span); if (ctx->Fog.Enabled) - _mesa_span_default_fog(ctx, &span); + _swrast_span_default_fog(ctx, &span); + if (ctx->Texture._EnabledCoordUnits) + _swrast_span_default_texcoords(ctx, &span); for (row = 0; row < height; row++, span.y++) { const GLubyte *src = (const GLubyte *) _mesa_image_address( unpack, @@ -94,8 +100,8 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, GLubyte mask = 1U << (unpack->SkipPixels & 0x7); for (col = 0; col < width; col++) { if (*src & mask) { - span.xArray[count] = px + col; - span.yArray[count] = py + row; + span.array->x[count] = px + col; + span.array->y[count] = py + row; count++; } if (mask == 128U) { @@ -116,8 +122,8 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, GLubyte mask = 128U >> (unpack->SkipPixels & 0x7); for (col = 0; col < width; col++) { if (*src & mask) { - span.xArray[count] = px + col; - span.yArray[count] = py + row; + span.array->x[count] = px + col; + span.array->y[count] = py + row; count++; } if (mask == 1U) { @@ -138,9 +144,9 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, /* flush the span */ span.end = count; if (ctx->Visual.rgbMode) - _mesa_write_rgba_span(ctx, &span, GL_BITMAP); + _swrast_write_rgba_span(ctx, &span); else - _mesa_write_index_span(ctx, &span, GL_BITMAP); + _swrast_write_index_span(ctx, &span); span.end = 0; count = 0; } @@ -156,7 +162,6 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, * fragments, initializing the mask array to indicate which fragmens to * draw or skip. */ - void _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, GLsizei width, GLsizei height, @@ -175,11 +180,12 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, if (SWRAST_CONTEXT(ctx)->NewState) _swrast_validate_derived( ctx ); - INIT_SPAN(span); - span.arrayMask |= SPAN_MASK; /* we'll init span.mask[] */ + INIT_SPAN(span, GL_BITMAP, width, 0, SPAN_MASK); + + /*span.arrayMask |= SPAN_MASK;*/ /* we'll init span.mask[] */ span.x = px; span.y = py; - span.end = width; + /*span.end = width;*/ if (ctx->Visual.rgbMode) { span.interpMask |= SPAN_RGBA; span.red = FloatToFixed(ctx->Current.RasterColor[0] * CHAN_MAXF); @@ -190,14 +196,16 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, } else { span.interpMask |= SPAN_INDEX; - span.index = ChanToFixed(ctx->Current.RasterIndex); + span.index = FloatToFixed(ctx->Current.RasterIndex); span.indexStep = 0; } if (ctx->Depth.Test) - _mesa_span_default_z(ctx, &span); + _swrast_span_default_z(ctx, &span); if (ctx->Fog.Enabled) - _mesa_span_default_fog(ctx, &span); + _swrast_span_default_fog(ctx, &span); + if (ctx->Texture._EnabledCoordUnits) + _swrast_span_default_texcoords(ctx, &span); for (row=0; rowSkipPixels & 0x7); for (col=0; colmask[col] = (*src & mask) ? GL_TRUE : GL_FALSE; if (mask == 128U) { src++; mask = 1U; @@ -218,9 +226,9 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, } if (ctx->Visual.rgbMode) - _mesa_write_rgba_span(ctx, &span, GL_BITMAP); + _swrast_write_rgba_span(ctx, &span); else - _mesa_write_index_span(ctx, &span, GL_BITMAP); + _swrast_write_index_span(ctx, &span); /* get ready for next row */ if (mask != 1) @@ -230,7 +238,7 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, /* Msb first */ GLubyte mask = 128U >> (unpack->SkipPixels & 0x7); for (col=0; colmask[col] = (*src & mask) ? GL_TRUE : GL_FALSE; if (mask == 1U) { src++; mask = 128U; @@ -241,9 +249,9 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py, } if (ctx->Visual.rgbMode) - _mesa_write_rgba_span(ctx, &span, GL_BITMAP); + _swrast_write_rgba_span(ctx, &span); else - _mesa_write_index_span(ctx, &span, GL_BITMAP); + _swrast_write_index_span(ctx, &span); /* get ready for next row */ if (mask != 128)