Table of Contents Glide Programming Guide


Setting LFB Write Parameters



Download 6.22 Mb.
Page85/106
Date03.02.2023
Size6.22 Mb.
#60547
1   ...   81   82   83   84   85   86   87   88   ...   106
GLIDEPGM

7Setting LFB Write Parameters


Before you start writing data into the linear frame buffer, you need to do some set-up work.

  • There are ten different formats for the data; you must choose one.

  • A pixel can have red, green, blue, alpha, and depth components, but not all of the data formats provide values for all five components; you must set constant values for the ones that won’t be provided by the data.

  • The y origin can be different for LFB writes than it is for conventional rendering; set it if you want.

1Linear Frame Buffer Write Modes


Data can be written into the LFB in one of several data formats or write modes:
When two 16-bit pixels are written to the hardware as a packed 32-bit value, the pixel located in the high 16-bits is written as the leftmost pixel, as shown in Figure Accessing the Linear Frame Buffer.1. This is endian dependent, however, the GLIDE_PLATFORM compile time constant automatically allows Glide to configure itself for the proper endian characteristics. Incoming color data can be interpreted as either RGBA, ARGB, BGRA, or ABGR. This is determined by the cFormat parameter passed to grSstWinOpen() (see Table Getting Started.2).
The write modes and resulting data formats are shown in Table Accessing the Linear Frame Buffer.2 and Table Accessing the Linear Frame Buffer.3.

  1. Table Accessing the Linear Frame Buffer.2 16-bit LFB data formats.

Three of the LFB data formats write a minimum of 16 bits to the linear frame buffer. The first column in the table below gives the Glide constant for the write mode. The packing order of the color components is controlled by the cFormat argument to grSstWinOpen(). The third column shows the packing order for each write mode and each color format. Table Accessing the Linear Frame Buffer.3 gives the layouts for the 32-bit LFB write formats.

LFB write mode

cFormat

physical layout of the color and depth components

GR_LFBWRITEMODE_565

GR_COLORFORMAT_ARGB or GR_COLORFORMAT_RGBA






GR_COLORFORMAT_ABGR or GR_COLORFORMAT_BGRA



GR_LFBWRITEMODE_555

GR_COLORFORMAT_ARGB






GR_COLORFORMAT_ABGR






GR_COLORFORMAT_RGBA






GR_COLORFORMAT_BGRA



GR_LFBWRITEMODE_1555

GR_COLORFORMAT_ARGB






GR_COLORFORMAT_ABGR






GR_COLORFORMAT_RGBA






GR_COLORFORMAT_BGRA



GR_LFBWRITEMODE_ZA16
with alpha buffering enabled

ignored



GR_LFBWRITEMODE_ZA16
with depth buffering enabled

ignored






  1. Table Accessing the Linear Frame Buffer.3 32-bit LFB data formats.

The LFB data formats shown below write a minimum of 32 bits to the linear frame buffer. The first column in the table below gives the Glide constant for the write mode. The packing order of the color components is controlled by the cFormat argument to grSstWinOpen(). The third column shows the packing order for each write mode and each color format. Table Accessing the Linear Frame Buffer.2 gives the layouts for the 16-bit LFB write formats.

LFB write mode

cFormat

physical layout of the color and depth components

GR_LFBWRITEMODE_565_DEPTH

GR_COLORFORMAT_ARGB or GR_COLORFORMAT_RGBA






GR_COLORFORMAT_ABGR or GR_COLORFORMAT_BGRA



GR_LFBWRITEMODE_555_DEPTH

GR_COLORFORMAT_ARGB






GR_COLORFORMAT_ABGR






GR_COLORFORMAT_RGBA






GR_COLORFORMAT_BGRA



GR_LFBWRITEMODE_1555_DEPTH

GR_COLORFORMAT_ARGB






GR_COLORFORMAT_ABGR






GR_COLORFORMAT_RGBA






GR_COLORFORMAT_BGRA



GR_LFBWRITEMODE_888

GR_COLORFORMAT_ARGB






GR_COLORFORMAT_ABGR






GR_COLORFORMAT_RGBA






GR_COLORFORMAT_BGRA



GR_LFBWRITEMODE_8888

GR_COLORFORMAT_ARGB






GR_COLORFORMAT_ABGR






GR_COLORFORMAT_RGBA






GR_COLORFORMAT_BGRA


2Setting Constant Color, Alpha, and Depth Values


