| Name | |
| EXT_polygon_offset | |
| Name String | |
| GL_EXT_polygon_offset | |
| Version | |
| $Date: 1995/06/17 03:34:49 $ $Revision: 1.12 $ | |
| Number | |
| 3 | |
| Dependencies | |
| None | |
| Overview | |
| The depth values of fragments generated by rendering polygons are | |
| displaced by an amount that is proportional to the maximum absolute | |
| value of the depth slope of the polygon, measured and applied in window | |
| coordinates. This displacement allows lines (or points) and polygons | |
| in the same plane to be rendered without interaction -- the lines | |
| rendered either completely in front of or behind the polygons | |
| (depending on the sign of the offset factor). It also allows multiple | |
| coplanar polygons to be rendered without interaction, if different | |
| offset factors are used for each polygon. Applications include | |
| rendering hidden-line images, rendering solids with highlighted edges, | |
| and applying `decals' to surfaces. | |
| New Procedures and Functions | |
| void PolygonOffsetEXT(float factor, | |
| float bias); | |
| New Tokens | |
| Accepted by the <cap> parameter of Enable, Disable, and IsEnabled, and | |
| by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, and | |
| GetDoublev: | |
| POLYGON_OFFSET_EXT 0x8037 | |
| Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, | |
| GetFloatv, and GetDoublev: | |
| POLYGON_OFFSET_FACTOR_EXT 0x8038 | |
| POLYGON_OFFSET_BIAS_EXT 0x8039 | |
| Additions to Chapter 2 of the GL Specification (OpenGL Operation) | |
| None | |
| Additions to Chapter 3 of the GL Specification (Rasterization) | |
| The changes to the GL Specification are limited to the description of | |
| polygon rasterization, specifically while the polygon mode (specified | |
| by calling PolygonMode) is FILL. The GL Specification requires that | |
| fragment Z values during such rasterization be computed using the | |
| equation | |
| Z = (a * Za) + (b * Zb) + (c * Zc) | |
| where a, b, and c are the barycentric coordinates of the fragment | |
| center, and Za, Zb, and Zc are the Z values of the triangle's vertices. | |
| When POLYGON_OFFSET_EXT is enabled, this extension modifies this | |
| equation as follows: | |
| Z' = (a * Za) + (b * Zb) + (c * Zc) + (factor * maxdZ) + bias | |
| / 0 Z' < 0 | |
| Z = < Z' 0 <= Z' <= 1 | |
| \ 1 Z' > 1 | |
| where factor and bias are the polygon offset factor and bias as | |
| specified by PolygonOffsetEXT, and maxdZ is the maximum positive change | |
| in Z for a unit-step in the X,Y plane. MaxdZ can be approximated as | |
| the larger of the absolute values of dZ/dX and dZ/dY, the rates of | |
| change of Z in the positive X and Y directions. The equations for | |
| maxdZ, dZ/dX, and dZ/dY are: | |
| 2 2 | |
| maxdZ = sqrt[ (dZ/dX) + (dZ/dY) ] | |
| ((Yc - Yb) * (Zb - Za)) - ((Yb - Ya) * (Zc - Zb)) | |
| dZ/dX = ------------------------------------------------- | |
| area | |
| ((Xb - Xa) * (Zc - Zb)) - ((Xc - Xb) * (Zb - Za)) | |
| dZ/dY = ------------------------------------------------- | |
| area | |
| area = ((Xb - Xa) * (Yc - Yb)) - ((Xc - Xb) * (Yb - Ya)) | |
| To simplify the calculations, maxdZ may be approximated by | |
| maxdZ = maximum( |dZ/dX| , |dZ/dY| ) | |
| Note that all these equations treat window coordinate Z values as | |
| ranging from 0.0 through 1.0, regardless of their actual representation | |
| (refer to Controlling the Viewport in Chapter 2 of the GL Specification). | |
| POLYGON_OFFSET_EXT is enabled and disabled using Enable and Disable with | |
| parameter <cap> specified as POLYGON_OFFSET_EXT. | |
| Additions to Chapter 4 of the GL Specification (Per-Fragment Operations | |
| and the Framebuffer) | |
| None | |
| Additions to Chapter 5 of the GL Specification (Special Functions) | |
| None | |
| Additions to Chapter 6 of the GL Specification (State and State Requests) | |
| None | |
| Additions to the GLX Specification | |
| None | |
| GLX Protocol | |
| A new GL rendering command is added. The following command is sent to the | |
| server as part of a glXRender request: | |
| PolygonOffsetEXT | |
| 2 12 rendering command length | |
| 2 4098 rendering command opcode | |
| 4 FLOAT32 factor | |
| 4 FLOAT32 bias | |
| Errors | |
| INVALID_OPERATION is generated if PolygonOffsetEXT is called between | |
| execution of Begin and the corresponding execution of End. | |
| New State | |
| Initial | |
| Get Value Get Command Type Value Attrib | |
| --------- ----------- ---- ------- ------ | |
| POLYGON_OFFSET_EXT IsEnabled B False polygon/enable | |
| POLYGON_OFFSET_FACTOR_EXT GetFloatv R 0 polygon | |
| POLYGON_OFFSET_BIAS_EXT GetFloatv R 0 polygon | |
| New Implementation Dependent State | |
| None |