// 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;
uniform vec4 u_blur_rect;
uniform vec2 u_scale_add;

varying vec2 v_offset;

#include "function_gaussian_integral.inc"

void main() {
  // Get the integral over the interval occupied by the rectangle. Both
  // v_offset and u_blur_rect are already scaled for the integral function.
  float integral = GaussianIntegral(u_blur_rect.xz - v_offset.xx) *
                   GaussianIntegral(u_blur_rect.yw - v_offset.yy);
  float blur_scale = integral * u_scale_add.x + u_scale_add.y;
  gl_FragColor = u_color * blur_scale;
}