If a linear frame buffer write mode does not provide an alpha, depth, or color value, the necessary value is read from the appropriate constant alpha, color, or depth value. Pixel data written in GR_LFBWRITEMODE_1555, for example, contains no depth component, so depth information is pulled from the constant depth register set by grLfbConstantDepth(). Data written in GR_LFBWRITEMODE_888 is missing alpha and depth components; the constant alpha register, set by grLfbConstantAlpha(), and the constant depth register are used.
In GR_LFBWRITEMODE_DEPTH_DEPTH mode, color information is retrieved from the constant color register, set by grConstantColorValue() and described in Chapter Chapter 5. . Note that the color set by grConstantColorValue() will be written to the color buffer while the depth components in the LFB write are written to the depth buffer. If the pixel pipeline is enabled, only the depth information will be written. Table Accessing the Linear Frame Buffer.4 details the source of each component for each of the LFB write modes.

  1. Table Accessing the Linear Frame Buffer.4 Color, alpha, and depth sources.

The following table illustrates where the color, alpha, and depth values come from for each of the different write modes for LFB writes that go through the pixel pipeline.

Glide constant

color source

alpha source

depth source

GR_LFBWRITEMODE_565

incoming pixel

constant alpha2

constant depth3

GR_LFBWRITEMODE_0555

incoming pixel

constant alpha2

constant depth3

GR_LFBWRITEMODE_1555

incoming pixel

incoming pixel

constant depth3

GR_LFBWRITEMODE_565_DEPTH

incoming pixel

constant alpha2

incoming pixel

GR_LFBWRITEMODE_0555_DEPTH

incoming pixel

constant alpha2

incoming pixel

GR_LFBWRITEMODE_1555_DEPTH

incoming pixel

incoming pixel

incoming pixel

GR_LFBWRITEMODE_888

incoming pixel

constant alpha2

constant depth3

GR_LFBWRITEMODE_8888

incoming pixel

incoming pixel

constant depth3

GR_LFBWRITEMODE_DEPTH_DEPTH

constant color1

constant alpha2

incoming pixel

1The constant color is set by grConstantColorValue() and only affects chroma-keying operations, not output.
2The constant alpha value is set by grLfbConstantAlpha() and is only used for alpha test operations, not output.
3The constant depth value is set by grLfbConstantDepth() and is only used for depth test operations, not output.

Some linear frame buffer write modes, specifically GR_LFBWRITEMODE_555, GR_LFBWRITEMODE_565, GR_LFBWRITEMODE_1555, GR_LFBWRITEMODE_888, GR_LFBWRITEMODE_8888, and GR_LFBWRITEMODE_ALPHA_ALPHA, do not possess depth information. grLfbConstantDepth() specifies the depth value for these linear frame buffer write modes.


void grLfbConstantDepth( FxU16 depth )

This depth value is used for depth buffering and fog operations and is assumed to be in a format suitable for the current depth buffering mode. Table Accessing the Linear Frame Buffer.1 describes the floating point format used for w buffering; z buffers use 16-bit fixed point values. The default constant depth value is 0.


If a linear frame buffer format contains depth information, then the depth supplied with the linear frame buffer write is used, and the constant depth value set with grLfbConstantDepth() is ignored.
Some linear frame buffer write modes, specifically GR_LFBWRITEMODE_555, GR_LFBWRITEMODE_888, GR_LFBWRITEMODE_555_DEPTH, and GR_LFBWRITEMODE_DEPTH_DEPTH, do not contain alpha information. grLfbConstantAlpha() specifies the alpha value for these linear frame buffer write modes.
void grLfbConstantAlpha( GrAlpha_t alpha )

This alpha value is used if alpha testing and blending operations are performed during linear frame buffer writes. The default constant alpha value is 0xFF.


If a linear frame buffer format contains alpha information, then the alpha supplied with the linear frame buffer write is used, and the constant alpha value set with grLfbConstantAlpha() is ignored.

3Establishing a y Origin


The origin for linear frame buffer writes can be set separately from the origin for other rendering (points, lines, triangles, buffer clears, etc.). This is useful in cases where images have a different origin than graphics primitives, or where different images have different origins.
The origin argument to grLfbLock() is used to establish a separate y origin for LFB writes, either GR_ORIGIN_UPPER_LEFT or GR_ORIGIN_LOWER_LEFT.

Download 6.22 Mb.

Share with your friends:
1   ...   81   82   83   84   85   86   87   88   ...   106




The database is protected by copyright ©ininet.org 2024
send message

    Main page