| 560 | // simultaneously using the interior_row kernel. |
| 561 | template <int R, typename RGB_T, typename acc_t> |
| 562 | FL_NO_INLINE_IF_AVR FL_OPTIMIZE_FUNCTION |
| 563 | static void apply_pass(const RGB_T *pad, RGB_T *out, int count, int stride) { |
| 564 | constexpr int shift = 2 * R; |
| 565 | using P = pixel_ops<RGB_T>; |
| 566 | for (int i = 0; i < count; ++i) { |
| 567 | acc_t r, g, b; |
| 568 | interior_row<R, RGB_T, acc_t>::apply(pad, R + i, r, g, b); |
| 569 | *out = P::make(static_cast<acc_t>(r >> shift), |
| 570 | static_cast<acc_t>(g >> shift), |
| 571 | static_cast<acc_t>(b >> shift)); |
| 572 | out += stride; |
| 573 | } |
| 574 | } |
| 575 | |
| 576 | template <int R, typename RGB_T, typename acc_t, typename AlphaT> |
| 577 | FL_NO_INLINE_IF_AVR FL_OPTIMIZE_FUNCTION |