Sample CodevisionOSReviewed 2026-07-21View on Apple Developer

Generating procedural textures

At a glance

Item Summary
Purpose Display a 3D model that generates procedural textures in a reality view.
App architecture A Metal, Swift sample with the source-visible chain DrawableDrawableViewProceduralTextureGeneratorSwiftUI / RealityKit APIs.
Main patterns No named application pattern supported by the extracted structure
Project style 7 scanned source file(s) across Metal, Swift, organized around ranked entry, type, and file boundaries.
Execution model Source-visible boundaries: @MainActor; none alone proves a background thread.
State/event model Source-visible mechanisms: SwiftUI state property wrapper.
Key frameworks/packages SwiftUI, RealityKit, GameplayKit, metal_stdlib; these are source dependencies, not architecture labels.

Project structure

Source bundle/
├── RealityKit-Drawable/
│   ├── App/
│   │   ├── Drawable.swift
│   │   └── Info.plist
│   ├── Systems/
│   │   ├── DrawableQueueComponent.swift
│   │   └── DrawableQueueSystem.swift
│   ├── Textures/
│   │   ├── ProceduralTextureGenerator.swift
│   │   └── DynamicTextureShaders.metal
│   └── Views/
│       ├── DrawableView.swift
│       └── EntityView.swift
├── Configuration/
│   └── SampleCode.xcconfig
└── RealityKit-Drawable.xcodeproj/
    ├── .xcodesamplecode.plist
    └── project.pbxproj

Structure observations

  • Architecturally prominent files are ranked from entry points and role-named declarations; resource-only paths are omitted.
  • Primary languages: Metal, Swift.
  • The verified tree contains 4 project/configuration file(s) and 9 source declaration(s).

Overall architecture

Reference code

RealityKit-Drawable/App/Drawable.swift:10 — architecture anchor

@main
struct Drawable: App {
    var body: some Scene {
        WindowGroup {
            DrawableView()
        }
    }
}

Interpretation

The arrows summarize the source-visible entry, role-named types or folders, and framework direction; when nodes come from structural folders, the sequence is a high-level interpretation rather than proof that every adjacent node calls the next. Ownership is claimed only where the next section cites a stored property or assignment. The diagram is intentionally limited to the dominant path into visionOS.

Ownership and state

Ownership evidence

RealityKit-Drawable/Systems/DrawableQueueComponent.swift:15 — stored dependency or nearest verified ownership anchor

struct DrawableQueueComponent: Component {
    // ...
    var texture: TextureResource
    // ...
}
Owner Object or state Relationship Mutation authority
DrawableQueueComponent TextureResource (texture) stores or receives App/module collaborators
DrawableQueueComponent MTLTexture (mtlTextureRead) stores or receives App/module collaborators
DrawableQueueComponent MTLTexture (mtlTextureWrite) stores or receives App/module collaborators
DrawableQueueComponent MTLCommandQueue (mtlCommandQueue) stores or receives Initialized by the owner; the binding is immutable

Composition arrows indicate a source-visible construction expression or locally owned value state; aggregation means the owner stores or receives a dependency without proving exclusive lifetime ownership.

Concurrency, scheduling, and thread safety

Evidence limit: actor isolation, async/await, or Task creation does not by itself prove background-thread execution; Sendable conformance alone does not prove thread-safe mutation.

Concern Source mechanism Verified placement or handoff Evidence
Main isolation @MainActor The cited annotation marks its attached declaration or closure as main-actor isolated. RealityKit-Drawable/Views/EntityView.swift:17

@MainActor/MainActor.run, DispatchQueue.main, and RunLoop.main are reported as distinct isolation, queue, and event-loop mechanisms. A plain Task is kept separate from Task.detached; neither is labeled as a background thread.

Reference code

RealityKit-Drawable/Views/EntityView.swift:17 — representative execution boundary

    @MainActor
    func makeEntity() throws -> ModelEntity {
        // ...
        let fileName: String = "Torus"

        // ...
    }

State propagation, frameworks, and dependencies

Evidence limit: an import proves a source-level compilation dependency at the cited line; it does not prove runtime use, architectural adoption, or whether a Swift package is a direct application dependency.

Category Mechanism or module Verified role Evidence
State propagation SwiftUI state property wrapper A SwiftUI property wrapper supplies or observes UI state. RealityKit-Drawable/Views/DrawableView.swift:13
Source import SwiftUI The cited file imports this module; runtime use and architectural role are not inferred. RealityKit-Drawable/App/Drawable.swift:8
Source import RealityKit The cited file imports this module; runtime use and architectural role are not inferred. RealityKit-Drawable/Systems/DrawableQueueComponent.swift:9
Source import GameplayKit The cited file imports this module; runtime use and architectural role are not inferred. RealityKit-Drawable/Textures/ProceduralTextureGenerator.swift:10
Source import metal_stdlib The cited file imports this module; runtime use and architectural role are not inferred. RealityKit-Drawable/Textures/DynamicTextureShaders.metal:8

