Ejemplo n.º 1
0
TimeSourceWin32::TimeSourceWin32()
{
    LARGE_INTEGER frequency;
    ::QueryPerformanceFrequency(&frequency);

    POMDOG_ASSERT_MESSAGE(0 != frequency.QuadPart,
        "High-resolution performance counter not supported by installed hardware.");

    secondsPerTick = 1.0 / frequency.QuadPart;
}
Ejemplo n.º 2
0
T Clamp(const T& x, const T& min, const T& max)
{
    static_assert(std::is_arithmetic<T>::value
        || Detail::IsTaggedFloatingPoint<T>::value, "");
    POMDOG_ASSERT_MESSAGE(min < max, "In Clamp, maxval is out of range");
    if (x < min) {
        return min;
    }
    if (x > max) {
        return max;
    }
    return x;
}
Ejemplo n.º 3
0
FloatingPointMatrix3x2<T>
FloatingPointMatrix3x2<T>::Invert(const FloatingPointMatrix3x2& matrix)
{
    auto const determinant = matrix.Determinant();

    static_assert(std::is_same<decltype(matrix.Determinant()), T>::value, "determinant is T");
    POMDOG_ASSERT_MESSAGE(T{0} != determinant, "This is singular matrix");

    auto const inverseDeterminant = T{1} / determinant;
    auto const offsetX = matrix(2, 0);
    auto const offsetY = matrix(2, 1);

    return {
         matrix(1, 1) * inverseDeterminant,
        -matrix(0, 1) * inverseDeterminant,
        -matrix(1, 0) * inverseDeterminant,
         matrix(0, 0) * inverseDeterminant,
        (matrix(1, 0) * offsetY - offsetX * matrix(1, 1)) * inverseDeterminant,
        (offsetX * matrix(0, 1) - matrix(0, 0) * offsetY) * inverseDeterminant};
}
Ejemplo n.º 4
0
const T& FloatingPointMatrix3x2<T>::operator()(std::size_t row, std::size_t column) const
{
    POMDOG_ASSERT_MESSAGE(row < RowSize, "row: out of range");
    POMDOG_ASSERT_MESSAGE(column < ColumnSize, "column: out of range");
    return m[row][column];
}