1 // Copyright 2001-2018 Crytek GmbH / Crytek Group. All rights reserved.
3 /*************************************************************************
5 -------------------------------------------------------------------------
7 - 15:05:2009 Created by Federico Rebora
9 *************************************************************************/
13 #include "ColorGradientManager.h"
15 #include "EngineFacade/PluggableEngineFacade.h"
17 #include "Testing/TestUtilities.h"
19 #include "Testing/MockColorGradingController.h"
21 #include <CryRenderer/IColorGradingController.h>
23 CRY_TEST_FIXTURE(ColorGradientManager_TestFixture
, CryUnit::ITestFixture
, GameTesting::MainTestSuite
)
26 class CMock3DEngine
: public EngineFacade::CDummyEngine3DEngine
29 CMock3DEngine(EngineFacade::IEngineColorGradingController
& colorGradingController
)
30 : m_colorGradingController(colorGradingController
)
35 virtual EngineFacade::IEngineColorGradingController
& GetEngineColorGradingController()
37 return m_colorGradingController
;
41 EngineFacade::IEngineColorGradingController
& m_colorGradingController
;
45 ColorGradientManager_TestFixture()
46 : m_mock3DEngine(m_mockColorGradingController
)
47 , m_colorGradientManager(m_engine
)
53 m_engine
.Use(m_mock3DEngine
);
57 GameTesting::CMockEngineColorGradingController m_mockColorGradingController
;
58 CMock3DEngine m_mock3DEngine
;
59 EngineFacade::CDummyPluggableEngineFacade m_engine
;
60 Graphics::CColorGradientManager m_colorGradientManager
;
65 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestTriggeredFadingColorGradientLoadsOnUpdate
, ColorGradientManager_TestFixture
)
67 const char* const testPath
= "testPath";
69 m_colorGradientManager
.TriggerFadingColorGradient(testPath
, 0.0f
);
70 m_colorGradientManager
.UpdateForThisFrame(0.0f
);
72 ASSERT_ARE_EQUAL(testPath
, m_mockColorGradingController
.GetPathOfLastLoadedColorChart());
75 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestNothingIsLoadedIfNothingWasTriggered
, ColorGradientManager_TestFixture
)
77 m_colorGradientManager
.UpdateForThisFrame(0.0f
);
79 ASSERT_IS_FALSE(m_mockColorGradingController
.AnyChartsWereLoaded());
82 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestMoreGradientsCanBeTriggeredInOneFrame
, ColorGradientManager_TestFixture
)
84 const char* const testPath1
= "testPath1";
85 m_colorGradientManager
.TriggerFadingColorGradient(testPath1
, 0.0f
);
87 const char* const testPath2
= "testPath2";
88 m_colorGradientManager
.TriggerFadingColorGradient(testPath2
, 0.0f
);
90 m_colorGradientManager
.UpdateForThisFrame(0.0f
);
92 ASSERT_ARE_EQUAL(testPath1
, m_mockColorGradingController
.GetPathOfLoadedColorChart(0));
93 ASSERT_ARE_EQUAL(testPath2
, m_mockColorGradingController
.GetPathOfLoadedColorChart(1));
96 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestGradientsAreLoadedOnlyOnce
, ColorGradientManager_TestFixture
)
98 m_colorGradientManager
.TriggerFadingColorGradient("testPath", 0.0f
);
100 m_colorGradientManager
.UpdateForThisFrame(0.0f
);
101 m_mockColorGradingController
.ClearLoadedCharts();
102 m_colorGradientManager
.UpdateForThisFrame(0.0f
);
104 ASSERT_IS_FALSE(m_mockColorGradingController
.AnyChartsWereLoaded());
107 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestGradientWithZeroFadingTimeIsUsedImmediatelyWithFullWeight
, ColorGradientManager_TestFixture
)
109 const int expectedTexID
= 64;
110 m_mockColorGradingController
.SetFakeIDForLoadedTexture(expectedTexID
);
112 m_colorGradientManager
.TriggerFadingColorGradient("testPath", 0.0f
);
113 m_colorGradientManager
.UpdateForThisFrame(0.0f
);
115 const SColorChartLayer
& theLayerSet
= m_mockColorGradingController
.GetCurrentlySetLayerByIndex(0);
117 const SColorChartLayer
expectedColorChartLayer(expectedTexID
, 1.0f
);
119 ASSERT_ARE_EQUAL(expectedColorChartLayer
, theLayerSet
);
122 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestBlendWeightHalfWayThroughFadingIn
, ColorGradientManager_TestFixture
)
124 m_colorGradientManager
.TriggerFadingColorGradient("testPath", 10.0f
);
125 m_colorGradientManager
.UpdateForThisFrame(5.0f
);
127 const SColorChartLayer
& theLayerSet
= m_mockColorGradingController
.GetCurrentlySetLayerByIndex(0);
129 const SColorChartLayer
expectedColorChartLayer(0, 0.5f
);
131 ASSERT_ARE_EQUAL(expectedColorChartLayer
, theLayerSet
);
134 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestBlendWeightIsOneWhenFadingIsFinished
, ColorGradientManager_TestFixture
)
136 m_colorGradientManager
.TriggerFadingColorGradient("testPath", 5.0f
);
137 m_colorGradientManager
.UpdateForThisFrame(5.0f
);
139 const SColorChartLayer
& theLayerSet
= m_mockColorGradingController
.GetCurrentlySetLayerByIndex(0);
141 const SColorChartLayer
expectedColorChartLayer(0, 1.0f
);
143 ASSERT_ARE_EQUAL(expectedColorChartLayer
, theLayerSet
);
146 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestBlendWeightIsOneAfterFadingIsFinished
, ColorGradientManager_TestFixture
)
148 m_colorGradientManager
.TriggerFadingColorGradient("testPath", 5.0f
);
149 m_colorGradientManager
.UpdateForThisFrame(10.0f
);
151 const SColorChartLayer
& theLayerSet
= m_mockColorGradingController
.GetCurrentlySetLayerByIndex(0);
153 const SColorChartLayer
expectedColorChartLayer(0, 1.0f
);
155 ASSERT_ARE_EQUAL(expectedColorChartLayer
, theLayerSet
);
158 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestNullLayersAreNotSet
, ColorGradientManager_TestFixture
)
160 m_colorGradientManager
.UpdateForThisFrame(0.0f
);
162 ASSERT_IS_FALSE(m_mockColorGradingController
.WasNullPointerSetOnLayers())
165 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestBlendWeightIsOneAfterFadingIsFinishedInMoreUpdates
, ColorGradientManager_TestFixture
)
167 m_colorGradientManager
.TriggerFadingColorGradient("testPath", 10.0f
);
169 m_colorGradientManager
.UpdateForThisFrame(2.0f
);
170 m_colorGradientManager
.UpdateForThisFrame(2.0f
);
171 m_colorGradientManager
.UpdateForThisFrame(2.0f
);
172 m_colorGradientManager
.UpdateForThisFrame(2.0f
);
173 m_colorGradientManager
.UpdateForThisFrame(2.0f
);
175 const SColorChartLayer
& theLayerSet
= m_mockColorGradingController
.GetCurrentlySetLayerByIndex(0);
177 const SColorChartLayer
expectedColorChartLayer(0, 1.0f
);
179 ASSERT_ARE_EQUAL(expectedColorChartLayer
, theLayerSet
);
182 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestTwoLayersSet
, ColorGradientManager_TestFixture
)
184 m_colorGradientManager
.TriggerFadingColorGradient("testPath1", 10.0f
);
185 m_colorGradientManager
.UpdateForThisFrame(10.0f
);
187 m_colorGradientManager
.TriggerFadingColorGradient("testPath2", 10.0f
);
188 m_colorGradientManager
.UpdateForThisFrame(5.0f
);
190 const unsigned int numberOfLayersSet
= (int) m_mockColorGradingController
.GetNumberOfLayersSet();
191 ASSERT_ARE_EQUAL(2u, numberOfLayersSet
);
194 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestLayerIntroducedWhileAnotherOneWasFadingIn
, ColorGradientManager_TestFixture
)
196 m_colorGradientManager
.TriggerFadingColorGradient("testPath1", 10.0f
);
197 m_colorGradientManager
.UpdateForThisFrame(10.0f
);
199 const int expectedTexID
= 64;
200 m_mockColorGradingController
.SetFakeIDForLoadedTexture(expectedTexID
);
202 m_colorGradientManager
.TriggerFadingColorGradient("testPath2", 10.0f
);
203 m_colorGradientManager
.UpdateForThisFrame(5.0f
);
205 const SColorChartLayer
expectedFirstColorChartLayer(0, 0.5f
);
206 ASSERT_ARE_EQUAL(expectedFirstColorChartLayer
, m_mockColorGradingController
.GetCurrentlySetLayerByIndex(0));
208 const SColorChartLayer
expectedSecondColorChartLayer(expectedTexID
, 0.5f
);
209 ASSERT_ARE_EQUAL(expectedSecondColorChartLayer
, m_mockColorGradingController
.GetCurrentlySetLayerByIndex(1));
212 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestNewFadedChartStopsUpdatingPreviousOnes
, ColorGradientManager_TestFixture
)
214 m_colorGradientManager
.TriggerFadingColorGradient("", 10.0f
);
215 m_colorGradientManager
.UpdateForThisFrame(5.0f
);
217 m_colorGradientManager
.TriggerFadingColorGradient("", 10.0f
);
218 m_colorGradientManager
.UpdateForThisFrame(5.0f
);
220 m_colorGradientManager
.TriggerFadingColorGradient("", 10.0f
);
221 m_colorGradientManager
.UpdateForThisFrame(5.0f
);
223 const SColorChartLayer
& firstLayerSet
= m_mockColorGradingController
.GetCurrentlySetLayerByIndex(0);
225 ASSERT_FLOAT_ARE_EQUAL(0.125f
, firstLayerSet
.m_blendAmount
, 0.001f
);
228 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestLayerWithBlendWeightOneSetsOnlyOneLayer
, ColorGradientManager_TestFixture
)
230 m_colorGradientManager
.TriggerFadingColorGradient("testPath1", 10.0f
);
231 m_colorGradientManager
.UpdateForThisFrame(0.0f
);
233 m_colorGradientManager
.TriggerFadingColorGradient("testPath2", 0.0f
);
234 m_colorGradientManager
.UpdateForThisFrame(0.0f
);
236 const unsigned int numberOfLayersSet
= (int) m_mockColorGradingController
.GetNumberOfLayersSet();
237 ASSERT_ARE_EQUAL(1u, numberOfLayersSet
);
240 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestLayerWithBlendWeightOneRemovesOtherLayersAndIsSetCorrectly
, ColorGradientManager_TestFixture
)
242 m_colorGradientManager
.TriggerFadingColorGradient("testPath1", 10.0f
);
243 m_colorGradientManager
.UpdateForThisFrame(0.0f
);
245 const int expectedTexID
= 64;
246 m_mockColorGradingController
.SetFakeIDForLoadedTexture(expectedTexID
);
248 m_colorGradientManager
.TriggerFadingColorGradient("testPath2", 0.0f
);
249 m_colorGradientManager
.UpdateForThisFrame(0.0f
);
251 const SColorChartLayer
expectedColorChartLayer(expectedTexID
, 1.0f
);
252 ASSERT_ARE_EQUAL(expectedColorChartLayer
, m_mockColorGradingController
.GetCurrentlySetLayerByIndex(0));
255 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestRemovedLayerUnloadsTexture
, ColorGradientManager_TestFixture
)
257 const int expectedTexID
= 64;
258 m_mockColorGradingController
.SetFakeIDForLoadedTexture(expectedTexID
);
260 m_colorGradientManager
.TriggerFadingColorGradient("testPath1", 10.0f
);
261 m_colorGradientManager
.UpdateForThisFrame(0.0f
);
263 m_colorGradientManager
.TriggerFadingColorGradient("testPath2", 0.0f
);
264 m_colorGradientManager
.UpdateForThisFrame(0.0f
);
266 ASSERT_ARE_EQUAL(expectedTexID
, m_mockColorGradingController
.GetLastUnloadedTextureID());
269 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestTextureIsNotUnloadedIfInUse
, ColorGradientManager_TestFixture
)
271 m_colorGradientManager
.TriggerFadingColorGradient("testPath", 10.0f
);
272 m_colorGradientManager
.UpdateForThisFrame(10.0f
);
274 ASSERT_ARE_EQUAL(-1, m_mockColorGradingController
.GetLastUnloadedTextureID());
277 CRY_TEST_WITH_FIXTURE(ColorGradientManager_TestTextureIsNotUnloadedIfDeltaIsZero
, ColorGradientManager_TestFixture
)
279 m_colorGradientManager
.TriggerFadingColorGradient("testPath", 10.0f
);
280 m_colorGradientManager
.UpdateForThisFrame(0.0f
);
282 ASSERT_ARE_EQUAL(-1, m_mockColorGradingController
.GetLastUnloadedTextureID());