diff options
Diffstat (limited to 'src/platformspecific/linux/libs/nv_math/nv_math.cpp')
-rw-r--r-- | src/platformspecific/linux/libs/nv_math/nv_math.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/platformspecific/linux/libs/nv_math/nv_math.cpp b/src/platformspecific/linux/libs/nv_math/nv_math.cpp new file mode 100644 index 0000000..b83cb39 --- /dev/null +++ b/src/platformspecific/linux/libs/nv_math/nv_math.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2009-2011 NVIDIA Corporation. +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt 3D Studio. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "nv_math.h" + +static const double a = 16807.0; +static const double m = 2147483647.0; + +static double nextSeed(double seed) +{ + double t = a * seed; + return t - m * (double)((int)(t / m)); +} + +GLfloat NvRandf() +{ + static double seed = 1.0; + seed = nextSeed(seed); + return (GLfloat)(seed * (1 / m)); +} + +GLfloat NvClockDiffInSecs(long long int newTime, long long int oldTime) +{ + // kdGetTimeUST is never supposed to decrease (i.e. that + // means it can't wrap, either. IIRC, it will wrap in + // 593 years). So we ignore that option... + + // Used for frame-to-frame diffs, this will fit in 32b + // as long as the times are < ~4.3s apart + long long int diffTime = newTime - oldTime; + + // Need to find a better way to do this. + // However, I believe we will be uSec precise (not run + // out of mantissa bits for uSecs) as long as the diff + // is < ~16s (1e-6 * (2^24)) + return ((GLfloat)diffTime) / 1.0e9f; +} |