mirror of
https://github.com/godotengine/godot-angle-static.git
synced 2026-01-03 14:09:33 +03:00
This is a reland of 4a09c1a245
Entry points have been autogenerated again.
Original change's description:
> GLES1: Entry points for lighting and materials
>
> - glLight*/glMaterial and their queries
> - Use new packed enums in these entry points, except for lightmodel
> which stays GLenum to be consistent with other generic glGet's
> - State.cpp: New glGet* queries related to light model and
> light/normal rescale enablement
> - GLES1State.cpp: Functions to get/set lighting/material state
> - Validation for lighting/materials
>
> + Add a few convenience methods to random_utils for sampling
> non-negative floats and a sampler for random booleans
>
> BUG=angleproject:2306
>
> Change-Id: If7ba0c0a0dc75f88fbaa986b904f1ea96ee6512e
> Reviewed-on: https://chromium-review.googlesource.com/1065502
> Commit-Queue: Lingfeng Yang <lfy@google.com>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Bug: angleproject:2306
Change-Id: I434273acd5200dd9f4925e239a032cc8db31a434
Reviewed-on: https://chromium-review.googlesource.com/1072849
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Lingfeng Yang <lfy@google.com>
89 lines
1.8 KiB
C++
89 lines
1.8 KiB
C++
//
|
|
// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
//
|
|
// random_utils:
|
|
// Helper functions for random number generation.
|
|
//
|
|
|
|
#include "random_utils.h"
|
|
|
|
#include <chrono>
|
|
|
|
#include <cstdlib>
|
|
|
|
namespace angle
|
|
{
|
|
|
|
// Seed from clock
|
|
RNG::RNG()
|
|
{
|
|
long long timeSeed = std::chrono::system_clock::now().time_since_epoch().count();
|
|
mGenerator.seed(static_cast<unsigned int>(timeSeed));
|
|
}
|
|
|
|
// Seed from fixed number.
|
|
RNG::RNG(unsigned int seed) : mGenerator(seed)
|
|
{
|
|
}
|
|
|
|
RNG::~RNG()
|
|
{
|
|
}
|
|
|
|
void RNG::reseed(unsigned int newSeed)
|
|
{
|
|
mGenerator.seed(newSeed);
|
|
}
|
|
|
|
bool RNG::randomBool(float probTrue)
|
|
{
|
|
std::bernoulli_distribution dist(probTrue);
|
|
return dist(mGenerator);
|
|
}
|
|
|
|
int RNG::randomInt()
|
|
{
|
|
std::uniform_int_distribution<int> intDistribution;
|
|
return intDistribution(mGenerator);
|
|
}
|
|
|
|
int RNG::randomIntBetween(int min, int max)
|
|
{
|
|
std::uniform_int_distribution<int> intDistribution(min, max);
|
|
return intDistribution(mGenerator);
|
|
}
|
|
|
|
unsigned int RNG::randomUInt()
|
|
{
|
|
std::uniform_int_distribution<unsigned int> uintDistribution;
|
|
return uintDistribution(mGenerator);
|
|
}
|
|
|
|
float RNG::randomFloat()
|
|
{
|
|
std::uniform_real_distribution<float> floatDistribution;
|
|
return floatDistribution(mGenerator);
|
|
}
|
|
|
|
float RNG::randomFloatBetween(float min, float max)
|
|
{
|
|
std::uniform_real_distribution<float> floatDistribution(min, max);
|
|
return floatDistribution(mGenerator);
|
|
}
|
|
|
|
float RNG::randomFloatNonnegative()
|
|
{
|
|
std::uniform_real_distribution<float> floatDistribution(0.0f,
|
|
std::numeric_limits<float>::max());
|
|
return floatDistribution(mGenerator);
|
|
}
|
|
|
|
float RNG::randomNegativeOneToOne()
|
|
{
|
|
return randomFloatBetween(-1.0f, 1.0f);
|
|
}
|
|
|
|
} // namespace angle
|