skia / external / github.com / KhronosGroup / OpenGL-Registry / refs/heads/310-issue / . / extensions / SGI / SGI_color_matrix.txt

Name | |

SGI_color_matrix | |

Name Strings | |

GL_SGI_color_matrix | |

Version | |

$Date: 1997/02/26 03:36:27 $ $Revision: 1.8 $ | |

Number | |

13 | |

Dependencies | |

None | |

Overview | |

This extension adds a 4x4 matrix stack to the pixel transfer path. The | |

matrix operates on RGBA pixel groups, using the equation | |

C' = MC, | |

where | |

|R| | |

C = |G| | |

|B| | |

|A| | |

and M is the 4x4 matrix on the top of the color matrix stack. After | |

the matrix multiplication, each resulting color component is scaled | |

and biased by a programmed amount. Color matrix multiplication follows | |

convolution (and the scale, and bias that are associated with | |

convolution.) | |

The color matrix can be used to reassign and duplicate color components. | |

It can also be used to implement simple color space conversions. | |

New Procedures and Functions | |

None | |

New Tokens | |

Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, | |

GetFloatv, and GetDoublev: | |

COLOR_MATRIX_SGI 0x80B1 | |

COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 | |

MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 | |

Accepted by the <pname> parameter of PixelTransfer*, and by the <pname> | |

parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev: | |

POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 | |

POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 | |

POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 | |

POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 | |

POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 | |

POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 | |

POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA | |

POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB | |

Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) | |

None | |

Additions to Chapter 3 of the 1.0 Specification (Rasterization) | |

The manipulation of the color matrix stack is added to the GL | |

Specification in section 3.6.2, "Pixel Transfer Modes." Setting the | |

matrix mode to COLOR causes the already described matrix operations | |

(see GL Specification Chapter 2, OpenGL Operation) to apply to the top | |

matrix on the color matrix stack. (PushMatrix and PopMatrix apply to | |

the entire color matrix stack.) All matrix operations have the same | |

effect on the color matrix as they do on the other matrices. | |

The operation of the color matrix is added to the GL Specification in | |

section 3.6.3, "Rasterization of Pixel Rectangles, immediately following | |

the operations described in EXT_convolution. The color matrix operates | |

only on RGBA pixel groups. If this extension is implemented, the color | |

matrix is always active, and is applied to all RGBA pixel groups, | |

regardless of the command used to generate them. (There is no enable or | |

disable of the color matrix.) Adopting the matrix notation used in | |

section 2.9.2 of the GL Specification (Matrices) the color matrix | |

arithmetic is: | |

R' = ((m1 * R) + (m5 * G) + (m9 * B) + (m13 * A)) * Rscale + Rbias | |

G' = ((m2 * R) + (m6 * G) + (m10 * B) + (m14 * A)) * Gscale + Gbias | |

B' = ((m3 * R) + (m7 * G) + (m11 * B) + (m15 * A)) * Bscale + Bbias | |

A' = ((m4 * R) + (m8 * G) + (m12 * B) + (m16 * A)) * Ascale + Abias | |

where R, G, B, and A are the color component values of the incoming | |

pixel group, m1 through m16 are the components of the matrix at the top | |

of the color matrix stack, and R', G', B', and A' are the resulting | |

color components. Rscale, Gscale, Bscale, and Ascale are specified by | |

calling PixelTransfer with <pname> set to | |

POST_COLOR_MATRIX_RED_SCALE_SGI, POST_COLOR_MATRIX_GREEN_SCALE_SGI, | |

POST_COLOR_MATRIX_BLUE_SCALE_SGI, and POST_COLOR_MATRIX_ALPHA_SCALE_SGI | |

respectively. Rbias, Gbias, Bbias, and Abias are specified by calling | |

PixelTransfer with <pname> set to POST_COLOR_MATRIX_RED_BIAS_SGI, | |

POST_COLOR_MATRIX_GREEN_BIAS_SGI, POST_COLOR_MATRIX_BLUE_BIAS_SGI, and | |

POST_COLOR_MATRIX_ALPHA_BIAS_SGI respectively. There are no | |

constraints on the values of the scale and bias variables. | |

Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations | |

and the Framebuffer) | |

The operation of the color matrix during pixel copy and query | |

operations is identical to the operation during pixel drawing and | |

texture image definition. This operation occurs immediately after the | |

operations described by EXT_convolution, which follow section 4.3.2 | |

(Reading Pixels) of the GL Specification. | |

Additions to Chapter 5 of the 1.0 Specification (Special Functions) | |

None | |

Additions to Chapter 6 of the 1.0 Specification (State and State Requests) | |

The scale and bias variables are queried using GetFloatv with <pname> | |

set to the appropriate variable name. The top matrix on the color | |

matrix stack is returned by GetFloatv called with <pname> set to | |

COLOR_MATRIX_SGI. The depth of the color matrix stack, and the maximum | |

depth of the color matrix stack, are queried with GetIntegerv, setting | |

<pname> to COLOR_MATRIX_STACK_DEPTH_SGI and | |

MAX_COLOR_MATRIX_STACK_DEPTH_SGI respectively. | |

Additions to the GLX Specification | |

None | |

Dependencies on EXT_convolution | |

None, really, except that the color matrix operation follows the | |

convolution operation (and its scale and bias). If convolution is not | |

supported, the location of the color matrix operation with respect to | |

all other pixel operations remains the same. | |

Errors | |

None | |

New State | |

Initial | |

Get Value Get Command Type Value Attrib | |

--------- ----------- ---- ------- ------ | |

COLOR_MATRIX_SGI GetFloatv 2* x M4 Identity - | |

COLOR_MATRIX_STACK_DEPTH_SGI GetIntegerv Z+ 1 - | |

POST_COLOR_MATRIX_RED_SCALE_SGI GetFloatv R 1 pixel | |

POST_COLOR_MATRIX_GREEN_SCALE_SGI GetFloatv R 1 pixel | |

POST_COLOR_MATRIX_BLUE_SCALE_SGI GetFloatv R 1 pixel | |

POST_COLOR_MATRIX_ALPHA_SCALE_SGI GetFloatv R 1 pixel | |

POST_COLOR_MATRIX_RED_BIAS_SGI GetFloatv R 0 pixel | |

POST_COLOR_MATRIX_GREEN_BIAS_SGI GetFloatv R 0 pixel | |

POST_COLOR_MATRIX_BLUE_BIAS_SGI GetFloatv R 0 pixel | |

POST_COLOR_MATRIX_ALPHA_BIAS_SGI GetFloatv R 0 pixel | |

New Implementation Dependent State | |

Minimum | |

Get Value Get Command Type Value | |

--------- ----------- ---- ------- | |

MAX_COLOR_MATRIX_STACK_DEPTH_SGI GetIntegerv Z+ 2 |