blob: 132b9a234991ffb40dcc5b351cad45a1838ad3be [file] [log] [blame]
Name
AMD_depth_clamp_separate
Name Strings
GL_AMD_depth_clamp_separate
Contact
Pierre Boudier (pierre.boudier 'at' amd.com)
Contributors
Pierre Boudier, AMD
Graham Sellers, AMD
Status
In Progress
Version
Last Modified Date: 09/15/2010
Author Revision: 2
Number
401
Dependencies
The extension is written against the OpenGL 4.1 (Core) Specification.
Overview
The extension ARB_depth_clamp introduced the ability to control
the clamping of the depth value for both the near and far plane.
One limitation is that the control was for both planes at the
same time; some applications can benefit from having clamping
enabled for only one of the two planes, in order to save
fillrate for the other plane by clipping the geometry.
This extension provides exactly such functionality.
New Procedures and Functions
None
New Tokens
Accepted by the <cap> parameter of Enable, Disable, and IsEnabled,
and by the <pname> parameter of GetBooleanv, GetIntegerv,
GetFloatv, and GetDoublev:
DEPTH_CLAMP_NEAR_AMD 0x901E
DEPTH_CLAMP_FAR_AMD 0x901F
Additions to Chapter 2 of the OpenGL 4.1 (Core) Specification (OpenGL Operation)
Section 2.20 "Primitive Clipping"
Add to the end of the 3rd paragraph:
"Depth clamping is enabled with the generic Enable command and
disabled with the Disable command. The value of the argument to
either command may be DEPTH_CLAMP_NEAR_AMD or DEPTH_CLAMP_FAR_AMD to enable
or disable depth clamping at the near and far planes, respectively. If near
depth clamping is enabled, the "-w_c <= z_c" plane equation is ignored by
view volume clipping. Effectively, there is no near plane. Likewise, if far
clamping is enabled, the "z_c <= w_c" plane equation is ignored by view
volume clipping, effectively removing the near plane."
"In addition to DEPTH_CLAMP_NEAR_AMD and DEPTH_CLAMP_FAR_AMD, the token
DEPTH_CLAMP may be used to simultaneously enable or disable depth clamping
at both the near and far planes."
Additions to Chapter 3 of the OpenGL 4.1 (Core) Specification (Rasterization)
None.
Additions to Chapter 4 of the OpenGL 4.1 (Core) Specification (Per-Fragment
Operations and the Frame Buffer)
-- Section 4.1.5 "Depth buffer test"
Add to the end of the 2nd paragraph:
"If depth clamping (see section 2.20) is enabled, before the incoming
fragment's z_w is compared z_w is clamped to the range [min(n,f),0] if
clamping at the near plane is enabled, [0, max(n,f)] if clamping at the
far plane is enabled, and [min(n,f), max(n,f)] if clamping is enabled at
both the near and far planes, where n and f are the current near and far
depth range values (see section 2.12.1)."
Additions to Chapter 5 of the OpenGL 4.1 (Core) Specification (Special Functions)
None.
Additions to Chapter 6 of the OpenGL 4.1 (Core) Specification (State and
State Requests)
None.
Additions to Appendix A of the OpenGL 4.1 (Core) Specification (Invariance)
None.
Additions to the AGL/GLX/WGL Specifications
None.
Errors
None.
New State
Add to table 6.9, Transformation State - p.350
+----------------------+---------+---------------+---------------+-------------------------+-------+
| Get Value | Type | Get Command | Initial Value | Description | Sec |
+----------------------+---------+---------------+---------------+-------------------------+-------+
| DEPTH_CLAMP_NEAR_AMD | B | IsEnabled | FALSE | Depth clamping enabled | 2.20 |
| | | | | at the near plane | |
| DEPTH_CLAMP_FAR_AMD | B | IsEnabled | FALSE | Depth clamping enabled | 2.20 |
| | | | | at the far plane | |
+----------------------+---------+---------------+---------------+-------------------------+-------+
* Note that DEPTH_CLAMP still exists. However, enabling it enables depth clamping for both
the near and the far plane. Querying DEPTH_CLAMP will return TRUE if DEPTH_CLAMP_NEAR_AMD _or_
DEPTH_CLAMP_FAR_AMD is enabled.
New Implementation Dependent State
None
Issues
1) What should happen to GL_DEPTH_CLAMP? What happens if depth clamping is
enabled at one plane, but not the other - what does glIsEnabled(GL_DEPTH_CLAMP)
return?
DISCUSSION: Right now, glIsEnabled(GL_DEPTH_CLAMP) returns GL_TRUE if clamping
is enabled at either plane. Other options are to return GL_TRUE only if clamping
is enabled at both planes, or to maintain traditional depth clamping as
separate state, and have yet another enable to control separate clamping.
Revision History
Rev. Date Author Changes
---- -------- -------- -----------------------------------------
2 09/15/2010 gsellers Update to stand against OpenGL 4.1
Add token values.
Minor cleanup.
Some clarifications.
Add issue 1.
1 11/19/2009 pboudier Initial draft based on ARB_depth_clamp