QmlMaterial 0.1.0
Loading...
Searching...
No Matches
shadow_light.hpp
1#pragma once
2
3/*
4 * Shadow-light parameter math.
5 *
6 * Derived from Skia's analytic shadow model (SkShadowUtils, SkGpuBlurUtils).
7 * Skia is BSD-3 licensed; see third_party/skia/LICENSE. This is an independent
8 * re-expression, not a literal copy.
9 */
10
11#include <QVector2D>
12
13#include "qml_material/math/scalar.hpp"
14
15namespace qml_material::math
16{
17
18inline constexpr scalar k_ambient_height_factor = 1.0f / 128.0f;
19inline constexpr scalar k_ambient_geom_factor = 64.0f;
20inline constexpr scalar k_max_ambient_radius = 300 * k_ambient_height_factor * k_ambient_geom_factor;
21
22[[nodiscard]] inline scalar ambient_blur_radius(scalar height) {
23 return std::min(height * k_ambient_height_factor * k_ambient_geom_factor, k_max_ambient_radius);
24}
25
26[[nodiscard]] inline scalar ambient_recip_alpha(scalar height) {
27 return 1.0f + std::max(height * k_ambient_height_factor, 0.0f);
28}
29
30void spot_params(scalar occluder_z, scalar light_x, scalar light_y, scalar light_z,
31 scalar light_radius, scalar* blur_radius, scalar* scale,
32 QVector2D* translate);
33
34void directional_params(scalar occluder_z, scalar light_x, scalar light_y, scalar light_z,
35 scalar light_radius, scalar* blur_radius, scalar* scale,
36 QVector2D* translate);
37
38} // namespace qml_material::math