receive(on:) describes downstream delivery scheduling, while subscribe(on:) describes upstream subscription/request/cancel scheduling. An import Combine alone establishes neither behavior nor a Store, reducer, Redux, or other application architecture.

Class and protocol design

RealityKit-Drawable/Systems/DrawableQueueComponent.swift:13 — representative type boundary

struct DrawableQueueComponent: Component {
    // ...
    var texture: TextureResource
    // ...
}
Type Responsibility Depends on or conforms to
DrawableQueueComponent Stores entity-component data or behavior Component
ProceduralTextureGenerator Generates feature data or resources Concrete collaborators/imported frameworks
DrawableQueueSystem Runs entity-component-system update logic System
DrawableView User-interface presentation and input forwarding View
EntityView User-interface presentation and input forwarding View
Drawable Represents a feature value or composable behavior App
DrawableComponentError Represents feature failure conditions Error
ProceduralTextureGeneratorError Represents feature failure conditions Error
Args Represents a feature value or composable behavior Concrete collaborators/imported frameworks

No local protocol conformance is claimed as protocol-oriented design; external framework conformances are listed only as dependencies.

Access control

Symbol Access Verified effect Likely rationale
DrawableQueueComponent (RealityKit-Drawable/Systems/DrawableQueueComponent.swift:13) implicit internal No explicit modifier means the Swift declaration is internal to the module. Inference: app-target collaboration needs no exported library surface.
ProceduralTextureGenerator (RealityKit-Drawable/Textures/ProceduralTextureGenerator.swift:13) implicit internal No explicit modifier means the Swift declaration is internal to the module. Inference: app-target collaboration needs no exported library surface.
DrawableQueueSystem (RealityKit-Drawable/Systems/DrawableQueueSystem.swift:11) implicit internal No explicit modifier means the Swift declaration is internal to the module. Inference: app-target collaboration needs no exported library surface.

Reference code

RealityKit-Drawable/Systems/DrawableQueueComponent.swift:13 — representative boundary

struct DrawableQueueComponent: Component {
    // ...
    var texture: TextureResource
    // ...
}

Swift declarations without a modifier are internal; explicit private, fileprivate, private(set), public, or open entries above are interpreted by language semantics. Objective-C/C samples instead rely on header and implementation boundaries, which are not equivalent to Swift lexical privacy.

Logic ownership and placement

Logic Owning type or file Placement rationale
Stores entity-component data or behavior DrawableQueueComponent The source’s Component suffix makes this role explicit.
Generates feature data or resources ProceduralTextureGenerator The source’s Generator suffix makes this role explicit.
Runs entity-component-system update logic DrawableQueueSystem The source’s System suffix makes this role explicit.
User-interface presentation and input forwarding DrawableView, EntityView The source’s View suffix makes this role explicit.

Design patterns

Pattern Source evidence Purpose or tradeoff
No named application pattern RealityKit-Drawable/App/Drawable.swift:10 The verified source directly composes concrete framework types; this document avoids forcing a pattern name.

Naming conventions

  • Types: Component: DrawableQueueComponent; Generator: ProceduralTextureGenerator; System: DrawableQueueSystem; View: DrawableView, EntityView.
  • Protocols: no local protocol declaration in the scanned source.
  • Methods: update, generate, makeEntity, updateEntity.
  • Files: RealityKit-Drawable/App/Drawable.swift, RealityKit-Drawable/Systems/DrawableQueueComponent.swift, RealityKit-Drawable/Textures/ProceduralTextureGenerator.swift, RealityKit-Drawable/Systems/DrawableQueueSystem.swift, RealityKit-Drawable/Views/DrawableView.swift, RealityKit-Drawable/Views/EntityView.swift.

Architecture takeaways

  • Drawable is the main source-visible entry or composition anchor for this sample.
  • Framework work reaches SwiftUI, RealityKit, GameplayKit, metal_stdlib through a deliberately small high-level chain; the detailed API graph remains inside the cited implementation files.
  • Stored-property evidence identifies lifecycle collaboration; it does not by itself prove exclusive object ownership.
  • Access-control conclusions separate verified language visibility from the likely design rationale.
  • The source does not justify labeling the design protocol-oriented.

Source map

Source file Relevant symbols
RealityKit-Drawable/App/Drawable.swift Cited implementation, SwiftUI, Drawable
RealityKit-Drawable/Systems/DrawableQueueComponent.swift Cited implementation, DrawableQueueComponent, RealityKit, DrawableComponentError
RealityKit-Drawable/Textures/ProceduralTextureGenerator.swift ProceduralTextureGenerator, GameplayKit, ProceduralTextureGeneratorError
RealityKit-Drawable/Systems/DrawableQueueSystem.swift DrawableQueueSystem
RealityKit-Drawable/Views/EntityView.swift @MainActor, EntityView
RealityKit-Drawable/Views/DrawableView.swift SwiftUI state property wrapper, DrawableView
RealityKit-Drawable/Textures/DynamicTextureShaders.metal metal_stdlib, Args