added alternate glBitmap code (disabled)
This commit is contained in:
+112
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user