From 81041ac712a5fd565962831260e61bcf1945c058 Mon Sep 17 00:00:00 2001 From: Ryan Oldenburg Date: Mon, 11 Oct 2021 20:45:05 -0500 Subject: [PATCH] add some vector conversions --- src/vmath.nim | 36 ++++++++++++++++++++++++++++++++++++ tests/test.nim | 14 ++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/src/vmath.nim b/src/vmath.nim index e753a05..3eeb9c1 100644 --- a/src/vmath.nim +++ b/src/vmath.nim @@ -485,6 +485,42 @@ genConstructor(uvec, UVec, uint32) genConstructor(vec, Vec, float32) genConstructor(dvec, DVec, float64) +proc vec2*(ivec2: Ivec2): Vec2 {.inline.} = + vec2(ivec2.x.float32, ivec2.y.float32) + +proc vec2*(uvec2: Uvec2): Vec2 {.inline.} = + vec2(uvec2.x.float32, uvec2.y.float32) + +proc ivec2*(uvec2: Uvec2): Ivec2 {.inline.} = + ivec2(uvec2.x.int32, uvec2.y.int32) + +proc uvec2*(ivec2: Ivec2): Uvec2 {.inline.} = + uvec2(ivec2.x.uint32, ivec2.y.uint32) + +proc vec3*(ivec3: Ivec3): Vec3 {.inline.} = + vec3(ivec3.x.float32, ivec3.y.float32, ivec3.z.float32) + +proc vec3*(uvec3: Uvec3): Vec3 {.inline.} = + vec3(uvec3.x.float32, uvec3.y.float32, uvec3.z.float32) + +proc ivec3*(uvec3: Uvec3): Ivec3 {.inline.} = + ivec3(uvec3.x.int32, uvec3.y.int32, uvec3.z.int32) + +proc uvec3*(ivec3: Ivec3): Uvec3 {.inline.} = + uvec3(ivec3.x.uint32, ivec3.y.uint32, ivec3.z.uint32) + +proc vec4*(ivec4: Ivec4): Vec4 {.inline.} = + vec4(ivec4.x.float32, ivec4.y.float32, ivec4.z.float32, ivec4.w.float32) + +proc vec4*(uvec4: Uvec4): Vec4 {.inline.} = + vec4(uvec4.x.float32, uvec4.y.float32, uvec4.z.float32, uvec4.w.float32) + +proc ivec4*(uvec4: Uvec4): Ivec4 {.inline.} = + ivec4(uvec4.x.int32, uvec4.y.int32, uvec4.z.int32, uvec4.w.int32) + +proc uvec4*(ivec4: Ivec4): Uvec4 {.inline.} = + uvec4(ivec4.x.uint32, ivec4.y.uint32, ivec4.z.uint32, ivec4.w.uint32) + {.experimental: "dotOperators".} proc num(letter: char, fields: NimNode): int = ## Given a swizzle character gives back the location number. diff --git a/tests/test.nim b/tests/test.nim index 72e371a..b8e4863 100644 --- a/tests/test.nim +++ b/tests/test.nim @@ -885,3 +885,17 @@ block: doAssert bvec4(true, true, true, false) != bvec4(true, true, true, true) doAssert ivec4(3, 3, 3, 3) != ivec4(3, 3, 3, 4) doAssert uvec4(3, 3, 3, 3) != uvec4(3, 3, 3, 4) + +block: + doAssert vec2(ivec2(1, 1)) == vec2(1, 1) + doAssert vec2(uvec2(5, 5)) == vec2(5, 5) + doAssert ivec2(uvec2(23, 23)) == ivec2(23, 23) + doAssert uvec2(ivec2(12, 12)) == uvec2(12, 12) + doAssert vec3(ivec3(1, 2, 3)) == vec3(1, 2, 3) + doAssert vec3(uvec3(4, 5, 6)) == vec3(4, 5, 6) + doAssert ivec3(uvec3(7, 8, 9)) == ivec3(7, 8, 9) + doAssert uvec3(ivec3(10, 11, 12)) == uvec3(10, 11, 12) + doAssert vec4(ivec4(13, 14, 15, 16)) == vec4(13, 14, 15, 16) + doAssert vec4(uvec4(17, 18, 19, 20)) == vec4(17, 18, 19, 20) + doAssert ivec4(uvec4(21, 22, 23, 24)) == ivec4(21, 22, 23, 24) + doAssert uvec4(ivec4(25, 26, 27, 28)) == uvec4(25, 26, 27, 28)