| Name |
| |
| EXT_pixel_transform |
| |
| Name Strings |
| |
| GL_EXT_pixel_transform |
| |
| Version |
| |
| $Date: 1997/10/17 02:08:51 $ $Revision: 1.2 $ |
| |
| Number |
| |
| 138 |
| |
| Dependencies |
| |
| None |
| |
| Overview |
| |
| This extension provides support for scaling, rotation, translation and |
| shearing of two-dimensional pixel rectangles in the pixel rasterizer. |
| The transformation is defined via a 4x4 matrix, where only those entries |
| which apply as a 2D affine transformation will be accepted and used. |
| These matrices can be manipulated using the same functions as the other |
| OpenGL matrix stacks. |
| |
| |
| New Procedures and Functions |
| |
| void PixelTransformParameteriEXT(enum target, |
| enum pname, |
| const int param) |
| |
| void PixelTransformParameterfEXT(enum target, |
| enum pname, |
| const float param) |
| |
| void PixelTransformParameterivEXT(enum target, |
| enum pname, |
| const int* params) |
| |
| void PixelTransformParameterfvEXT(enum target, |
| enum pname, |
| const float* params) |
| |
| These routines are used to set pixel transformation attributes. |
| The only allowable value for <target> at this time is |
| PIXEL_TRANSFORM_2D_EXT. Allowable values for <pname> include: |
| PIXEL_MAG_FILTER_EXT, PIXEL_MIN_FILTER_EXT, and PIXEL_CUBIC_WEIGHT_EXT. |
| |
| void GetPixelTransformParameterivEXT(enum target, |
| enum pname, |
| const int* params) |
| |
| void GetPixelTransformParameterfvEXT(enum target, |
| enum pname, |
| const float* params) |
| |
| These routines are used to query pixel transformation attributes. |
| The only allowable value for <target> at this time is |
| PIXEL_TRANSFORM_2D_EXT. Allowable values for <pname> include: |
| PIXEL_MAG_FILTER_EXT, PIXEL_MIN_FILTER_EXT, and PIXEL_CUBIC_WEIGHT_EXT. |
| |
| New Tokens |
| |
| Accepted by the <pname> parameter of PixelTransformParameteri, |
| PixelTransformParameterf, PixelTransformParameteriv, |
| PixelTransformParameterfv, GetPixelTransformParameteriv and |
| GetPixelTransformParameterfv: |
| |
| PIXEL_MAG_FILTER_EXT 0x8331 |
| PIXEL_MIN_FILTER_EXT 0x8332 |
| PIXEL_CUBIC_WEIGHT_EXT 0x8333 |
| |
| Accepted by the <params> parameter of PixelTransformParameteriEXT, |
| PixelTransformParameterfEXT, PixelTransformParameterivEXT, and |
| PixelTransformParameterfvEXT when <pname> is PIXEL_MAG_FILTER_EXT |
| or PIXEL_MIN_FILTER_EXT: |
| |
| CUBIC_EXT 0x8334 |
| |
| Accepted by the <params> parameter of PixelTransformParameteriEXT, |
| PixelTransformParameterfEXT, PixelTransformParameterivEXT, and |
| PixelTransformParameterfvEXT when <pname> is PIXEL_MIN_FILTER_EXT: |
| |
| AVERAGE_EXT 0x8335 |
| |
| Accepted by the <mode> parameter of MatrixMode, |
| and by the <target> parameter of PixelTransformParameterivEXT, |
| PixelTransformParameterfvEXT, GetPixelTransformParameterivEXT, |
| and GetPixelTransformParameterfvEXT: |
| |
| PIXEL_TRANSFORM_2D_EXT 0x8330 |
| |
| Accepted by the <pname> parameter of GetIntegerv, GetFloatv, |
| and GetDoublev: |
| |
| PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 |
| MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 |
| |
| Accepted by the <pname> parameter of GetFloatv, and GetDoublev: |
| |
| PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 |
| |
| |
| Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation) |
| |
| In section 2.10.2 "Matrices": |
| |
| The projection matrix, model-view matrix and pixel-transform matrix |
| are set and modified with a variety of commands. The affected matrix is |
| determined by the current matrix mode. The current matrix mode is set with |
| |
| void MatrixMode (enum mode); |
| |
| which takes one of the four pre-defined constants TEXTURE, MODELVIEW, |
| PROJECTION, or PIXEL_TRANSFORM_2D_EXT as the argument value. TEXTURE is |
| described later. If the current matrix mode is MODELVIEW, then matrix |
| operations apply to the model-view matrix; if PROJECTION, then they apply |
| to the projection matrix; if PIXEL_TRANSFORM_2D_EXT, then they apply to |
| the pixel-transform matrix. |
| |
| Additions to Chapter 3 of the 1.1 Specification (Rasterization) |
| |
| The specification of two-dimensional pixel transformation operators |
| is defined in the GL specification in the final subsection of |
| Section 3.6.3, "Conversion to Fragments." The following paragraphs |
| replace the text of the subsection. |
| |
| The conversion of a group to fragments is controlled by the pixel |
| transformation matrix. The pixel transformation matrix is defined |
| by calling MatrixMode with <mode> set to PIXEL_TRANSFORM_2D_EXT, then using |
| any of the existing functions which operate on matrices and matrix stacks. |
| (i.e. LoadIdentity, LoadMatrix, MultMatrix, PushMatrix, PopMatrix, Rotate, |
| Scale, and Translate.) When using the matrix operators, while in |
| PIXEL_TRANSFORM_2D_EXT matrix mode, those entries in the 4 x 4 matrix |
| that are not part of a 2D affine transformation are forced to take on |
| values of either 0 or 1 so that the final matrix represents a 2D affine |
| transformation matrix. That is to say, of the matrix entries shown below: |
| |
| -- -- |
| | m0 m4 m8 m12| |
| P = | m1 m5 m9 m13| |
| | m2 m6 m10 m14| |
| | m3 m7 m11 m15| |
| -- -- |
| |
| only the matrix entries m0, m1, m4, m5, m12, and m13 are allowed to |
| vary. The other matrix entries will be forced to be either 0 or 1 as |
| shown below: |
| |
| -- -- |
| | m0 m4 0 m12| |
| P = | m1 m5 0 m13| |
| | 0 0 1 0 | |
| | 0 0 0 1 | |
| -- -- |
| |
| The pixel transformation operation is always enabled. The pixel |
| transformation operation uses the current pixel transformation |
| matrix to compute new window coordinates for each incoming pixel. |
| Resampling occurs after the pixel transformation matrix has been |
| applied. |
| |
| Window coordinates are computed for each group by multiplying |
| the column/row location in the original pixel rectangle by the pixel |
| transformation matrix. The components of the current raster position |
| (section 2.12) are then added to the resulting components. (If the |
| current raster position is invalid, then DrawPixels is |
| ignored.) Let (Xrp, Yrp) be the current raster position and let |
| (Xo, Yo) represent the column and row of the group in the original |
| pixel rectangle. The depth value (Z) for the group is defined |
| as the depth value at the original location in the pixel rectangle |
| if the format was DEPTH_COMPONENT, and as the depth associated with |
| the current raster position otherwise. The final transformed pixel |
| coordinate (Xf, Yf, Zf) is computed by: |
| |
| -- -- -- -- |
| | Xo | | Xt | |
| | Yo | P = | Yt | |
| | Z | | Zt | |
| | 1 | | 1 | |
| -- -- -- -- |
| |
| Xf = Xt + Xrp |
| Yf = Yt + Yrp |
| Zf = Zt |
| |
| The function |
| |
| void PixelZoom( float zx, float zy ) ; |
| |
| will set the current pixel transformation matrix (the current top |
| of the pixel transformation matrix stack) to the scaling matrix: |
| |
| -- -- |
| | zx 0 0 0 | |
| P = | 0 zy 0 0 | |
| | 0 0 1 0 | |
| | 0 0 0 1 | |
| -- -- |
| |
| The original pixel value for each input pixel location is left unmodified |
| by the pixel transformation. Since multiple input pixels can be mapped |
| into a single output pixel (minification of the input pixel rectangle), |
| or since output pixels might not have any input pixels mapped to them |
| (magnification of input pixel rectangle), some method of resampling |
| is required. Resampling methods are set using the functions |
| PixelTransformParameteriEXT, PixelTransformParameterfEXT, |
| PixelTransformParameterivEXT, or PixelTransformParameterfvEXT with |
| <target> set to PIXEL_TRANSFORM_2D_EXT. |
| |
| The resampling method to be used when the pixel rectangle is |
| magnified is specified by calling one of these functions with |
| <pname> set to PIXEL_MAG_FILTER_EXT and <params> set to NEAREST, |
| LINEAR, or CUBIC_EXT. The resampling method to be used when the |
| pixel rectangle is minified is specified by calling one of these |
| functions with <pname> set to PIXEL_MIN_FILTER_EXT and <params> |
| set to NEAREST, LINEAR, CUBIC_EXT, or AVERAGE_EXT. |
| PIXEL_CUBIC_WEIGHT_EXT defines the cubic weighting coefficient |
| that is to be used whenever the resampling technique is set to CUBIC_EXT. |
| |
| If the resampling method is NEAREST, each output pixel will have the |
| value of the input pixel whose transformed coordinate value is nearest |
| (in Manhattan distance). If the resampling method is LINEAR, each |
| output pixel will have a value that is the weighted average of the |
| four input pixels whose transformed coordinate values are nearest. |
| |
| If the resampling method is CUBIC_EXT, each output pixel will have a value |
| that is affected by the 16 input pixels whose transformed coordinate |
| values are nearest. The 16 input pixels will be used to perform a cubic |
| spline interpolation to determine the value of the output pixel. The |
| cubic weight factor is a floating point value that is applied to the |
| cubic interpolation in the manner described in "Digital Image Warping" |
| by George Wolberg (IEEE Computer Society Press, ISBN 0-8186-8944-7). |
| Visually pleasing cubic weighting values are typically in the |
| range [-1,0]. The values -1.0 and -0.5 are most commonly used. |
| For the purpose of performing bicubic interpolation along the outer |
| edge of the pixel rectangle, the outermost one pixel edge of the pixel |
| rectangle is duplicated prior to performing the interpolation along the |
| edges. |
| |
| If the resampling method is AVERAGE_EXT, the values of all of the input |
| pixels that contribute to the final output pixel will be averaged to |
| determine the final output pixel value. That is to say, an output pixel |
| is backward mapped into the input pixel rectangle, then the nearest |
| neighbor resampling method determines the address of the center input |
| pixel from which input pixels will be averaged. All pixels in the input |
| that forward map into the same location in the output pixel rectangle will |
| be added together and divided by the total number of input pixels which |
| contribute the same output pixel. An example would be, if the output |
| pixel rectangle is 1/3 the size of the input pixel rectangle, then a |
| total of 9 pixels would be read from the input pixel rectangle, averaged, |
| and then the new single value will be written into the output pixel |
| rectangle. |
| |
| Pixel transformation is defined for pixel rectangles that contain INDEX, |
| LUMINANCE, LUMINANCE_ALPHA, RGB, RGBA, or ABGR_EXT components or depth |
| components in pixel rastorization. Groups arising from DrawPixels with |
| a format of STENCIL_INDEX are treated specially and are described in |
| section 4.3.1. |
| |
| A fragment arising from a group consisting of color data takes on the |
| color index or color components of the group; the depth and texture |
| coordinates are taken from the current raster position's associated |
| data. A fragment arising from a depth component takes the component's |
| depth value; the color and texture coordinates are given by those |
| associated with the current raster position. In both cases texture |
| coordinates s, t, and r are replaced with s/q, t/q, and r/q, |
| respectively. |
| |
| |
| Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations |
| and the Frame Buffer) |
| |
| The pixel transformation operation occurs in pixel rasterization |
| immediately after the operations in the pixel transfer pipeline. |
| The operation of pixel transformation during pixel copy |
| operations is identical to the operation during pixel drawing. |
| The pixel transformation is not applied during pixel query |
| operations. |
| |
| Additions to Chapter 5 of the 1.1 Specification (Special Functions) |
| |
| GetPixelTransformParameterivEXT, and GetPixelTransformParameterfvEXT |
| are not included in display lists, but are instead executed immediately. |
| |
| Additions to Chapter 6 of the 1.1 Specification (State and State Requests) |
| |
| Integer and floating point query functions GetPixelTransformParameterivEXT |
| and GetPixelTransformParameterfvEXT are provided. <target> must be |
| PIXEL_TRANSFORM_2D_EXT. <pname> is one of PIXEL_MAG_FILTER_EXT, |
| PIXEL_MIN_FILTER_EXT, or PIXEL_CUBIC_WEIGHT_EXT. The value of the |
| specified parameter is returned in <params>. |
| |
| Additions to the GLX Specification |
| |
| None |
| |
| GLX Protocol |
| |
| Four new GL commands are added. |
| |
| The following two rendering commands are sent to the server as part of |
| a glXRender request: |
| |
| PixelTransformParameterfEXT |
| 2 16 rendering command length |
| 2 16385 rendering command opcode |
| 4 ENUM target |
| 4 ENUM pname |
| 4 FLOAT32 param |
| |
| PixelTransformParameteriEXT |
| 2 16 rendering command length |
| 2 16386 rendering command opcode |
| 4 ENUM target |
| 4 ENUM pname |
| 4 INT32 param |
| |
| The remaining two commands are non-rendering commands. These commands |
| are sent seperately (i.e., not as part of a glXRender or |
| glXRenderLarge request), using the glXVendorPrivateWithReply |
| request: |
| |
| GetPixelTransformParameterfvEXT |
| 1 CARD8 opcode (X assigned) |
| 1 17 GLX opcode (glXVendorPrivateWithReply) |
| 2 5 request length |
| 4 2051 vendor specific opcode |
| 4 GLX_CONTEXT_TAG context tabg |
| 4 ENUM target |
| 4 ENUM pname |
| ==> |
| 1 1 reply |
| 1 unused |
| 2 CARD16 sequence number |
| 4 m reply length, m = (n==1 ? 0: n) |
| 4 unused |
| 4 CARD16 n (0 or 1) |
| |
| if (n=1) this follows: |
| |
| 4 FLOAT32 params |
| 12 unused |
| |
| Note that n may be zero, indicating that a GL error occurred. |
| |
| |
| GetPixelTransformParameterivEXT |
| 1 CARD8 opcode (X assigned) |
| 1 17 GLX opcode (glXVendorPrivateWithReply) |
| 2 5 request length |
| 4 2052 vendor specific opcode |
| 4 GLX_CONTEXT_TAG context tabg |
| 4 ENUM target |
| 4 ENUM pname |
| ==> |
| 1 1 reply |
| 1 unused |
| 2 CARD16 sequence number |
| 4 m reply length, m = (n==1 ? 0: n) |
| 4 unused |
| 4 CARD16 n (0 or 1) |
| |
| if (n=1) this follows: |
| |
| 4 INT32 params |
| 12 unused |
| |
| Note that n may be zero, indicating that a GL error occurred. |
| |
| |
| |
| Errors |
| |
| INVALID_ENUM is generated if PixelTransformParameteriEXT, |
| PixelTransformParameterfEXT, PixelTransformParameterivEXT, |
| PixelTransformParameterfvEXT, GetPixelTransformParameterivEXT, |
| or GetPixelTransformParameterfvEXT is called with <target> set to |
| a value other than PIXEL_TRANSFORM_2D_EXT. |
| |
| INVALID_ENUM is generated if GetPixelTransformParameterivEXT or |
| GetPixelTransformParameterfvEXT is called with <pname> set to |
| PIXEL_MAG_FILTER_EXT and <params> is not one of NEAREST, LINEAR, |
| or CUBIC_EXT. |
| |
| INVALID_ENUM is generated if GetPixelTransformParameterivEXT or |
| GetPixelTransformParameterfvEXT is called with <pname> set to |
| PIXEL_MIN_FILTER_EXT and <params> is not one of NEAREST, LINEAR, |
| CUBIC_EXT, or AVERAGE_EXT. |
| |
| INVALID_VALUE is generated if PixelTransformParameteriEXT, |
| PixelTransformParameterfEXT, PixelTransformParameterivEXT, or |
| PixelTransformParameterfvEXT is called with <pname> set to |
| PIXEL_CUBIC_WEIGHT_EXT and <params> is a value outside of |
| the range [-1, 0]. |
| |
| INVALID_OPERATION is generated if PixelTransformParameteriEXT, |
| PixelTransformParameterfEXT, PixelTransformParameterivEXT, |
| PixelTransformParameterfvEXT, GetPixelTransformParameterivEXT, |
| or GetPixelTransformParameterfvEXT is called between execution of |
| Begin and the corresponding execution of End. |
| |
| New State |
| Initial |
| Get Value Get Command Type Value Attrib |
| --------- ----------- ---- ------- ------ |
| PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT GetIntegerv I 1 - |
| PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT GetFloatv R 1 - |
| PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT GetDoublev D 1 - |
| MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT GetIntegerv I 32 - |
| MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT GetFloatv R 32 - |
| MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT GetDoublev D 32 - |
| PIXEL_TRANSFORM_2D_MATRIX_EXT GetFloatv 16 x R Identity - |
| PIXEL_TRANSFORM_2D_MATRIX_EXT GetDoublev 16 x D Identity - |
| PIXEL_MAG_FILTER_EXT GetPixelTransformParameteri Z3 NEAREST pixel |
| PIXEL_MIN_FILTER_EXT GetPixelTransformParameteri Z4 NEAREST pixel |
| PIXEL_CUBIC_WEIGHT_EXT GetPixelTransformParameterf R -1 pixel |
| |
| |
| New Implementation Dependent State |
| |
| None |
| |