124 lines
3.5 KiB
C++
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
|