• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Name
2
3    NV_3dvision_settings
4
5Name Strings
6
7    GL_NV_3dvision_settings
8
9Contributors
10
11    Mathias Heyer, NVIDIA
12    Swaminathan Narayanan, NVIDIA
13    Greg Roth, NVIDIA
14
15Contact
16
17    Greg Roth, NVIDIA (groth 'at' nvidia.com)
18
19Status
20
21    Complete
22
23Version
24
25    Last Modified Date: 05 Oct 2012
26    Revision: 5
27
28Number
29
30    OpenGL ES Extension #129
31
32Dependencies
33
34    Written based on the wording of the OpenGL ES 2.0.25 specification
35
36    OpenGL ES 2.0 is required.
37
38    EGL_NV_3dvision_surface is used to specify a surface
39    with support for these features explicitly enabled.
40
41Overview
42
43    NVIDIA 3D Vision provides stereoscopic 3d rendering without
44    requiring applications to change their rendering methods. However
45    there are cases where applications can benefit from adjusting 3D
46    vision parameters directly to experiment with this functionality in
47    applications not yet known to 3D Vision, to assist 3D Vision in
48    setting parameters correctly for unusual situations, or to present
49    application-specific user-accessible controls for 3D Vision
50    parameters.
51
52    This extension provides the ability to query the current stereo
53    settings and adjust them as necessary.
54
55IP Status
56
57    NVIDIA Proprietary
58
59New Procedures and Functions
60
61    void StereoParameterfNV(enum pname, float param);
62    void StereoParameteriNV(enum pname, int param);
63
64New Tokens
65
66    Accepted by the <value> parameter of GetBooleanv, GetIntegerv,
67    and GetFloatv, and the <cap> parameter of isEnabled, Enable, and
68    Disable:
69
70        3DVISION_STEREO_NV                   0x90F4
71
72    Accepted by the <value> parameter of GetBooleanv, GetIntegerv,
73    and GetFloatv and the <param> parameter of StereoParameterfNV,
74    and StereoParameteriNV:
75
76        STEREO_SEPARATION_NV                 0x90F5
77        STEREO_CONVERGENCE_NV                0x90F6
78        STEREO_CUTOFF_NV                     0x90F7
79        STEREO_PROJECTION_NV                 0x90F8
80
81    Accepted by the <param> parameter of StereoParameterfNV and
82    StereoParameteriNV and returned by GetBooleanv, GetIntegerv, and
83    GetFloatv when <value> is STEREO_PROJECTION_NV.
84
85        STEREO_PROJECTION_PERSPECTIVE_NV     0x90F9
86        STEREO_PROJECTION_ORTHO_NV           0x90FA
87
88Changes to Chapter 4 of the OpenGL ES 2.0.25 Specification (Per-Fragment
89Operations and the Frame Buffer)
90
91    Add to section 4.2.1, "Selecting a Buffer for Writing":
92
93    If the bound draw surface is auto stereo enabled and 3d Vision
94    rendering is enabled in the GL, color values are written to left and
95    right buffers with adjustments according to current separation and
96    convergence values.
97
98    Add subsection 4.2.x, "Stereo Parameters":
99
100    3D Vision stereo capability may be enabled at surface creation. If
101    the bound draw surface is auto stereo capable, 3D Vision rendering
102    can be enabled and disabled by calling Enable or Disable with the
103    symbolic constant 3DVISION_STEREO_NV. If the current draw surface is
104    not auto stereo capable, enabling 3D Vision rendering has no
105    effect. The current state of 3D Vision rendering may be queried
106    using isEnabled with <cap> set to 3DVISION_STEREO_NV.
107
108    Various parameters control how 3D Vision stereo rendering is
109    performed. Each parameter is set by calling
110
111        void StereoParameter{if}NV(enum pname, T param);
112
113    <pname> is a symbolic constant indicating the parameter to be set.
114
115    If <pname> is STEREO_PROJECTION_NV, then <param> specifies the
116    method of rendering 3D Vision will use. <param> must be
117    STEREO_PROJECTION_PERSPECTIVE_NV or STEREO_PROJECTION_ORTHO_NV
118    identifying the projection type used. If <param> has any other
119    value, an INVALID_ENUM error is generated. The current 3D Vision
120    stereo method is queried by calling GetIntegerv with <pname> set to
121    STEREO_PROJECTION_NV. The initial value of STEREO_PROJECTION_NV is
122    STEREO_PROJECTION_PERSPECTIVE_NV, but may differ for contexts
123    created with a 3D Vision profile in effect.
124
125    If <pname> is STEREO_SEPARATION_NV, then <param> specifies the
126    separation value used in 3D Vision stereo rendering. The current
127    separation value is queried by calling GetFloatv with <pname> set
128    to STEREO_SEPARATION_NV. The initial value of STEREO_PROJECTION_NV
129    depends on 3D Vision system settings at the time the context was
130    created. The separation value indicates a percentage. If <param> is
131    less than zero or greater than 100, an INVALID_VALUE error is
132    generated.
133
134    If <pname> is STEREO_CONVERGENCE_NV, then <param> specifies the
135    convergence value used in 3D Vision stereo rendering. The current
136    convergence value is queried by calling GetFloatv with <pname> set
137    to STEREO_CONVERGENCE_NV. The initial value of STEREO_CONVERGENCE-
138    _NV is zero, but may differ for contexts created with a 3D Vision
139    profile in effect.
140
141    If <pname> is STEREO_CUTOFF_NV,  then <param> specifies the
142    separation cutoff value used in 3D Vision stereo rendering. The
143    current separation cutoff value is queried by calling GetFloatv
144    with <pname> set to STEREO_CUTOFF_NV. The initial value of
145    STEREO_CUTOFF_NV is zero, but may differ for contexts created with a
146    3D Vision profile in effect.
147
148    Otherwise, INVALID_ENUM is generated.
149
150    Setting stereo parameters on a context that does not support 3D
151    Vision rendering has no effect on rendering.
152
153    The state required to implement these stereo parameters is three
154    floats and one integer.
155
156Errors
157
158    The error INVALID_ENUM is generated if StereoParameter{if} is
159    called where <pname> is an unsupported enum value.
160
161    The error INVALID_ENUM is generated if StereoParameter{if} is
162    called where <pname> is STEREO_PROJECTION_NV and <param> is an
163    unsupported enum value.
164
165New State
166
167    Add new table "Stereo State"
168    Get Value                     Type    Get Command  Initial Value        Description                Sec
169    ---------                     ----    -----------  -------------        -----------                ------
170    3DVISION_STEREO_NV            B       isEnabled    see 4.2.x            3D Vision stereo enable     4.2.x
171    STEREO_SEPARATION_NV          R       GetFloatv    see 4.2.x            3D Vision separation        4.2.x
172    STEREO_CONVERGENCE_NV         R       GetFloatv    see 4.2.x            3D Vision convergence       4.2.x
173    STEREO_CUTOFF_NV              R       GetFloatv    see 4.2.x            3D Vision separation cutoff 4.2.x
174    STEREO_PROJECTION_NV          Z       GetIntegerv  see 4.2.x            3D Vision projection method 4.2.x
175
176Issues
177
178    1. What are the default values of 3D Vision stereo parameters?
179
180    RESOLVED: The default values depend on the application being run and
181    current system 3D Vision settings. For all but separation, defaults
182    for an application with no 3D Vision profile. GL contexts created
183    for Applications with established stereo profiles will have
184    different default values for stereo parameters.
185
186    2. Should method settings be included?
187
188    RESOLVED: Yes, but in a form that makes sense to the user. Internal
189    method settings have many forms, but all the user needs be concerned
190    with are orthographic and perspective settings. For Applications
191    controlled by application detection, changing this is inadvisable.
192    Applications that use context creation attributes to enable 3D
193    Vision may have to set the method explicitly.
194
195    3. Should descriptions of how these settings are used by 3D Vision
196    be included here?
197
198    RESOLVED: No. This functionality is extensively documented in
199    existing 3D Vision documents such as "NVIDIA 3D Vision Automatic Best
200    Practices". Merging these explanations into the OpenGL document and
201    maintaining them won't add any additional clarity to the functionality
202    and may limit the underlying implementation.
203
204
205    4. What is the behavior of GL calls that may use a 3D Vision surface
206    such as ReadPixels, CopyTex[Sub]Image, and BlitFramebuffer?
207
208    RESOLVED: The current implementation makes calls that expect a
209    single surface by definition such as ReadPixels read from the left
210    buffer only. Calls that permit the number of surfaces to be
211    abstracted behind objects that have no direct interaction with the
212    user application such as CopyTexImage and BlitFramebuffer sample
213    from both surfaces of the source when available to copy to the
214    corresponding destination surfaces.
215
216    The intent of this extension is to provide a 3D Vision support
217    that is as transparent to the developer as possible. Introducing the
218    ability to select which buffer is read from breaks the notion of the
219    application that what was developed as a single buffer is
220    represented as two surfaces when 3D Vision is enabled. Furthermore,
221    this matches behavior of 3D Vision enabled applications that do not
222    make use of this extension.
223
224    It's possible that this approach may cause problems with particular
225    applications that make meaningful use of ReadPixels. Such
226    incidents are not expected to be common. Where they arise, the 3D
227    Vision implementation may change to accomodate them. It is in
228    keeping with one purpose of this extension to test new development
229    with 3D Vision to identify interaction problems before it becomes
230    publicly available. By keeping with the current implementation,
231    these conflicts can be identified and resolved beforehand. This is
232    one such conflict that may be identified and addressed either by the
233    application developer or through communication with the extension
234    implementor.
235
236    Because the implementation may change according to future
237    requirements, this extension makes no changes to the corresponding
238    documentation in the specification to enable future implementation
239    changes that may do something different. Conceptually, the behavior
240    of this functionality does not change any more than that of the draw
241    calls.
242
243Revision History
244
245    Rev.    Date        Author      Changes
246    ----  ------------- ---------   ----------------------------------------
247      5   05 Oct 2012   groth       Add issue addressing ReadPixels.
248      4   15 Dec 2011   groth       Refine default values. Add invalid value errors
249      3   02 Dec 2011   groth       Restore method settings in limited form
250      2   11 Nov 2011   groth       Remove method query and settings
251      1   08 Nov 2011   groth       Initial version
252
253