More GLchan color channel changes.
Some header file re-org: Move matrix, vertex buffer structs to types.h to fix #include mess. Remove typedef, extern declarations from config.h
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* $Id: attrib.c,v 1.29 2000/10/28 18:34:48 brianp Exp $ */
|
||||
/* $Id: attrib.c,v 1.30 2000/10/29 18:12:14 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -34,6 +34,7 @@
|
||||
#include "context.h"
|
||||
#include "enable.h"
|
||||
#include "enums.h"
|
||||
#include "matrix.h"
|
||||
#include "mem.h"
|
||||
#include "simple_list.h"
|
||||
#include "texstate.h"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: colormac.h,v 1.1 2000/10/28 20:41:13 brianp Exp $ */
|
||||
/* $Id: colormac.h,v 1.2 2000/10/29 18:12:14 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -175,12 +175,20 @@ do { \
|
||||
|
||||
#define FLOAT_TO_CHAN(f) (f)
|
||||
#define DOUBLE_TO_CHAN(f) ((GLfloat) (f))
|
||||
#define UNCLAMPED_FLOAT_TO_CHAN(f) (f)
|
||||
#define UNCLAMPED_DOUBLE_TO_CHAN(f) ((GLfloat) (f))
|
||||
|
||||
#else
|
||||
|
||||
#define FLOAT_TO_CHAN(f) ( (GLchan) FloatToInt((f) * CHAN_MAXF + 0.5F) )
|
||||
#define DOUBLE_TO_CHAN(f) ( (GLchan) FloatToInt((f) * CHAN_MAXF + 0.5F) )
|
||||
|
||||
#define UNCLAMPED_FLOAT_TO_CHAN(f) \
|
||||
( (GLchan) FloatToInt( CLAMP(f, 0.0, 1.0) * CHAN_MAXF + 0.5F) )
|
||||
|
||||
#define UNCLAMPED_DOUBLE_TO_CHAN(f) \
|
||||
( (GLchan) FloatToInt( CLAMP(f, 0.0, 1.0) * CHAN_MAXF + 0.5F) )
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: colortab.c,v 1.22 2000/10/28 18:34:48 brianp Exp $ */
|
||||
/* $Id: colortab.c,v 1.23 2000/10/29 18:12:14 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -422,10 +422,10 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat,
|
||||
gl_error(ctx, GL_OUT_OF_MEMORY, "glColorTable");
|
||||
return;
|
||||
}
|
||||
_mesa_unpack_ubyte_color_span(ctx, width, table->Format,
|
||||
table->Table, /* dest */
|
||||
format, type, data,
|
||||
&ctx->Unpack, 0);
|
||||
_mesa_unpack_chan_color_span(ctx, width, table->Format,
|
||||
table->Table, /* dest */
|
||||
format, type, data,
|
||||
&ctx->Unpack, 0);
|
||||
} /* floatTable */
|
||||
} /* proxy */
|
||||
|
||||
@@ -536,8 +536,8 @@ _mesa_ColorSubTable( GLenum target, GLsizei start,
|
||||
|
||||
if (!table->FloatTable) {
|
||||
GLchan *dest = (GLchan *) table->Table + start * comps * sizeof(GLchan);
|
||||
_mesa_unpack_ubyte_color_span(ctx, count, table->Format, dest,
|
||||
format, type, data, &ctx->Unpack, 0);
|
||||
_mesa_unpack_chan_color_span(ctx, count, table->Format, dest,
|
||||
format, type, data, &ctx->Unpack, 0);
|
||||
}
|
||||
else {
|
||||
GLfloat tempTab[MAX_COLOR_TABLE_SIZE * 4];
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: config.h,v 1.21 2000/10/28 20:41:13 brianp Exp $ */
|
||||
/* $Id: config.h,v 1.22 2000/10/29 18:12:14 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -162,24 +162,6 @@
|
||||
* Bits per color channel (must be 8 at this time!)
|
||||
*/
|
||||
#define CHAN_BITS 8
|
||||
#if CHAN_BITS == 8
|
||||
typedef GLubyte GLchan;
|
||||
#define CHAN_MAX 255
|
||||
#define CHAN_MAXF 255.0F
|
||||
#elif CHAN_BITS == 16
|
||||
typedef GLushort GLchan;
|
||||
#define CHAN_MAX 65535
|
||||
#define CHAN_MAXF 65535.0F
|
||||
#elif CHAN_BITS == 32
|
||||
typedef GLfloat GLchan;
|
||||
#define CHAN_MAX 1.0
|
||||
#define CHAN_MAXF 1.0F
|
||||
#else
|
||||
#error illegal number of color channel bits
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
@@ -215,13 +197,12 @@
|
||||
#define VB_SIZE (VB_MAX + VB_MAX_CLIPPED_VERTS)
|
||||
|
||||
|
||||
typedef struct __GLcontextRec GLcontext;
|
||||
|
||||
extern void
|
||||
gl_read_config_file(GLcontext *ctx);
|
||||
|
||||
extern void
|
||||
gl_register_config_var(const char *name, void (*notify)( const char *, int ));
|
||||
/* Some compilers don't like some of Mesa's const usage */
|
||||
#ifdef NO_CONST
|
||||
# define CONST
|
||||
#else
|
||||
# define CONST const
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: context.h,v 1.19 2000/09/26 20:53:53 brianp Exp $ */
|
||||
/* $Id: context.h,v 1.20 2000/10/29 18:12:14 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -235,4 +235,11 @@ _mesa_Flush( void );
|
||||
|
||||
|
||||
|
||||
extern void
|
||||
gl_read_config_file(GLcontext *ctx);
|
||||
|
||||
extern void
|
||||
gl_register_config_var(const char *name, void (*notify)( const char *, int ));
|
||||
|
||||
|
||||
#endif
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: dd.h,v 1.34 2000/10/28 18:34:48 brianp Exp $ */
|
||||
/* $Id: dd.h,v 1.35 2000/10/29 18:12:14 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -29,20 +29,16 @@
|
||||
#ifndef DD_INCLUDED
|
||||
#define DD_INCLUDED
|
||||
|
||||
|
||||
#include "macros.h"
|
||||
/* THIS FILE ONLY INCLUDED BY types.h !!!!! */
|
||||
|
||||
|
||||
struct gl_pixelstore_attrib;
|
||||
|
||||
|
||||
struct vertex_buffer;
|
||||
struct immediate;
|
||||
struct gl_pipeline;
|
||||
struct gl_pipeline_stage;
|
||||
|
||||
|
||||
/* THIS FILE ONLY INCLUDED BY types.h !!!!! */
|
||||
|
||||
|
||||
/*
|
||||
* Device Driver (DD) interface
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: drawpix.c,v 1.40 2000/10/28 20:41:13 brianp Exp $ */
|
||||
/* $Id: drawpix.c,v 1.41 2000/10/29 18:12:15 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -106,8 +106,8 @@ fast_draw_pixels(GLcontext *ctx, GLint x, GLint y,
|
||||
GLenum format, GLenum type, const GLvoid *pixels)
|
||||
{
|
||||
const struct gl_pixelstore_attrib *unpack = &ctx->Unpack;
|
||||
GLubyte rgb[MAX_WIDTH][3];
|
||||
GLubyte rgba[MAX_WIDTH][4];
|
||||
GLchan rgb[MAX_WIDTH][3];
|
||||
GLchan rgba[MAX_WIDTH][4];
|
||||
|
||||
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH_WITH_RETVAL(ctx, "glDrawPixels",
|
||||
GL_FALSE);
|
||||
@@ -210,10 +210,10 @@ fast_draw_pixels(GLcontext *ctx, GLint x, GLint y,
|
||||
* skip "skipRows" rows and skip "skipPixels" pixels/row.
|
||||
*/
|
||||
|
||||
if (format==GL_RGBA && type==GL_UNSIGNED_BYTE
|
||||
if (format == GL_RGBA && type == CHAN_TYPE
|
||||
&& ctx->ImageTransferState==0) {
|
||||
if (ctx->Visual.RGBAflag) {
|
||||
GLubyte *src = (GLubyte *) pixels
|
||||
GLchan *src = (GLchan *) pixels
|
||||
+ (skipRows * rowLength + skipPixels) * 4;
|
||||
if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==1.0F) {
|
||||
/* no zooming */
|
||||
@@ -248,10 +248,10 @@ fast_draw_pixels(GLcontext *ctx, GLint x, GLint y,
|
||||
}
|
||||
return GL_TRUE;
|
||||
}
|
||||
else if (format==GL_RGB && type==GL_UNSIGNED_BYTE
|
||||
&& ctx->ImageTransferState==0) {
|
||||
else if (format == GL_RGB && type == CHAN_TYPE
|
||||
&& ctx->ImageTransferState == 0) {
|
||||
if (ctx->Visual.RGBAflag) {
|
||||
GLubyte *src = (GLubyte *) pixels
|
||||
GLchan *src = (GLchan *) pixels
|
||||
+ (skipRows * rowLength + skipPixels) * 3;
|
||||
if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==1.0F) {
|
||||
GLint row;
|
||||
@@ -285,10 +285,10 @@ fast_draw_pixels(GLcontext *ctx, GLint x, GLint y,
|
||||
}
|
||||
return GL_TRUE;
|
||||
}
|
||||
else if (format==GL_LUMINANCE && type==GL_UNSIGNED_BYTE
|
||||
else if (format == GL_LUMINANCE && type == CHAN_TYPE
|
||||
&& ctx->ImageTransferState==0) {
|
||||
if (ctx->Visual.RGBAflag) {
|
||||
GLubyte *src = (GLubyte *) pixels
|
||||
GLchan *src = (GLchan *) pixels
|
||||
+ (skipRows * rowLength + skipPixels);
|
||||
if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==1.0F) {
|
||||
/* no zooming */
|
||||
@@ -344,10 +344,10 @@ fast_draw_pixels(GLcontext *ctx, GLint x, GLint y,
|
||||
}
|
||||
return GL_TRUE;
|
||||
}
|
||||
else if (format==GL_LUMINANCE_ALPHA && type==GL_UNSIGNED_BYTE
|
||||
&& ctx->ImageTransferState==0) {
|
||||
else if (format == GL_LUMINANCE_ALPHA && type == CHAN_TYPE
|
||||
&& ctx->ImageTransferState == 0) {
|
||||
if (ctx->Visual.RGBAflag) {
|
||||
GLubyte *src = (GLubyte *) pixels
|
||||
GLchan *src = (GLchan *) pixels
|
||||
+ (skipRows * rowLength + skipPixels)*2;
|
||||
if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==1.0F) {
|
||||
/* no zooming */
|
||||
@@ -355,7 +355,7 @@ fast_draw_pixels(GLcontext *ctx, GLint x, GLint y,
|
||||
ASSERT(drawWidth < MAX_WIDTH);
|
||||
for (row=0; row<drawHeight; row++) {
|
||||
GLint i;
|
||||
GLubyte *ptr = src;
|
||||
GLchan *ptr = src;
|
||||
for (i=0;i<drawWidth;i++) {
|
||||
rgba[i][0] = *ptr;
|
||||
rgba[i][1] = *ptr;
|
||||
@@ -374,7 +374,7 @@ fast_draw_pixels(GLcontext *ctx, GLint x, GLint y,
|
||||
ASSERT(drawWidth < MAX_WIDTH);
|
||||
for (row=0; row<drawHeight; row++) {
|
||||
GLint i;
|
||||
GLubyte *ptr = src;
|
||||
GLchan *ptr = src;
|
||||
for (i=0;i<drawWidth;i++) {
|
||||
rgba[i][0] = *ptr;
|
||||
rgba[i][1] = *ptr;
|
||||
@@ -392,7 +392,7 @@ fast_draw_pixels(GLcontext *ctx, GLint x, GLint y,
|
||||
GLint row;
|
||||
ASSERT(drawWidth < MAX_WIDTH);
|
||||
for (row=0; row<drawHeight; row++) {
|
||||
GLubyte *ptr = src;
|
||||
GLchan *ptr = src;
|
||||
GLint i;
|
||||
for (i=0;i<drawWidth;i++) {
|
||||
rgba[i][0] = *ptr;
|
||||
@@ -420,7 +420,7 @@ fast_draw_pixels(GLcontext *ctx, GLint x, GLint y,
|
||||
ASSERT(drawWidth < MAX_WIDTH);
|
||||
_mesa_map_ci8_to_rgba(ctx, drawWidth, src, rgba);
|
||||
(*ctx->Driver.WriteRGBASpan)(ctx, drawWidth, destX, destY,
|
||||
(const GLubyte (*)[4])rgba,
|
||||
(const GLchan (*)[4]) rgba,
|
||||
NULL);
|
||||
src += rowLength;
|
||||
destY++;
|
||||
@@ -435,7 +435,7 @@ fast_draw_pixels(GLcontext *ctx, GLint x, GLint y,
|
||||
_mesa_map_ci8_to_rgba(ctx, drawWidth, src, rgba);
|
||||
destY--;
|
||||
(*ctx->Driver.WriteRGBASpan)(ctx, drawWidth, destX, destY,
|
||||
(const GLubyte (*)[4])rgba,
|
||||
(const GLchan (*)[4]) rgba,
|
||||
NULL);
|
||||
src += rowLength;
|
||||
}
|
||||
@@ -597,7 +597,7 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
|
||||
const GLboolean bias_or_scale = ctx->Pixel.DepthBias!=0.0 || ctx->Pixel.DepthScale!=1.0;
|
||||
const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
|
||||
const GLint desty = y;
|
||||
GLubyte rgba[MAX_WIDTH][4];
|
||||
GLchan rgba[MAX_WIDTH][4];
|
||||
GLuint ispan[MAX_WIDTH];
|
||||
GLint drawWidth = (width > MAX_WIDTH) ? MAX_WIDTH : width;
|
||||
|
||||
@@ -614,10 +614,10 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
|
||||
|
||||
/* Colors or indexes */
|
||||
if (ctx->Visual.RGBAflag) {
|
||||
GLint r = (GLint) (ctx->Current.RasterColor[0] * 255.0F);
|
||||
GLint g = (GLint) (ctx->Current.RasterColor[1] * 255.0F);
|
||||
GLint b = (GLint) (ctx->Current.RasterColor[2] * 255.0F);
|
||||
GLint a = (GLint) (ctx->Current.RasterColor[3] * 255.0F);
|
||||
GLint r = FLOAT_TO_CHAN(ctx->Current.RasterColor[0]);
|
||||
GLint g = FLOAT_TO_CHAN(ctx->Current.RasterColor[1]);
|
||||
GLint b = FLOAT_TO_CHAN(ctx->Current.RasterColor[2]);
|
||||
GLint a = FLOAT_TO_CHAN(ctx->Current.RasterColor[3]);
|
||||
GLint i;
|
||||
for (i = 0; i < drawWidth; i++) {
|
||||
rgba[i][RCOMP] = r;
|
||||
@@ -669,7 +669,7 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
|
||||
if (ctx->Visual.RGBAflag) {
|
||||
if (zoom) {
|
||||
gl_write_zoomed_rgba_span(ctx, width, x, y, zspan, 0,
|
||||
(const GLubyte (*)[4])rgba, desty);
|
||||
(const GLchan (*)[4]) rgba, desty);
|
||||
}
|
||||
else {
|
||||
gl_write_rgba_span(ctx, width, x, y, zspan, 0, rgba, GL_BITMAP);
|
||||
@@ -792,31 +792,31 @@ draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y,
|
||||
* General solution
|
||||
*/
|
||||
{
|
||||
GLubyte rgba[MAX_WIDTH][4];
|
||||
GLchan rgba[MAX_WIDTH][4];
|
||||
GLint row;
|
||||
if (width > MAX_WIDTH)
|
||||
width = MAX_WIDTH;
|
||||
for (row = 0; row < height; row++, y++) {
|
||||
const GLvoid *source = _mesa_image_address(unpack,
|
||||
pixels, width, height, format, type, 0, row, 0);
|
||||
_mesa_unpack_ubyte_color_span(ctx, width, GL_RGBA, (void*) rgba,
|
||||
format, type, source, unpack,
|
||||
transferOps);
|
||||
_mesa_unpack_chan_color_span(ctx, width, GL_RGBA, (void*) rgba,
|
||||
format, type, source, unpack,
|
||||
transferOps);
|
||||
if ((ctx->Pixel.MinMaxEnabled && ctx->MinMax.Sink) ||
|
||||
(ctx->Pixel.HistogramEnabled && ctx->Histogram.Sink))
|
||||
continue;
|
||||
|
||||
if (ctx->Texture.ReallyEnabled && ctx->Pixel.PixelTextureEnabled) {
|
||||
GLfloat s[MAX_WIDTH], t[MAX_WIDTH], r[MAX_WIDTH], q[MAX_WIDTH];
|
||||
GLubyte primary_rgba[MAX_WIDTH][4];
|
||||
GLchan primary_rgba[MAX_WIDTH][4];
|
||||
GLuint unit;
|
||||
/* XXX not sure how multitexture is supposed to work here */
|
||||
|
||||
MEMCPY(primary_rgba, rgba, 4 * width * sizeof(GLubyte));
|
||||
MEMCPY(primary_rgba, rgba, 4 * width * sizeof(GLchan));
|
||||
|
||||
for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) {
|
||||
if (ctx->Texture.Unit[unit].ReallyEnabled) {
|
||||
_mesa_pixeltexgen(ctx, width, (const GLubyte (*)[4]) rgba,
|
||||
_mesa_pixeltexgen(ctx, width, (const GLchan (*)[4]) rgba,
|
||||
s, t, r, q);
|
||||
gl_texture_pixels(ctx, unit, width, s, t, r, NULL,
|
||||
primary_rgba, rgba);
|
||||
@@ -826,11 +826,11 @@ draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y,
|
||||
|
||||
if (quickDraw) {
|
||||
(*ctx->Driver.WriteRGBASpan)( ctx, width, x, y,
|
||||
(CONST GLubyte (*)[]) rgba, NULL);
|
||||
(CONST GLchan (*)[]) rgba, NULL);
|
||||
}
|
||||
else if (zoom) {
|
||||
gl_write_zoomed_rgba_span( ctx, width, x, y, zspan, 0,
|
||||
(CONST GLubyte (*)[]) rgba, desty );
|
||||
(CONST GLchan (*)[]) rgba, desty );
|
||||
}
|
||||
else {
|
||||
gl_write_rgba_span( ctx, (GLuint) width, x, y, zspan, 0,
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: eval.c,v 1.12 2000/10/28 20:41:14 brianp Exp $ */
|
||||
/* $Id: eval.c,v 1.13 2000/10/29 18:12:15 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -49,6 +49,7 @@
|
||||
#include "mem.h"
|
||||
#include "mmath.h"
|
||||
#include "types.h"
|
||||
#include "vb.h"
|
||||
#include "vbcull.h"
|
||||
#include "vbfill.h"
|
||||
#include "vbxform.h"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: image.c,v 1.44 2000/10/28 20:41:14 brianp Exp $ */
|
||||
/* $Id: image.c,v 1.45 2000/10/29 18:12:15 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -596,73 +596,201 @@ _mesa_pack_polygon_stipple( const GLuint pattern[32], GLubyte *dest,
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Unpack bitmap data. Resulting data will be in most-significant-bit-first
|
||||
* order with row alignment = 1 byte.
|
||||
*/
|
||||
GLvoid *
|
||||
_mesa_unpack_bitmap( GLint width, GLint height, const GLubyte *pixels,
|
||||
const struct gl_pixelstore_attrib *packing )
|
||||
{
|
||||
GLint bytes, row, width_in_bytes;
|
||||
GLubyte *buffer, *dst;
|
||||
|
||||
if (!pixels)
|
||||
return NULL;
|
||||
|
||||
/* Alloc dest storage */
|
||||
bytes = ((width + 7) / 8 * height);
|
||||
buffer = (GLubyte *) MALLOC( bytes );
|
||||
if (!buffer)
|
||||
return NULL;
|
||||
|
||||
|
||||
width_in_bytes = CEILING( width, 8 );
|
||||
dst = buffer;
|
||||
for (row = 0; row < height; row++) {
|
||||
GLubyte *src = _mesa_image_address( packing, pixels, width, height,
|
||||
GL_COLOR_INDEX, GL_BITMAP,
|
||||
0, row, 0 );
|
||||
if (!src) {
|
||||
FREE(buffer);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (packing->SkipPixels == 0) {
|
||||
MEMCPY( dst, src, width_in_bytes );
|
||||
if (packing->LsbFirst) {
|
||||
flip_bytes( dst, width_in_bytes );
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* handling SkipPixels is a bit tricky (no pun intended!) */
|
||||
GLint i;
|
||||
if (packing->LsbFirst) {
|
||||
GLubyte srcMask = 1 << (packing->SkipPixels & 0x7);
|
||||
GLubyte dstMask = 128;
|
||||
GLubyte *s = src;
|
||||
GLubyte *d = dst;
|
||||
*d = 0;
|
||||
for (i = 0; i < width; i++) {
|
||||
if (*s & srcMask) {
|
||||
*d |= dstMask;
|
||||
}
|
||||
if (srcMask == 128) {
|
||||
srcMask = 1;
|
||||
s++;
|
||||
}
|
||||
else {
|
||||
srcMask = srcMask << 1;
|
||||
}
|
||||
if (dstMask == 1) {
|
||||
dstMask = 128;
|
||||
d++;
|
||||
*d = 0;
|
||||
}
|
||||
else {
|
||||
dstMask = dstMask >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
GLubyte srcMask = 128 >> (packing->SkipPixels & 0x7);
|
||||
GLubyte dstMask = 128;
|
||||
GLubyte *s = src;
|
||||
GLubyte *d = dst;
|
||||
*d = 0;
|
||||
for (i = 0; i < width; i++) {
|
||||
if (*s & srcMask) {
|
||||
*d |= dstMask;
|
||||
}
|
||||
if (srcMask == 1) {
|
||||
srcMask = 128;
|
||||
s++;
|
||||
}
|
||||
else {
|
||||
srcMask = srcMask >> 1;
|
||||
}
|
||||
if (dstMask == 1) {
|
||||
dstMask = 128;
|
||||
d++;
|
||||
*d = 0;
|
||||
}
|
||||
else {
|
||||
dstMask = dstMask >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
dst += width_in_bytes;
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Pack the given RGBA span into client memory at 'dest' address
|
||||
* in the given pixel format and type.
|
||||
* Optionally apply the enabled pixel transfer ops.
|
||||
* Pack into memory using the given packing params struct.
|
||||
* This is used by glReadPixels and glGetTexImage?D()
|
||||
* Input: ctx - the context
|
||||
* n - number of pixels in the span
|
||||
* rgba - the pixels
|
||||
* format - dest packing format
|
||||
* type - dest packing datatype
|
||||
* destination - destination packing address
|
||||
* packing - pixel packing parameters
|
||||
* transferOps - bitmask of IMAGE_*_BIT operations to apply
|
||||
* Pack bitmap data.
|
||||
*/
|
||||
void
|
||||
_mesa_pack_rgba_span( GLcontext *ctx,
|
||||
GLuint n, CONST GLubyte srcRgba[][4],
|
||||
GLenum dstFormat, GLenum dstType,
|
||||
GLvoid *dstAddr,
|
||||
const struct gl_pixelstore_attrib *dstPacking,
|
||||
GLuint transferOps)
|
||||
_mesa_pack_bitmap( GLint width, GLint height, const GLubyte *source,
|
||||
GLubyte *dest, const struct gl_pixelstore_attrib *packing )
|
||||
{
|
||||
ASSERT(ctx->ImageTransferState != UPDATE_IMAGE_TRANSFER_STATE);
|
||||
GLint row, width_in_bytes;
|
||||
const GLubyte *src;
|
||||
|
||||
/* Test for optimized case first */
|
||||
if (transferOps == 0 && dstFormat == GL_RGBA
|
||||
&& dstType == GL_UNSIGNED_BYTE) {
|
||||
/* common simple case */
|
||||
MEMCPY(dstAddr, srcRgba, n * 4 * sizeof(GLubyte));
|
||||
}
|
||||
else if (transferOps == 0 && dstFormat == GL_RGB
|
||||
&& dstType == GL_UNSIGNED_BYTE) {
|
||||
/* common simple case */
|
||||
GLint i;
|
||||
GLubyte *dest = (GLubyte *) dstAddr;
|
||||
for (i = 0; i < n; i++) {
|
||||
dest[0] = srcRgba[i][RCOMP];
|
||||
dest[1] = srcRgba[i][GCOMP];
|
||||
dest[2] = srcRgba[i][BCOMP];
|
||||
dest += 3;
|
||||
if (!source)
|
||||
return;
|
||||
|
||||
width_in_bytes = CEILING( width, 8 );
|
||||
src = source;
|
||||
for (row = 0; row < height; row++) {
|
||||
GLubyte *dst = _mesa_image_address( packing, dest, width, height,
|
||||
GL_COLOR_INDEX, GL_BITMAP,
|
||||
0, row, 0 );
|
||||
if (!dst)
|
||||
return;
|
||||
|
||||
if (packing->SkipPixels == 0) {
|
||||
MEMCPY( dst, src, width_in_bytes );
|
||||
if (packing->LsbFirst) {
|
||||
flip_bytes( dst, width_in_bytes );
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* general solution */
|
||||
GLfloat rgba[MAX_WIDTH][4];
|
||||
const GLfloat rscale = 1.0F / 255.0F;
|
||||
const GLfloat gscale = 1.0F / 255.0F;
|
||||
const GLfloat bscale = 1.0F / 255.0F;
|
||||
const GLfloat ascale = 1.0F / 255.0F;
|
||||
GLuint i;
|
||||
assert(n <= MAX_WIDTH);
|
||||
/* convert color components to floating point */
|
||||
for (i=0;i<n;i++) {
|
||||
rgba[i][RCOMP] = srcRgba[i][RCOMP] * rscale;
|
||||
rgba[i][GCOMP] = srcRgba[i][GCOMP] * gscale;
|
||||
rgba[i][BCOMP] = srcRgba[i][BCOMP] * bscale;
|
||||
rgba[i][ACOMP] = srcRgba[i][ACOMP] * ascale;
|
||||
else {
|
||||
/* handling SkipPixels is a bit tricky (no pun intended!) */
|
||||
GLint i;
|
||||
if (packing->LsbFirst) {
|
||||
GLubyte srcMask = 1 << (packing->SkipPixels & 0x7);
|
||||
GLubyte dstMask = 128;
|
||||
const GLubyte *s = src;
|
||||
GLubyte *d = dst;
|
||||
*d = 0;
|
||||
for (i = 0; i < width; i++) {
|
||||
if (*s & srcMask) {
|
||||
*d |= dstMask;
|
||||
}
|
||||
if (srcMask == 128) {
|
||||
srcMask = 1;
|
||||
s++;
|
||||
}
|
||||
else {
|
||||
srcMask = srcMask << 1;
|
||||
}
|
||||
if (dstMask == 1) {
|
||||
dstMask = 128;
|
||||
d++;
|
||||
*d = 0;
|
||||
}
|
||||
else {
|
||||
dstMask = dstMask >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
GLubyte srcMask = 128 >> (packing->SkipPixels & 0x7);
|
||||
GLubyte dstMask = 128;
|
||||
const GLubyte *s = src;
|
||||
GLubyte *d = dst;
|
||||
*d = 0;
|
||||
for (i = 0; i < width; i++) {
|
||||
if (*s & srcMask) {
|
||||
*d |= dstMask;
|
||||
}
|
||||
if (srcMask == 1) {
|
||||
srcMask = 128;
|
||||
s++;
|
||||
}
|
||||
else {
|
||||
srcMask = srcMask >> 1;
|
||||
}
|
||||
if (dstMask == 1) {
|
||||
dstMask = 128;
|
||||
d++;
|
||||
*d = 0;
|
||||
}
|
||||
else {
|
||||
dstMask = dstMask >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
_mesa_pack_float_rgba_span(ctx, n, (const GLfloat (*)[4]) rgba,
|
||||
dstFormat, dstType, dstAddr,
|
||||
dstPacking, transferOps);
|
||||
src += width_in_bytes;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
_mesa_pack_float_rgba_span( GLcontext *ctx,
|
||||
GLuint n, CONST GLfloat rgbaIn[][4],
|
||||
@@ -1549,6 +1677,66 @@ _mesa_pack_float_rgba_span( GLcontext *ctx,
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Pack the given RGBA span into client memory at 'dest' address
|
||||
* in the given pixel format and type.
|
||||
* Optionally apply the enabled pixel transfer ops.
|
||||
* Pack into memory using the given packing params struct.
|
||||
* This is used by glReadPixels and glGetTexImage?D()
|
||||
* Input: ctx - the context
|
||||
* n - number of pixels in the span
|
||||
* rgba - the pixels
|
||||
* format - dest packing format
|
||||
* type - dest packing datatype
|
||||
* destination - destination packing address
|
||||
* packing - pixel packing parameters
|
||||
* transferOps - bitmask of IMAGE_*_BIT operations to apply
|
||||
*/
|
||||
void
|
||||
_mesa_pack_rgba_span( GLcontext *ctx,
|
||||
GLuint n, CONST GLchan srcRgba[][4],
|
||||
GLenum dstFormat, GLenum dstType,
|
||||
GLvoid *dstAddr,
|
||||
const struct gl_pixelstore_attrib *dstPacking,
|
||||
GLuint transferOps)
|
||||
{
|
||||
ASSERT(ctx->ImageTransferState != UPDATE_IMAGE_TRANSFER_STATE);
|
||||
|
||||
/* Test for optimized case first */
|
||||
if (transferOps == 0 && dstFormat == GL_RGBA && dstType == CHAN_TYPE) {
|
||||
/* common simple case */
|
||||
MEMCPY(dstAddr, srcRgba, n * 4 * sizeof(GLchan));
|
||||
}
|
||||
else if (transferOps == 0 && dstFormat == GL_RGB && dstType == CHAN_TYPE) {
|
||||
/* common simple case */
|
||||
GLint i;
|
||||
GLchan *dest = (GLchan *) dstAddr;
|
||||
for (i = 0; i < n; i++) {
|
||||
dest[0] = srcRgba[i][RCOMP];
|
||||
dest[1] = srcRgba[i][GCOMP];
|
||||
dest[2] = srcRgba[i][BCOMP];
|
||||
dest += 3;
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* general solution */
|
||||
GLfloat rgba[MAX_WIDTH][4];
|
||||
GLuint i;
|
||||
assert(n <= MAX_WIDTH);
|
||||
/* convert color components to floating point */
|
||||
for (i=0;i<n;i++) {
|
||||
rgba[i][RCOMP] = CHAN_TO_FLOAT(srcRgba[i][RCOMP]);
|
||||
rgba[i][GCOMP] = CHAN_TO_FLOAT(srcRgba[i][GCOMP]);
|
||||
rgba[i][BCOMP] = CHAN_TO_FLOAT(srcRgba[i][BCOMP]);
|
||||
rgba[i][ACOMP] = CHAN_TO_FLOAT(srcRgba[i][ACOMP]);
|
||||
}
|
||||
_mesa_pack_float_rgba_span(ctx, n, (const GLfloat (*)[4]) rgba,
|
||||
dstFormat, dstType, dstAddr,
|
||||
dstPacking, transferOps);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#define SWAP2BYTE(VALUE) \
|
||||
{ \
|
||||
GLubyte *bytes = (GLubyte *) &(VALUE); \
|
||||
@@ -2251,12 +2439,12 @@ extract_float_rgba(GLuint n, GLfloat rgba[][4],
|
||||
* XXX perhaps expand this to process whole images someday.
|
||||
*/
|
||||
void
|
||||
_mesa_unpack_ubyte_color_span( GLcontext *ctx,
|
||||
GLuint n, GLenum dstFormat, GLubyte dest[],
|
||||
GLenum srcFormat, GLenum srcType,
|
||||
const GLvoid *source,
|
||||
const struct gl_pixelstore_attrib *srcPacking,
|
||||
GLuint transferOps )
|
||||
_mesa_unpack_chan_color_span( GLcontext *ctx,
|
||||
GLuint n, GLenum dstFormat, GLchan dest[],
|
||||
GLenum srcFormat, GLenum srcType,
|
||||
const GLvoid *source,
|
||||
const struct gl_pixelstore_attrib *srcPacking,
|
||||
GLuint transferOps )
|
||||
{
|
||||
ASSERT(dstFormat == GL_ALPHA ||
|
||||
dstFormat == GL_LUMINANCE ||
|
||||
@@ -2305,21 +2493,21 @@ _mesa_unpack_ubyte_color_span( GLcontext *ctx,
|
||||
assert(ctx->Visual.RGBAflag);
|
||||
|
||||
/* Try simple cases first */
|
||||
if (transferOps == 0 && srcType == GL_UNSIGNED_BYTE) {
|
||||
if (transferOps == 0 && srcType == CHAN_TYPE) {
|
||||
if (dstFormat == GL_RGBA) {
|
||||
if (srcFormat == GL_RGBA) {
|
||||
MEMCPY( dest, source, n * 4 * sizeof(GLubyte) );
|
||||
MEMCPY( dest, source, n * 4 * sizeof(GLchan) );
|
||||
return;
|
||||
}
|
||||
else if (srcFormat == GL_RGB) {
|
||||
GLuint i;
|
||||
const GLubyte *src = (const GLubyte *) source;
|
||||
GLubyte *dst = dest;
|
||||
const GLchan *src = (const GLchan *) source;
|
||||
GLchan *dst = dest;
|
||||
for (i = 0; i < n; i++) {
|
||||
dst[0] = src[0];
|
||||
dst[1] = src[1];
|
||||
dst[2] = src[2];
|
||||
dst[3] = 255;
|
||||
dst[3] = CHAN_MAX;
|
||||
src += 3;
|
||||
dst += 4;
|
||||
}
|
||||
@@ -2328,13 +2516,13 @@ _mesa_unpack_ubyte_color_span( GLcontext *ctx,
|
||||
}
|
||||
else if (dstFormat == GL_RGB) {
|
||||
if (srcFormat == GL_RGB) {
|
||||
MEMCPY( dest, source, n * 3 * sizeof(GLubyte) );
|
||||
MEMCPY( dest, source, n * 3 * sizeof(GLchan) );
|
||||
return;
|
||||
}
|
||||
else if (srcFormat == GL_RGBA) {
|
||||
GLuint i;
|
||||
const GLubyte *src = (const GLubyte *) source;
|
||||
GLubyte *dst = dest;
|
||||
const GLchan *src = (const GLchan *) source;
|
||||
GLchan *dst = dest;
|
||||
for (i = 0; i < n; i++) {
|
||||
dst[0] = src[0];
|
||||
dst[1] = src[1];
|
||||
@@ -2348,7 +2536,7 @@ _mesa_unpack_ubyte_color_span( GLcontext *ctx,
|
||||
else if (dstFormat == srcFormat) {
|
||||
GLint comps = _mesa_components_in_format(srcFormat);
|
||||
assert(comps > 0);
|
||||
MEMCPY( dest, source, n * comps * sizeof(GLubyte) );
|
||||
MEMCPY( dest, source, n * comps * sizeof(GLchan) );
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -2383,10 +2571,10 @@ _mesa_unpack_ubyte_color_span( GLcontext *ctx,
|
||||
}
|
||||
|
||||
if (dstFormat == GL_COLOR_INDEX) {
|
||||
/* convert to GLubyte and return */
|
||||
/* convert to GLchan and return */
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
dest[i] = (GLubyte) (indexes[i] & 0xff);
|
||||
dest[i] = (GLchan) (indexes[i] & 0xff);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -2490,67 +2678,67 @@ _mesa_unpack_ubyte_color_span( GLcontext *ctx,
|
||||
dstLuminanceIndex = dstIntensityIndex = -1;
|
||||
break;
|
||||
default:
|
||||
gl_problem(ctx, "bad dstFormat in _mesa_unpack_ubyte_span()");
|
||||
gl_problem(ctx, "bad dstFormat in _mesa_unpack_chan_span()");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/* Now return the GLubyte data in the requested dstFormat */
|
||||
/* Now return the GLchan data in the requested dstFormat */
|
||||
|
||||
if (dstRedIndex >= 0) {
|
||||
GLubyte *dst = dest;
|
||||
GLchan *dst = dest;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
dst[dstRedIndex] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
|
||||
dst[dstRedIndex] = FLOAT_TO_CHAN(rgba[i][RCOMP]);
|
||||
dst += dstComponents;
|
||||
}
|
||||
}
|
||||
|
||||
if (dstGreenIndex >= 0) {
|
||||
GLubyte *dst = dest;
|
||||
GLchan *dst = dest;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
dst[dstGreenIndex] = FLOAT_TO_UBYTE(rgba[i][GCOMP]);
|
||||
dst[dstGreenIndex] = FLOAT_TO_CHAN(rgba[i][GCOMP]);
|
||||
dst += dstComponents;
|
||||
}
|
||||
}
|
||||
|
||||
if (dstBlueIndex >= 0) {
|
||||
GLubyte *dst = dest;
|
||||
GLchan *dst = dest;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
dst[dstBlueIndex] = FLOAT_TO_UBYTE(rgba[i][BCOMP]);
|
||||
dst[dstBlueIndex] = FLOAT_TO_CHAN(rgba[i][BCOMP]);
|
||||
dst += dstComponents;
|
||||
}
|
||||
}
|
||||
|
||||
if (dstAlphaIndex >= 0) {
|
||||
GLubyte *dst = dest;
|
||||
GLchan *dst = dest;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
dst[dstAlphaIndex] = FLOAT_TO_UBYTE(rgba[i][ACOMP]);
|
||||
dst[dstAlphaIndex] = FLOAT_TO_CHAN(rgba[i][ACOMP]);
|
||||
dst += dstComponents;
|
||||
}
|
||||
}
|
||||
|
||||
if (dstIntensityIndex >= 0) {
|
||||
GLubyte *dst = dest;
|
||||
GLchan *dst = dest;
|
||||
GLuint i;
|
||||
assert(dstIntensityIndex == 0);
|
||||
assert(dstComponents == 1);
|
||||
for (i = 0; i < n; i++) {
|
||||
/* Intensity comes from red channel */
|
||||
dst[i] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
|
||||
dst[i] = FLOAT_TO_CHAN(rgba[i][RCOMP]);
|
||||
}
|
||||
}
|
||||
|
||||
if (dstLuminanceIndex >= 0) {
|
||||
GLubyte *dst = dest;
|
||||
GLchan *dst = dest;
|
||||
GLuint i;
|
||||
assert(dstLuminanceIndex == 0);
|
||||
for (i = 0; i < n; i++) {
|
||||
/* Luminance comes from red channel */
|
||||
dst[0] = FLOAT_TO_UBYTE(rgba[i][RCOMP]);
|
||||
dst[0] = FLOAT_TO_CHAN(rgba[i][RCOMP]);
|
||||
dst += dstComponents;
|
||||
}
|
||||
}
|
||||
@@ -2641,10 +2829,10 @@ _mesa_unpack_float_color_span( GLcontext *ctx,
|
||||
}
|
||||
|
||||
if (dstFormat == GL_COLOR_INDEX) {
|
||||
/* convert to GLubyte and return */
|
||||
/* convert to GLchan and return */
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
dest[i] = (GLubyte) (indexes[i] & 0xff);
|
||||
dest[i] = (GLchan) (indexes[i] & 0xff);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -3186,197 +3374,3 @@ _mesa_unpack_image( GLsizei width, GLsizei height, GLsizei depth,
|
||||
return destBuffer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Unpack bitmap data. Resulting data will be in most-significant-bit-first
|
||||
* order with row alignment = 1 byte.
|
||||
*/
|
||||
GLvoid *
|
||||
_mesa_unpack_bitmap( GLint width, GLint height, const GLubyte *pixels,
|
||||
const struct gl_pixelstore_attrib *packing )
|
||||
{
|
||||
GLint bytes, row, width_in_bytes;
|
||||
GLubyte *buffer, *dst;
|
||||
|
||||
if (!pixels)
|
||||
return NULL;
|
||||
|
||||
/* Alloc dest storage */
|
||||
bytes = ((width + 7) / 8 * height);
|
||||
buffer = (GLubyte *) MALLOC( bytes );
|
||||
if (!buffer)
|
||||
return NULL;
|
||||
|
||||
|
||||
width_in_bytes = CEILING( width, 8 );
|
||||
dst = buffer;
|
||||
for (row = 0; row < height; row++) {
|
||||
GLubyte *src = _mesa_image_address( packing, pixels, width, height,
|
||||
GL_COLOR_INDEX, GL_BITMAP,
|
||||
0, row, 0 );
|
||||
if (!src) {
|
||||
FREE(buffer);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (packing->SkipPixels == 0) {
|
||||
MEMCPY( dst, src, width_in_bytes );
|
||||
if (packing->LsbFirst) {
|
||||
flip_bytes( dst, width_in_bytes );
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* handling SkipPixels is a bit tricky (no pun intended!) */
|
||||
GLint i;
|
||||
if (packing->LsbFirst) {
|
||||
GLubyte srcMask = 1 << (packing->SkipPixels & 0x7);
|
||||
GLubyte dstMask = 128;
|
||||
GLubyte *s = src;
|
||||
GLubyte *d = dst;
|
||||
*d = 0;
|
||||
for (i = 0; i < width; i++) {
|
||||
if (*s & srcMask) {
|
||||
*d |= dstMask;
|
||||
}
|
||||
if (srcMask == 128) {
|
||||
srcMask = 1;
|
||||
s++;
|
||||
}
|
||||
else {
|
||||
srcMask = srcMask << 1;
|
||||
}
|
||||
if (dstMask == 1) {
|
||||
dstMask = 128;
|
||||
d++;
|
||||
*d = 0;
|
||||
}
|
||||
else {
|
||||
dstMask = dstMask >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
GLubyte srcMask = 128 >> (packing->SkipPixels & 0x7);
|
||||
GLubyte dstMask = 128;
|
||||
GLubyte *s = src;
|
||||
GLubyte *d = dst;
|
||||
*d = 0;
|
||||
for (i = 0; i < width; i++) {
|
||||
if (*s & srcMask) {
|
||||
*d |= dstMask;
|
||||
}
|
||||
if (srcMask == 1) {
|
||||
srcMask = 128;
|
||||
s++;
|
||||
}
|
||||
else {
|
||||
srcMask = srcMask >> 1;
|
||||
}
|
||||
if (dstMask == 1) {
|
||||
dstMask = 128;
|
||||
d++;
|
||||
*d = 0;
|
||||
}
|
||||
else {
|
||||
dstMask = dstMask >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
dst += width_in_bytes;
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Pack bitmap data.
|
||||
*/
|
||||
void
|
||||
_mesa_pack_bitmap( GLint width, GLint height, const GLubyte *source,
|
||||
GLubyte *dest, const struct gl_pixelstore_attrib *packing )
|
||||
{
|
||||
GLint row, width_in_bytes;
|
||||
const GLubyte *src;
|
||||
|
||||
if (!source)
|
||||
return;
|
||||
|
||||
width_in_bytes = CEILING( width, 8 );
|
||||
src = source;
|
||||
for (row = 0; row < height; row++) {
|
||||
GLubyte *dst = _mesa_image_address( packing, dest, width, height,
|
||||
GL_COLOR_INDEX, GL_BITMAP,
|
||||
0, row, 0 );
|
||||
if (!dst)
|
||||
return;
|
||||
|
||||
if (packing->SkipPixels == 0) {
|
||||
MEMCPY( dst, src, width_in_bytes );
|
||||
if (packing->LsbFirst) {
|
||||
flip_bytes( dst, width_in_bytes );
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* handling SkipPixels is a bit tricky (no pun intended!) */
|
||||
GLint i;
|
||||
if (packing->LsbFirst) {
|
||||
GLubyte srcMask = 1 << (packing->SkipPixels & 0x7);
|
||||
GLubyte dstMask = 128;
|
||||
const GLubyte *s = src;
|
||||
GLubyte *d = dst;
|
||||
*d = 0;
|
||||
for (i = 0; i < width; i++) {
|
||||
if (*s & srcMask) {
|
||||
*d |= dstMask;
|
||||
}
|
||||
if (srcMask == 128) {
|
||||
srcMask = 1;
|
||||
s++;
|
||||
}
|
||||
else {
|
||||
srcMask = srcMask << 1;
|
||||
}
|
||||
if (dstMask == 1) {
|
||||
dstMask = 128;
|
||||
d++;
|
||||
*d = 0;
|
||||
}
|
||||
else {
|
||||
dstMask = dstMask >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
GLubyte srcMask = 128 >> (packing->SkipPixels & 0x7);
|
||||
GLubyte dstMask = 128;
|
||||
const GLubyte *s = src;
|
||||
GLubyte *d = dst;
|
||||
*d = 0;
|
||||
for (i = 0; i < width; i++) {
|
||||
if (*s & srcMask) {
|
||||
*d |= dstMask;
|
||||
}
|
||||
if (srcMask == 1) {
|
||||
srcMask = 128;
|
||||
s++;
|
||||
}
|
||||
else {
|
||||
srcMask = srcMask >> 1;
|
||||
}
|
||||
if (dstMask == 1) {
|
||||
dstMask = 128;
|
||||
d++;
|
||||
*d = 0;
|
||||
}
|
||||
else {
|
||||
dstMask = dstMask >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
src += width_in_bytes;
|
||||
}
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: image.h,v 1.12 2000/08/31 15:24:07 brianp Exp $ */
|
||||
/* $Id: image.h,v 1.13 2000/10/29 18:12:15 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -79,6 +79,15 @@ _mesa_pack_polygon_stipple( const GLuint pattern[32], GLubyte *dest,
|
||||
const struct gl_pixelstore_attrib *packing );
|
||||
|
||||
|
||||
extern GLvoid *
|
||||
_mesa_unpack_bitmap( GLint width, GLint height, const GLubyte *pixels,
|
||||
const struct gl_pixelstore_attrib *packing );
|
||||
|
||||
extern void
|
||||
_mesa_pack_bitmap( GLint width, GLint height, const GLubyte *source,
|
||||
GLubyte *dest, const struct gl_pixelstore_attrib *packing );
|
||||
|
||||
|
||||
extern void
|
||||
_mesa_pack_float_rgba_span( GLcontext *ctx,
|
||||
GLuint n, CONST GLfloat rgba[][4],
|
||||
@@ -89,19 +98,19 @@ _mesa_pack_float_rgba_span( GLcontext *ctx,
|
||||
|
||||
extern void
|
||||
_mesa_pack_rgba_span( GLcontext *ctx,
|
||||
GLuint n, CONST GLubyte rgba[][4],
|
||||
GLuint n, CONST GLchan rgba[][4],
|
||||
GLenum dstFormat, GLenum dstType, GLvoid *dstAddr,
|
||||
const struct gl_pixelstore_attrib *dstPacking,
|
||||
GLuint transferOps );
|
||||
|
||||
|
||||
extern void
|
||||
_mesa_unpack_ubyte_color_span( GLcontext *ctx,
|
||||
GLuint n, GLenum dstFormat, GLubyte dest[],
|
||||
GLenum srcFormat, GLenum srcType,
|
||||
const GLvoid *source,
|
||||
const struct gl_pixelstore_attrib *srcPacking,
|
||||
GLuint transferOps );
|
||||
_mesa_unpack_chan_color_span( GLcontext *ctx,
|
||||
GLuint n, GLenum dstFormat, GLchan dest[],
|
||||
GLenum srcFormat, GLenum srcType,
|
||||
const GLvoid *source,
|
||||
const struct gl_pixelstore_attrib *srcPacking,
|
||||
GLuint transferOps );
|
||||
|
||||
|
||||
extern void
|
||||
@@ -142,13 +151,4 @@ _mesa_unpack_image( GLsizei width, GLsizei height, GLsizei depth,
|
||||
const struct gl_pixelstore_attrib *unpack );
|
||||
|
||||
|
||||
extern GLvoid *
|
||||
_mesa_unpack_bitmap( GLint width, GLint height, const GLubyte *pixels,
|
||||
const struct gl_pixelstore_attrib *packing );
|
||||
|
||||
extern void
|
||||
_mesa_pack_bitmap( GLint width, GLint height, const GLubyte *source,
|
||||
GLubyte *dest, const struct gl_pixelstore_attrib *packing );
|
||||
|
||||
|
||||
#endif
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: matrix.h,v 1.7 2000/09/17 21:56:07 brianp Exp $ */
|
||||
/* $Id: matrix.h,v 1.8 2000/10/29 18:12:15 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -30,81 +30,6 @@
|
||||
|
||||
|
||||
#include "types.h"
|
||||
#include "config.h"
|
||||
|
||||
|
||||
/* Give symbolic names to some of the entries in the matrix to help
|
||||
* out with the rework of the viewport_map as a matrix transform.
|
||||
*/
|
||||
#define MAT_SX 0
|
||||
#define MAT_SY 5
|
||||
#define MAT_SZ 10
|
||||
#define MAT_TX 12
|
||||
#define MAT_TY 13
|
||||
#define MAT_TZ 14
|
||||
|
||||
|
||||
/*
|
||||
* Different kinds of 4x4 transformation matrices:
|
||||
*/
|
||||
#define MATRIX_GENERAL 0 /* general 4x4 matrix */
|
||||
#define MATRIX_IDENTITY 1 /* identity matrix */
|
||||
#define MATRIX_3D_NO_ROT 2 /* ortho projection and others... */
|
||||
#define MATRIX_PERSPECTIVE 3 /* perspective projection matrix */
|
||||
#define MATRIX_2D 4 /* 2-D transformation */
|
||||
#define MATRIX_2D_NO_ROT 5 /* 2-D scale & translate only */
|
||||
#define MATRIX_3D 6 /* 3-D transformation */
|
||||
|
||||
#define MAT_FLAG_IDENTITY 0
|
||||
#define MAT_FLAG_GENERAL 0x1
|
||||
#define MAT_FLAG_ROTATION 0x2
|
||||
#define MAT_FLAG_TRANSLATION 0x4
|
||||
#define MAT_FLAG_UNIFORM_SCALE 0x8
|
||||
#define MAT_FLAG_GENERAL_SCALE 0x10
|
||||
#define MAT_FLAG_GENERAL_3D 0x20
|
||||
#define MAT_FLAG_PERSPECTIVE 0x40
|
||||
#define MAT_DIRTY_TYPE 0x80
|
||||
#define MAT_DIRTY_FLAGS 0x100
|
||||
#define MAT_DIRTY_INVERSE 0x200
|
||||
#define MAT_DIRTY_DEPENDENTS 0x400
|
||||
|
||||
#define MAT_FLAGS_ANGLE_PRESERVING (MAT_FLAG_ROTATION | \
|
||||
MAT_FLAG_TRANSLATION | \
|
||||
MAT_FLAG_UNIFORM_SCALE)
|
||||
|
||||
#define MAT_FLAGS_LENGTH_PRESERVING (MAT_FLAG_ROTATION | \
|
||||
MAT_FLAG_TRANSLATION)
|
||||
|
||||
#define MAT_FLAGS_3D (MAT_FLAG_ROTATION | \
|
||||
MAT_FLAG_TRANSLATION | \
|
||||
MAT_FLAG_UNIFORM_SCALE | \
|
||||
MAT_FLAG_GENERAL_SCALE | \
|
||||
MAT_FLAG_GENERAL_3D)
|
||||
|
||||
#define MAT_FLAGS_GEOMETRY (MAT_FLAG_GENERAL | \
|
||||
MAT_FLAG_ROTATION | \
|
||||
MAT_FLAG_TRANSLATION | \
|
||||
MAT_FLAG_UNIFORM_SCALE | \
|
||||
MAT_FLAG_GENERAL_SCALE | \
|
||||
MAT_FLAG_GENERAL_3D | \
|
||||
MAT_FLAG_PERSPECTIVE)
|
||||
|
||||
#define MAT_DIRTY_ALL_OVER (MAT_DIRTY_TYPE | \
|
||||
MAT_DIRTY_DEPENDENTS | \
|
||||
MAT_DIRTY_FLAGS | \
|
||||
MAT_DIRTY_INVERSE)
|
||||
|
||||
#define TEST_MAT_FLAGS(mat, a) ((MAT_FLAGS_GEOMETRY&(~(a))&((mat)->flags))==0)
|
||||
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
GLfloat *m; /* 16-byte aligned */
|
||||
GLfloat *inv; /* optional, 16-byte aligned */
|
||||
GLuint flags;
|
||||
GLuint type; /* one of the MATRIX_* values */
|
||||
} GLmatrix;
|
||||
|
||||
|
||||
#ifdef VMS
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: pixel.c,v 1.15 2000/10/28 20:41:14 brianp Exp $ */
|
||||
/* $Id: pixel.c,v 1.16 2000/10/29 18:12:15 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -755,11 +755,11 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
|
||||
/* replace RGBA with I */
|
||||
if (!table->FloatTable) {
|
||||
const GLfloat scale = (GLfloat) (table->Size - 1);
|
||||
const GLubyte *lut = (const GLubyte *) table->Table;
|
||||
const GLchan *lut = (const GLchan *) table->Table;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
GLint j = (GLint) (rgba[i][RCOMP] * scale + 0.5F);
|
||||
GLfloat c = lut[j] * (1.0F / 255.0F);
|
||||
GLfloat c = CHAN_TO_FLOAT(lut[j]);
|
||||
rgba[i][RCOMP] = rgba[i][GCOMP] =
|
||||
rgba[i][BCOMP] = rgba[i][ACOMP] = c;
|
||||
}
|
||||
@@ -781,11 +781,11 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
|
||||
/* replace RGB with L */
|
||||
if (!table->FloatTable) {
|
||||
const GLfloat scale = (GLfloat) (table->Size - 1);
|
||||
const GLubyte *lut = (const GLubyte *) table->Table;
|
||||
const GLchan *lut = (const GLchan *) table->Table;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
GLint j = (GLint) (rgba[i][RCOMP] * scale + 0.5F);
|
||||
GLfloat c = lut[j] * (1.0F / 255.0F);
|
||||
GLfloat c = CHAN_TO_FLOAT(lut[j]);
|
||||
rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = c;
|
||||
}
|
||||
}
|
||||
@@ -804,11 +804,11 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
|
||||
/* replace A with A */
|
||||
if (!table->FloatTable) {
|
||||
const GLfloat scale = (GLfloat) (table->Size - 1);
|
||||
const GLubyte *lut = (const GLubyte *) table->Table;
|
||||
const GLchan *lut = (const GLchan *) table->Table;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
GLint j = (GLint) (rgba[i][ACOMP] * scale + 0.5F);
|
||||
rgba[i][ACOMP] = lut[j] * (1.0F / 255.0F);
|
||||
rgba[i][ACOMP] = CHAN_TO_FLOAT(lut[j]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -825,13 +825,13 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
|
||||
/* replace RGBA with LLLA */
|
||||
if (!table->FloatTable) {
|
||||
const GLfloat scale = (GLfloat) (table->Size - 1);
|
||||
const GLubyte *lut = (const GLubyte *) table->Table;
|
||||
const GLchan *lut = (const GLchan *) table->Table;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
GLint jL = (GLint) (rgba[i][RCOMP] * scale + 0.5F);
|
||||
GLint jA = (GLint) (rgba[i][ACOMP] * scale + 0.5F);
|
||||
GLfloat luminance = lut[jL * 2 + 0] * (1.0F / 255.0F);
|
||||
GLfloat alpha = lut[jA * 2 + 1] * (1.0F / 255.0F);
|
||||
GLfloat luminance = CHAN_TO_FLOAT(lut[jL * 2 + 0]);
|
||||
GLfloat alpha = CHAN_TO_FLOAT(lut[jA * 2 + 1]);
|
||||
rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = luminance;
|
||||
rgba[i][ACOMP] = alpha;;
|
||||
}
|
||||
@@ -854,15 +854,15 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
|
||||
/* replace RGB with RGB */
|
||||
if (!table->FloatTable) {
|
||||
const GLfloat scale = (GLfloat) (table->Size - 1);
|
||||
const GLubyte *lut = (const GLubyte *) table->Table;
|
||||
const GLchan *lut = (const GLchan *) table->Table;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
GLint jR = (GLint) (rgba[i][RCOMP] * scale + 0.5F);
|
||||
GLint jG = (GLint) (rgba[i][GCOMP] * scale + 0.5F);
|
||||
GLint jB = (GLint) (rgba[i][BCOMP] * scale + 0.5F);
|
||||
rgba[i][RCOMP] = lut[jR * 3 + 0] * (1.0F / 255.0F);
|
||||
rgba[i][GCOMP] = lut[jG * 3 + 1] * (1.0F / 255.0F);
|
||||
rgba[i][BCOMP] = lut[jB * 3 + 2] * (1.0F / 255.0F);
|
||||
rgba[i][RCOMP] = CHAN_TO_FLOAT(lut[jR * 3 + 0]);
|
||||
rgba[i][GCOMP] = CHAN_TO_FLOAT(lut[jG * 3 + 1]);
|
||||
rgba[i][BCOMP] = CHAN_TO_FLOAT(lut[jB * 3 + 2]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -883,17 +883,17 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
|
||||
/* replace RGBA with RGBA */
|
||||
if (!table->FloatTable) {
|
||||
const GLfloat scale = (GLfloat) (table->Size - 1);
|
||||
const GLubyte *lut = (const GLubyte *) table->Table;
|
||||
const GLchan *lut = (const GLchan *) table->Table;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
GLint jR = (GLint) (rgba[i][RCOMP] * scale + 0.5F);
|
||||
GLint jG = (GLint) (rgba[i][GCOMP] * scale + 0.5F);
|
||||
GLint jB = (GLint) (rgba[i][BCOMP] * scale + 0.5F);
|
||||
GLint jA = (GLint) (rgba[i][ACOMP] * scale + 0.5F);
|
||||
rgba[i][RCOMP] = lut[jR * 4 + 0] * (1.0F / 255.0F);
|
||||
rgba[i][GCOMP] = lut[jG * 4 + 1] * (1.0F / 255.0F);
|
||||
rgba[i][BCOMP] = lut[jB * 4 + 2] * (1.0F / 255.0F);
|
||||
rgba[i][ACOMP] = lut[jA * 4 + 3] * (1.0F / 255.0F);
|
||||
rgba[i][RCOMP] = CHAN_TO_FLOAT(lut[jR * 4 + 0]);
|
||||
rgba[i][GCOMP] = CHAN_TO_FLOAT(lut[jG * 4 + 1]);
|
||||
rgba[i][BCOMP] = CHAN_TO_FLOAT(lut[jB * 4 + 2]);
|
||||
rgba[i][ACOMP] = CHAN_TO_FLOAT(lut[jA * 4 + 3]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -966,9 +966,10 @@ _mesa_map_ci( const GLcontext *ctx, GLuint n, GLuint index[] )
|
||||
* Map color indexes to rgba values.
|
||||
*/
|
||||
void
|
||||
_mesa_map_ci_to_rgba_ubyte( const GLcontext *ctx, GLuint n,
|
||||
const GLuint index[], GLubyte rgba[][4] )
|
||||
_mesa_map_ci_to_rgba_chan( const GLcontext *ctx, GLuint n,
|
||||
const GLuint index[], GLchan rgba[][4] )
|
||||
{
|
||||
#if CHAN_BITS == 8
|
||||
GLuint rmask = ctx->Pixel.MapItoRsize - 1;
|
||||
GLuint gmask = ctx->Pixel.MapItoGsize - 1;
|
||||
GLuint bmask = ctx->Pixel.MapItoBsize - 1;
|
||||
@@ -984,6 +985,23 @@ _mesa_map_ci_to_rgba_ubyte( const GLcontext *ctx, GLuint n,
|
||||
rgba[i][BCOMP] = bMap[index[i] & bmask];
|
||||
rgba[i][ACOMP] = aMap[index[i] & amask];
|
||||
}
|
||||
#else
|
||||
GLuint rmask = ctx->Pixel.MapItoRsize - 1;
|
||||
GLuint gmask = ctx->Pixel.MapItoGsize - 1;
|
||||
GLuint bmask = ctx->Pixel.MapItoBsize - 1;
|
||||
GLuint amask = ctx->Pixel.MapItoAsize - 1;
|
||||
const GLfloat *rMap = ctx->Pixel.MapItoR;
|
||||
const GLfloat *gMap = ctx->Pixel.MapItoG;
|
||||
const GLfloat *bMap = ctx->Pixel.MapItoB;
|
||||
const GLfloat *aMap = ctx->Pixel.MapItoA;
|
||||
GLuint i;
|
||||
for (i=0;i<n;i++) {
|
||||
rgba[i][RCOMP] = FLOAT_TO_CHAN(rMap[index[i] & rmask]);
|
||||
rgba[i][GCOMP] = FLOAT_TO_CHAN(gMap[index[i] & gmask]);
|
||||
rgba[i][BCOMP] = FLOAT_TO_CHAN(bMap[index[i] & bmask]);
|
||||
rgba[i][ACOMP] = FLOAT_TO_CHAN(aMap[index[i] & amask]);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -1017,8 +1035,9 @@ _mesa_map_ci_to_rgba( const GLcontext *ctx, GLuint n,
|
||||
*/
|
||||
void
|
||||
_mesa_map_ci8_to_rgba( const GLcontext *ctx, GLuint n, const GLubyte index[],
|
||||
GLubyte rgba[][4] )
|
||||
GLchan rgba[][4] )
|
||||
{
|
||||
#if CHAN_BITS == 8
|
||||
GLuint rmask = ctx->Pixel.MapItoRsize - 1;
|
||||
GLuint gmask = ctx->Pixel.MapItoGsize - 1;
|
||||
GLuint bmask = ctx->Pixel.MapItoBsize - 1;
|
||||
@@ -1034,6 +1053,23 @@ _mesa_map_ci8_to_rgba( const GLcontext *ctx, GLuint n, const GLubyte index[],
|
||||
rgba[i][BCOMP] = bMap[index[i] & bmask];
|
||||
rgba[i][ACOMP] = aMap[index[i] & amask];
|
||||
}
|
||||
#else
|
||||
GLuint rmask = ctx->Pixel.MapItoRsize - 1;
|
||||
GLuint gmask = ctx->Pixel.MapItoGsize - 1;
|
||||
GLuint bmask = ctx->Pixel.MapItoBsize - 1;
|
||||
GLuint amask = ctx->Pixel.MapItoAsize - 1;
|
||||
const GLfloat *rMap = ctx->Pixel.MapItoR8;
|
||||
const GLfloat *gMap = ctx->Pixel.MapItoG8;
|
||||
const GLfloat *bMap = ctx->Pixel.MapItoB8;
|
||||
const GLfloat *aMap = ctx->Pixel.MapItoA8;
|
||||
GLuint i;
|
||||
for (i=0;i<n;i++) {
|
||||
rgba[i][RCOMP] = FLOAT_TO_CHAN(rMap[index[i] & rmask]);
|
||||
rgba[i][GCOMP] = FLOAT_TO_CHAN(gMap[index[i] & gmask]);
|
||||
rgba[i][BCOMP] = FLOAT_TO_CHAN(bMap[index[i] & bmask]);
|
||||
rgba[i][ACOMP] = FLOAT_TO_CHAN(aMap[index[i] & amask]);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@@ -1,8 +1,8 @@
|
||||
/* $Id: pixel.h,v 1.5 2000/04/12 18:54:48 brianp Exp $ */
|
||||
/* $Id: pixel.h,v 1.6 2000/10/29 18:12:15 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 3.3
|
||||
* Version: 3.5
|
||||
*
|
||||
* Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
|
||||
*
|
||||
@@ -103,9 +103,9 @@ _mesa_map_ci(const GLcontext *ctx, GLuint n, GLuint index[]);
|
||||
|
||||
|
||||
extern void
|
||||
_mesa_map_ci_to_rgba_ubyte(const GLcontext *ctx,
|
||||
GLuint n, const GLuint index[],
|
||||
GLubyte rgba[][4]);
|
||||
_mesa_map_ci_to_rgba_chan(const GLcontext *ctx,
|
||||
GLuint n, const GLuint index[],
|
||||
GLchan rgba[][4]);
|
||||
|
||||
|
||||
extern void
|
||||
@@ -116,7 +116,7 @@ _mesa_map_ci_to_rgba(const GLcontext *ctx,
|
||||
extern void
|
||||
_mesa_map_ci8_to_rgba(const GLcontext *ctx,
|
||||
GLuint n, const GLubyte index[],
|
||||
GLubyte rgba[][4]);
|
||||
GLchan rgba[][4]);
|
||||
|
||||
|
||||
extern void
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: state.c,v 1.35 2000/10/27 18:31:23 brianp Exp $ */
|
||||
/* $Id: state.c,v 1.36 2000/10/29 18:12:15 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -1107,17 +1107,14 @@ void gl_update_state( GLcontext *ctx )
|
||||
}
|
||||
|
||||
ctx->rescale_factor = 1.0F;
|
||||
|
||||
if (ctx->ModelView.flags & (MAT_FLAG_UNIFORM_SCALE |
|
||||
MAT_FLAG_GENERAL_SCALE |
|
||||
MAT_FLAG_GENERAL_3D |
|
||||
MAT_FLAG_GENERAL) )
|
||||
|
||||
{
|
||||
GLfloat *m = ctx->ModelView.inv;
|
||||
GLfloat f = m[2]*m[2] + m[6]*m[6] + m[10]*m[10];
|
||||
if (f > 1e-12 && (f-1)*(f-1) > 1e-12)
|
||||
ctx->rescale_factor = 1.0/GL_SQRT(f);
|
||||
MAT_FLAG_GENERAL) ) {
|
||||
const GLfloat *m = ctx->ModelView.inv;
|
||||
const GLfloat f = m[2] * m[2] + m[6] * m[6] + m[10] * m[10];
|
||||
if (f > 1e-12 && (f - 1.0) * (f - 1.0) > 1e-12)
|
||||
ctx->rescale_factor = 1.0 / GL_SQRT(f);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: teximage.c,v 1.53 2000/10/28 18:34:48 brianp Exp $ */
|
||||
/* $Id: teximage.c,v 1.54 2000/10/29 18:12:15 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -45,7 +45,7 @@
|
||||
/*
|
||||
* NOTES:
|
||||
*
|
||||
* Mesa's native texture datatype is GLubyte. Native formats are
|
||||
* Mesa's native texture datatype is GLchan. Native formats are
|
||||
* GL_ALPHA, GL_LUMINANCE, GL_LUMANCE_ALPHA, GL_INTENSITY, GL_RGB, GL_RGBA,
|
||||
* and GL_COLOR_INDEX.
|
||||
* Device drivers are free to implement any internal format they want.
|
||||
@@ -56,7 +56,7 @@
|
||||
static void PrintTexture(const struct gl_texture_image *img)
|
||||
{
|
||||
int i, j, c;
|
||||
GLubyte *data = img->Data;
|
||||
GLchan *data = img->Data;
|
||||
|
||||
if (!data) {
|
||||
printf("No texture data\n");
|
||||
@@ -676,11 +676,11 @@ adjust_texture_size_for_convolution(const GLcontext *ctx, GLuint dimensions,
|
||||
* care of all image transfer operations here, including convolution.
|
||||
* Input:
|
||||
* dstXoffset, dstYoffset, dstZoffset - offsets in pixels
|
||||
* dstRowStride, dstImageStride - strides in bytes
|
||||
* dstRowStride, dstImageStride - strides in GLchan's
|
||||
*/
|
||||
static void
|
||||
fill_texture_image( GLcontext *ctx, GLuint dimensions,
|
||||
GLenum texFormat, GLubyte *texAddr,
|
||||
GLenum texFormat, GLchan *texAddr,
|
||||
GLint srcWidth, GLint srcHeight, GLint srcDepth,
|
||||
GLint dstXoffset, GLint dstYoffset, GLint dstZoffset,
|
||||
GLint dstRowStride, GLint dstImageStride,
|
||||
@@ -713,14 +713,14 @@ fill_texture_image( GLcontext *ctx, GLuint dimensions,
|
||||
/* This will cover the common GL_RGB, GL_RGBA, GL_ALPHA,
|
||||
* GL_LUMINANCE_ALPHA, etc. texture formats. Use memcpy().
|
||||
*/
|
||||
const GLubyte *src = (const GLubyte *) _mesa_image_address(
|
||||
const GLchan *src = (const GLchan *) _mesa_image_address(
|
||||
srcPacking, srcAddr, srcWidth, srcHeight,
|
||||
srcFormat, srcType, 0, 0, 0);
|
||||
const GLint srcRowStride = _mesa_image_row_stride(srcPacking,
|
||||
srcWidth, srcFormat, srcType);
|
||||
const GLint widthInBytes = srcWidth * texComponents;
|
||||
GLubyte *dst = texAddr + dstYoffset * dstRowStride
|
||||
+ dstXoffset * texComponents * sizeof(GLubyte);
|
||||
const GLint widthInBytes = srcWidth * texComponents * sizeof(GLchan);
|
||||
GLchan *dst = texAddr + dstYoffset * dstRowStride
|
||||
+ dstXoffset * texComponents;
|
||||
if (srcRowStride == widthInBytes && dstRowStride == widthInBytes) {
|
||||
MEMCPY(dst, src, srcHeight * widthInBytes);
|
||||
}
|
||||
@@ -736,17 +736,17 @@ fill_texture_image( GLcontext *ctx, GLuint dimensions,
|
||||
}
|
||||
else if (srcFormat == GL_RGBA && texFormat == GL_RGB) {
|
||||
/* commonly used by Quake */
|
||||
const GLubyte *src = (const GLubyte *) _mesa_image_address(
|
||||
const GLchan *src = (const GLchan *) _mesa_image_address(
|
||||
srcPacking, srcAddr, srcWidth, srcHeight,
|
||||
srcFormat, srcType, 0, 0, 0);
|
||||
const GLint srcRowStride = _mesa_image_row_stride(srcPacking,
|
||||
srcWidth, srcFormat, srcType);
|
||||
GLubyte *dst = texAddr + dstYoffset * dstRowStride
|
||||
+ dstXoffset * texComponents * sizeof(GLubyte);
|
||||
GLchan *dst = texAddr + dstYoffset * dstRowStride
|
||||
+ dstXoffset * texComponents;
|
||||
GLint i, j;
|
||||
for (i = 0; i < srcHeight; i++) {
|
||||
const GLubyte *s = src;
|
||||
GLubyte *d = dst;
|
||||
const GLchan *s = src;
|
||||
GLchan *d = dst;
|
||||
for (j = 0; j < srcWidth; j++) {
|
||||
*d++ = *s++; /*red*/
|
||||
*d++ = *s++; /*green*/
|
||||
@@ -767,11 +767,11 @@ fill_texture_image( GLcontext *ctx, GLuint dimensions,
|
||||
/* color index texture */
|
||||
const GLenum texType = GL_UNSIGNED_BYTE;
|
||||
GLint img, row;
|
||||
GLubyte *dest = texAddr + dstZoffset * dstImageStride
|
||||
GLchan *dest = texAddr + dstZoffset * dstImageStride
|
||||
+ dstYoffset * dstRowStride
|
||||
+ dstXoffset * texComponents * sizeof(GLubyte);
|
||||
+ dstXoffset * texComponents;
|
||||
for (img = 0; img < srcDepth; img++) {
|
||||
GLubyte *destRow = dest;
|
||||
GLchan *destRow = dest;
|
||||
for (row = 0; row < srcHeight; row++) {
|
||||
const GLvoid *src = _mesa_image_address(srcPacking,
|
||||
srcAddr, srcWidth, srcHeight, srcFormat, srcType, img, row, 0);
|
||||
@@ -809,7 +809,7 @@ fill_texture_image( GLcontext *ctx, GLuint dimensions,
|
||||
for (img = 0; img < srcDepth; img++) {
|
||||
const GLfloat *srcf;
|
||||
GLfloat *dstf = tmpImage;
|
||||
GLubyte *dest;
|
||||
GLchan *dest;
|
||||
|
||||
/* unpack and do transfer ops up to convolution */
|
||||
for (row = 0; row < srcHeight; row++) {
|
||||
@@ -864,16 +864,16 @@ fill_texture_image( GLcontext *ctx, GLuint dimensions,
|
||||
* no convolution
|
||||
*/
|
||||
GLint img, row;
|
||||
GLubyte *dest = texAddr + dstZoffset * dstImageStride
|
||||
GLchan *dest = texAddr + dstZoffset * dstImageStride
|
||||
+ dstYoffset * dstRowStride
|
||||
+ dstXoffset * texComponents * sizeof(GLubyte);
|
||||
+ dstXoffset * texComponents;
|
||||
for (img = 0; img < srcDepth; img++) {
|
||||
GLubyte *destRow = dest;
|
||||
GLchan *destRow = dest;
|
||||
for (row = 0; row < srcHeight; row++) {
|
||||
const GLvoid *srcRow = _mesa_image_address(srcPacking,
|
||||
srcAddr, srcWidth, srcHeight,
|
||||
srcFormat, srcType, img, row, 0);
|
||||
_mesa_unpack_ubyte_color_span(ctx, srcWidth, texFormat, destRow,
|
||||
_mesa_unpack_chan_color_span(ctx, srcWidth, texFormat, destRow,
|
||||
srcFormat, srcType, srcRow, srcPacking,
|
||||
ctx->ImageTransferState);
|
||||
destRow += dstRowStride;
|
||||
@@ -890,7 +890,7 @@ fill_texture_image( GLcontext *ctx, GLuint dimensions,
|
||||
* X86 optimized code.
|
||||
*/
|
||||
#ifdef USE_X86_ASM
|
||||
# define EXTRA_BYTE 1
|
||||
# define EXTRA_BYTE sizeof(GLchan)
|
||||
#else
|
||||
# define EXTRA_BYTE 0
|
||||
#endif
|
||||
@@ -932,15 +932,15 @@ make_texture_image( GLcontext *ctx, GLuint dimensions,
|
||||
&convWidth, &convHeight);
|
||||
}
|
||||
|
||||
texImage->Data = (GLubyte *) MALLOC(convWidth * convHeight * depth
|
||||
* components + EXTRA_BYTE);
|
||||
texImage->Data = (GLchan *) MALLOC(convWidth * convHeight * depth
|
||||
* components * sizeof(GLchan) + EXTRA_BYTE);
|
||||
if (!texImage->Data)
|
||||
return; /* out of memory */
|
||||
|
||||
fill_texture_image(ctx, dimensions, texImage->Format, texImage->Data,
|
||||
width, height, depth, 0, 0, 0,
|
||||
convWidth * components * sizeof(GLubyte),
|
||||
convWidth * convHeight * components * sizeof(GLubyte),
|
||||
convWidth * components * sizeof(GLchan),
|
||||
convWidth * convHeight * components * sizeof(GLchan),
|
||||
srcFormat, srcType, pixels, srcPacking);
|
||||
}
|
||||
|
||||
@@ -963,7 +963,8 @@ make_null_texture( struct gl_texture_image *texImage )
|
||||
components = components_in_intformat(texImage->IntFormat);
|
||||
numPixels = texImage->Width * texImage->Height * texImage->Depth;
|
||||
|
||||
texImage->Data = (GLubyte *) MALLOC( numPixels * components + EXTRA_BYTE );
|
||||
texImage->Data = (GLchan *) MALLOC( numPixels * components * sizeof(GLchan)
|
||||
+ EXTRA_BYTE );
|
||||
|
||||
/*
|
||||
* Let's see if anyone finds this. If glTexImage2D() is called with
|
||||
@@ -982,7 +983,7 @@ make_null_texture( struct gl_texture_image *texImage )
|
||||
" "
|
||||
};
|
||||
|
||||
GLubyte *imgPtr = texImage->Data;
|
||||
GLchan *imgPtr = texImage->Data;
|
||||
GLint i, j, k;
|
||||
for (i = 0; i < texImage->Height; i++) {
|
||||
GLint srcRow = 7 - i % 8;
|
||||
@@ -990,7 +991,7 @@ make_null_texture( struct gl_texture_image *texImage )
|
||||
GLint srcCol = j % 32;
|
||||
GLint texel = (message[srcRow][srcCol]=='X') ? CHAN_MAX : 70;
|
||||
for (k=0;k<components;k++) {
|
||||
*imgPtr++ = (GLubyte) texel;
|
||||
*imgPtr++ = (GLchan) texel;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2059,7 +2060,8 @@ _mesa_get_teximage_from_driver( GLcontext *ctx, GLenum target, GLint level,
|
||||
|
||||
if (!texImage->Data) {
|
||||
/* Allocate memory for the texture image data */
|
||||
texImage->Data = (GLubyte *) MALLOC(numPixels * destComponents + EXTRA_BYTE);
|
||||
texImage->Data = (GLchan *) MALLOC(numPixels * destComponents
|
||||
* sizeof(GLchan) + EXTRA_BYTE);
|
||||
}
|
||||
|
||||
if (imgFormat == texImage->Format && imgType == GL_UNSIGNED_BYTE) {
|
||||
@@ -2079,8 +2081,8 @@ _mesa_get_teximage_from_driver( GLcontext *ctx, GLenum target, GLint level,
|
||||
const GLint srcBytesPerRow = width * srcBytesPerTexel;
|
||||
const GLenum dstType = GL_UNSIGNED_BYTE;
|
||||
const GLenum dstFormat = texImage->Format;
|
||||
const GLubyte *srcPtr = (const GLubyte *) image;
|
||||
GLubyte *destPtr = texImage->Data;
|
||||
const GLchan *srcPtr = (const GLchan *) image;
|
||||
GLchan *destPtr = texImage->Data;
|
||||
|
||||
if (texImage->Format == GL_COLOR_INDEX) {
|
||||
/* color index texture */
|
||||
@@ -2100,7 +2102,7 @@ _mesa_get_teximage_from_driver( GLcontext *ctx, GLenum target, GLint level,
|
||||
GLint img, row;
|
||||
for (img = 0; img < depth; img++) {
|
||||
for (row = 0; row < height; row++) {
|
||||
_mesa_unpack_ubyte_color_span(ctx, width, dstFormat, destPtr,
|
||||
_mesa_unpack_chan_color_span(ctx, width, dstFormat, destPtr,
|
||||
imgFormat, imgType, srcPtr, &_mesa_native_packing, GL_FALSE);
|
||||
destPtr += destBytesPerRow;
|
||||
srcPtr += srcBytesPerRow;
|
||||
@@ -2250,7 +2252,7 @@ _mesa_GetTexImage( GLenum target, GLint level, GLenum format,
|
||||
|
||||
/* convert to GL_RGBA */
|
||||
for (row = 0; row < height; row++) {
|
||||
const GLubyte *src = texImage->Data
|
||||
const GLchan *src = texImage->Data
|
||||
+ (img * height + row ) * width * comps;
|
||||
GLfloat *dst = tmpImage + row * width * 4;
|
||||
_mesa_unpack_float_color_span(ctx, width, GL_RGBA, dst,
|
||||
@@ -2306,20 +2308,20 @@ _mesa_GetTexImage( GLenum target, GLint level, GLenum format,
|
||||
assert(dest);
|
||||
if (texImage->Format == GL_RGBA) {
|
||||
/* simple case */
|
||||
const GLubyte *src = texImage->Data
|
||||
const GLchan *src = texImage->Data
|
||||
+ (img * height + row ) * width * 4;
|
||||
_mesa_pack_rgba_span( ctx, width, (CONST GLubyte (*)[4]) src,
|
||||
_mesa_pack_rgba_span( ctx, width, (CONST GLchan (*)[4]) src,
|
||||
format, type, dest, &ctx->Pack,
|
||||
ctx->ImageTransferState );
|
||||
}
|
||||
else {
|
||||
/* general case: convert row to RGBA format */
|
||||
GLubyte rgba[MAX_WIDTH][4];
|
||||
GLchan rgba[MAX_WIDTH][4];
|
||||
GLint i;
|
||||
const GLubyte *src;
|
||||
const GLchan *src;
|
||||
switch (texImage->Format) {
|
||||
case GL_ALPHA:
|
||||
src = texImage->Data + row * width * sizeof(GLubyte);
|
||||
src = texImage->Data + row * width;
|
||||
for (i = 0; i < width; i++) {
|
||||
rgba[i][RCOMP] = CHAN_MAX;
|
||||
rgba[i][GCOMP] = CHAN_MAX;
|
||||
@@ -2328,7 +2330,7 @@ _mesa_GetTexImage( GLenum target, GLint level, GLenum format,
|
||||
}
|
||||
break;
|
||||
case GL_LUMINANCE:
|
||||
src = texImage->Data + row * width * sizeof(GLubyte);
|
||||
src = texImage->Data + row * width;
|
||||
for (i = 0; i < width; i++) {
|
||||
rgba[i][RCOMP] = src[i];
|
||||
rgba[i][GCOMP] = src[i];
|
||||
@@ -2337,7 +2339,7 @@ _mesa_GetTexImage( GLenum target, GLint level, GLenum format,
|
||||
}
|
||||
break;
|
||||
case GL_LUMINANCE_ALPHA:
|
||||
src = texImage->Data + row * 2 * width * sizeof(GLubyte);
|
||||
src = texImage->Data + row * 2 * width;
|
||||
for (i = 0; i < width; i++) {
|
||||
rgba[i][RCOMP] = src[i*2+0];
|
||||
rgba[i][GCOMP] = src[i*2+0];
|
||||
@@ -2346,7 +2348,7 @@ _mesa_GetTexImage( GLenum target, GLint level, GLenum format,
|
||||
}
|
||||
break;
|
||||
case GL_INTENSITY:
|
||||
src = texImage->Data + row * width * sizeof(GLubyte);
|
||||
src = texImage->Data + row * width;
|
||||
for (i = 0; i < width; i++) {
|
||||
rgba[i][RCOMP] = src[i];
|
||||
rgba[i][GCOMP] = src[i];
|
||||
@@ -2355,7 +2357,7 @@ _mesa_GetTexImage( GLenum target, GLint level, GLenum format,
|
||||
}
|
||||
break;
|
||||
case GL_RGB:
|
||||
src = texImage->Data + row * 3 * width * sizeof(GLubyte);
|
||||
src = texImage->Data + row * 3 * width;
|
||||
for (i = 0; i < width; i++) {
|
||||
rgba[i][RCOMP] = src[i*3+0];
|
||||
rgba[i][GCOMP] = src[i*3+1];
|
||||
@@ -2370,7 +2372,7 @@ _mesa_GetTexImage( GLenum target, GLint level, GLenum format,
|
||||
default:
|
||||
gl_problem( ctx, "bad format in gl_GetTexImage" );
|
||||
}
|
||||
_mesa_pack_rgba_span( ctx, width, (const GLubyte (*)[4])rgba,
|
||||
_mesa_pack_rgba_span( ctx, width, (const GLchan (*)[4])rgba,
|
||||
format, type, dest, &ctx->Pack,
|
||||
ctx->ImageTransferState );
|
||||
} /* format */
|
||||
@@ -2499,7 +2501,7 @@ _mesa_TexSubImage2D( GLenum target, GLint level,
|
||||
if (!success) {
|
||||
/* XXX if Driver.TexSubImage2D, unpack image and try again? */
|
||||
const GLint texComps = components_in_intformat(texImage->Format);
|
||||
const GLint texRowStride = texImage->Width * texComps * sizeof(GLubyte);
|
||||
const GLint texRowStride = texImage->Width * texComps;
|
||||
GLboolean retain = GL_TRUE;
|
||||
|
||||
if (!texImage->Data) {
|
||||
@@ -2582,7 +2584,7 @@ _mesa_TexSubImage3D( GLenum target, GLint level,
|
||||
if (!success) {
|
||||
/* XXX if Driver.TexSubImage3D, unpack image and try again? */
|
||||
const GLint texComps = components_in_intformat(texImage->Format);
|
||||
const GLint texRowStride = texImage->Width * texComps * sizeof(GLubyte);
|
||||
const GLint texRowStride = texImage->Width * texComps;
|
||||
const GLint texImgStride = texRowStride * texImage->Height;
|
||||
GLboolean retain = GL_TRUE;
|
||||
|
||||
@@ -2622,16 +2624,16 @@ _mesa_TexSubImage3D( GLenum target, GLint level,
|
||||
* Input: ctx - the context
|
||||
* x, y - lower left corner
|
||||
* width, height - size of region to read
|
||||
* Return: pointer to block of GL_RGBA, GLubyte data.
|
||||
* Return: pointer to block of GL_RGBA, GLchan data.
|
||||
*/
|
||||
static GLubyte *
|
||||
static GLchan *
|
||||
read_color_image( GLcontext *ctx, GLint x, GLint y,
|
||||
GLsizei width, GLsizei height )
|
||||
{
|
||||
GLint stride, i;
|
||||
GLubyte *image, *dst;
|
||||
GLchan *image, *dst;
|
||||
|
||||
image = (GLubyte *) MALLOC(width * height * 4 * sizeof(GLubyte));
|
||||
image = (GLchan *) MALLOC(width * height * 4 * sizeof(GLchan));
|
||||
if (!image)
|
||||
return NULL;
|
||||
|
||||
@@ -2640,10 +2642,10 @@ read_color_image( GLcontext *ctx, GLint x, GLint y,
|
||||
ctx->Pixel.DriverReadBuffer );
|
||||
|
||||
dst = image;
|
||||
stride = width * 4 * sizeof(GLubyte);
|
||||
stride = width * 4;
|
||||
for (i = 0; i < height; i++) {
|
||||
gl_read_rgba_span( ctx, ctx->ReadBuffer, width, x, y + i,
|
||||
(GLubyte (*)[4]) dst );
|
||||
(GLchan (*)[4]) dst );
|
||||
dst += stride;
|
||||
}
|
||||
|
||||
@@ -2678,7 +2680,7 @@ _mesa_CopyTexImage1D( GLenum target, GLint level,
|
||||
struct gl_pixelstore_attrib unpackSave;
|
||||
|
||||
/* get image from framebuffer */
|
||||
GLubyte *image = read_color_image( ctx, x, y, width, 1 );
|
||||
GLchan *image = read_color_image( ctx, x, y, width, 1 );
|
||||
if (!image) {
|
||||
gl_error( ctx, GL_OUT_OF_MEMORY, "glCopyTexImage1D" );
|
||||
return;
|
||||
@@ -2718,7 +2720,7 @@ _mesa_CopyTexImage2D( GLenum target, GLint level, GLenum internalFormat,
|
||||
struct gl_pixelstore_attrib unpackSave;
|
||||
|
||||
/* get image from framebuffer */
|
||||
GLubyte *image = read_color_image( ctx, x, y, width, height );
|
||||
GLchan *image = read_color_image( ctx, x, y, width, height );
|
||||
if (!image) {
|
||||
gl_error( ctx, GL_OUT_OF_MEMORY, "glCopyTexImage2D" );
|
||||
return;
|
||||
@@ -2757,7 +2759,7 @@ _mesa_CopyTexSubImage1D( GLenum target, GLint level,
|
||||
struct gl_texture_unit *texUnit;
|
||||
struct gl_texture_image *teximage;
|
||||
struct gl_pixelstore_attrib unpackSave;
|
||||
GLubyte *image;
|
||||
GLchan *image;
|
||||
|
||||
texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
|
||||
teximage = texUnit->CurrentD[1]->Image[level];
|
||||
@@ -2804,7 +2806,7 @@ _mesa_CopyTexSubImage2D( GLenum target, GLint level,
|
||||
struct gl_texture_unit *texUnit;
|
||||
struct gl_texture_image *teximage;
|
||||
struct gl_pixelstore_attrib unpackSave;
|
||||
GLubyte *image;
|
||||
GLchan *image;
|
||||
|
||||
texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
|
||||
teximage = texUnit->CurrentD[2]->Image[level];
|
||||
@@ -2851,7 +2853,7 @@ _mesa_CopyTexSubImage3D( GLenum target, GLint level,
|
||||
struct gl_texture_unit *texUnit;
|
||||
struct gl_texture_image *teximage;
|
||||
struct gl_pixelstore_attrib unpackSave;
|
||||
GLubyte *image;
|
||||
GLchan *image;
|
||||
|
||||
texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
|
||||
teximage = texUnit->CurrentD[3]->Image[level];
|
||||
|
@@ -1,8 +1,8 @@
|
||||
/* $Id: texutil.c,v 1.7 2000/09/13 22:07:20 brianp Exp $ */
|
||||
/* $Id: texutil.c,v 1.8 2000/10/29 18:12:15 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 3.4
|
||||
* Version: 3.5
|
||||
*
|
||||
* Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
|
||||
*
|
||||
@@ -681,7 +681,7 @@ _mesa_convert_teximage(MesaIntTexFormat dstFormat,
|
||||
GLubyte r = src[col3 + 0];
|
||||
GLubyte g = src[col3 + 1];
|
||||
GLubyte b = src[col3 + 2];
|
||||
GLubyte a = 255;
|
||||
GLubyte a = CHAN_MAX;
|
||||
dst[col] = (a << 24) | (r << 16) | (g << 8) | b;
|
||||
}
|
||||
src += srcStride;
|
||||
@@ -702,7 +702,7 @@ _mesa_convert_teximage(MesaIntTexFormat dstFormat,
|
||||
GLubyte r = src[col3 + 0];
|
||||
GLubyte g = src[col3 + 1];
|
||||
GLubyte b = src[col3 + 2];
|
||||
GLubyte a = 255;
|
||||
GLubyte a = CHAN_MAX;
|
||||
dst[col] = (a << 24) | (r << 16) | (g << 8) | b;
|
||||
}
|
||||
dst = (GLuint *) ((GLubyte *) dst + dstRowStride);
|
||||
@@ -1305,21 +1305,21 @@ _mesa_convert_texsubimage(MesaIntTexFormat dstFormat,
|
||||
|
||||
|
||||
/*
|
||||
* Used to convert 16-bit texels into GLubyte color components.
|
||||
* Used to convert 16-bit texels into GLchan color components.
|
||||
*/
|
||||
static GLubyte R5G6B5toRed[0xffff];
|
||||
static GLubyte R5G6B5toGreen[0xffff];
|
||||
static GLubyte R5G6B5toBlue[0xffff];
|
||||
static GLchan R5G6B5toRed[0xffff];
|
||||
static GLchan R5G6B5toGreen[0xffff];
|
||||
static GLchan R5G6B5toBlue[0xffff];
|
||||
|
||||
static GLubyte A4R4G4B4toRed[0xffff];
|
||||
static GLubyte A4R4G4B4toGreen[0xffff];
|
||||
static GLubyte A4R4G4B4toBlue[0xffff];
|
||||
static GLubyte A4R4G4B4toAlpha[0xffff];
|
||||
static GLchan A4R4G4B4toRed[0xffff];
|
||||
static GLchan A4R4G4B4toGreen[0xffff];
|
||||
static GLchan A4R4G4B4toBlue[0xffff];
|
||||
static GLchan A4R4G4B4toAlpha[0xffff];
|
||||
|
||||
static GLubyte A1R5G5B5toRed[0xffff];
|
||||
static GLubyte A1R5G5B5toGreen[0xffff];
|
||||
static GLubyte A1R5G5B5toBlue[0xffff];
|
||||
static GLubyte A1R5G5B5toAlpha[0xffff];
|
||||
static GLchan A1R5G5B5toRed[0xffff];
|
||||
static GLchan A1R5G5B5toGreen[0xffff];
|
||||
static GLchan A1R5G5B5toBlue[0xffff];
|
||||
static GLchan A1R5G5B5toAlpha[0xffff];
|
||||
|
||||
static void
|
||||
generate_lookup_tables(void)
|
||||
@@ -1329,9 +1329,9 @@ generate_lookup_tables(void)
|
||||
GLint r = (i >> 8) & 0xf8;
|
||||
GLint g = (i >> 3) & 0xfc;
|
||||
GLint b = (i << 3) & 0xf8;
|
||||
r = r * 255 / 0xf8;
|
||||
g = g * 255 / 0xfc;
|
||||
b = b * 255 / 0xf8;
|
||||
r = r * CHAN_MAX / 0xf8;
|
||||
g = g * CHAN_MAX / 0xfc;
|
||||
b = b * CHAN_MAX / 0xf8;
|
||||
R5G6B5toRed[i] = r;
|
||||
R5G6B5toGreen[i] = g;
|
||||
R5G6B5toBlue[i] = b;
|
||||
@@ -1342,10 +1342,10 @@ generate_lookup_tables(void)
|
||||
GLint g = (i >> 4) & 0xf;
|
||||
GLint b = (i ) & 0xf;
|
||||
GLint a = (i >> 12) & 0xf;
|
||||
r = r * 255 / 0xf;
|
||||
g = g * 255 / 0xf;
|
||||
b = b * 255 / 0xf;
|
||||
a = a * 255 / 0xf;
|
||||
r = r * CHAN_MAX / 0xf;
|
||||
g = g * CHAN_MAX / 0xf;
|
||||
b = b * CHAN_MAX / 0xf;
|
||||
a = a * CHAN_MAX / 0xf;
|
||||
A4R4G4B4toRed[i] = r;
|
||||
A4R4G4B4toGreen[i] = g;
|
||||
A4R4G4B4toBlue[i] = b;
|
||||
@@ -1357,10 +1357,10 @@ generate_lookup_tables(void)
|
||||
GLint g = (i >> 5) & 0xf8;
|
||||
GLint b = (i ) & 0xf8;
|
||||
GLint a = (i >> 15) & 0x1;
|
||||
r = r * 255 / 0xf8;
|
||||
g = g * 255 / 0xf8;
|
||||
b = b * 255 / 0xf8;
|
||||
a = a * 255;
|
||||
r = r * CHAN_MAX / 0xf8;
|
||||
g = g * CHAN_MAX / 0xf8;
|
||||
b = b * CHAN_MAX / 0xf8;
|
||||
a = a * CHAN_MAX;
|
||||
A1R5G5B5toRed[i] = r;
|
||||
A1R5G5B5toGreen[i] = g;
|
||||
A1R5G5B5toBlue[i] = b;
|
||||
@@ -1393,7 +1393,7 @@ _mesa_unconvert_teximage(MesaIntTexFormat srcFormat,
|
||||
GLint srcWidth, GLint srcHeight,
|
||||
const GLvoid *srcImage, GLint srcRowStride,
|
||||
GLint dstWidth, GLint dstHeight,
|
||||
GLenum dstFormat, GLubyte *dstImage)
|
||||
GLenum dstFormat, GLchan *dstImage)
|
||||
{
|
||||
static GLboolean firstCall = GL_TRUE;
|
||||
const GLint wScale = srcWidth / dstWidth; /* must be power of two */
|
||||
@@ -1429,11 +1429,11 @@ _mesa_unconvert_teximage(MesaIntTexFormat srcFormat,
|
||||
#endif
|
||||
if (wScale == 1 && hScale == 1) {
|
||||
/* easy! */
|
||||
MEMCPY(dstImage, srcImage, dstWidth * dstHeight * sizeof(GLubyte));
|
||||
MEMCPY(dstImage, srcImage, dstWidth * dstHeight * sizeof(GLchan));
|
||||
}
|
||||
else {
|
||||
/* rescale */
|
||||
const GLubyte *src8 = (const GLubyte *) srcImage;
|
||||
const GLchan *src8 = (const GLchan *) srcImage;
|
||||
GLint row, col;
|
||||
for (row = 0; row < dstHeight; row++) {
|
||||
GLint srcRow = row * hScale;
|
||||
|
@@ -1,8 +1,8 @@
|
||||
/* $Id: texutil.h,v 1.4 2000/08/29 23:30:53 brianp Exp $ */
|
||||
/* $Id: texutil.h,v 1.5 2000/10/29 18:12:15 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 3.4
|
||||
* Version: 3.5
|
||||
*
|
||||
* Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
|
||||
*
|
||||
@@ -81,7 +81,7 @@ _mesa_unconvert_teximage(MesaIntTexFormat srcFormat,
|
||||
GLint srcWidth, GLint srcHeight,
|
||||
const GLvoid *srcImage, GLint srcRowStride,
|
||||
GLint dstWidth, GLint dstHeight,
|
||||
GLenum dstFormat, GLubyte *dstImage);
|
||||
GLenum dstFormat, GLchan *dstImage);
|
||||
|
||||
|
||||
extern void
|
||||
|
Reference in New Issue
Block a user