- Faster FQuat::FindBetween() implementation. Add FindBetweenNormals() and FindBetweenVectors() to indicate different input length requirements.
- Add FVector::ToOrientationQuat(). This preserves the up vector (result has no roll).
- Add FVector::ToOrientationRotator(), matching FVector::Rotation() implementation.
- Add unit tests.
UE-14015
[CL 2629689 by Zak Middleton in Main branch]
- Renamed the old private versions to make them clearly private.
- We do it this way because there is a cost to conversion such as A.GetRotation().Equals(B.GetRotation()) in the vectorized FTransform, where it's more efficient to keep the components in the VectorRegister through the comparison.
#codereview James.Golding
[CL 2606294 by Zak Middleton in Main branch]
The "-" token as been removed from the list of general NOT operator aliases, and is now only available as TextCmpInvert. This means that negative numbers will now parse correctly, but also means that we can now handle complex expressions like "name=-Thing" as a user might expect (equivalent to "name!=thing").
The expression is now evaluated once after compilation (using a dummy context) so that syntax error information can be reported back to the user. Previously evaluation error information was being lost.
#codereview Andrew.Rodham
[CL 2602053 by Jamie Dale in Main branch]
Also refactored the expression evaluation test.
- Broke it up to four test implementations based on what is being tests. This helps QA figure out what is wrong sooner.
- Changed some of the error messages.
- Made the test use the automations "TestTrue" function instead of using a bool to hold the test results to the very end.
- Changed the pretty name so that the tests are grouped together in the UFE automation tab UI.
[CL 2581641 by Justin Hair in Main branch]
Refactored the guts of FExpressionNode to better afford holding moveable types on the stack. Large types are now also stored in the inline bytes for simplicity's sake, but allocated on the heap, and managed with a TUniquePtr.
Added the concept of an evaluation context that can be passed in to the Evaluate function. Jump tables are now templated on a given context type, which is wrapped up with a supplied context for evaluation purposes into a TOperatorEvaluationEnvironment (so that the evaluation logic need not be concerned with the context itself)
[CL 2576821 by Andrew Rodham in Main branch]
This caused the proxy to potentially outlive its content, which caused the automation tests to fail.
Also cleaned up some MoveTemp usage and removed some redundant move operators.
Re-enabled the math expression evaluator tests as smoke tests
[CL 2573794 by Andrew Rodham in Main branch]
(Complete with VS2012 support)
See ExpressionParserExamples.cpp and BasicMathExpressionEvaluator.cpp for example usage.
[CL 2572297 by Andrew Rodham in Main branch]
To summarize,
Old Pipeline: sRGB-Pow(2.2) -> Linear -> sRGB-IEC 61966
New Pipeline: sRGB-IEC 61966 -> Linear -> sRGB-IEC 61966
#codereview gil.gribb, nick.penwarden, martin.mittring
[CL 2571070 by Nick Darnell in Main branch]
- We only need to normalize 1 axis and only rarely (when pitch is -90 or 90). ASin and ATan2 produce normalized results (as in [-pi, pi]).
[CL 2543229 by Zak Middleton in Main branch]