From 25d13682ba9a12d6edcdc657e92ba511a46d8202 Mon Sep 17 00:00:00 2001 From: Isaac <> Date: Sun, 21 Dec 2025 00:28:54 +0800 Subject: [PATCH] Update API --- .../MeshTransformApi/MeshTransformApi.h | 10 ++++ .../MeshTransform/Sources/GenerateMesh.swift | 1 - .../MeshTransform/Sources/MeshTransform.swift | 50 +++++++++++-------- 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/submodules/TelegramUI/Components/MeshTransform/MeshTransformApi/PublicHeaders/MeshTransformApi/MeshTransformApi.h b/submodules/TelegramUI/Components/MeshTransform/MeshTransformApi/PublicHeaders/MeshTransformApi/MeshTransformApi.h index 81395de7fd..3691bb61a6 100644 --- a/submodules/TelegramUI/Components/MeshTransform/MeshTransformApi/PublicHeaders/MeshTransformApi/MeshTransformApi.h +++ b/submodules/TelegramUI/Components/MeshTransform/MeshTransformApi/PublicHeaders/MeshTransformApi/MeshTransformApi.h @@ -20,4 +20,14 @@ typedef struct MeshTransformMeshVertex { MeshTransformPoint3D to; } MeshTransformMeshVertex; +@protocol MeshTransformClass + +- (id)meshTransformWithVertexCount:(NSUInteger)vertexCount + vertices:(MeshTransformMeshVertex *)vertices + faceCount:(NSUInteger)faceCount + faces:(MeshTransformMeshFace *)faces + depthNormalization:(NSString *)depthNormalization; + +@end + #endif diff --git a/submodules/TelegramUI/Components/MeshTransform/Sources/GenerateMesh.swift b/submodules/TelegramUI/Components/MeshTransform/Sources/GenerateMesh.swift index f02c10429d..e6aa570450 100644 --- a/submodules/TelegramUI/Components/MeshTransform/Sources/GenerateMesh.swift +++ b/submodules/TelegramUI/Components/MeshTransform/Sources/GenerateMesh.swift @@ -623,6 +623,5 @@ public func generateGlassMeshFromDisplacementMap( endAngle: .pi / 2 ) - transform.subdivisionSteps = 0 return (mesh: transform, wireframe: wireframe) } diff --git a/submodules/TelegramUI/Components/MeshTransform/Sources/MeshTransform.swift b/submodules/TelegramUI/Components/MeshTransform/Sources/MeshTransform.swift index 93b78dbd2b..b625a71c8f 100644 --- a/submodules/TelegramUI/Components/MeshTransform/Sources/MeshTransform.swift +++ b/submodules/TelegramUI/Components/MeshTransform/Sources/MeshTransform.swift @@ -45,6 +45,27 @@ private func invokeTransformCreateMethod() -> NSObject? { } } +private var cachedTransformCreateCustomMethod: (@convention(c) (AnyObject, Selector, _ vertexCount: UInt, _ vertices: UnsafeMutablePointer, _ faceCount: UInt, _ faces: UnsafeMutablePointer, _ depthNormalization: NSString) -> NSObject?, Selector)? +private func invokeTransformCreateCustomMethod(vertexCount: UInt, vertices: UnsafeMutablePointer, faceCount: UInt, faces: UnsafeMutablePointer, depthNormalization: String) -> NSObject? { + guard let transformClass = transformClass else { + return nil + } + if let cachedTransformCreateCustomMethod { + return cachedTransformCreateCustomMethod.0(transformClass, cachedTransformCreateCustomMethod.1, vertexCount, vertices, faceCount, faces, depthNormalization as NSString) + } else { + let selectorName = ("meshTransf" as NSString).appending("ormWithVertexCount:vertices:faceCount:faces:depthNormalization:") + + let method: (@convention(c) (AnyObject, Selector, _ vertexCount: UInt, _ vertices: UnsafeMutablePointer, _ faceCount: UInt, _ faces: UnsafeMutablePointer, _ depthNormalization: NSString) -> NSObject?)? = getMethod(object: transformClass, selector: selectorName) + if let method { + let selector = NSSelectorFromString(selectorName) + cachedTransformCreateCustomMethod = (method, selector) + return method(transformClass, selector, vertexCount, vertices, faceCount, faces, depthNormalization as NSString) + } else { + return nil + } + } +} + private var cachedTransformAddFaceMethod: (@convention(c) (AnyObject, Selector, MeshTransformMeshFace) -> Void, Selector)? private func invokeTransformAddFaceMethod(object: NSObject, face: MeshTransformMeshFace) { if let cachedTransformAddFaceMethod { @@ -97,44 +118,31 @@ public final class MeshTransform { private var vertices: ContiguousArray = [] private var faces: ContiguousArray = [] - public var subdivisionSteps: Int = -1 { - didSet { - /*if self.subdivisionSteps != oldValue, let value { - invokeTransformSetSubdivisionStepsMethod(object: value, value: self.subdivisionSteps) - }*/ - } - } - public init() { } public func add(_ vertex: Vertex) { - /*if let value = self.value { - invokeTransformAddVertexMethod(object: value, vertex: vertex) - }*/ self.vertices.append(vertex) } public func add(_ face: Face) { - /*if let value = self.value { - invokeTransformAddFaceMethod(object: value, face: face) - }*/ self.faces.append(face) } public consuming func makeValue() -> Value? { - guard let transformClass else { - return nil - } - let value = unsafeBitCast(transformClass, to: MeshTransformClass.self) let result = self.vertices.withUnsafeMutableBufferPointer { vertices -> NSObject? in return self.faces.withUnsafeMutableBufferPointer { faces -> NSObject? in - let result = value.meshTransform(withVertexCount: UInt(vertices.count), vertices: vertices.baseAddress!, faceCount: UInt(faces.count), faces: faces.baseAddress!, depthNormalization: "none") - return result as? NSObject + return invokeTransformCreateCustomMethod( + vertexCount: UInt(vertices.count), + vertices: vertices.baseAddress!, + faceCount: UInt(faces.count), + faces: faces.baseAddress!, + depthNormalization: "none" + ) } } if let result { - invokeTransformSetSubdivisionStepsMethod(object: result, value: self.subdivisionSteps) + invokeTransformSetSubdivisionStepsMethod(object: result, value: 0) } return result