Skip to content

Commit 8f8fc19

Browse files
authored
Merge pull request #1321 from MeFisto94/fix-pbr-opengl2-part2
Fixing PBR on <= GLSL 130:
2 parents 2379cfb + 646e674 commit 8f8fc19

File tree

2 files changed

+40
-5
lines changed

2 files changed

+40
-5
lines changed

jme3-core/src/main/resources/Common/ShaderLib/GLSLCompat.glsllib

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,42 @@ out vec4 outFragColor;
4242
# define isnan(val) !(val<0.0||val>0.0||val==0.0)
4343
#endif
4444

45+
#if __VERSION__ == 110
46+
mat3 mat3_sub(mat4 m) {
47+
return mat3(m[0].xyz, m[1].xyz, m[2].xyz);
48+
}
49+
#else
50+
#define mat3_sub mat3
51+
#endif
52+
53+
#if __VERSION__ <= 140
54+
float determinant(mat2 m) {
55+
return m[0][0] * m[1][1] - m[1][0] * m[0][1];
56+
}
57+
58+
float determinant(mat3 m) {
59+
return + m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1])
60+
- m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0])
61+
+ m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);
62+
}
63+
#endif
64+
65+
#if __VERSION__ <= 130
66+
mat2 inverse(mat2 m) {
67+
return mat2(m[1][1], -m[0][1], -m[1][0], m[0][0]) / determinant(m);
68+
}
69+
70+
mat3 inverse(mat3 m) {
71+
return mat3(
72+
+ (m[1][1] * m[2][2] - m[2][1] * m[1][2]),
73+
- (m[1][0] * m[2][2] - m[2][0] * m[1][2]),
74+
+ (m[1][0] * m[2][1] - m[2][0] * m[1][1]),
75+
- (m[0][1] * m[2][2] - m[2][1] * m[0][2]),
76+
+ (m[0][0] * m[2][2] - m[2][0] * m[0][2]),
77+
- (m[0][0] * m[2][1] - m[2][0] * m[0][1]),
78+
+ (m[0][1] * m[1][2] - m[1][1] * m[0][2]),
79+
- (m[0][0] * m[1][2] - m[1][0] * m[0][2]),
80+
+ (m[0][0] * m[1][1] - m[1][0] * m[0][1])) / determinant(m);
81+
}
82+
#endif
4583

jme3-core/src/main/resources/Common/ShaderLib/PBR.glsllib

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,9 @@ float renderProbe(vec3 viewDir, vec3 worldPos, vec3 normal, vec3 norm, float Rou
143143

144144
if(lightProbeData[0][3] != 0.0){
145145
// oriented box probe
146-
mat3 wToLocalRot;
147-
wToLocalRot[0].xyz = lightProbeData[0].xyz;
148-
wToLocalRot[1].xyz = lightProbeData[1].xyz;
149-
wToLocalRot[2].xyz = lightProbeData[2].xyz;
146+
// mat3_sub our compat wrapper for mat3(mat4)
147+
mat3 wToLocalRot = inverse(mat3_sub(lightProbeData));
150148

151-
wToLocalRot = inverse(wToLocalRot);
152149
vec3 scale = vec3(lightProbeData[0][3], lightProbeData[1][3], lightProbeData[2][3]);
153150
#if NB_PROBES >= 2
154151
// probe blending

0 commit comments

Comments
 (0)