This is mmesa24.c in view mode; [Download] [Up]
/****************************************************************************
*
* Mesa bindings for SciTech MGL
*
* Copyright (C) 1996 SciTech Software.
* All rights reserved.
*
* Filename: $Workfile: mmesa24.c $
* Version: $Revision: 1.0 $
*
* Language: ANSI C
* Environment: Any
*
* Description: Optimized 24bpp rendering functions.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Date: 02 Apr 1997 13:30:02 $ $Author: KendallB $
*
****************************************************************************/
#include "mmesap.h"
/*------------------------- Implementation --------------------------------*/
#pragma warn -par
/**********************************************************************/
/***** Write spans of pixels *****/
/**********************************************************************/
void _mmesa_write_span_24_RGB(GLcontext *ctx,GLuint n, GLint x, GLint y,
GLubyte red[], GLubyte green[],GLubyte blue[],
GLubyte alpha[],GLubyte mask[])
{
uchar *d = PACKED24_pixelAddr(x,FLIP(y));
if (mask) {
while (n--) {
if (mask[0]) { d[0] = blue[0]; d[1] = green[0]; d[2] = red[0]; }
d += 3; red++; green++; blue++; mask++;
}
}
else {
while (n--) {
d[0] = blue[0]; d[1] = green[0]; d[2] = red[0];
d += 3; red++; green++; blue++;
}
}
}
void _mmesa_write_span_24_BGR(GLcontext *ctx,GLuint n, GLint x, GLint y,
GLubyte red[], GLubyte green[],GLubyte blue[],
GLubyte alpha[],GLubyte mask[])
{
uchar *d = PACKED24_pixelAddr(x,FLIP(y));
if (mask) {
while (n--) {
if (mask[0]) { d[0] = red[0]; d[1] = green[0]; d[2] = blue[0]; }
d += 3; red++; green++; blue++; mask++;
}
}
else {
while (n--) {
d[0] = red[0]; d[1] = green[0]; d[2] = blue[0];
d += 3; red++; green++; blue++;
}
}
}
void _mmesa_write_span_mono_24_RGB(GLcontext *ctx,GLuint n,GLint x,GLint y,
GLubyte mask[])
{
uchar *d = PACKED24_pixelAddr(x,FLIP(y));
while (n--) {
if (mask[0]) { d[0] = RC.blue; d[1] = RC.green; d[2] = RC.red; }
d += 3; mask++;
}
}
void _mmesa_write_span_mono_24_BGR(GLcontext *ctx,GLuint n,GLint x,GLint y,
GLubyte mask[])
{
uchar *d = PACKED24_pixelAddr(x,FLIP(y));
while (n--) {
if (mask[0]) { d[0] = RC.red; d[1] = RC.green; d[2] = RC.blue; }
d += 3; mask++;
}
}
/**********************************************************************/
/***** Write arrays of pixels *****/
/**********************************************************************/
void _mmesa_write_pixels_24_RGB(GLcontext *ctx,GLuint n, GLint x[],
GLint y[],GLubyte r[], GLubyte g[],GLubyte b[],
GLubyte a[],GLubyte mask[])
{
while (n--) {
if (mask[0]) {
uchar *d = PACKED24_pixelAddr(x[0],FLIP(y[0]));
d[0] = b[0]; d[1] = g[0]; d[2] = r[0];
}
r++; g++; b++; mask++; x++; y++;
}
}
void _mmesa_write_pixels_24_BGR(GLcontext *ctx,GLuint n, GLint x[],
GLint y[],GLubyte r[], GLubyte g[],GLubyte b[],
GLubyte a[],GLubyte mask[])
{
while (n--) {
if (mask[0]) {
uchar *d = PACKED24_pixelAddr(x[0],FLIP(y[0]));
d[0] = r[0]; d[1] = g[0]; d[2] = b[0];
}
r++; g++; b++; mask++; x++; y++;
}
}
void _mmesa_write_pixels_mono_24_RGB(GLcontext *ctx,GLuint n,GLint x[],
GLint y[],GLubyte mask[])
{
while (n--) {
if (mask[0]) {
uchar *d = PACKED24_pixelAddr(x[0],FLIP(y[0]));
d[0] = RC.blue; d[1] = RC.green; d[2] = RC.red;
}
mask++; x++; y++;
}
}
void _mmesa_write_pixels_mono_24_BGR(GLcontext *ctx,GLuint n,GLint x[],
GLint y[],GLubyte mask[])
{
while (n--) {
if (mask[0]) {
uchar *d = PACKED24_pixelAddr(x[0],FLIP(y[0]));
d[0] = RC.red; d[1] = RC.green; d[2] = RC.blue;
}
mask++; x++; y++;
}
}
/**********************************************************************/
/***** Read spans of pixels *****/
/**********************************************************************/
void _mmesa_read_span_24_RGB(GLcontext *ctx,GLuint n, GLint x, GLint y,
GLubyte red[], GLubyte green[],GLubyte blue[], GLubyte alpha[])
{
uchar *d = PACKED24_pixelAddr(x,FLIP(y));
while (n--) {
blue[0] = d[0]; green[0] = d[1]; red[0] = d[2];
red++; green++; blue++; d += 3;
}
}
void _mmesa_read_span_24_BGR(GLcontext *ctx,GLuint n, GLint x, GLint y,
GLubyte red[], GLubyte green[],GLubyte blue[], GLubyte alpha[])
{
uchar *d = PACKED24_pixelAddr(x,FLIP(y));
while (n--) {
red[0] = d[0]; green[0] = d[1]; blue[0] = d[2];
red++; green++; blue++; d += 3;
}
}
/**********************************************************************/
/***** Read arrays of pixels *****/
/**********************************************************************/
void _mmesa_read_pixels_24_RGB(GLcontext *ctx,GLuint n, GLint x[],
GLint y[],GLubyte red[], GLubyte green[],GLubyte blue[],
GLubyte alpha[],GLubyte mask[])
{
while (n--) {
if (mask[0]) {
uchar *d = PACKED24_pixelAddr(x[0],FLIP(y[0]));
blue[0] = d[0]; green[0] = d[1]; red[0] = d[2];
}
red++; green++; blue++; mask++; x++; y++;
}
}
void _mmesa_read_pixels_24_BGR(GLcontext *ctx,GLuint n, GLint x[],
GLint y[],GLubyte red[], GLubyte green[],GLubyte blue[],
GLubyte alpha[],GLubyte mask[])
{
while (n--) {
if (mask[0]) {
uchar *d = PACKED24_pixelAddr(x[0],FLIP(y[0]));
red[0] = d[0]; green[0] = d[1]; blue[0] = d[2];
}
red++; green++; blue++; mask++; x++; y++;
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.