blob: e7cfbe5bf4f1147e3603c968146877055a4cfbfb [file] [log] [blame]
Name
NV_3dvision_settings
Name Strings
GL_NV_3dvision_settings
Contributors
Mathias Heyer, NVIDIA
Swaminathan Narayanan, NVIDIA
Greg Roth, NVIDIA
Contact
Greg Roth, NVIDIA (groth 'at' nvidia.com)
Status
Complete
Version
Last Modified Date: 05 Oct 2012
Revision: 5
Number
OpenGL ES Extension #129
Dependencies
Written based on the wording of the OpenGL ES 2.0.25 specification
OpenGL ES 2.0 is required.
EGL_NV_3dvision_surface is used to specify a surface
with support for these features explicitly enabled.
Overview
NVIDIA 3D Vision provides stereoscopic 3d rendering without
requiring applications to change their rendering methods. However
there are cases where applications can benefit from adjusting 3D
vision parameters directly to experiment with this functionality in
applications not yet known to 3D Vision, to assist 3D Vision in
setting parameters correctly for unusual situations, or to present
application-specific user-accessible controls for 3D Vision
parameters.
This extension provides the ability to query the current stereo
settings and adjust them as necessary.
IP Status
NVIDIA Proprietary
New Procedures and Functions
void StereoParameterfNV(enum pname, float param);
void StereoParameteriNV(enum pname, int param);
New Tokens
Accepted by the <value> parameter of GetBooleanv, GetIntegerv,
and GetFloatv, and the <cap> parameter of isEnabled, Enable, and
Disable:
3DVISION_STEREO_NV 0x90F4
Accepted by the <value> parameter of GetBooleanv, GetIntegerv,
and GetFloatv and the <param> parameter of StereoParameterfNV,
and StereoParameteriNV:
STEREO_SEPARATION_NV 0x90F5
STEREO_CONVERGENCE_NV 0x90F6
STEREO_CUTOFF_NV 0x90F7
STEREO_PROJECTION_NV 0x90F8
Accepted by the <param> parameter of StereoParameterfNV and
StereoParameteriNV and returned by GetBooleanv, GetIntegerv, and
GetFloatv when <value> is STEREO_PROJECTION_NV.
STEREO_PROJECTION_PERSPECTIVE_NV 0x90F9
STEREO_PROJECTION_ORTHO_NV 0x90FA
Changes to Chapter 4 of the OpenGL ES 2.0.25 Specification (Per-Fragment
Operations and the Frame Buffer)
Add to section 4.2.1, "Selecting a Buffer for Writing":
If the bound draw surface is auto stereo enabled and 3d Vision
rendering is enabled in the GL, color values are written to left and
right buffers with adjustments according to current separation and
convergence values.
Add subsection 4.2.x, "Stereo Parameters":
3D Vision stereo capability may be enabled at surface creation. If
the bound draw surface is auto stereo capable, 3D Vision rendering
can be enabled and disabled by calling Enable or Disable with the
symbolic constant 3DVISION_STEREO_NV. If the current draw surface is
not auto stereo capable, enabling 3D Vision rendering has no
effect. The current state of 3D Vision rendering may be queried
using isEnabled with <cap> set to 3DVISION_STEREO_NV.
Various parameters control how 3D Vision stereo rendering is
performed. Each parameter is set by calling
void StereoParameter{if}NV(enum pname, T param);
<pname> is a symbolic constant indicating the parameter to be set.
If <pname> is STEREO_PROJECTION_NV, then <param> specifies the
method of rendering 3D Vision will use. <param> must be
STEREO_PROJECTION_PERSPECTIVE_NV or STEREO_PROJECTION_ORTHO_NV
identifying the projection type used. If <param> has any other
value, an INVALID_ENUM error is generated. The current 3D Vision
stereo method is queried by calling GetIntegerv with <pname> set to
STEREO_PROJECTION_NV. The initial value of STEREO_PROJECTION_NV is
STEREO_PROJECTION_PERSPECTIVE_NV, but may differ for contexts
created with a 3D Vision profile in effect.
If <pname> is STEREO_SEPARATION_NV, then <param> specifies the
separation value used in 3D Vision stereo rendering. The current
separation value is queried by calling GetFloatv with <pname> set
to STEREO_SEPARATION_NV. The initial value of STEREO_PROJECTION_NV
depends on 3D Vision system settings at the time the context was
created. The separation value indicates a percentage. If <param> is
less than zero or greater than 100, an INVALID_VALUE error is
generated.
If <pname> is STEREO_CONVERGENCE_NV, then <param> specifies the
convergence value used in 3D Vision stereo rendering. The current
convergence value is queried by calling GetFloatv with <pname> set
to STEREO_CONVERGENCE_NV. The initial value of STEREO_CONVERGENCE-
_NV is zero, but may differ for contexts created with a 3D Vision
profile in effect.
If <pname> is STEREO_CUTOFF_NV, then <param> specifies the
separation cutoff value used in 3D Vision stereo rendering. The
current separation cutoff value is queried by calling GetFloatv
with <pname> set to STEREO_CUTOFF_NV. The initial value of
STEREO_CUTOFF_NV is zero, but may differ for contexts created with a
3D Vision profile in effect.
Otherwise, INVALID_ENUM is generated.
Setting stereo parameters on a context that does not support 3D
Vision rendering has no effect on rendering.
The state required to implement these stereo parameters is three
floats and one integer.
Errors
The error INVALID_ENUM is generated if StereoParameter{if} is
called where <pname> is an unsupported enum value.
The error INVALID_ENUM is generated if StereoParameter{if} is
called where <pname> is STEREO_PROJECTION_NV and <param> is an
unsupported enum value.
New State
Add new table "Stereo State"
Get Value Type Get Command Initial Value Description Sec
--------- ---- ----------- ------------- ----------- ------
3DVISION_STEREO_NV B isEnabled see 4.2.x 3D Vision stereo enable 4.2.x
STEREO_SEPARATION_NV R GetFloatv see 4.2.x 3D Vision separation 4.2.x
STEREO_CONVERGENCE_NV R GetFloatv see 4.2.x 3D Vision convergence 4.2.x
STEREO_CUTOFF_NV R GetFloatv see 4.2.x 3D Vision separation cutoff 4.2.x
STEREO_PROJECTION_NV Z GetIntegerv see 4.2.x 3D Vision projection method 4.2.x
Issues
1. What are the default values of 3D Vision stereo parameters?
RESOLVED: The default values depend on the application being run and
current system 3D Vision settings. For all but separation, defaults
for an application with no 3D Vision profile. GL contexts created
for Applications with established stereo profiles will have
different default values for stereo parameters.
2. Should method settings be included?
RESOLVED: Yes, but in a form that makes sense to the user. Internal
method settings have many forms, but all the user needs be concerned
with are orthographic and perspective settings. For Applications
controlled by application detection, changing this is inadvisable.
Applications that use context creation attributes to enable 3D
Vision may have to set the method explicitly.
3. Should descriptions of how these settings are used by 3D Vision
be included here?
RESOLVED: No. This functionality is extensively documented in
existing 3D Vision documents such as "NVIDIA 3D Vision Automatic Best
Practices". Merging these explanations into the OpenGL document and
maintaining them won't add any additional clarity to the functionality
and may limit the underlying implementation.
4. What is the behavior of GL calls that may use a 3D Vision surface
such as ReadPixels, CopyTex[Sub]Image, and BlitFramebuffer?
RESOLVED: The current implementation makes calls that expect a
single surface by definition such as ReadPixels read from the left
buffer only. Calls that permit the number of surfaces to be
abstracted behind objects that have no direct interaction with the
user application such as CopyTexImage and BlitFramebuffer sample
from both surfaces of the source when available to copy to the
corresponding destination surfaces.
The intent of this extension is to provide a 3D Vision support
that is as transparent to the developer as possible. Introducing the
ability to select which buffer is read from breaks the notion of the
application that what was developed as a single buffer is
represented as two surfaces when 3D Vision is enabled. Furthermore,
this matches behavior of 3D Vision enabled applications that do not
make use of this extension.
It's possible that this approach may cause problems with particular
applications that make meaningful use of ReadPixels. Such
incidents are not expected to be common. Where they arise, the 3D
Vision implementation may change to accomodate them. It is in
keeping with one purpose of this extension to test new development
with 3D Vision to identify interaction problems before it becomes
publicly available. By keeping with the current implementation,
these conflicts can be identified and resolved beforehand. This is
one such conflict that may be identified and addressed either by the
application developer or through communication with the extension
implementor.
Because the implementation may change according to future
requirements, this extension makes no changes to the corresponding
documentation in the specification to enable future implementation
changes that may do something different. Conceptually, the behavior
of this functionality does not change any more than that of the draw
calls.
Revision History
Rev. Date Author Changes
---- ------------- --------- ----------------------------------------
5 05 Oct 2012 groth Add issue addressing ReadPixels.
4 15 Dec 2011 groth Refine default values. Add invalid value errors
3 02 Dec 2011 groth Restore method settings in limited form
2 11 Nov 2011 groth Remove method query and settings
1 08 Nov 2011 groth Initial version