1 /* Copyright (C) 1999 Aladdin Enterprises. All rights reserved. 2 3 This software is provided AS-IS with no warranty, either express or 4 implied. 5 6 This software is distributed under license and may not be copied, 7 modified or distributed except as expressly authorized under the terms 8 of the license contained in the file LICENSE in this distribution. 9 10 For more information about licensing, please refer to 11 http://www.ghostscript.com/licensing/. For information on 12 commercial licensing, go to http://www.artifex.com/licensing/ or 13 contact Artifex Software, Inc., 101 Lucas Valley Road #110, 14 San Rafael, CA 94903, U.S.A., +1(415)492-9861. 15 */ 16 17 /* $Id: gxdevbuf.h,v 1.5 2002/06/16 08:45:43 lpd Exp $ */ 18 /* Definitions for device buffer management */ 19 20 #ifndef gxdevbuf_INCLUDED 21 # define gxdevbuf_INCLUDED 22 23 #include "gxrplane.h" /* for _buf_device procedures */ 24 25 /* 26 * Define the procedures for managing rendering buffers. These are 27 * currently associated with printer and/or banded devices, but they 28 * might have broader applicability in the future. 29 * 30 * For "async" devices, size_buf_device may be called by either the 31 * writer or the reader thread; the other procedures may be called only 32 * by the reader thread. 33 */ 34 35 #ifndef gx_device_DEFINED 36 # define gx_device_DEFINED 37 typedef struct gx_device_s gx_device; 38 #endif 39 40 /* Define the structure for returning buffer space requirements. */ 41 typedef struct gx_device_buf_space_s { 42 ulong bits; 43 ulong line_ptrs; 44 uint raster; 45 } gx_device_buf_space_t; 46 47 typedef struct gx_device_buf_procs_s { 48 49 /* 50 * Create the buffer device(s) for the pixels or a plane of a page 51 * or band. We use 'buf' instead of buffer because VMS limits 52 * procedure names to 31 characters. Note that the client must 53 * fully initialize the render_plane using gx_render_plane_init. 54 * 55 * If mem is NULL, *pbdev must already point to a gx_device_memory, 56 * and this procedure must initialize it. If this isn't possible 57 * (e.g., if render_plane calls for a single plane), 58 * create_buf_device must return an error. 59 */ 60 61 #define dev_proc_create_buf_device(proc)\ 62 int proc(gx_device **pbdev, gx_device *target,\ 63 const gx_render_plane_t *render_plane, gs_memory_t *mem,\ 64 bool for_band) 65 66 dev_proc_create_buf_device((*create_buf_device)); 67 68 /* 69 * Return the amount of buffer space needed by setup_buf_device. 70 */ 71 72 #define dev_proc_size_buf_device(proc)\ 73 int proc(gx_device_buf_space_t *space, gx_device *target,\ 74 const gx_render_plane_t *render_plane,\ 75 int height, bool for_band) 76 77 dev_proc_size_buf_device((*size_buf_device)); 78 79 /* 80 * Set up the buffer device with a specific buffer. 81 * If line_ptrs is not NULL, it points to an allocated area for 82 * the scan line pointers of an eventual memory device. 83 * 84 * Note that this procedure is used for two different purposes: 85 * setting up a full band buffer for rendering, and setting up a 86 * partial-band buffer device for reading out selected scan lines. 87 * The latter case requires that we also pass the full height of the 88 * buffer, for multi-planar memory devices; in the former case, 89 * y = 0 and setup_height = full_height. 90 */ 91 92 #define dev_proc_setup_buf_device(proc)\ 93 int proc(gx_device *bdev, byte *buffer, int bytes_per_line,\ 94 byte **line_ptrs /*[height]*/, int y, int setup_height,\ 95 int full_height) 96 97 dev_proc_setup_buf_device((*setup_buf_device)); 98 99 /* 100 * Destroy the buffer device and all associated structures. 101 * Note that this does *not* destroy the buffered data. 102 */ 103 104 #define dev_proc_destroy_buf_device(proc)\ 105 void proc(gx_device *bdev) 106 107 dev_proc_destroy_buf_device((*destroy_buf_device)); 108 109 } gx_device_buf_procs_t; 110 111 /* Define default buffer device management procedures. */ 112 dev_proc_create_buf_device(gx_default_create_buf_device); 113 dev_proc_size_buf_device(gx_default_size_buf_device); 114 dev_proc_setup_buf_device(gx_default_setup_buf_device); 115 dev_proc_destroy_buf_device(gx_default_destroy_buf_device); 116 117 #endif /* gxdevbuf_INCLUDED */ 118