1 /* $Id: s_bitmap.c,v 1.3 2000/11/16 21:05:41 keithw Exp $ */
4 * Mesa 3-D graphics library
7 * Copyright (C) 1999 Brian Paul All Rights Reserved.
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the "Software"),
11 * to deal in the Software without restriction, including without limitation
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
23 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 #include "s_context.h"
43 _swrast_Bitmap( GLcontext
*ctx
, GLint px
, GLint py
,
44 GLsizei width
, GLsizei height
,
45 const struct gl_pixelstore_attrib
*unpack
,
46 const GLubyte
*bitmap
)
48 struct pixel_buffer
*PB
= SWRAST_CONTEXT(ctx
)->PB
;
53 ASSERT(ctx
->RenderMode
== GL_RENDER
);
56 if (SWRAST_CONTEXT(ctx
)->NewState
)
57 _swrast_validate_derived( ctx
);
59 /* Set bitmap drawing color */
60 if (ctx
->Visual
.RGBAflag
) {
62 r
= (GLint
) (ctx
->Current
.RasterColor
[0] * CHAN_MAXF
);
63 g
= (GLint
) (ctx
->Current
.RasterColor
[1] * CHAN_MAXF
);
64 b
= (GLint
) (ctx
->Current
.RasterColor
[2] * CHAN_MAXF
);
65 a
= (GLint
) (ctx
->Current
.RasterColor
[3] * CHAN_MAXF
);
66 PB_SET_COLOR( PB
, r
, g
, b
, a
);
69 PB_SET_INDEX( PB
, ctx
->Current
.RasterIndex
);
72 fragZ
= (GLdepth
) ( ctx
->Current
.RasterPos
[2] * ctx
->Visual
.DepthMaxF
);
74 _mesa_win_fog_coords_from_z( ctx
, 1, &fragZ
, &fogCoord
);
76 for (row
=0; row
<height
; row
++) {
77 const GLubyte
*src
= (const GLubyte
*) _mesa_image_address( unpack
,
78 bitmap
, width
, height
, GL_COLOR_INDEX
, GL_BITMAP
, 0, row
, 0 );
80 if (unpack
->LsbFirst
) {
82 GLubyte mask
= 1U << (unpack
->SkipPixels
& 0x7);
83 for (col
=0; col
<width
; col
++) {
85 PB_WRITE_PIXEL( PB
, px
+col
, py
+row
, fragZ
, fogCoord
);
96 PB_CHECK_FLUSH( ctx
, PB
);
98 /* get ready for next row */
104 GLubyte mask
= 128U >> (unpack
->SkipPixels
& 0x7);
105 for (col
=0; col
<width
; col
++) {
107 PB_WRITE_PIXEL( PB
, px
+col
, py
+row
, fragZ
, fogCoord
);
118 PB_CHECK_FLUSH( ctx
, PB
);
120 /* get ready for next row */