Apple🍎
-
SwiftUI 멀티 플렛폼 Navigation 아키텍쳐 설계 (Coordinator 야 저리 가라)Apple🍎/SwiftUI 2025. 4. 8. 17:23
UIKit에서 Coordinator 패턴이 등장한 배경UIKit 개발에서 Coordinator 패턴은 앱의 화면 전환 흐름을 관리하는 문제를 해결하기 위해 등장했습니다. 이 패턴이 필요했던 주요 이유들은 다음과 같습니다.1. 뷰 컨트롤러의 과도한 책임 분산UIKit의 기본 구조에서는 화면 전환 로직이 주로 뷰 컨트롤러 내부에 위치했습니다.class ProfileViewController: UIViewController { func showSettings() { let settingsVC = SettingsViewController() settingsVC.user = self.user self.navigationController?.pushViewControlle..
-
Metal-Cpp : C++ 개발자를 위한 Apple의 GPU 사용법Apple🍎/Metal 2025. 4. 3. 23:03
Metal 둘러보기셰이더(shader)는 무엇인가?다음은 애플 디벨로퍼 홈페이지에 있는 Metal 의 소개입니다. 일단 Metal 을 사용하면 GPU 프로그래밍을 가능하게 해준다고는 들었는데, 셰이딩 언어는 또 뭘까요? 사실 GPpeople-analysis.tistory.comMetal 소개: Apple 플랫폼의 그래픽 및 컴퓨팅 프레임워크Metal은 Apple이 개발한 저수준 그래픽 및 컴퓨팅 API로, iOS, macOS, tvOS 등 Apple 플랫폼에서 GPU의 강력한 성능을 활용할 수 있게 해줍니다. 2014년에 처음 소개된 Metal은 OpenGL보다 더 낮은 오버헤드와 더 높은 성능을 제공하기 위해 설계되었습니다.Metal의 주요 특징은 다음과 같습니다. 그래픽 렌더링 및 일반 컴퓨팅(GPG..
-
[Particle Simulator] Compute Shader 사용해 gpu 연산하기Apple🍎/Metal 2025. 4. 1. 22:45
[Particle Simulator] cpu 연산 - gpu 랜더링 방법1. Metal Setup 과정 GPU 자원 초기화 : 시스템의 GPU에 접근하기 위한 기본 자원을 설정, MTLCreateSystemDefaultDevice( )를 호출하여 기기의 GPU를 가리키는 참조를 얻습니다. 화면 표시 영역 준비 : GPU가 렌people-analysis.tistory.com기존 CPU 기반 구현의 한계지난 글에서는 입자 시뮬레이션을 위해 프레임마다 각 입자에 대한 계산을 cpu에서 실행하고 그 결과를 gpu를 통해 렌더링하는 방식을 사용했습니다. private func updateSandSimulation() { // 아래에서 위로 순회 (중력 방향을 고려) for y in (0..= gridH..
-
[Particle Simulator] cpu 연산 - gpu 랜더링 방법Apple🍎/Metal 2025. 3. 30. 22:47
1. Metal Setup 과정 GPU 자원 초기화 : 시스템의 GPU에 접근하기 위한 기본 자원을 설정, MTLCreateSystemDefaultDevice( )를 호출하여 기기의 GPU를 가리키는 참조를 얻습니다. 화면 표시 영역 준비 : GPU가 렌더링한 내용을 표시할 특수한 뷰(MTKView)를 생성, 해당 뷰는 앱의 기존 UI 계층 구조 내에 배치되어, GPU 렌더링 결과가 나타날 화면 영역을 정의렌더링 루프 설정 : 대리자 설정을 통해 렌더링 루프를 구성합니다. 이를 통해 화면이 새로고침될때마다 대리자 클래스의 draw( ) 메서드가 자동으로 호출하여 연속적인 프레임 렌더링이 가능해집니다. 렌더링 옵션 구성: framebufferOnly = false 와 같은 설정으로 렌더링 방식을 조정합니다..
-
Metal 렌더링 파이프라인Apple🍎/Metal 2025. 3. 29. 21:11
Metal 렌더링 파이프라인은 3D 그래픽을 2D 화면에 체계적으로 그리는 과정을 말합니다. 이 과정을 단계별로 자세히 알아보도록 합시다. 💡 글 이해를 위해 필요한 개념들 정점(Vertext) : 3D 공간상의 점으로, 3D 모델이나 그래픽을 구성하는 가장 기본적인 요소이며 다음과 같은 정보를 포합합니다. 위치(position): x, y, z 좌표로 3D 공간에서의 위치를 나타냅니다. 색상(Color) : 정점의 색상 정보입니다. 텍스쳐 좌표(texture coordinates): UV 좌표라고도 하며, 텍스쳐 이미지의 어느 부분이 해당 정점에 매핑될지를 결정합니다. 법선 벡터(normal vectors) : 정점에서의 표면 방향을 나타내느 벡터로, 조명 계산에 사용됩니다. 텍스쳐(Texture)..
-
CPU와 GPU 비교와 GPGPU 프로그래밍의 이해Apple🍎/Metal 2025. 3. 27. 21:33
CPU와 GPU의 기본 구조와 연산 방식CPU (중앙처리장치)의 구조와 작동 원리CPU는 컴퓨터의 '두뇌'로 불리며, 몇 개의 강력한 코어로 구성되어 있습니다. 전통적인 CPU는 4~16개 정도의 코어를 가지고 있으며, 각 코어는 복잡한 명령어를 처리할 수 있는 고성능 연산 유닛입니다.CPU의 주요 특징직렬 처리(Serial Processing): 하나의 코어는 기본적으로 한 번에 하나의 작업을 순차적으로 처리합니다.복잡한 제어 로직: 분기 예측(Branch Prediction), 명령어 파이프라이닝(Instruction Pipelining), 비순차적 실행(Out-of-Order Execution) 등 복잡한 제어 로직을 갖추고 있습니다.대용량 캐시 메모리: L1, L2, L3 등 여러 계층의 캐시를 ..
-
GCD vs async/await 제대로 알기Apple🍎/Cocurrency 2025. 3. 26. 22:49
Swift에서는 비동기를 처리하는 방법은 크게GCD(Grand Central Dispatch)를 이용하는 방식과 새로 도입된 async/await를 이용하는 법이 있습니다. 하지만 각 방식에 대한 설명들이 너무 추상적이거나 모호하고 중간 과정들이 생략된 경우가 많아서명확한 동작에 대한 이해가 어려웠습니다. 그래서 직접 각 방법들의 과정들을 자세하게 분석해서 비동기 처리에 대한 껄끄러운 느낌을 없애보도록 하겠습니다. GCD 방식 GCD 방식에서는 비동기 동작을 위해서 DispatchQueue에 async 방식으로 작업을 예약합니다. 네트워크 요청이나 파일 IO등 처리 시간이 오래 걸리는 작업들을 global 큐에 넘겨버림으로써메인 쓰레드의 계속된 작동을 보장하기 위해 주로 사용합니다. ( 화면 드로잉 싸..
-
cellular automata: 간단한 모래 시뮬레이터 만들기Apple🍎/Metal 2025. 3. 24. 21:18
지난 시간에는 간단한 규칙으로 복잡한 시스템을 모델링하는 cellular automata가 뭔지에 대해서 알아보았는데요. 이번에는 이러한 cellular automata 개념을 사용해 간단한 모래 시뮬레이터를 만들어보도록 하겠습니다. 1. 격자 그리기 일단 시뮬레이션할 모래의 무대가 될 격자를 먼저 그려보도록 하겠습니다. SwiftUI의 Canvas를 사용해서 각각의 픽셀이 10 * 10 사이즈인 40 * 40 크기의 격자를 만들어보겠습니다. 코드 더보기import SwiftUIstruct ContentView: View { /// Celluar automata를 구성하는 격자의 속성(수, 크기)를 상수로 정의 let columns = 40 let rows = 40 let cellS..