From 5c7f34827f1d107b906063309a27c70120d4eab3 Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Thu, 14 Feb 2019 09:57:39 +0900 Subject: [PATCH] graphicsdriver/metal: Use template specialization --- internal/graphicsdriver/metal/driver.go | 27 +++++++++++++------------ 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/internal/graphicsdriver/metal/driver.go b/internal/graphicsdriver/metal/driver.go index 0a457e605..c25438cd6 100644 --- a/internal/graphicsdriver/metal/driver.go +++ b/internal/graphicsdriver/metal/driver.go @@ -100,21 +100,22 @@ float FloorMod(float x, float y) { } template -float2 AdjustTexelByAddress(float2 p, float4 tex_region) { - if (address == ADDRESS_CLAMP_TO_ZERO) { - return p; - } - if (address == ADDRESS_REPEAT) { - float2 o = float2(tex_region[0], tex_region[1]); - float2 size = float2(tex_region[2] - tex_region[0], tex_region[3] - tex_region[1]); - return float2(FloorMod((p.x - o.x), size.x) + o.x, FloorMod((p.y - o.y), size.y) + o.y); - } - // Not reached. - return 0.0; +float2 AdjustTexelByAddress(float2 p, float4 tex_region); + +template<> +float2 AdjustTexelByAddress(float2 p, float4 tex_region) { + return p; +} + +template<> +float2 AdjustTexelByAddress(float2 p, float4 tex_region) { + float2 o = float2(tex_region[0], tex_region[1]); + float2 size = float2(tex_region[2] - tex_region[0], tex_region[3] - tex_region[1]); + return float2(FloorMod((p.x - o.x), size.x) + o.x, FloorMod((p.y - o.y), size.y) + o.y); } template -float4 fragmentShader( +float4 FragmentShaderImpl( VertexOut v, texture2d texture, constant float4x4& color_matrix_body, @@ -214,7 +215,7 @@ float4 fragmentShader( constant float4x4& color_matrix_body [[buffer(2)]], \ constant float4& color_matrix_translation [[buffer(3)]], \ constant float& scale [[buffer(4)]]) { \ - return fragmentShader( \ + return FragmentShaderImpl( \ v, texture, color_matrix_body, color_matrix_translation, scale); \ }