brender-v1.3.2/inc/pixelmap.h

411 lines
9.1 KiB
C
Raw Normal View History

/*
* Copyright (c) 1993-1995 by Argonaut Technologies Limited. All rights reserved.
*
* $Id: pixelmap.h 1.7 1998/09/09 13:28:45 johng Exp $
* $Locker: $
*
* A stopgap 2D pixelmap structure for brender. This should really be the
* pixelmap data type from the underlying 2D system (whatever that will
* be)
*
* Used for input (maps) and output (render buffer)
*/
#ifndef _PIXELMAP_H_
#define _PIXELMAP_H_
/*
* Various types of pixel
*/
enum {
BR_PMT_INDEX_1,
BR_PMT_INDEX_2,
BR_PMT_INDEX_4,
/*
* Each pixel is an index into a colour map
*/
BR_PMT_INDEX_8,
/*
* True colour RGB
*/
BR_PMT_RGB_555, /* 16 bits per pixel */
BR_PMT_RGB_565, /* 16 bits per pixel */
BR_PMT_RGB_888, /* 24 bits per pixel */
BR_PMT_RGBX_888, /* 32 bits per pixel */
BR_PMT_RGBA_8888, /* 32 bits per pixel */
/*
* YUV
*/
BR_PMT_YUYV_8888, /* YU YV YU YV ... */
BR_PMT_YUV_888,
/*
* Depth
*/
BR_PMT_DEPTH_16,
BR_PMT_DEPTH_32,
/*
* Opacity
*/
BR_PMT_ALPHA_8,
/*
* Opacity + Index.
*/
BR_PMT_INDEXA_88,
/*
* Bump maps
*/
BR_PMT_NORMAL_INDEX_8,
BR_PMT_NORMAL_XYZ,
/*
* Wrong way around 15 bit true colour
*/
BR_PMT_BGR_555,
/*
* 16 bit r,g,b & alpha
*/
BR_PMT_RGBA_4444,
/*
* Handy types for converting to 15/16 bit
*/
BR_PMT_RBG_bab,
BR_PMT_RBG_1aba,
/*
* Pixelmap extensions.
*/
BR_PMT_RGB_332,
BR_PMT_DEPTH_8,
BR_PMT_ARGB_8888,
BR_PMT_ALPHA_4,
BR_PMT_INDEXA_44,
BR_PMT_DEPTH_15,
BR_PMT_DEPTH_31,
BR_PMT_DEPTH_FP16,
BR_PMT_DEPTH_FP15,
BR_PMT_RGBA_5551,
BR_PMT_ARGB_1555,
BR_PMT_ARGB_4444,
BR_PMT_MAX
};
/*
* pixelmap flags
*/
enum {
/*
* No direct access to pixels
*/
BR_PMF_NO_ACCESS = 0x01,
BR_PMF_LINEAR = 0x02,
BR_PMF_ROW_WHOLEPIXELS = 0x04,
BR_PMF_PIXELS_NEAR = 0x08,
BR_PMF_PIXELS_NEAR_ALIAS = 0x10,
BR_PMF_KEYED_TRANSPARENCY = 0x20,
BR_PMF_KEEP_ORIGINAL = 0x40,
/*
* Experimental - if set then pixelmap is tiled - low bits of Y are moved to least significant part of pixel address
*/
BR_PMF_ENABLE_TEXTURE_COMPRESSION = 0x80,
// BR_PMF_TILED = 0x80,
};
#define BR_PM_TILE_SIZE 2
/*
* Public structure that is comaptible with a device_pixelmap
*/
typedef struct br_pixelmap {
br_uint_32 _reserved;
/*
* Optional identifier (when maps used as textures/tables etc.)
*/
char *identifier;
/*
* pointer to raw pixel data
*/
void * pixels;
/*
* Optional device speicific information
*/
br_uint_32 pixels_qualifier;
/*
* Optional pixel map when pixels are indexed.
*/
struct br_pixelmap * map;
/*
* Key colour ranges
*/
br_colour_range src_key;
br_colour_range dst_key;
/*
* Key colour
*/
br_uint_32 key;
/*
* Byte difference between pixels at same column of adjacent rows
*/
br_int_16 row_bytes;
/*
* if ! 0, offset (in top level rows) from top map start to top-1 map
*/
br_int_16 mip_offset;
/*
* Type of pixels
*/
br_uint_8 type;
/*
* Flags
*/
br_uint_8 flags;
/*
* Copy function
*/
br_uint_16 copy_function;
/*
* top left visible region in pixels from pixel at 'pixel' pointer
*/
br_uint_16 base_x;
br_uint_16 base_y;
/*
* Width and height of bitmap in pixels
*/
br_uint_16 width;
br_uint_16 height;
/*
* Local origin for any graphics system rendering into map, relative
* to 'base'
*/
br_int_16 origin_x;
br_int_16 origin_y;
/*
* Workspace fields for user and database
*/
void *user;
void *stored;
} br_pixelmap;
/*
* A macro that declares the pixelmap member entries - this is so that
* various compatible structures can be created
*/
#define BR_PIXELMAP_MEMBERS \
/* \
* pointer to raw pixel data \
*/ \
void * pm_pixels; \
\
/* \
* Optional device speicific information \
*/ \
br_uint_32 pm_pixels_qualifier; \
\
/* \
* Optional pixel map when pixels are indexed. \
*/ \
struct br_pixelmap * pm_map; \
\
/* \
* Key colour ranges \
*/ \
br_colour_range pm_src_key; \
br_colour_range pm_dst_key; \
\
/* \
* Key colour \
*/ \
br_uint_32 pm_key; \
\
/* \
* Byte difference between pixels at same column of adjacent rows \
*/ \
br_int_16 pm_row_bytes; \
\
/* \
* if ! 0, offset (in top level rows) from top map start to top-1 map \
*/ \
br_int_16 pm_mip_offset; \
\
/* \
* Type of pixels \
*/ \
br_uint_8 pm_type; \
\
/* \
* Flags \
*/ \
br_uint_8 pm_flags; \
\
/* \
* Copy function \
*/ \
br_uint_16 pm_copy_function; \
\
\
/* \
* top left visible region in pixels from pixel at 'pixel' pointer \
*/ \
br_uint_16 pm_base_x; \
br_uint_16 pm_base_y; \
\
/* \
* Width and height of bitmap in pixels \
*/ \
br_uint_16 pm_width; \
br_uint_16 pm_height; \
\
/* \
* Local origin for any graphics system rendering into map, relative \
* to 'base' \
*/ \
br_int_16 pm_origin_x; \
br_int_16 pm_origin_y; \
\
/* \
* Workspace fields for user and database \
*/ \
void *pm_user; \
void *pm_stored; \
/*
* Flags to BrPixelMapAllocate
*/
enum br_pixelmap_allocate_flags {
BR_PMAF_NORMAL = 0x0000, /* Setup pixelmap so that 0th scanline is at low memory */
BR_PMAF_INVERTED = 0x0001, /* Setup pixelmap so that 0th scanline is at high memory */
BR_PMAF_NO_PIXELS = 0x0002, /* Don't allocate any pixel data */
};
/*
* Channel flags
*/
enum br_pixelmap_channel_mask {
BR_PMCHAN_INDEX = 0x0001,
BR_PMCHAN_RGB = 0x0002,
BR_PMCHAN_DEPTH = 0x0004,
BR_PMCHAN_ALPHA = 0x0008,
BR_PMCHAN_YUV = 0x0010,
BR_PMCHAN_VECTOR= 0x0020
};
/*
* Matching pixelmap types
*/
enum br_pmmatch_type {
BR_PMMATCH_OFFSCREEN,
BR_PMMATCH_DEPTH_16,
BR_PMMATCH_DEPTH,
BR_PMMATCH_HIDDEN,
BR_PMMATCH_HIDDEN_BUFFER,
BR_PMMATCH_NO_RENDER,
BR_PMMATCH_DEPTH_8,
BR_PMMATCH_DEPTH_32,
BR_PMMATCH_DEPTH_15,
BR_PMMATCH_DEPTH_31,
BR_PMMATCH_DEPTH_FP15,
BR_PMMATCH_DEPTH_FP16,
BR_PMMATCH_MAX
};
/*
* Copy functions
*/
enum br_pixelmap_copy_function {
BR_PMCOPY_NORMAL = 0x0000,
BR_PMCOPY_SRC_KEYED = 0x0001,
BR_PMCOPY_DST_KEYED = 0x0002
};
/*
* General 2D point and rectangle
*/
typedef struct br_point {
br_int_32 x;
br_int_32 y;
} br_point;
typedef struct br_rectangle {
br_int_32 x;
br_int_32 y;
br_int_32 w;
br_int_32 h;
} br_rectangle ;
/*
* General result for a clipping operation
*/
typedef enum br_clip_result {
BR_CLIP_REJECT,
BR_CLIP_PARTIAL,
BR_CLIP_ACCEPT
} br_clip_result;
/*
* Quantization methods used in mip-level generation for BR_PMT_INDEX_8
*/
enum{
BR_QUANTIZE_RGB,
BR_QUANTIZE_YIQ,
BR_QUANTIZE_MAX
};
enum{
BR_CONTROL_GAMMA_RGB = 0x00000001,
BR_CONTROL_GAMMA = 0x00000002,
BR_CONTROL_BRIGHTNESS = 0x00000004,
BR_CONTROL_CONTRAST = 0x00000008,
BR_CONTROL_HUE = 0x00000010,
BR_CONTROL_SATURATION = 0x00000020,
BR_CONTROL_SHARPNESS = 0x00000040,
};
typedef struct{
br_uint_32 flags;
br_uint_16 gamma_red[256];
br_uint_16 gamma_green[256];
br_uint_16 gamma_blue[256];
br_int_32 gamma;
br_int_32 brightness;
br_int_32 contrast;
br_int_32 hue;
br_int_32 saturation;
br_int_32 sharpness;
}br_display_controls;
#endif