summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/examples/06-bump/vs_bump.sc
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/bgfx/examples/06-bump/vs_bump.sc')
-rw-r--r--3rdparty/bgfx/examples/06-bump/vs_bump.sc37
1 files changed, 22 insertions, 15 deletions
diff --git a/3rdparty/bgfx/examples/06-bump/vs_bump.sc b/3rdparty/bgfx/examples/06-bump/vs_bump.sc
index d41f87fc2fa..6975ccbbf38 100644
--- a/3rdparty/bgfx/examples/06-bump/vs_bump.sc
+++ b/3rdparty/bgfx/examples/06-bump/vs_bump.sc
@@ -2,36 +2,43 @@ $input a_position, a_normal, a_tangent, a_texcoord0
$output v_wpos, v_view, v_normal, v_tangent, v_bitangent, v_texcoord0
/*
- * Copyright 2011-2018 Branimir Karadzic. All rights reserved.
+ * Copyright 2011-2019 Branimir Karadzic. All rights reserved.
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
#include "../common/common.sh"
+mat3 mtx3FromCols(vec3 c0, vec3 c1, vec3 c2)
+{
+#ifdef BGFX_SHADER_LANGUAGE_GLSL
+ return mat3(c0, c1, c2);
+#else
+ return transpose(mat3(c0, c1, c2));
+#endif
+}
+
void main()
{
vec3 wpos = mul(u_model[0], vec4(a_position, 1.0) ).xyz;
+ v_wpos = wpos;
+
gl_Position = mul(u_viewProj, vec4(wpos, 1.0) );
vec4 normal = a_normal * 2.0 - 1.0;
- vec3 wnormal = mul(u_model[0], vec4(normal.xyz, 0.0) ).xyz;
-
vec4 tangent = a_tangent * 2.0 - 1.0;
- vec3 wtangent = mul(u_model[0], vec4(tangent.xyz, 0.0) ).xyz;
-
- vec3 viewNormal = normalize(mul(u_view, vec4(wnormal, 0.0) ).xyz);
- vec3 viewTangent = normalize(mul(u_view, vec4(wtangent, 0.0) ).xyz);
- vec3 viewBitangent = cross(viewNormal, viewTangent) * tangent.w;
- mat3 tbn = mat3(viewTangent, viewBitangent, viewNormal);
- v_wpos = wpos;
+ vec3 wnormal = mul(u_model[0], vec4(normal.xyz, 0.0) ).xyz;
+ vec3 wtangent = mul(u_model[0], vec4(tangent.xyz, 0.0) ).xyz;
- vec3 view = mul(u_view, vec4(wpos, 0.0) ).xyz;
- v_view = mul(view, tbn);
+ v_normal = normalize(wnormal);
+ v_tangent = normalize(wtangent);
+ v_bitangent = cross(v_normal, v_tangent) * tangent.w;
- v_normal = viewNormal;
- v_tangent = viewTangent;
- v_bitangent = viewBitangent;
+ mat3 tbn = mtx3FromCols(v_tangent, v_bitangent, v_normal);
+ // eye position in world space
+ vec3 weyepos = mul(vec4(0.0, 0.0, 0.0, 1.0), u_view).xyz;
+ // tangent space view dir
+ v_view = mul(weyepos - wpos, tbn);
v_texcoord0 = a_texcoord0;
}