+ _last_canvas_size.set_next (canvas_size);
+ _last_video_size.set_next (video->size());
+ _last_inter_position.set_next (inter_position);
+ _last_inter_size.set_next (inter_size);
+ _last_out_size.set_next (out_size);
+
+ auto x_pixels_to_gl = [canvas_width](int x) {
+ return (x * 2.0f / canvas_width) - 1.0f;
+ };
+
+ auto y_pixels_to_gl = [canvas_height](int y) {
+ return (y * 2.0f / canvas_height) - 1.0f;
+ };
+
+ if (_last_canvas_size.changed() || _last_inter_position.changed() || _last_inter_size.changed() || _last_out_size.changed()) {
+ float const video_x1 = x_pixels_to_gl(_optimise_for_j2k ? inter_position.x : 0);
+ float const video_x2 = x_pixels_to_gl(_optimise_for_j2k ? (inter_position.x + inter_size.width) : out_size.width);
+ float const video_y1 = y_pixels_to_gl(_optimise_for_j2k ? inter_position.y : 0);
+ float const video_y2 = y_pixels_to_gl(_optimise_for_j2k ? (inter_position.y + inter_size.height) : out_size.height);
+ float video_vertices[] = {
+ // positions // texture coords
+ video_x2, video_y2, 0.0f, 1.0f, 0.0f, // video texture top right (index 0)
+ video_x2, video_y1, 0.0f, 1.0f, 1.0f, // video texture bottom right (index 1)
+ video_x1, video_y1, 0.0f, 0.0f, 1.0f, // video texture bottom left (index 2)
+ video_x1, video_y2, 0.0f, 0.0f, 0.0f, // video texture top left (index 3)