Files
o3de/Code/CryEngine/Cry3DEngine/SkyLightManager.h
T
2021-03-08 14:30:57 -08:00

124 lines
3.5 KiB
C++

/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
#ifndef CRYINCLUDE_CRY3DENGINE_SKYLIGHTMANAGER_H
#define CRYINCLUDE_CRY3DENGINE_SKYLIGHTMANAGER_H
#pragma once
#include <memory>
#include <vector>
class CSkyLightNishita;
struct ITimer;
class CSkyLightManager
: public Cry3DEngineBase
{
public:
struct SSkyDomeCondition
{
SSkyDomeCondition()
: m_sunIntensity(20.0f, 20.0f, 20.0f)
, m_Km(0.001f)
, m_Kr(0.00025f)
, m_g(-0.99f)
, m_rgbWaveLengths(650.0f, 570.0f, 475.0f)
, m_sunDirection(0.0f, 0.707106f, 0.707106f)
{
}
Vec3 m_sunIntensity;
float m_Km;
float m_Kr;
float m_g;
Vec3 m_rgbWaveLengths;
Vec3 m_sunDirection;
} _ALIGN(16);
public:
CSkyLightManager();
~CSkyLightManager();
// sky dome condition
void SetSkyDomeCondition(const SSkyDomeCondition& skyDomeCondition);
void GetCurSkyDomeCondition(SSkyDomeCondition& skyCond) const;
// controls updates
void FullUpdate();
void IncrementalUpdate(f32 updateRatioPerFrame, const SRenderingPassInfo& passInfo);
void SetQuality(int32 quality);
// rendering params
const SSkyLightRenderParams* GetRenderParams() const;
void GetMemoryUsage(ICrySizer* pSizer) const;
void InitSkyDomeMesh();
void ReleaseSkyDomeMesh();
void UpdateInternal(int32 newFrameID, int32 numUpdates, int callerIsFullUpdate = 0);
private:
typedef std::vector<CryHalf4> SkyDomeTextureData;
private:
bool IsSkyDomeUpdateFinished() const;
int GetFrontBuffer() const;
int GetBackBuffer() const;
void ToggleBuffer();
public:
void UpdateRenderParams();
private:
void PushUpdateParams();
private:
SSkyDomeCondition m_curSkyDomeCondition; //current sky dome conditions
SSkyDomeCondition m_reqSkyDomeCondition[2]; //requested sky dome conditions, double buffered(engine writes async)
SSkyDomeCondition m_updatingSkyDomeCondition; //sky dome conditions the update is currently processed with
int m_updateRequested[2]; //true if an update is requested, double buffered(engine writes async)
CSkyLightNishita* m_pSkyLightNishita;
SkyDomeTextureData m_skyDomeTextureDataMie[ 2 ];
SkyDomeTextureData m_skyDomeTextureDataRayleigh[ 2 ];
int32 m_skyDomeTextureTimeStamp[ 2 ];
bool m_bFlushFullUpdate;
_smart_ptr<IRenderMesh> m_pSkyDomeMesh;
int32 m_numSkyDomeColorsComputed;
int32 m_curBackBuffer;
int32 m_lastFrameID;
int32 m_needRenderParamUpdate;
Vec3 m_curSkyHemiColor[5];
Vec3 m_curHazeColor;
Vec3 m_curHazeColorMieNoPremul;
Vec3 m_curHazeColorRayleighNoPremul;
Vec3 m_skyHemiColorAccum[5];
Vec3 m_hazeColorAccum;
Vec3 m_hazeColorMieNoPremulAccum;
Vec3 m_hazeColorRayleighNoPremulAccum;
SSkyLightRenderParams m_renderParams _ALIGN(16);
} _ALIGN(128);
#endif // CRYINCLUDE_CRY3DENGINE_SKYLIGHTMANAGER_H