home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.2 (Developer) / NS_dev_3.2.iso / NextDeveloper / Headers / driverkit / displayDefs.h < prev    next >
C/C++ Source or Header  |  1993-07-20  |  6KB  |  157 lines

  1. /*     Copyright (c) 1992 NeXT Computer, Inc.  All rights reserved. 
  2.  *
  3.  * displayDefs.h - Defs of various structs/data used by the display system.
  4.  *
  5.  *
  6.  * HISTORY
  7.  * 01 Sep 92    Joe Pasqua
  8.  *      Created. 
  9.  */
  10.  
  11. #ifndef __DISPLAYDEFS_H__
  12. #define __DISPLAYDEFS_H__
  13.  
  14. /* Bits per pixel values. */
  15.  
  16. typedef enum _IOBitsPerPixel {
  17.     IO_2BitsPerPixel,    /*  2 bpp grayscale */
  18.     IO_8BitsPerPixel,    /*  8 bpp grayscale */
  19.     IO_12BitsPerPixel,    /* 16 bpp, 12 used (4 bits/component) */
  20.     IO_15BitsPerPixel,    /* 16 bpp, 15 used (5 bits/component) */
  21.     IO_24BitsPerPixel,    /* 32 bpp, 24 used (8 bits/component) */
  22.     IO_VGA        /* VGA framebuffer (VGA is special, and may not be
  23.              * linearly mapped or packed pixel format.) */
  24. } IOBitsPerPixel;
  25.  
  26. /* Definitions of colorspace type and values */
  27.  
  28. typedef enum _IOColorSpace {
  29.     IO_OneIsBlackColorSpace = 0,    /* Monochrome, 1 is black. */
  30.     IO_OneIsWhiteColorSpace = 1,    /* Monochrome, 1 is white. */
  31.     IO_RGBColorSpace = 2,
  32.     IO_CMYKColorSpace = 5,
  33. } IOColorSpace;
  34.  
  35. /* Enumeration to encode the use of bits within a pixel. */
  36.  
  37. typedef enum _IOSampleType {
  38.     IO_SampleTypeEnd = '\0',
  39.     IO_SampleTypeRed = 'R',
  40.     IO_SampleTypeGreen = 'G',
  41.     IO_SampleTypeBlue = 'B',
  42.     IO_SampleTypeAlpha = 'A',
  43.     IO_SampleTypeGray = 'W',    /* 1 is white colorspace */
  44.  
  45.     IO_SampleTypeCyan = 'C',
  46.     IO_SampleTypeMagenta = 'M',
  47.     IO_SampleTypeYellow = 'Y',
  48.     IO_SampleTypeBlack = 'K',    /* 1 is black colorspace */
  49.  
  50.     IO_SampleTypeLuminance = 'l',
  51.     IO_SampleTypeChromaU = 'u',
  52.     IO_SampleTypeChromaV = 'v',
  53.     IO_SampleTypeChromaA = 'a',
  54.     IO_SampleTypeChromaB = 'b',
  55.  
  56.     IO_SampleTypePseudoColor = 'P',
  57.     IO_SampleTypeMustSet = '1',
  58.     IO_SampleTypeMustClear = '0',
  59.     IO_SampleTypeSkip = '-'    /* Unused bits in the pixel */
  60. } IOSampleType;
  61.  
  62. /* The bits composing a pixel are identified by an array of `IOSampleType's
  63.  * cast as chars.  The first element of the array describes the most
  64.  * significant bit of the pixel.  The encoding char is repeated as many
  65.  * times as is needed to represent the number of bits in the encoded
  66.  * channel of the pixel.  The array is terminated by SampleType_End,
  67.  * or a '\0'.  Calling `strlen' with the pixel encoding as an argument
  68.  * returns the bit-depth of the pixels.
  69.  *
  70.  * Common pixel formats:
  71.  *   RGBA (32 bits; 8 bits/component)    "RRRRRRRRGGGGGGGGBBBBBBBBAAAAAAAA"
  72.  *   RGB- (32 bits; 8 bits/component)    "RRRRRRRRGGGGGGGGBBBBBBBB--------"
  73.  *   ARGB (32 bits; 8 bits/component)    "AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB"
  74.  *   -RGB (32 bits; 8 bits/component)    "--------RRRRRRRRGGGGGGGGBBBBBBBB"
  75.  *   RGBA (16 bits; 4 bits/component)    "RRRRGGGGBBBBAAAA"
  76.  *   RGB- (16 bits; 4 bits/component)    "RRRRGGGGBBBB----"
  77.  *   -RGB (16 bits; 5 bits/component)    "-RRRRRGGGGGBBBBB"
  78.  *   W    (8 bit gray; one-is-white)    "WWWWWWWW"
  79.  *   K      (2 bit gray; one-is-black)    "KK"
  80.  *
  81.  */
  82. #define IO_MAX_PIXEL_BITS    64     /* Max length to keep MiG happy */
  83.  
  84. typedef char IOPixelEncoding[IO_MAX_PIXEL_BITS];
  85.  
  86. /* Structure describing the layout of the display. */
  87.  
  88. typedef struct _IODisplayInfo {
  89.     int width;            /* Width in pixels. */
  90.     int height;            /* Height in pixels. */
  91.     int totalWidth;        /* Width in pixels including undisplayed
  92.                  * pixels. */
  93.     int rowBytes;        /* # bytes to get from one scanline to next. */
  94.     int refreshRate;        /* Monitor refresh setting. */
  95.  
  96.     /* Pointer to origin of screen. This pointer is deliberately untyped to
  97.      * force actual screen writes to be dependent on `bitsPerPixel'. */
  98.     void *frameBuffer;    
  99.     
  100.     /* VRAM configuration, indicated by memory space occupied by one pixel. */
  101.     IOBitsPerPixel bitsPerPixel;
  102.     IOColorSpace colorSpace;
  103.     IOPixelEncoding pixelEncoding;
  104.     
  105.     /* Flags used to indicate special requirements or conditions to DPS. */
  106.     unsigned int flags;
  107.     
  108.     /* Driver specific parameters. */
  109.     void *parameters;
  110.  
  111.     unsigned int _reserved[8];
  112.  
  113. } IODisplayInfo;
  114.  
  115. /* Definition of values for the `IODisplayInfo.flags' field. */
  116.  
  117. /* Bit 1 determines whether the display requires gamma corrected 444->555
  118.  * conversion in software. */
  119.  
  120. #define IO_DISPLAY_NEEDS_SOFTWARE_GAMMA_CORRECTION    0x00000002
  121.  
  122. /* Bits 2 and 3 specify cache behavior. */
  123.  
  124. #define IO_DISPLAY_CACHE_WRITETHROUGH        0x00000000     /* default */
  125. #define IO_DISPLAY_CACHE_COPYBACK        0x00000004
  126. #define IO_DISPLAY_CACHE_OFF            0x00000008
  127. #define IO_DISPLAY_CACHE_MASK            0x0000000C
  128.  
  129. /* Bit 4 indicates if the a hardware gamma correction transfer table
  130.  * (CLUT)exists and can be changed by an IODISPLAY_SET_TRANSFER_TABLE call. */
  131.  
  132. #define IO_DISPLAY_HAS_TRANSFER_TABLE        0x00000010
  133.  
  134. /* Parameter to be supported by Display subclasses in their implementation
  135.  * of setIntValues:forParameter:count: method, if the driver supports
  136.  * setting a hardware gamma correction transfer table.
  137.  *
  138.  * The transfer table has a maximum size of 256 ints, and may be smaller.
  139.  * 32 or 24 bit color, and 8 bit monochrome displays use the full 256 entries.
  140.  * 15 bit color displays use 32 entries. 12 bit color displays use 16 entries.
  141.  * 2 bit monochrome displays use 4 entries.  Each integer in the table holds
  142.  * a packed RGBM value.  Monochrome displays use the low byte.  Color displays
  143.  * should use the high 3 bytes, with Red in the most significant byte.
  144.  */
  145. #define IO_SET_TRANSFER_TABLE        "IOSetTransferTable"
  146. #define IO_2BPP_TRANSFER_TABLE_SIZE    4
  147. #define IO_8BPP_TRANSFER_TABLE_SIZE    256
  148. #define IO_12BPP_TRANSFER_TABLE_SIZE    16
  149. #define IO_15BPP_TRANSFER_TABLE_SIZE    32
  150. #define IO_24BPP_TRANSFER_TABLE_SIZE    256
  151. #define IO_MAX_TRANSFER_TABLE_SIZE    256
  152.  
  153. #define IO_GET_DISPLAY_PORT        "IOGetDisplayPort"
  154. #define IO_GET_DISPLAY_PORT_SIZE    1
  155.  
  156. #endif    /* __DISPLAYDEFS_H__ */
  157.