| 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 |