GenericRenderScreenshotTest.lua 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. ----------------------------------------------------------------------------------------------------
  2. --
  3. -- Copyright (c) Contributors to the Open 3D Engine Project.
  4. -- For complete copyright and license terms please see the LICENSE at the root of this distribution.
  5. --
  6. -- SPDX-License-Identifier: Apache-2.0 OR MIT
  7. --
  8. ----------------------------------------------------------------------------------------------------
  9. function GetRequiredStringValue(valueKey, prettyName)
  10. value = g_SettingsRegistry:GetString(valueKey)
  11. if (not value:has_value()) then
  12. Print('GenricRenderScreenshotTest script missing ' .. tostring(prettyName) .. ' settings registry entry, ending script early')
  13. return false, nil
  14. end
  15. Print('GenricRenderScreenshotTest script found ' .. prettyName .. ' settings registry entry, ' .. value:value())
  16. return true, value:value()
  17. end
  18. function GetOptionalUIntValue(valueKey, defaultValue)
  19. return g_SettingsRegistry:GetUInt(valueKey):value_or(defaultValue)
  20. end
  21. function GetOptionalStringValue(valueKey, defaultValue)
  22. return g_SettingsRegistry:GetString(valueKey):value_or(defaultValue)
  23. end
  24. -- required settings
  25. local LevelPathRegistryKey <const> = "/O3DE/ScriptAutomation/ImageCapture/LevelPath"
  26. local TestGroupNameRegistryKey <const> = "/O3DE/ScriptAutomation/ImageCapture/TestGroupName" -- used as part of capture filepath, no whitespace or other invalid characters
  27. local ImageNameRegistryKey <const> = "/O3DE/ScriptAutomation/ImageCapture/ImageName"
  28. local CaptureCameraNameKey <const> = "/O3DE/ScriptAutomation/ImageCapture/CaptureCameraName"
  29. local ImageComparisonLevelRegistryKey <const> = "/O3DE/ScriptAutomation/ImageCapture/ImageComparisonLevel"
  30. -- check for SettingsRegistry values that must exist
  31. succeeded, levelPath = GetRequiredStringValue(LevelPathRegistryKey, "Image Capture Level Path")
  32. if (not succeeded) then return end
  33. succeeded, testGroupName = GetRequiredStringValue(TestGroupNameRegistryKey, "Test Group Name")
  34. if (not succeeded) then return end
  35. succeeded, imageNameStr = GetRequiredStringValue(ImageNameRegistryKey, "Image Capture Name")
  36. if (not succeeded) then return end
  37. succeeded, imageComparisonLevelStr = GetRequiredStringValue(ImageComparisonLevelRegistryKey, "Image Comparison Level")
  38. if (not succeeded) then return end
  39. succeeded, cameraNameStr = GetRequiredStringValue(CaptureCameraNameKey, "Camera Entity Names")
  40. if (not succeeded) then return end
  41. splitterChar = ","
  42. imageNames = SplitString(imageNameStr, splitterChar)
  43. imageComparisonLevels = SplitString(imageComparisonLevelStr, splitterChar)
  44. cameraNames = SplitString(cameraNameStr, splitterChar)
  45. if (imageNames:Size() ~= imageComparisonLevels:Size() or imageNames:Size() ~= cameraNames:Size()) then
  46. Error("Invalid number of arguments received")
  47. return
  48. end
  49. RunScript("@gemroot:ScriptAutomation@/Assets/AutomationScripts/GenericImageComparisonTestEnvironment.lua")
  50. IdleFrames(3) -- tick 3 frames to allow tick delta to settle
  51. ExecuteConsoleCommand("r_displayInfo=0")
  52. LoadLevel(levelPath) -- waits for the engine to say the level is finished loading
  53. IdleSeconds(2) -- Wait for assets to finish loading.
  54. for index=1, imageNames:Size() do
  55. SetCamera(cameraNames[index])
  56. captureName = testGroupName .. "/" .. imageNames[index]
  57. IdleFrames(10) -- Wait for camera transition to happen
  58. Print("Saving screenshots to " .. ResolvePath(g_screenshotOutputFolder .. "/" .. g_testEnv .. "/" .. testGroupName))
  59. CaptureScreenshot(captureName)
  60. CompareScreenshotToBaseline(testGroupName .. "/" .. g_testEnv, imageComparisonLevels[index], captureName, g_imperceptibleImageDiffLevel)
  61. end