Skip to content

Instantly share code, notes, and snippets.

@HalCanary
Created March 15, 2017 20:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HalCanary/90226463c98ac96721b4aa085a123ecc to your computer and use it in GitHub Desktop.
Save HalCanary/90226463c98ac96721b4aa085a123ecc to your computer and use it in GitHub Desktop.
#include "sk_types.h"
void concat_matrices(sk_matrix_t* dst,
const sk_matrix_t* matrixU,
const sk_matrix_t* matrixV) {
const float* u = matrixU->mat;
const float* v = matrixV->mat;
sk_matrix_t result = {{
u[0] * v[0] + u[1] * v[3] + u[2] * v[6],
u[0] * v[1] + u[1] * v[4] + u[2] * v[7],
u[0] * v[2] + u[1] * v[5] + u[2] * v[8],
u[3] * v[0] + u[4] * v[3] + u[5] * v[6],
u[3] * v[1] + u[4] * v[4] + u[5] * v[7],
u[3] * v[2] + u[4] * v[5] + u[5] * v[8],
u[6] * v[0] + u[7] * v[3] + u[8] * v[6],
u[6] * v[1] + u[7] * v[4] + u[8] * v[7],
u[6] * v[2] + u[7] * v[5] + u[8] * v[8]
}};
*dst = result;
}
static bool eq(const SkMatrix& sm, const sk_matrix_t& cm) {
sk_matrix_t tmp;
sm.get9(tmp.mat);
static_assert(9 *sizeof(float) == sizeof(tmp.mat), "");
return 0 == memcmp(tmp.mat, cm.mat, sizeof(tmp.mat));
}
DEF_TEST(HAL, reporter) {
SkRandom r(99);
sk_matrix_t a = {{r.nextF(), r.nextF(), r.nextF(),
r.nextF(), r.nextF(), r.nextF(),
r.nextF(), r.nextF(), r.nextF()}};
sk_matrix_t b = {{r.nextF(), r.nextF(), r.nextF(),
r.nextF(), r.nextF(), r.nextF(),
r.nextF(), r.nextF(), r.nextF()}};
sk_matrix_t ab, ba;
concat_matrices(&ab, &a, &b);
concat_matrices(&ba, &b, &a);
SkMatrix u, v, uv, vu;
u.set9(a.mat);
v.set9(b.mat);
uv = SkMatrix::Concat(u, v);
vu = SkMatrix::Concat(v, u);
REPORTER_ASSERT(reporter, eq(u, a));
REPORTER_ASSERT(reporter, eq(v, b));
REPORTER_ASSERT(reporter, eq(uv, ab));
REPORTER_ASSERT(reporter, eq(vu, ba));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment