3e7cde8ecb
The PerlinNoise source has a mode where if a seed is not set, it will choose a new seed every time it is executed. It did this by using the value 0 as an indicator to do this (and initializing the Seed to 0). However, there was a problem with one of the benchmarks that was specifically setting the seed to 0 and getting unexpected results. Fix the problem by adding a separate, hidden member of the PerlinNoise class that keeps track of whether to generate new seeds or not.
80 lines
2.9 KiB
C++
80 lines
2.9 KiB
C++
//============================================================================
|
|
// Copyright (c) Kitware, Inc.
|
|
// All rights reserved.
|
|
// See LICENSE.txt for details.
|
|
//
|
|
// This software is distributed WITHOUT ANY WARRANTY; without even
|
|
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
// PURPOSE. See the above copyright notice for more information.
|
|
//============================================================================
|
|
|
|
#ifndef vtk_m_source_PerlinNoise_h
|
|
#define vtk_m_source_PerlinNoise_h
|
|
|
|
#include <vtkm/source/Source.h>
|
|
|
|
namespace vtkm
|
|
{
|
|
namespace source
|
|
{
|
|
/**
|
|
* @brief The PerlinNoise source creates a uniform dataset.
|
|
*
|
|
* This class generates a uniform grid dataset with a tileable perlin
|
|
* noise scalar point field.
|
|
*
|
|
* The Execute method creates a complete structured dataset that have a
|
|
* scalar point field named 'perlinnoise'.
|
|
**/
|
|
class VTKM_SOURCE_EXPORT PerlinNoise final : public vtkm::source::Source
|
|
{
|
|
public:
|
|
VTKM_CONT PerlinNoise() = default;
|
|
VTKM_CONT ~PerlinNoise() = default;
|
|
|
|
VTKM_CONT PerlinNoise(const PerlinNoise&) = default;
|
|
VTKM_CONT PerlinNoise(PerlinNoise&&) = default;
|
|
VTKM_CONT PerlinNoise& operator=(const PerlinNoise&) = default;
|
|
VTKM_CONT PerlinNoise& operator=(PerlinNoise&&) = default;
|
|
|
|
VTKM_DEPRECATED(2.0, "Use SetCellDimensions or SetPointDimensions.")
|
|
VTKM_CONT PerlinNoise(vtkm::Id3 dims);
|
|
VTKM_DEPRECATED(2.0, "Use Set*Dimensions and SetSeed.")
|
|
VTKM_CONT PerlinNoise(vtkm::Id3 dims, vtkm::IdComponent seed);
|
|
VTKM_DEPRECATED(2.0, "Use Set*Dimensions and SetOrigin.")
|
|
VTKM_CONT PerlinNoise(vtkm::Id3 dims, vtkm::Vec3f origin);
|
|
VTKM_DEPRECATED(2.0, "Use Set*Dimensions, SetOrigin, and SetSeed.")
|
|
VTKM_CONT PerlinNoise(vtkm::Id3 dims, vtkm::Vec3f origin, vtkm::IdComponent seed);
|
|
|
|
VTKM_CONT vtkm::Id3 GetPointDimensions() const { return this->PointDimensions; }
|
|
VTKM_CONT void SetPointDimensions(vtkm::Id3 dims) { this->PointDimensions = dims; }
|
|
|
|
VTKM_CONT vtkm::Id3 GetCellDimensions() const { return this->PointDimensions - vtkm::Id3(1); }
|
|
VTKM_CONT void SetCellDimensions(vtkm::Id3 dims) { this->PointDimensions = dims + vtkm::Id3(1); }
|
|
|
|
VTKM_CONT vtkm::Vec3f GetOrigin() const { return this->Origin; }
|
|
VTKM_CONT void SetOrigin(const vtkm::Vec3f& origin) { this->Origin = origin; }
|
|
|
|
/// \brief The seed used for the pseudorandom number generation of the noise.
|
|
///
|
|
/// If the seed is not set, then a new, unique seed is picked each time `Execute` is run.
|
|
VTKM_CONT vtkm::IdComponent GetSeed() const { return this->Seed; }
|
|
VTKM_CONT void SetSeed(vtkm::IdComponent seed)
|
|
{
|
|
this->Seed = seed;
|
|
this->SeedSet = true;
|
|
}
|
|
|
|
private:
|
|
vtkm::cont::DataSet DoExecute() const override;
|
|
|
|
vtkm::Id3 PointDimensions = { 16, 16, 16 };
|
|
vtkm::Vec3f Origin = { 0, 0, 0 };
|
|
vtkm::IdComponent Seed = 0;
|
|
bool SeedSet = false;
|
|
};
|
|
} //namespace source
|
|
} //namespace vtkm
|
|
|
|
#endif //vtk_m_source_PerlinNoise_h
|