| @@ -398,6 +398,7 @@ void Shader::SetUniform(ShaderUniform const &uni, vec4 const &v) | |||||
| void Shader::SetUniform(ShaderUniform const &uni, mat2 const &m) | void Shader::SetUniform(ShaderUniform const &uni, mat2 const &m) | ||||
| { | { | ||||
| #if defined USE_D3D9 || defined _XBOX | #if defined USE_D3D9 || defined _XBOX | ||||
| /* FIXME: do we need padding here like for the mat3 version? */ | |||||
| if (uni.flags & 1) | if (uni.flags & 1) | ||||
| g_d3ddevice->SetPixelShaderConstantF((UINT)uni.frag, &m[0][0], 1); | g_d3ddevice->SetPixelShaderConstantF((UINT)uni.frag, &m[0][0], 1); | ||||
| if (uni.flags & 2) | if (uni.flags & 2) | ||||
| @@ -405,7 +406,7 @@ void Shader::SetUniform(ShaderUniform const &uni, mat2 const &m) | |||||
| #elif !defined __CELLOS_LV2__ | #elif !defined __CELLOS_LV2__ | ||||
| glUniformMatrix2fv(uni.frag, 1, GL_FALSE, &m[0][0]); | glUniformMatrix2fv(uni.frag, 1, GL_FALSE, &m[0][0]); | ||||
| #else | #else | ||||
| /* Not implemented */ | |||||
| /* FIXME: not implemented */ | |||||
| Abort(); | Abort(); | ||||
| #endif | #endif | ||||
| } | } | ||||
| @@ -413,11 +414,13 @@ void Shader::SetUniform(ShaderUniform const &uni, mat2 const &m) | |||||
| void Shader::SetUniform(ShaderUniform const &uni, mat3 const &m) | void Shader::SetUniform(ShaderUniform const &uni, mat3 const &m) | ||||
| { | { | ||||
| #if defined USE_D3D9 || defined _XBOX | #if defined USE_D3D9 || defined _XBOX | ||||
| /* FIXME: does this work at all? */ | |||||
| /* Padding matrix columns is necessary on DirectX. We need to create | |||||
| * a new data structure; a 4×4 matrix will do. */ | |||||
| mat4 tmp(m, 1.0f); | |||||
| if (uni.flags & 1) | if (uni.flags & 1) | ||||
| g_d3ddevice->SetPixelShaderConstantF((UINT)uni.frag, &m[0][0], 3); | |||||
| g_d3ddevice->SetPixelShaderConstantF((UINT)uni.frag, &tmp[0][0], 3); | |||||
| if (uni.flags & 2) | if (uni.flags & 2) | ||||
| g_d3ddevice->SetVertexShaderConstantF((UINT)uni.vert, &m[0][0], 3); | |||||
| g_d3ddevice->SetVertexShaderConstantF((UINT)uni.vert, &tmp[0][0], 3); | |||||
| #elif !defined __CELLOS_LV2__ | #elif !defined __CELLOS_LV2__ | ||||
| glUniformMatrix3fv(uni.frag, 1, GL_FALSE, &m[0][0]); | glUniformMatrix3fv(uni.frag, 1, GL_FALSE, &m[0][0]); | ||||
| #else | #else | ||||