xamarin-macios/tests/monotouch-test/SpriteKit/UniformTest.cs

241 строка
9.4 KiB
C#

#if !__WATCHOS__
using System;
#if XAMCORE_2_0
using Foundation;
using SpriteKit;
#if !MONOMAC
using UIKit;
#endif
using ObjCRuntime;
#else
using MonoTouch.Foundation;
using MonoTouch.SpriteKit;
using MonoTouch.UIKit;
using MonoTouch.ObjCRuntime;
#endif
using OpenTK;
using MatrixFloat2x2 = global::OpenTK.NMatrix2;
using MatrixFloat3x3 = global::OpenTK.NMatrix3;
using MatrixFloat4x4 = global::OpenTK.NMatrix4;
using VectorFloat3 = global::OpenTK.NVector3;
using NUnit.Framework;
using Bindings.Test;
namespace MonoTouchFixtures.SpriteKit
{
[TestFixture]
[Preserve (AllMembers = true)]
public class UniformTest
{
[TestFixtureSetUp]
public void Setup ()
{
TestRuntime.AssertXcodeVersion (8, 0);
#if !MONOMAC
if (Runtime.Arch == Arch.SIMULATOR && IntPtr.Size == 4) {
// There's a bug in the i386 version of objc_msgSend where it doesn't preserve SIMD arguments
// when resizing the cache of method selectors for a type. So here we call all selectors we can
// find, so that the subsequent tests don't end up producing any cache resize (radar #21630410).
object dummy;
using (var obj = new SKUniform ("name")) {
dummy = obj.Name;
dummy = obj.UniformType;
dummy = obj.TextureValue;
dummy = obj.FloatValue;
dummy = obj.FloatVector2Value;
dummy = obj.FloatVector3Value;
dummy = obj.FloatVector4Value;
dummy = obj.FloatMatrix2Value;
dummy = obj.FloatMatrix3Value;
dummy = obj.FloatMatrix4Value;
}
using (var obj = new SKUniform ("name", SKTexture.FromImageNamed ("basn3p08.png"))) {
}
using (var obj = new SKUniform ("name", 1.0f)) {
}
using (var obj = new SKUniform ("name", Vector2.Zero)) {
}
using (var obj = new SKUniform ("name", Vector3.Zero)) {
}
using (var obj = new SKUniform ("name", Vector4.Zero)) {
}
using (var obj = new SKUniform ("name", Matrix2.Identity)) {
}
using (var obj = new SKUniform ("name", Matrix3.Identity)) {
}
using (var obj = new SKUniform ("name", Matrix4.Identity)) {
}
}
#endif
}
[Test]
public void Ctors ()
{
SKTexture texture;
Vector2 V2;
Vector3 V3;
Vector4 V4;
Matrix2 M2;
Matrix3 M3;
Matrix4 M4;
MatrixFloat2x2 M2x2;
MatrixFloat3x3 M3x3;
MatrixFloat4x4 M4x4;
using (var obj = new SKUniform ("name")) {
var M4Zero = new Matrix4 (Vector4.Zero, Vector4.Zero, Vector4.Zero, Vector4.Zero);
Assert.AreEqual ("name", obj.Name, "1 Name");
Assert.AreEqual (SKUniformType.None, obj.UniformType, "1 UniformType");
Assert.IsNull (obj.TextureValue, "1 TextureValue");
Assert.AreEqual (0.0f, obj.FloatValue, "1 FloatValue");
Asserts.AreEqual (Vector2.Zero, obj.FloatVector2Value, "1 FloatVector2Value");
Asserts.AreEqual (Vector3.Zero, obj.FloatVector3Value, "1 FloatVector3Value");
Asserts.AreEqual (Vector4.Zero, obj.FloatVector4Value, "1 FloatVector4Value");
Asserts.AreEqual (Matrix2.Zero, obj.FloatMatrix2Value, "1 FloatMatrix2Value");
Asserts.AreEqual (Matrix3.Zero, obj.FloatMatrix3Value, "1 FloatMatrix3Value");
Asserts.AreEqual (M4Zero, obj.FloatMatrix4Value, "1 FloatMatrix4Value");
texture = SKTexture.FromImageNamed ("basn3p08.png");
V2 = new Vector2 (1, 2);
V3 = new Vector3 (3, 4, 5);
V4 = new Vector4 (6, 7, 8, 9);
M2 = new Matrix2 (1, 2, 3, 4);
M3 = new Matrix3 (1, 2, 3, 4, 5, 6, 7, 8, 9);
M4 = new Matrix4 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
M2x2 = (MatrixFloat2x2) M2;
M3x3 = (MatrixFloat3x3) M3;
M4x4 = (MatrixFloat4x4) M4;
obj.TextureValue = texture;
Assert.AreEqual (texture, obj.TextureValue, "2 TextureValue");
obj.FloatValue = 0.5f;
Assert.AreEqual (0.5f, obj.FloatValue, "2 FloatValue");
obj.FloatVector2Value = V2;
Asserts.AreEqual (V2, obj.FloatVector2Value, "2 FloatVector2Value");
obj.FloatVector3Value = V3;
Asserts.AreEqual (V3, obj.FloatVector3Value, "2 FloatVector3Value");
obj.FloatVector4Value = V4;
Asserts.AreEqual (V4, obj.FloatVector4Value, "2 FloatVector4Value");
obj.FloatMatrix2Value = M2;
Asserts.AreEqual (M2, obj.FloatMatrix2Value, "2 FloatMatrix2Value");
obj.FloatMatrix3Value = M3;
Asserts.AreEqual (M3, obj.FloatMatrix3Value, "2 FloatMatrix3Value");
obj.FloatMatrix4Value = M4;
Asserts.AreEqual (M4, obj.FloatMatrix4Value, "2 FloatMatrix4Value");
}
bool hasSimdConstructors = TestRuntime.CheckXcodeVersion (8, 0);
using (var obj = new SKUniform ("name", texture)) {
Assert.AreEqual (texture, obj.TextureValue, "3 TextureValue");
}
using (var obj = new SKUniform ("name", 3.1415f)) {
Assert.AreEqual (3.1415f, obj.FloatValue, "4 FloatValue");
}
using (var obj = new SKUniform ("name", V2)) {
Asserts.AreEqual (V2, obj.FloatVector2Value, "5 FloatVector2Value");
}
using (var obj = new SKUniform ("name", V3)) {
Asserts.AreEqual (V3, obj.FloatVector3Value, "6 FloatVector3Value");
}
using (var obj = new SKUniform ("name", V4)) {
Asserts.AreEqual (V4, obj.FloatVector4Value, "7 FloatVector4Value");
}
using (var obj = new SKUniform ("name", M2)) {
Asserts.AreEqual (M2, obj.FloatMatrix2Value, "8 FloatMatrix2Value");
Asserts.AreEqual (M2, MatrixFloat2x2.Transpose (CFunctions.GetMatrixFloat2x2 (obj, "matrixFloat2x2Value")), "8b FloatMatrix2Value");
}
using (var obj = new SKUniform ("name", M3)) {
Asserts.AreEqual (M3, obj.FloatMatrix3Value, "9 FloatMatrix3Value");
Asserts.AreEqual (M3, MatrixFloat3x3.Transpose (CFunctions.GetMatrixFloat3x3 (obj, "matrixFloat3x3Value")), "9b FloatMatrix3Value");
}
using (var obj = new SKUniform ("name", M4)) {
Asserts.AreEqual (M4, obj.FloatMatrix4Value, "10 FloatMatrix4Value");
Asserts.AreEqual (M4, MatrixFloat4x4.Transpose (CFunctions.GetMatrixFloat4x4 (obj, "matrixFloat4x4Value")), "10b FloatMatrix4Value");
}
using (var obj = new SKUniform ("name", M2x2)) {
Asserts.AreEqual (M2x2, obj.MatrixFloat2x2Value, "11 MatrixFloat2x2Value");
Asserts.AreEqual (M2x2, CFunctions.GetMatrixFloat2x2 (obj, "matrixFloat2x2Value"), "11b MatrixFloat2x2Value");
var tmp2 = new MatrixFloat2x2 (9, 8, 7, 6);
obj.MatrixFloat2x2Value = tmp2;
Asserts.AreEqual (tmp2, obj.MatrixFloat2x2Value, "11 MatrixFloat2x2Value second");
Asserts.AreEqual (tmp2, CFunctions.GetMatrixFloat2x2 (obj, "matrixFloat2x2Value"), "11b MatrixFloat2x2Value second");
}
using (var obj = new SKUniform ("name", M3x3)) {
Asserts.AreEqual (M3x3, obj.MatrixFloat3x3Value, "12 MatrixFloat3x3Value");
Asserts.AreEqual (M3x3, CFunctions.GetMatrixFloat3x3 (obj, "matrixFloat3x3Value"), "12b MatrixFloat3x3Value");
var tmp3 = new MatrixFloat3x3 (9, 8, 7, 6, 5, 4, 3, 2, 1);
obj.MatrixFloat3x3Value = tmp3;
Asserts.AreEqual (tmp3, obj.MatrixFloat3x3Value, "12 MatrixFloat3x3Value second");
Asserts.AreEqual (tmp3, CFunctions.GetMatrixFloat3x3 (obj, "matrixFloat3x3Value"), "12b MatrixFloat3x3Value second");
}
using (var obj = new SKUniform ("name", M4x4)) {
Asserts.AreEqual (M4x4, obj.MatrixFloat4x4Value, "13 MatrixFloat4x4Value");
Asserts.AreEqual (M4x4, CFunctions.GetMatrixFloat4x4 (obj, "matrixFloat4x4Value"), "13b FloatMatrix4Value");
var tmp4 = new MatrixFloat4x4 (9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6);
obj.MatrixFloat4x4Value = tmp4;
Asserts.AreEqual (tmp4, obj.MatrixFloat4x4Value, "13 MatrixFloat4x4Value second");
Asserts.AreEqual (tmp4, CFunctions.GetMatrixFloat4x4 (obj, "matrixFloat4x4Value"), "13b MatrixFloat4x4Value second");
}
}
[Test]
public void Create ()
{
var M2x2 = new MatrixFloat2x2 (1, 2, 3, 4);
var M3x3 = new MatrixFloat3x3 (1, 2, 3, 4, 5, 6, 7, 8, 9);
var M4x4 = new MatrixFloat4x4 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
using (var obj = SKUniform.Create ("name", M2x2)) {
Asserts.AreEqual (M2x2, obj.MatrixFloat2x2Value, "11 MatrixFloat2x2Value");
Asserts.AreEqual (M2x2, CFunctions.GetMatrixFloat2x2 (obj, "matrixFloat2x2Value"), "11b MatrixFloat2x2Value");
var tmp2 = new MatrixFloat2x2 (9, 8, 7, 6);
obj.MatrixFloat2x2Value = tmp2;
Asserts.AreEqual (tmp2, obj.MatrixFloat2x2Value, "11 MatrixFloat2x2Value second");
Asserts.AreEqual (tmp2, CFunctions.GetMatrixFloat2x2 (obj, "matrixFloat2x2Value"), "11b MatrixFloat2x2Value second");
}
using (var obj = SKUniform.Create ("name", M3x3)) {
Asserts.AreEqual (M3x3, obj.MatrixFloat3x3Value, "12 MatrixFloat3x3Value");
Asserts.AreEqual (M3x3, CFunctions.GetMatrixFloat3x3 (obj, "matrixFloat3x3Value"), "12b MatrixFloat3x3Value");
var tmp3 = new MatrixFloat3x3 (9, 8, 7, 6, 5, 4, 3, 2, 1);
obj.MatrixFloat3x3Value = tmp3;
Asserts.AreEqual (tmp3, obj.MatrixFloat3x3Value, "12 MatrixFloat3x3Value second");
Asserts.AreEqual (tmp3, CFunctions.GetMatrixFloat3x3 (obj, "matrixFloat3x3Value"), "12b MatrixFloat3x3Value second");
}
using (var obj = SKUniform.Create ("name", M4x4)) {
Asserts.AreEqual (M4x4, obj.MatrixFloat4x4Value, "13 MatrixFloat4x4Value");
Asserts.AreEqual (M4x4, CFunctions.GetMatrixFloat4x4 (obj, "matrixFloat4x4Value"), "13b FloatMatrix4Value");
var tmp4 = new MatrixFloat4x4 (9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6);
obj.MatrixFloat4x4Value = tmp4;
Asserts.AreEqual (tmp4, obj.MatrixFloat4x4Value, "13 MatrixFloat4x4Value second");
Asserts.AreEqual (tmp4, CFunctions.GetMatrixFloat4x4 (obj, "matrixFloat4x4Value"), "13b MatrixFloat4x4Value second");
}
}
}
}
#endif // __WATCHOS__