2016-08-03 20:12:07 +03:00
|
|
|
|
#if !__WATCHOS__
|
|
|
|
|
|
|
|
|
|
using System;
|
|
|
|
|
#if XAMCORE_2_0
|
|
|
|
|
using Foundation;
|
|
|
|
|
using SpriteKit;
|
2017-01-12 21:13:56 +03:00
|
|
|
|
#if !MONOMAC
|
2016-08-03 20:12:07 +03:00
|
|
|
|
using UIKit;
|
2017-01-12 21:13:56 +03:00
|
|
|
|
#endif
|
2016-08-03 20:12:07 +03:00
|
|
|
|
using ObjCRuntime;
|
|
|
|
|
#else
|
|
|
|
|
using MonoTouch.Foundation;
|
|
|
|
|
using MonoTouch.SpriteKit;
|
|
|
|
|
using MonoTouch.UIKit;
|
|
|
|
|
using MonoTouch.ObjCRuntime;
|
|
|
|
|
#endif
|
|
|
|
|
using OpenTK;
|
2017-09-13 18:08:39 +03:00
|
|
|
|
|
|
|
|
|
using MatrixFloat2x2 = global::OpenTK.NMatrix2;
|
|
|
|
|
using MatrixFloat3x3 = global::OpenTK.NMatrix3;
|
|
|
|
|
using MatrixFloat4x4 = global::OpenTK.NMatrix4;
|
|
|
|
|
using VectorFloat3 = global::OpenTK.NVector3;
|
|
|
|
|
|
2016-08-03 20:12:07 +03:00
|
|
|
|
using NUnit.Framework;
|
2017-08-31 13:18:59 +03:00
|
|
|
|
using Bindings.Test;
|
2016-08-03 20:12:07 +03:00
|
|
|
|
|
|
|
|
|
namespace MonoTouchFixtures.SpriteKit
|
|
|
|
|
{
|
|
|
|
|
[TestFixture]
|
|
|
|
|
[Preserve (AllMembers = true)]
|
|
|
|
|
public class UniformTest
|
|
|
|
|
{
|
|
|
|
|
[TestFixtureSetUp]
|
|
|
|
|
public void Setup ()
|
|
|
|
|
{
|
|
|
|
|
TestRuntime.AssertXcodeVersion (8, 0);
|
|
|
|
|
|
2017-01-12 21:13:56 +03:00
|
|
|
|
#if !MONOMAC
|
2016-08-03 20:12:07 +03:00
|
|
|
|
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)) {
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-01-12 21:13:56 +03:00
|
|
|
|
#endif
|
2016-08-03 20:12:07 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void Ctors ()
|
|
|
|
|
{
|
|
|
|
|
SKTexture texture;
|
|
|
|
|
Vector2 V2;
|
|
|
|
|
Vector3 V3;
|
|
|
|
|
Vector4 V4;
|
|
|
|
|
Matrix2 M2;
|
|
|
|
|
Matrix3 M3;
|
|
|
|
|
Matrix4 M4;
|
2017-08-31 13:18:59 +03:00
|
|
|
|
MatrixFloat2x2 M2x2;
|
|
|
|
|
MatrixFloat3x3 M3x3;
|
|
|
|
|
MatrixFloat4x4 M4x4;
|
2016-08-03 20:12:07 +03:00
|
|
|
|
|
|
|
|
|
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);
|
2017-08-31 13:18:59 +03:00
|
|
|
|
M2x2 = (MatrixFloat2x2) M2;
|
|
|
|
|
M3x3 = (MatrixFloat3x3) M3;
|
|
|
|
|
M4x4 = (MatrixFloat4x4) M4;
|
2016-08-03 20:12:07 +03:00
|
|
|
|
|
|
|
|
|
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");
|
|
|
|
|
}
|
|
|
|
|
|
2017-08-31 13:18:59 +03:00
|
|
|
|
bool hasSimdConstructors = TestRuntime.CheckXcodeVersion (8, 0);
|
2016-08-03 20:12:07 +03:00
|
|
|
|
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");
|
2017-08-31 13:18:59 +03:00
|
|
|
|
Asserts.AreEqual (M2, MatrixFloat2x2.Transpose (CFunctions.GetMatrixFloat2x2 (obj, "matrixFloat2x2Value")), "8b FloatMatrix2Value");
|
2016-08-03 20:12:07 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
using (var obj = new SKUniform ("name", M3)) {
|
|
|
|
|
Asserts.AreEqual (M3, obj.FloatMatrix3Value, "9 FloatMatrix3Value");
|
2017-08-31 13:18:59 +03:00
|
|
|
|
Asserts.AreEqual (M3, MatrixFloat3x3.Transpose (CFunctions.GetMatrixFloat3x3 (obj, "matrixFloat3x3Value")), "9b FloatMatrix3Value");
|
2016-08-03 20:12:07 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
using (var obj = new SKUniform ("name", M4)) {
|
|
|
|
|
Asserts.AreEqual (M4, obj.FloatMatrix4Value, "10 FloatMatrix4Value");
|
2017-08-31 13:18:59 +03:00
|
|
|
|
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");
|
2016-08-03 20:12:07 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif // __WATCHOS__
|