diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
commit | 6352e8e3196f78388b6c771073f9e03eaa612673 (patch) | |
tree | e23772f79a7fbc41bc9108951e9e136857484bf4 /source/rendering/StarEnvironmentPainter.hpp | |
parent | 6741a057e5639280d85d0f88ba26f000baa58f61 (diff) |
everything everywhere
all at once
Diffstat (limited to 'source/rendering/StarEnvironmentPainter.hpp')
-rw-r--r-- | source/rendering/StarEnvironmentPainter.hpp | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/source/rendering/StarEnvironmentPainter.hpp b/source/rendering/StarEnvironmentPainter.hpp new file mode 100644 index 0000000..3a90b69 --- /dev/null +++ b/source/rendering/StarEnvironmentPainter.hpp @@ -0,0 +1,81 @@ +#ifndef STAR_ENVIRONMENT_PAINTER_HPP +#define STAR_ENVIRONMENT_PAINTER_HPP + +#include "StarParallax.hpp" +#include "StarWorldRenderData.hpp" +#include "StarAssetTextureGroup.hpp" +#include "StarRenderer.hpp" +#include "StarWorldCamera.hpp" +#include "StarPerlin.hpp" +#include "StarRandomPoint.hpp" + +namespace Star { + +STAR_CLASS(EnvironmentPainter); + +class EnvironmentPainter { +public: + EnvironmentPainter(RendererPtr renderer); + + void update(); + + void renderStars(float pixelRatio, Vec2F const& screenSize, SkyRenderData const& sky); + void renderDebrisFields(float pixelRatio, Vec2F const& screenSize, SkyRenderData const& sky); + void renderBackOrbiters(float pixelRatio, Vec2F const& screenSize, SkyRenderData const& sky); + void renderPlanetHorizon(float pixelRatio, Vec2F const& screenSize, SkyRenderData const& sky); + void renderFrontOrbiters(float pixelRatio, Vec2F const& screenSize, SkyRenderData const& sky); + void renderSky(Vec2F const& screenSize, SkyRenderData const& sky); + + void renderParallaxLayers(Vec2F parallaxWorldPosition, WorldCamera const& camera, ParallaxLayers const& layers, SkyRenderData const& sky); + + void cleanup(int64_t textureTimeout); + +private: + static float const SunriseTime; + static float const SunsetTime; + static float const SunFadeRate; + static float const MaxFade; + static float const RayPerlinFrequency; + static float const RayPerlinAmplitude; + static int const RayCount; + static float const RayMinWidth; + static float const RayWidthVariance; + static float const RayAngleVariance; + static float const SunRadius; + static float const RayColorDependenceLevel; + static float const RayColorDependenceScale; + static float const RayUnscaledAlphaVariance; + static float const RayMinUnscaledAlpha; + static Vec3B const RayColor; + + void drawRays(float pixelRatio, SkyRenderData const& sky, Vec2F start, float length, double time, float alpha); + void drawRay(float pixelRatio, + SkyRenderData const& sky, + Vec2F start, + float width, + float length, + float angle, + double time, + Vec3B color, + float alpha); + void drawOrbiter(float pixelRatio, Vec2F const& screenSize, SkyRenderData const& sky, SkyOrbiter const& orbiter); + + uint64_t starsHash(SkyRenderData const& sky, Vec2F const& viewSize) const; + void setupStars(SkyRenderData const& sky); + + RendererPtr m_renderer; + AssetTextureGroupPtr m_textureGroup; + + double m_timer; + int64_t m_lastTime; + PerlinF m_rayPerlin; + + uint64_t m_starsHash; + List<TexturePtr> m_starTextures; + shared_ptr<Random2dPointGenerator<pair<size_t, float>>> m_starGenerator; + List<shared_ptr<Random2dPointGenerator<pair<String, float>>>> m_debrisGenerators; +}; + +} + +#endif |