| @@ -395,6 +395,37 @@ void Shader::SetUniform(ShaderUniform const &uni, vec4 const &v) | |||||
| #endif | #endif | ||||
| } | } | ||||
| void Shader::SetUniform(ShaderUniform const &uni, mat2 const &m) | |||||
| { | |||||
| #if defined USE_D3D9 || defined _XBOX | |||||
| if (uni.flags & 1) | |||||
| g_d3ddevice->SetPixelShaderConstantF((UINT)uni.frag, &m[0][0], 1); | |||||
| if (uni.flags & 2) | |||||
| g_d3ddevice->SetVertexShaderConstantF((UINT)uni.vert, &m[0][0], 1); | |||||
| #elif !defined __CELLOS_LV2__ | |||||
| glUniformMatrix2fv(uni.frag, 1, GL_FALSE, &m[0][0]); | |||||
| #else | |||||
| /* Not implemented */ | |||||
| Abort(); | |||||
| #endif | |||||
| } | |||||
| void Shader::SetUniform(ShaderUniform const &uni, mat3 const &m) | |||||
| { | |||||
| #if defined USE_D3D9 || defined _XBOX | |||||
| /* FIXME: does this work at all? */ | |||||
| if (uni.flags & 1) | |||||
| g_d3ddevice->SetPixelShaderConstantF((UINT)uni.frag, &m[0][0], 3); | |||||
| if (uni.flags & 2) | |||||
| g_d3ddevice->SetVertexShaderConstantF((UINT)uni.vert, &m[0][0], 3); | |||||
| #elif !defined __CELLOS_LV2__ | |||||
| glUniformMatrix3fv(uni.frag, 1, GL_FALSE, &m[0][0]); | |||||
| #else | |||||
| /* FIXME: not implemented */ | |||||
| Abort(); | |||||
| #endif | |||||
| } | |||||
| void Shader::SetUniform(ShaderUniform const &uni, mat4 const &m) | void Shader::SetUniform(ShaderUniform const &uni, mat4 const &m) | ||||
| { | { | ||||
| #if defined USE_D3D9 || defined _XBOX | #if defined USE_D3D9 || defined _XBOX | ||||
| @@ -66,6 +66,8 @@ public: | |||||
| void SetUniform(ShaderUniform const &uni, vec2 const &v); | void SetUniform(ShaderUniform const &uni, vec2 const &v); | ||||
| void SetUniform(ShaderUniform const &uni, vec3 const &v); | void SetUniform(ShaderUniform const &uni, vec3 const &v); | ||||
| void SetUniform(ShaderUniform const &uni, vec4 const &v); | void SetUniform(ShaderUniform const &uni, vec4 const &v); | ||||
| void SetUniform(ShaderUniform const &uni, mat2 const &m); | |||||
| void SetUniform(ShaderUniform const &uni, mat3 const &m); | |||||
| void SetUniform(ShaderUniform const &uni, mat4 const &m); | void SetUniform(ShaderUniform const &uni, mat4 const &m); | ||||
| void Bind() const; | void Bind() const; | ||||
| @@ -1452,11 +1452,6 @@ template <typename T> struct Mat3 | |||||
| return rotate(angle, v) * mat; | return rotate(angle, v) * mat; | ||||
| } | } | ||||
| static Mat3<T> normal(Mat3<T> const &mat) | |||||
| { | |||||
| return transpose(inverse(mat)); | |||||
| } | |||||
| void printf() const; | void printf() const; | ||||
| #if !defined __ANDROID__ | #if !defined __ANDROID__ | ||||
| @@ -1546,11 +1541,6 @@ template <typename T> struct Mat4 | |||||
| return rotate(angle, v) * mat; | return rotate(angle, v) * mat; | ||||
| } | } | ||||
| static Mat3<T> normal(Mat4<T> const &mat) | |||||
| { | |||||
| return transpose(inverse(Mat3<T>(mat))); | |||||
| } | |||||
| /* Helpers for view matrices */ | /* Helpers for view matrices */ | ||||
| static Mat4<T> lookat(Vec3<T> eye, Vec3<T> center, Vec3<T> up); | static Mat4<T> lookat(Vec3<T> eye, Vec3<T> center, Vec3<T> up); | ||||