Great series of short articles introducing Apple's Metal framework.
- 2022-04-01: Day 1: Devices
- 2022-04-02: Day 2: Buffers
- 2022-04-03: Day 3: Commands
- 2022-04-04: Day 4: MTKView
- 2022-04-05: Day 5: Shaders
- 2022-04-06: Day 6: Pipelines
Great series of short articles introducing Apple's Metal framework.
| // Bigger iPhones = any Max, any Plus, iPhone XR, iPhone 11 | |
| switch (UITraitCollection.current.horizontalSizeClass, UITraitCollection.current.verticalSizeClass) { | |
| case (.compact, .compact): | |
| // Smaller iPhones in landscape | |
| case (.compact, .regular): | |
| // iPhones in portrait | |
| // iPads in portrait during any split screen, |
| Workaround for threads.js on Webpack5 |
| function getTileFromLatLon(zoom, lat, lon) { | |
| const width = Math.pow(2, zoom); | |
| const height = Math.pow(2, zoom); | |
| const latRad = (lat * Math.PI) / 180; | |
| const x = ~~((width * (lon + 180)) / 360); | |
| const y = ~~(((1 - Math.asinh(Math.tan(latRad)) / Math.PI) / 2.0) * height); | |
| return {zoom, x, y}; | |
| } |
| // A URLSession extension that fetches data from a URL and decodes to some Decodable type. | |
| // Usage: let user = try await URLSession.shared.decode(UserData.self, from: someURL) | |
| // Note: this requires Swift 5.5. | |
| extension URLSession { | |
| func decode<T: Decodable>( | |
| _ type: T.Type = T.self, | |
| from url: URL, | |
| keyDecodingStrategy: JSONDecoder.KeyDecodingStrategy = .useDefaultKeys, | |
| dataDecodingStrategy: JSONDecoder.DataDecodingStrategy = .deferredToData, | |
| dateDecodingStrategy: JSONDecoder.DateDecodingStrategy = .deferredToDate |
| import SwiftUI | |
| import enum Accelerate.vDSP | |
| struct AnimatableVector: VectorArithmetic { | |
| static var zero = AnimatableVector(values: [0.0]) | |
| static func + (lhs: AnimatableVector, rhs: AnimatableVector) -> AnimatableVector { | |
| let count = min(lhs.values.count, rhs.values.count) | |
| return AnimatableVector(values: vDSP.add(lhs.values[0..<count], rhs.values[0..<count])) | |
| } |
| global.THREE = require("three"); | |
| const canvasSketch = require('canvas-sketch'); | |
| const Random = require('canvas-sketch-util/random'); | |
| const gradientHeight = 512; | |
| const settings = { | |
| dimensions: [ 2048, gradientHeight * 2 ] | |
| }; |
| int[][] result; | |
| float t, c; | |
| float ease(float p) { | |
| return 3*p*p - 2*p*p*p; | |
| } | |
| float ease(float p, float g) { | |
| if (p < 0.5) | |
| return 0.5 * pow(2*p, g); |
| import * as React from "react" | |
| import { Override, Data, useTransform, motionValue } from "framer" | |
| const x = motionValue(0) | |
| export function Card(props): Override { | |
| const rotate = useTransform(x, [-100, 100], [-20, 20]) | |
| return { | |
| rotate, | |
| x, |
| env > env.txt | |
| instruments -s devices > devices.txt | |
| #! /bin/sh -e | |
| # This script demonstrates archive and create action on frameworks and libraries | |
| # Based on script by @author Boris Bielik | |
| # Release dir path | |
| OUTPUT_DIR_PATH="${PROJECT_DIR}/XCFramework" | |
| function archivePathSimulator { |