// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

uniform FrameInfo {
  mat4 mvp;
  vec2 atlas_size;
  vec4 text_color;
} frame_info;

in vec2 unit_vertex;
in mat4 glyph_position; // <--- Causes multiple slots to be used and is a failure.
in vec2 destination_size;
in vec2 source_position;
in vec2 source_glyph_size;

out vec2 v_unit_vertex;
out vec2 v_source_position;
out vec2 v_source_glyph_size;
out vec2 v_atlas_size;
out vec4 v_text_color;

void main() {
  gl_Position = frame_info.mvp
              * glyph_position
              * vec4(unit_vertex.x * destination_size.x,
                     unit_vertex.y * destination_size.y, 0.0, 1.0);

  v_unit_vertex = unit_vertex;
  v_source_position = source_position;
  v_source_glyph_size = source_glyph_size;
  v_atlas_size = frame_info.atlas_size;
  v_text_color = frame_info.text_color;
}
