home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 5 / MA_Cover_5.iso / ppc / mesa / src / mmesa24.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-01-31  |  6.8 KB  |  210 lines

  1. /****************************************************************************
  2. *
  3. *                      Mesa bindings for SciTech MGL
  4. *
  5. *                   Copyright (C) 1996 SciTech Software.
  6. *                           All rights reserved.
  7. *
  8. * Filename:     $Workfile:   mmesa24.c  $
  9. * Version:      $Revision:   1.0  $
  10. *
  11. * Language:     ANSI C
  12. * Environment:  Any
  13. *
  14. * Description:  Optimized 24bpp rendering functions.
  15. *
  16. * This library is free software; you can redistribute it and/or
  17. * modify it under the terms of the GNU Library General Public
  18. * License as published by the Free Software Foundation; either
  19. * version 2 of the License, or (at your option) any later version.
  20. *
  21. * This library is distributed in the hope that it will be useful,
  22. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  23. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  24. * Library General Public License for more details.
  25. *
  26. * You should have received a copy of the GNU Library General Public
  27. * License along with this library; if not, write to the Free
  28. * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  29. *
  30. * $Date:   02 Apr 1997 13:30:02  $ $Author:   KendallB  $
  31. *
  32. ****************************************************************************/
  33.  
  34. #include "mmesap.h"
  35.  
  36. /*------------------------- Implementation --------------------------------*/
  37.  
  38. #pragma warn -par
  39.  
  40. /**********************************************************************/
  41. /*****            Write spans of pixels                           *****/
  42. /**********************************************************************/
  43.  
  44. void _mmesa_write_span_24_RGB(GLcontext *ctx,GLuint n, GLint x, GLint y,
  45.     GLubyte red[], GLubyte green[],GLubyte blue[],
  46.     GLubyte alpha[],GLubyte mask[])
  47. {
  48.     uchar *d = PACKED24_pixelAddr(x,FLIP(y));
  49.     if (mask) {
  50.         while (n--) {
  51.             if (mask[0]) { d[0] = blue[0]; d[1] = green[0]; d[2] = red[0]; }
  52.             d += 3; red++; green++; blue++; mask++;
  53.             }
  54.         }
  55.     else {
  56.         while (n--) {
  57.             d[0] = blue[0]; d[1] = green[0]; d[2] = red[0];
  58.             d += 3; red++; green++; blue++;
  59.             }
  60.         }
  61. }
  62.  
  63. void _mmesa_write_span_24_BGR(GLcontext *ctx,GLuint n, GLint x, GLint y,
  64.     GLubyte red[], GLubyte green[],GLubyte blue[],
  65.     GLubyte alpha[],GLubyte mask[])
  66. {
  67.     uchar *d = PACKED24_pixelAddr(x,FLIP(y));
  68.     if (mask) {
  69.         while (n--) {
  70.             if (mask[0]) { d[0] = red[0]; d[1] = green[0]; d[2] = blue[0]; }
  71.             d += 3; red++; green++; blue++; mask++;
  72.             }
  73.         }
  74.     else {
  75.         while (n--) {
  76.             d[0] = red[0]; d[1] = green[0]; d[2] = blue[0];
  77.             d += 3; red++; green++; blue++;
  78.             }
  79.         }
  80. }
  81.  
  82. void _mmesa_write_span_mono_24_RGB(GLcontext *ctx,GLuint n,GLint x,GLint y,
  83.     GLubyte mask[])
  84. {
  85.     uchar *d = PACKED24_pixelAddr(x,FLIP(y));
  86.     while (n--) {
  87.         if (mask[0]) { d[0] = RC.blue; d[1] = RC.green; d[2] = RC.red; }
  88.         d += 3; mask++;
  89.         }
  90. }
  91.  
  92. void _mmesa_write_span_mono_24_BGR(GLcontext *ctx,GLuint n,GLint x,GLint y,
  93.     GLubyte mask[])
  94. {
  95.     uchar *d = PACKED24_pixelAddr(x,FLIP(y));
  96.     while (n--) {
  97.         if (mask[0]) { d[0] = RC.red; d[1] = RC.green; d[2] = RC.blue; }
  98.         d += 3; mask++;
  99.         }
  100. }
  101.  
  102. /**********************************************************************/
  103. /*****              Write arrays of pixels                        *****/
  104. /**********************************************************************/
  105.  
  106. void _mmesa_write_pixels_24_RGB(GLcontext *ctx,GLuint n, GLint x[],
  107.     GLint y[],GLubyte r[], GLubyte g[],GLubyte b[],
  108.     GLubyte a[],GLubyte mask[])
  109. {
  110.     while (n--) {
  111.         if (mask[0]) {
  112.             uchar *d = PACKED24_pixelAddr(x[0],FLIP(y[0]));
  113.             d[0] = b[0]; d[1] = g[0]; d[2] = r[0];
  114.             }
  115.         r++; g++; b++; mask++; x++; y++;
  116.         }
  117. }
  118.  
  119. void _mmesa_write_pixels_24_BGR(GLcontext *ctx,GLuint n, GLint x[],
  120.     GLint y[],GLubyte r[], GLubyte g[],GLubyte b[],
  121.     GLubyte a[],GLubyte mask[])
  122. {
  123.     while (n--) {
  124.         if (mask[0]) {
  125.             uchar *d = PACKED24_pixelAddr(x[0],FLIP(y[0]));
  126.             d[0] = r[0]; d[1] = g[0]; d[2] = b[0];
  127.             }
  128.         r++; g++; b++; mask++; x++; y++;
  129.         }
  130. }
  131.  
  132. void _mmesa_write_pixels_mono_24_RGB(GLcontext *ctx,GLuint n,GLint x[],
  133.     GLint y[],GLubyte mask[])
  134. {
  135.     while (n--) {
  136.         if (mask[0]) {
  137.             uchar *d = PACKED24_pixelAddr(x[0],FLIP(y[0]));
  138.             d[0] = RC.blue; d[1] = RC.green; d[2] = RC.red;
  139.             }
  140.         mask++; x++; y++;
  141.         }
  142. }
  143.  
  144. void _mmesa_write_pixels_mono_24_BGR(GLcontext *ctx,GLuint n,GLint x[],
  145.     GLint y[],GLubyte mask[])
  146. {
  147.     while (n--) {
  148.         if (mask[0]) {
  149.             uchar *d = PACKED24_pixelAddr(x[0],FLIP(y[0]));
  150.             d[0] = RC.red; d[1] = RC.green; d[2] = RC.blue;
  151.             }
  152.         mask++; x++; y++;
  153.         }
  154. }
  155.  
  156. /**********************************************************************/
  157. /*****                 Read spans of pixels                       *****/
  158. /**********************************************************************/
  159.  
  160. void _mmesa_read_span_24_RGB(GLcontext *ctx,GLuint n, GLint x, GLint y,
  161.     GLubyte red[], GLubyte green[],GLubyte blue[], GLubyte alpha[])
  162. {
  163.     uchar *d = PACKED24_pixelAddr(x,FLIP(y));
  164.     while (n--) {
  165.         blue[0] = d[0]; green[0] = d[1]; red[0] = d[2];
  166.         red++; green++; blue++; d += 3;
  167.         }
  168. }
  169.  
  170. void _mmesa_read_span_24_BGR(GLcontext *ctx,GLuint n, GLint x, GLint y,
  171.     GLubyte red[], GLubyte green[],GLubyte blue[], GLubyte alpha[])
  172. {
  173.     uchar *d = PACKED24_pixelAddr(x,FLIP(y));
  174.     while (n--) {
  175.         red[0] = d[0]; green[0] = d[1]; blue[0] = d[2];
  176.         red++; green++; blue++; d += 3;
  177.         }
  178. }
  179.  
  180. /**********************************************************************/
  181. /*****                   Read arrays of pixels                    *****/
  182. /**********************************************************************/
  183.  
  184. void _mmesa_read_pixels_24_RGB(GLcontext *ctx,GLuint n, GLint x[],
  185.     GLint y[],GLubyte red[], GLubyte green[],GLubyte blue[],
  186.     GLubyte alpha[],GLubyte mask[])
  187. {
  188.     while (n--) {
  189.         if (mask[0]) {
  190.             uchar *d = PACKED24_pixelAddr(x[0],FLIP(y[0]));
  191.             blue[0] = d[0]; green[0] = d[1]; red[0] = d[2];
  192.             }
  193.         red++; green++; blue++; mask++; x++; y++;
  194.         }
  195. }
  196.  
  197. void _mmesa_read_pixels_24_BGR(GLcontext *ctx,GLuint n, GLint x[],
  198.     GLint y[],GLubyte red[], GLubyte green[],GLubyte blue[],
  199.     GLubyte alpha[],GLubyte mask[])
  200. {
  201.     while (n--) {
  202.         if (mask[0]) {
  203.             uchar *d = PACKED24_pixelAddr(x[0],FLIP(y[0]));
  204.             red[0] = d[0]; green[0] = d[1]; blue[0] = d[2];
  205.             }
  206.         red++; green++; blue++; mask++; x++; y++;
  207.         }
  208. }
  209.  
  210.