diff options
| author | Brian Paul <brian.paul@tungstengraphics.com> | 2002-02-15 03:41:00 +0000 | 
|---|---|---|
| committer | Brian Paul <brian.paul@tungstengraphics.com> | 2002-02-15 03:41:00 +0000 | 
| commit | 09700ee358cd07634161ac7802e97ddbe6c075bf (patch) | |
| tree | fdeae4f47ffaaa23ecccb74556195c9e15a289ab /src | |
| parent | a048da076711e38829402418d1d96acfaa8360ee (diff) | |
added alternate glBitmap code (disabled)
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/swrast/s_bitmap.c | 113 | 
1 files changed, 112 insertions, 1 deletions
| diff --git a/src/mesa/swrast/s_bitmap.c b/src/mesa/swrast/s_bitmap.c index 13ca3849aa..ea148797b5 100644 --- a/src/mesa/swrast/s_bitmap.c +++ b/src/mesa/swrast/s_bitmap.c @@ -1,4 +1,4 @@ -/* $Id: s_bitmap.c,v 1.14 2002/02/02 17:24:11 brianp Exp $ */ +/* $Id: s_bitmap.c,v 1.15 2002/02/15 03:41:00 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -24,6 +24,11 @@   * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.   */ +/** + * \file swrast/s_bitmap.c + * \brief glBitmap rendering. + * \author Brian Paul + */  #include "glheader.h"  #include "image.h" @@ -144,3 +149,109 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py,     RENDER_FINISH(swrast,ctx);  } + + +#if 0 +/* + * XXX this is another way to implement Bitmap.  Use horizontal runs of + * 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, +		const struct gl_pixelstore_attrib *unpack, +		const GLubyte *bitmap ) +{ +   SWcontext *swrast = SWRAST_CONTEXT(ctx); +   GLint row, col; +   struct sw_span span; + +   ASSERT(ctx->RenderMode == GL_RENDER); +   ASSERT(bitmap); + +   RENDER_START(swrast,ctx); + +   if (SWRAST_CONTEXT(ctx)->NewState) +      _swrast_validate_derived( ctx ); + +   INIT_SPAN(span); +   span.arrayMask |= SPAN_MASK;  /* we'll init span.mask[] */ +   span.x = px; +   span.y = py; +   span.end = width; +   if (ctx->Visual.rgbMode) { +      span.interpMask |= SPAN_RGBA; +      span.red   = FloatToFixed(ctx->Current.RasterColor[0] * CHAN_MAXF); +      span.green = FloatToFixed(ctx->Current.RasterColor[1] * CHAN_MAXF); +      span.blue  = FloatToFixed(ctx->Current.RasterColor[2] * CHAN_MAXF); +      span.alpha = FloatToFixed(ctx->Current.RasterColor[3] * CHAN_MAXF); +      span.redStep = span.greenStep = span.blueStep = span.alphaStep = 0; +   } +   else { +      span.interpMask |= SPAN_INDEX; +      span.index = ChanToFixed(ctx->Current.RasterIndex); +      span.indexStep = 0; +   } + +   if (ctx->Depth.Test) +      _mesa_span_default_z(ctx, &span); +   if (ctx->Fog.Enabled) +      _mesa_span_default_fog(ctx, &span); + +   for (row=0; row<height; row++, span.y++) { +      const GLubyte *src = (const GLubyte *) _mesa_image_address( unpack, +                 bitmap, width, height, GL_COLOR_INDEX, GL_BITMAP, 0, row, 0 ); + +      if (unpack->LsbFirst) { +         /* Lsb first */ +         GLubyte mask = 1U << (unpack->SkipPixels & 0x7); +         for (col=0; col<width; col++) { +            span.mask[col] = (*src & mask) ? GL_TRUE : GL_FALSE; +            if (mask == 128U) { +               src++; +               mask = 1U; +            } +            else { +               mask = mask << 1; +            } +         } + +         if (ctx->Visual.rgbMode) +            _mesa_write_rgba_span(ctx, &span, GL_BITMAP); +         else +            _mesa_write_index_span(ctx, &span, GL_BITMAP); + +         /* get ready for next row */ +         if (mask != 1) +            src++; +      } +      else { +         /* Msb first */ +         GLubyte mask = 128U >> (unpack->SkipPixels & 0x7); +         for (col=0; col<width; col++) { +            span.mask[col] = (*src & mask) ? GL_TRUE : GL_FALSE; +            if (mask == 1U) { +               src++; +               mask = 128U; +            } +            else { +               mask = mask >> 1; +            } +         } + +         if (ctx->Visual.rgbMode) +            _mesa_write_rgba_span(ctx, &span, GL_BITMAP); +         else +            _mesa_write_index_span(ctx, &span, GL_BITMAP); + +         /* get ready for next row */ +         if (mask != 128) +            src++; +      } +   } + +   RENDER_FINISH(swrast,ctx); +} +#endif | 
