diff --git a/Metaballs/Renderer.swift b/Metaballs/Renderer.swift index 62cb6a3..fbf9768 100644 --- a/Metaballs/Renderer.swift +++ b/Metaballs/Renderer.swift @@ -15,7 +15,7 @@ enum RendererError: Error { } protocol RendererDelegate { - var renderSize: CGSize { get set } + var renderSize: Size { get set } var field: Field { get } var metalView: MTKView { get } } @@ -68,7 +68,7 @@ class Renderer: NSObject, MTKViewDelegate { /// MARK: - MTKViewDelegate func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) { - delegate.renderSize = size + delegate.renderSize = Size(size: size) } func draw(in view: MTKView) { diff --git a/Metaballs/Shaders.metal b/Metaballs/Shaders.metal index 0b4f4c0..ecbee29 100644 --- a/Metaballs/Shaders.metal +++ b/Metaballs/Shaders.metal @@ -24,7 +24,11 @@ typedef struct { float2 textureCoordinate; } RasterizerData; -typedef int3 Parameters; +typedef struct { + short2 size; + ushort numberOfBalls; +} Parameters; + typedef float3 Ball; vertex RasterizerData @@ -45,8 +49,7 @@ sampleToColorShader(RasterizerData in [[stage_in]], constant Parameters& parameters [[buffer(0)]], constant Ball* balls [[buffer(1)]]) { - const uint numberOfBalls = parameters.z; - const float sample = sampleAtPoint(in.position.xy, balls, numberOfBalls); + const float sample = sampleAtPoint(in.position.xy, balls, parameters.numberOfBalls); const float target = 1.0; // const float variange = 0.08; @@ -56,7 +59,7 @@ sampleToColorShader(RasterizerData in [[stage_in]], if (sample > target) { const float3 left = float3(0.50, 0.79, 1.00); const float3 right = float3(0.88, 0.50, 1.00); - const float blend = in.position.x / parameters.x; + const float blend = in.position.x / parameters.size.x; const float invBlend = 1.0 - blend; out = float4((blend * left.x + invBlend * right.x) / 2.0, (blend * left.y + invBlend * right.y) / 2.0, (blend * left.z + invBlend * right.z) / 2.0, 1.0); } else { diff --git a/Metaballs/ViewController.swift b/Metaballs/ViewController.swift index 35521da..dfe07cf 100644 --- a/Metaballs/ViewController.swift +++ b/Metaballs/ViewController.swift @@ -11,9 +11,9 @@ import MetalKit import MetaballsKit class ViewController: NSViewController, RendererDelegate { - internal var field = Field(size: CGSize()) { + internal var field = Field(size: Size()) { didSet { - field.size = metalView.drawableSize + field.size = Size(size: metalView.drawableSize) } } @@ -73,7 +73,7 @@ class ViewController: NSViewController, RendererDelegate { // MARK: - RendererDelegate - var renderSize: CGSize { + var renderSize: Size { get { return field.size }