diff options
author | wm4 <wm4@nowhere> | 2016-03-28 16:16:09 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2016-03-28 16:16:09 +0200 |
commit | e5b5cc2a2f45a7f80ea56d381db2b5d7635077d4 (patch) | |
tree | e4b02e696a7c9efbee5a7aad65981fe9232af810 | |
parent | fb70819048eee417a4c666199ede35db820d51f5 (diff) | |
download | mpv-e5b5cc2a2f45a7f80ea56d381db2b5d7635077d4.tar.bz2 mpv-e5b5cc2a2f45a7f80ea56d381db2b5d7635077d4.tar.xz |
vo_opengl: fix row-major vs. column-major confusion
gl_transform_vec() assumed column-major, while everything else seemed to
assumed row-major memory organization for gl_transform.m. Also,
gl_transform_trans() seems to contain additional confusion.
This didn't matter until now, as everything has been orthogonal, this
the swapped matrix entries were always 0.
-rw-r--r-- | video/out/opengl/utils.c | 4 | ||||
-rw-r--r-- | video/out/opengl/utils.h | 7 |
2 files changed, 7 insertions, 4 deletions
diff --git a/video/out/opengl/utils.c b/video/out/opengl/utils.c index 98ba098328..f88cd4374a 100644 --- a/video/out/opengl/utils.c +++ b/video/out/opengl/utils.c @@ -482,8 +482,8 @@ void gl_transform_trans(struct gl_transform t, struct gl_transform *x) { float x00 = x->m[0][0], x01 = x->m[0][1], x10 = x->m[1][0], x11 = x->m[1][1]; x->m[0][0] = t.m[0][0] * x00 + t.m[0][1] * x10; - x->m[1][0] = t.m[0][0] * x01 + t.m[0][1] * x11; - x->m[0][1] = t.m[1][0] * x00 + t.m[1][1] * x10; + x->m[1][0] = t.m[1][0] * x00 + t.m[1][1] * x10; + x->m[0][1] = t.m[0][0] * x01 + t.m[0][1] * x11; x->m[1][1] = t.m[1][0] * x01 + t.m[1][1] * x11; gl_transform_vec(t, &x->t[0], &x->t[1]); } diff --git a/video/out/opengl/utils.h b/video/out/opengl/utils.h index a4a6cac302..170e24d71a 100644 --- a/video/out/opengl/utils.h +++ b/video/out/opengl/utils.h @@ -87,6 +87,9 @@ void fbotex_set_filter(struct fbotex *fbo, GLenum gl_filter); // A 3x2 matrix, with the translation part separate. struct gl_transform { + // row-major, e.g. in mathematical notation: + // | m[0][0] m[0][1] | + // | m[1][0] m[1][1] | float m[2][2]; float t[2]; }; @@ -104,8 +107,8 @@ void gl_transform_ortho(struct gl_transform *t, float x0, float x1, static inline void gl_transform_vec(struct gl_transform t, float *x, float *y) { float vx = *x, vy = *y; - *x = vx * t.m[0][0] + vy * t.m[1][0] + t.t[0]; - *y = vx * t.m[0][1] + vy * t.m[1][1] + t.t[1]; + *x = vx * t.m[0][0] + vy * t.m[0][1] + t.t[0]; + *y = vx * t.m[1][0] + vy * t.m[1][1] + t.t[1]; } struct mp_rect_f { |