// Copyright 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
precision mediump float;

uniform vec4 u_color;
varying vec4 v_rcorner_inner;
varying vec4 v_rcorner_outer;

#include "function_is_outside_rcorner.inc"

void main() {
  float inner_scale = IsOutsideRCorner(v_rcorner_inner);
  float outer_scale = 1.0 - IsOutsideRCorner(v_rcorner_outer);
  gl_FragColor = u_color * (inner_scale * outer_scale);
}
