-
-
Notifications
You must be signed in to change notification settings - Fork 183
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
The inverse GLSL function is needed for geometry instancing, but this function is quite recent as it is unsupported before GLSL 1.40. To avoid forbid geometry instancing for a GLSL function support, an equivalent of the inverse function is written. This equivalent is put in gpu_shader_lib.glsl in the marco test : __VERSION__ < 140. This file is added in both vertex and fragment shader when compiling it.
- Loading branch information
1 parent
b7b3dee
commit b5238de
Showing
4 changed files
with
55 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
#if __VERSION__ < 140 | ||
/* Manual implementation of inverse(mat4) for GLSL version before 1.40, | ||
* copied from https://github.com/stackgl/glsl-inverse/blob/master/index.glsl | ||
*/ | ||
|
||
mat4 inverse(mat4 m) { | ||
float a00 = m[0][0], a01 = m[0][1], a02 = m[0][2], a03 = m[0][3], | ||
a10 = m[1][0], a11 = m[1][1], a12 = m[1][2], a13 = m[1][3], | ||
a20 = m[2][0], a21 = m[2][1], a22 = m[2][2], a23 = m[2][3], | ||
a30 = m[3][0], a31 = m[3][1], a32 = m[3][2], a33 = m[3][3], | ||
|
||
b00 = a00 * a11 - a01 * a10, | ||
b01 = a00 * a12 - a02 * a10, | ||
b02 = a00 * a13 - a03 * a10, | ||
b03 = a01 * a12 - a02 * a11, | ||
b04 = a01 * a13 - a03 * a11, | ||
b05 = a02 * a13 - a03 * a12, | ||
b06 = a20 * a31 - a21 * a30, | ||
b07 = a20 * a32 - a22 * a30, | ||
b08 = a20 * a33 - a23 * a30, | ||
b09 = a21 * a32 - a22 * a31, | ||
b10 = a21 * a33 - a23 * a31, | ||
b11 = a22 * a33 - a23 * a32, | ||
|
||
det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; | ||
|
||
return mat4( | ||
a11 * b11 - a12 * b10 + a13 * b09, | ||
a02 * b10 - a01 * b11 - a03 * b09, | ||
a31 * b05 - a32 * b04 + a33 * b03, | ||
a22 * b04 - a21 * b05 - a23 * b03, | ||
a12 * b08 - a10 * b11 - a13 * b07, | ||
a00 * b11 - a02 * b08 + a03 * b07, | ||
a32 * b02 - a30 * b05 - a33 * b01, | ||
a20 * b05 - a22 * b02 + a23 * b01, | ||
a10 * b10 - a11 * b08 + a13 * b06, | ||
a01 * b08 - a00 * b10 - a03 * b06, | ||
a30 * b04 - a31 * b02 + a33 * b00, | ||
a21 * b02 - a20 * b04 - a23 * b00, | ||
a11 * b07 - a10 * b09 - a12 * b06, | ||
a00 * b09 - a01 * b07 + a02 * b06, | ||
a31 * b01 - a30 * b03 - a32 * b00, | ||
a20 * b03 - a21 * b01 + a22 * b00) / det; | ||
} | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters