]> git.seodisparate.com - EN605.617.81.FA21_StephenSeo_DitheringProject/commitdiff
Minor fix regarding blue-noise-offsets
authorStephen Seo <seo.disparate@gmail.com>
Wed, 1 Dec 2021 09:13:21 +0000 (18:13 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Wed, 1 Dec 2021 09:13:21 +0000 (18:13 +0900)
src/image.cc

index 284abf0efa156bdb0d06ff81131df8e2083d18ea..247bff2adbeceaf2eb67f8824df0c41f657fefe8 100644 (file)
@@ -50,6 +50,7 @@ Image::Image()
       is_dithered_grayscale_(false),
       is_dithered_color_(false),
       is_preserving_blue_noise_offsets_(true) {
+  std::srand(std::time(nullptr));
   GenerateBlueNoiseOffsets();
 }
 
@@ -91,6 +92,7 @@ Image::Image(const std::string &filename)
     return;
   }
 
+  std::srand(std::time(nullptr));
   GenerateBlueNoiseOffsets();
 }
 
@@ -696,10 +698,6 @@ std::unique_ptr<Image> Image::ToColorDitheredWithBlueNoise(Image *blue_noise) {
 
   if (!opencl_handle->HasBuffer(color_kernel_name,
                                 kBufferBlueNoiseOffsetsName)) {
-    if (!is_preserving_blue_noise_offsets_) {
-      GenerateBlueNoiseOffsets();
-    }
-
     if (!opencl_handle->CreateKernelBuffer(
             color_kernel_name, CL_MEM_READ_ONLY,
             sizeof(unsigned int) * blue_noise_offsets_.size(), nullptr,
@@ -713,6 +711,10 @@ std::unique_ptr<Image> Image::ToColorDitheredWithBlueNoise(Image *blue_noise) {
     }
   }
 
+  if (!is_preserving_blue_noise_offsets_) {
+    GenerateBlueNoiseOffsets();
+  }
+
   if (!opencl_handle->SetKernelBufferData(
           color_kernel_name, kBufferBlueNoiseOffsetsName,
           blue_noise_offsets_.size() * sizeof(unsigned int),
@@ -1413,12 +1415,11 @@ const std::string &Image::GetColorKernelName() {
 }
 
 void Image::GenerateBlueNoiseOffsets() {
-  std::srand(std::time(nullptr));
-  while (DuplicateBlueNoiseOffsetExists()) {
+  do {
     for (unsigned int i = 0; i < blue_noise_offsets_.size(); ++i) {
       blue_noise_offsets_.at(i) = rand() % kBlueNoiseOffsetMax;
     }
-  }
+  } while (DuplicateBlueNoiseOffsetExists());
 }
 
 bool Image::DuplicateBlueNoiseOffsetExists() const {