mirror of
https://github.com/love2d/megasource.git
synced 2026-08-16 16:21:13 +02:00
39 lines
1.1 KiB
C++
39 lines
1.1 KiB
C++
#ifndef CORE_CUBIC_TABLES_H
|
|
#define CORE_CUBIC_TABLES_H
|
|
|
|
#include <array>
|
|
#include <cstddef>
|
|
|
|
#include "cubic_defs.h"
|
|
|
|
|
|
struct CubicTable {
|
|
std::array<CubicCoefficients,CubicPhaseCount> mTable{};
|
|
};
|
|
|
|
struct GaussianTable : CubicTable { GaussianTable(); };
|
|
inline const GaussianTable gGaussianFilter;
|
|
|
|
|
|
struct CubicFilter {
|
|
static constexpr std::size_t sTableBits{8};
|
|
static constexpr std::size_t sTableSteps{1 << sTableBits};
|
|
static constexpr std::size_t sTableMask{sTableSteps - 1};
|
|
|
|
std::array<float,sTableSteps*2 + 1> mFilter{};
|
|
|
|
CubicFilter();
|
|
|
|
[[nodiscard]] constexpr
|
|
auto getCoeff0(std::size_t i) const noexcept -> float { return mFilter[sTableSteps+i]; }
|
|
[[nodiscard]] constexpr
|
|
auto getCoeff1(std::size_t i) const noexcept -> float { return mFilter[i]; }
|
|
[[nodiscard]] constexpr
|
|
auto getCoeff2(std::size_t i) const noexcept -> float { return mFilter[sTableSteps-i]; }
|
|
[[nodiscard]] constexpr
|
|
auto getCoeff3(std::size_t i) const noexcept -> float { return mFilter[sTableSteps*2-i]; }
|
|
};
|
|
inline const CubicFilter gCubicTable;
|
|
|
|
#endif /* CORE_CUBIC_TABLES_H */
|