
Hi,
I've traced the problem with the broken feImage filter primitive (see https://bugs.launchpad.net/inkscape/+bug/382313 ) to a problem with lib2geom. More specifically, Geom::Matrix.inverse() returns an incorrect matrix. I run this simple test program:
#include <iostream> #include <2geom/matrix.h>
int main() {
Geom::Matrix test_matrix1( 0.003333, 0.000000, 0.000000, 0.003333, 0.083333, 0.083333 );
Geom::Matrix test_inverse1 = test_matrix1.inverse();
std::cout << "Test input" << std::endl; std::cout << test_matrix1 << std::endl;
std::cout << "Test output" << std::endl; std::cout << test_inverse1 << std::endl;
Geom::Matrix test_matrix2( 0.003077, 0.000000, 0.000000, 0.003077, 0.076923, 0.076923 );
Geom::Matrix test_inverse2 = test_matrix2.inverse();
std::cout << "Test input" << std::endl; std::cout << test_matrix2 << std::endl;
std::cout << "Test output" << std::endl; std::cout << test_inverse2 << std::endl; }
The output I see is:
Test input A: 0.003333 C: 0 E: 0.083333 B: 0 D: 0.003333 F: 0.083333
Test output A: 300.03 C: -0 E: -25.0024 B: -0 D: 300.03 F: -25.0024
Test input A: 0.003077 C: 0 E: 0.076923 B: 0 D: 0.003077 F: 0.076923
Test output A: 1 C: 0 E: 0 B: 0 D: 1 F: 0
You can see that the first matrix inversion is correct but the second is wrong. This was tested with SVN as of yesterday on Linux.
Tav