#include "vigs_utils.h"
#include "vigs_ref.h"
#include "winsys_gl.h"
+#include <math.h>
extern uint32_t qt5_window_width;
extern uint32_t qt5_window_height;
+extern int qt5_window_angle;
struct vigs_gl_surface;
* Ortho matrix for this surface.
*/
GLfloat ortho[16];
+
+ /*
+ * Rotation angle and corresponding ortho,
+ * for display.
+ */
+ int dpy_angle;
+ GLfloat dpy_ortho[16];
};
static __inline struct vigs_winsys_gl_surface
ortho[15] = 1.0f;
}
+static void vigs_gl_rotate_ortho(const GLfloat ortho[16],
+ GLfloat angle,
+ GLfloat res[16])
+{
+ GLfloat rot[4][4] = {
+ { cos(angle), sin(angle), 0, 0 },
+ { -sin(angle), cos(angle), 0, 0 },
+ { 0, 0, 1, 0 },
+ { 0, 0, 0, 1 }
+ };
+ int i, j, k;
+
+ for (i = 0; i < 4; ++i) {
+ for (j = 0; j < 4; ++j) {
+ res[i * 4 + j] = 0.0f;
+ for (k = 0; k < 4; ++k) {
+ res[i * 4 + j] += ortho[i * 4 + k] * rot[k][j];
+ }
+ }
+ }
+}
+
static void vigs_gl_translate_color(vigsp_color color,
vigsp_surface_format format,
GLfloat res[4])
GLfloat *tex_coords;
const struct vigs_plane *sorted_planes[VIGS_MAX_PLANES];
bool scale;
+ GLfloat *ortho;
VIGS_LOG_TRACE("enter");
}
}
+ if (qt5_window_angle == 0) {
+ ortho = gl_root_sfc->ortho;
+ } else {
+ if (gl_root_sfc->dpy_angle != qt5_window_angle) {
+ vigs_gl_rotate_ortho(gl_root_sfc->ortho,
+ (float)(360.0f - qt5_window_angle) * M_PI / 180.0f,
+ gl_root_sfc->dpy_ortho);
+ gl_root_sfc->dpy_angle = qt5_window_angle;
+ }
+ ortho = gl_root_sfc->dpy_ortho;
+ }
+
scale = (qt5_window_width != ws_root_sfc->base.base.width) ||
(qt5_window_height != ws_root_sfc->base.base.height);
gl_backend->UseProgram(gl_backend->dpy_scale_prog_id);
gl_backend->UniformMatrix4fv(gl_backend->dpy_scale_prog_proj_loc, 1, GL_FALSE,
- gl_root_sfc->ortho);
+ ortho);
texSize[0] = ws_root_sfc->base.base.width;
texSize[1] = ws_root_sfc->base.base.height;
} else {
gl_backend->UseProgram(gl_backend->dpy_tex_prog_id);
gl_backend->UniformMatrix4fv(gl_backend->dpy_tex_prog_proj_loc, 1, GL_FALSE,
- gl_root_sfc->ortho);
+ ortho);
}
gl_backend->BindTexture(GL_TEXTURE_2D, ws_root_sfc->tex);