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