| Name |
| |
| NV_non_square_matrices |
| |
| Name Strings |
| |
| GL_NV_non_square_matrices |
| |
| Contact |
| |
| Nuno Subtil, NVIDIA (nsubtil 'at' nvidia.com) |
| |
| Contributors |
| |
| Nuno Subtil |
| Mark Adams |
| |
| Status |
| |
| Shipping on Tegra. |
| |
| Version |
| |
| Last Modified Date: September 19, 2013 |
| Author revision: 3 |
| |
| Number |
| |
| OpenGL ES Extension #160 |
| |
| Dependencies |
| |
| The OpenGL ES Shading Language (GLSL ES) is required. OpenGL ES |
| 2.0 is required. |
| |
| This extension is written against the OpenGL ES 2.0.25 |
| specification and version 1.0.17 of the OpenGL ES Shading Language |
| specification. |
| |
| EXT_separate_shader_objects interacts with this extension. |
| |
| Overview |
| |
| This extension adds support for non-square matrix variables in GLSL shaders. |
| |
| New Procedures and Functions |
| |
| void UniformMatrix2x3fvNV(int location, sizei count, |
| boolean transpose, const float *value); |
| |
| void UniformMatrix3x2fvNV(int location, sizei count, |
| boolean transpose, const float *value); |
| |
| void UniformMatrix2x4fvNV(int location, sizei count, |
| boolean transpose, const float *value); |
| |
| void UniformMatrix4x2fvNV(int location, sizei count, |
| boolean transpose, const float *value); |
| |
| void UniformMatrix3x4fvNV(int location, sizei count, |
| boolean transpose, const float *value); |
| |
| void UniformMatrix4x3fvNV(int location, sizei count, |
| boolean transpose, const float *value); |
| |
| New Types |
| |
| None. |
| |
| New Tokens |
| |
| Returned by GetActiveAttrib and GetActiveUniform: |
| |
| FLOAT_MAT2x3_NV 0x8B65 |
| FLOAT_MAT2x4_NV 0x8B66 |
| FLOAT_MAT3x2_NV 0x8B67 |
| FLOAT_MAT3x4_NV 0x8B68 |
| FLOAT_MAT4x2_NV 0x8B69 |
| FLOAT_MAT4x3_NV 0x8B6A |
| |
| OpenGL ES 2.0 Specification Updates |
| |
| Additions to Chapter 2 - OpenGL ES Operation |
| |
| Section 2.7 - Current Vertex State |
| Replace the first sentence of the third paragraph with |
| |
| The VertexAttrib* commands can also be used to load attributes |
| declared as any matrix type in a vertex shader. |
| |
| Section 2.10.4 - Shader Variables |
| Amend the second, third and fourth sentences of the second |
| paragraph under "Vertex Attributes": |
| |
| When an attribute variable is declared as a mat2, mat3x2 or mat4x2, ... |
| |
| When an attribute variable is declared as a mat2x3, mat3 or mat4x3, ... |
| |
| When an attribute variable is declared as a mat2x4, mat3x4 or mat4, ... |
| |
| Replace the last sentence of the 4th paragraph on page 33: |
| |
| The type returned can be any of FLOAT, FLOAT_VEC2, FLOAT_VEC3, |
| FLOAT_VEC4, FLOAT_MAT2, FLOAT_MAT3, FLOAT_MAT4, FLOAT_MAT2x3_NV, |
| FLOAT_MAT2x4_NV, FLOAT_MAT3x2_NV, FLOAT_MAT3x4_NV, FLOAT_MAT4x2_NV |
| or FLOAT_MAT4x3_NV. |
| |
| Replace the last sentence on page 36: |
| |
| The type returned can be any of FLOAT, FLOAT_VEC2, FLOAT_VEC3, |
| FLOAT_VEC4, INT, INT_VEC2, INT_VEC3, INT_VEC4, BOOL, BOOL_VEC2, |
| BOOL_VEC3, BOOL_VEC4, FLOAT_MAT2, FLOAT_MAT3, FLOAT_MAT4, |
| FLOAT_MAT2x3_NV, FLOAT_MAT2x4_NV, FLOAT_MAT3x2_NV, |
| FLOAT_MAT3x4_NV, FLOAT_MAT4x2_NV, SAMPLER_2D, or SAMPLER_CUBE. |
| |
| Add the following commands to the 4th paragraph on page 37: |
| |
| void UniformMatrix2x3fvNV(int location, sizei count, |
| boolean transpose, const float *value); |
| |
| void UniformMatrix3x2fvNV(int location, sizei count, |
| boolean transpose, const float *value); |
| |
| void UniformMatrix2x4fvNV(int location, sizei count, |
| boolean transpose, const float *value); |
| |
| void UniformMatrix4x2fvNV(int location, sizei count, |
| boolean transpose, const float *value); |
| |
| void UniformMatrix3x4fvNV(int location, sizei count, |
| boolean transpose, const float *value); |
| |
| void UniformMatrix4x3fvNV(int location, sizei count, |
| boolean transpose, const float *value); |
| |
| Insert before the last paragraph on page 37: |
| |
| The UniformMatrix{2x3,3x2,2x4,4x2,3x4,4x3}fvNV commands will load |
| count 2x3, 3x2, 2x4, 4x2, 3x4, or 4x3 matrices (corresponding to |
| the numbers in the command name) of floating-point values into a |
| uniform location defined as a matrix or an array of matrices. The |
| first number in the command name is the number of columns; the |
| second is the number of rows. For example, UniformMatrix2x4fvNV is |
| used to load a matrix consisting of two columns and four rows. The |
| <transpose> argument must be false and matrices are specified in |
| column major order. |
| |
| OpenGL ES Shading Language Specification v1.0.17 Updates |
| |
| Including the following line in a shader can be used to control |
| the language features described in this extension: |
| |
| #extension GL_NV_non_square_matrices : <behavior> |
| |
| where <behavior> is as specified in section 3.3. |
| |
| A new preprocessor #define is added to the OpenGL Shading |
| Language: |
| |
| #define GL_NV_non_square_matrices 1 |
| |
| Add the following types to the Basic Types table in section 4.1: |
| |
| mat2x3 - a 2x3 floating-point matrix |
| mat3x2 - a 3x2 floating-point matrix |
| mat2x4 - a 2x4 floating-point matrix |
| mat4x2 - a 4x2 floating-point matrix |
| mat3x4 - a 3x4 floating-point matrix |
| mat4x3 - a 4x3 floating-point matrix |
| |
| Section 4.1.6 - Matrices |
| Replace the text under this section with |
| |
| Matrices are another useful data type in computer graphics, and |
| the OpenGL ES Shading Language defines support for 2x2, 2x3, 2x4, |
| 3x2, 3x3, 3x4, 4x2, 4x3 and 4x4 matrices of floating point |
| numbers. Matrices are read from and written to in column major |
| order. Example matrix declarations: |
| |
| mat2 mat2D; |
| mat3 optMatrix; |
| mat4 view, projection; |
| mat2x3 a; |
| mat3x4 b; |
| |
| Initialization of matrix values is done with constructors |
| (described in Section 5.4 "Constructors") in column-major order. |
| |
| mat2 is an alias for mat2x2, not a distinct type. Similarly for |
| mat3 and mat4. The following is legal: |
| |
| mat2 a; |
| mat2x2 b = a; |
| |
| Section 4.3.3 - Attribute |
| Replace the sixth sentence with: |
| |
| A mat2x4, mat3x4 or mat4 attribute will use up the equivalent of 4 |
| vec4 attribute variable locations, a mat2x3, mat3 or mat4x3 will |
| use up the equivalent of 3 attribute variable locations, and a |
| mat2, mat3x2 or mat4x2 will use up 2 attribute variable locations. |
| |
| Section 5.4.2 - Vector and Matrix constructors |
| Replace the last paragraph with: |
| |
| A wide range of other possibilities exist, to construct a matrix |
| from vectors and scalars, as long as enough components are present |
| to initialize the matrix. To construct a matrix from a matrix: |
| |
| mat3x3(mat4x4); // takes the upper-left 3x3 of the mat4x4 |
| mat2x3(mat4x2); // takes the upper-left 2x2 of the mat4x4, last row is 0,0 |
| mat4x4(mat3x3); // puts the mat3x3 in the upper-left, sets the lower right |
| // component to 1, and the rest to 0 |
| |
| Interactions with EXT_separate_shader_objects |
| |
| If EXT_separate_shader_objects is supported, then the |
| ProgramUniformMatrix{2x3,3x2,2x4,4x2,3x4,4x3}fvEXT functions will |
| be present in both OpenGL ES 2.0 and OpenGL ES 3.0 instead of only |
| in OpenGL ES 3.0. |
| |
| Errors |
| |
| None. |
| |
| New State |
| |
| None. |
| |
| New Implementation Dependent State |
| |
| None. |
| |
| Revision History |
| |
| 06-06-12 nsubtil - Initial version |
| 07-23-12 nsubtil - Added NV suffix to entry point and token names |
| Added return values for GetActiveAttrib and GetActiveUniform |
| Added extension pragma to the GLSL updates section |
| Disallow transpose = TRUE in UniformMatrix*x*fvNV |
| Added TBD interactions with SSO |
| 09-19-13 marka - EXT_separate_shader_object interactions |