<!--
{
  "documentType" : "article",
  "framework" : "Metal",
  "identifier" : "/documentation/Metal/onscreen-presentation",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "Onscreen presentation"
}
-->

# Onscreen presentation

Show the output from a GPU’s rendering pass to the user in your app.

## Discussion

A texture contains visual data that you may want to display onscreen, such as a filtered image or a frame of animation in a game. To display a texture on a device’s screen, you need to create or acquire a drawable texture from <doc://com.apple.documentation/documentation/QuartzCore>.

In Metal, a *drawable* is a texture that bridges the display subsystem within <doc://com.apple.documentation/documentation/QuartzCore> to Metal. You can use a drawable as the output of a render pass and then present it to a display with its [`MTLDrawable`](/documentation/Metal/MTLDrawable) protocol.

> Note:
> You can’t present a texture you directly create in Metal unless you copy its content to a drawable using a blit pass (see <doc://com.apple.metal/documentation/Metal/blit-passes>).

To display content on a device’s screen, add one of these to your Metal app:

- A <doc://com.apple.documentation/documentation/QuartzCore/CAMetalLayer> instance within a custom view class
- An <doc://com.apple.documentation/documentation/MetalKit/MTKView> instance

With a <doc://com.apple.documentation/documentation/QuartzCore/CAMetalLayer> instance, your app can get drawable instances by calling its <doc://com.apple.documentation/documentation/QuartzCore/CAMetalLayer/nextDrawable()> method. Each drawable conforms to the <doc://com.apple.documentation/documentation/QuartzCore/CAMetalDrawable> protocol, which has a <doc://com.apple.documentation/documentation/QuartzCore/CAMetalDrawable/texture> property that a render pass can use as its output. See [Creating a custom Metal view](/documentation/Metal/creating-a-custom-metal-view) for more information.

Alternatively, your app can use an <doc://com.apple.documentation/documentation/MetalKit/MTKView> and its <doc://com.apple.documentation/documentation/MetalKit/MTKView/currentDrawable> property. This <doc://com.apple.documentation/documentation/MetalKit> class provides a default implementation of a Metal-aware view that uses an underlying <doc://com.apple.documentation/documentation/QuartzCore/CAMetalLayer> instance. A <doc://com.apple.documentation/documentation/MetalKit> view provides a quick and easy way to present your app’s content, but gives you less control than using a <doc://com.apple.documentation/documentation/QuartzCore/CAMetalLayer> directly. See [Using Metal to draw a view’s contents](/documentation/Metal/using-metal-to-draw-a-view's-contents) for more information.

Whichever mechanism you choose, pay close attention to how your app handles drawables. Each drawable comes from a limited and reusable resource pool. A drawable may not always be available when your app requests one. When that happens, <doc://com.apple.documentation/documentation/QuartzCore> blocks the calling thread until a drawable becomes available — usually at the display’s next refresh interval.

## Topics

### Presenting with core animation

[Creating a custom Metal view](/documentation/Metal/creating-a-custom-metal-view)

Implement a lightweight view for Metal rendering that’s customized to your app’s needs.

[Reading pixel data from a drawable texture](/documentation/Metal/reading-pixel-data-from-a-drawable-texture)

Access texture data from the CPU by copying it to a buffer.

[Achieving smooth frame rates with a Metal display link](/documentation/Metal/achieving-smooth-frame-rates-with-a-metal-display-link)

Pace rendering with minimal input latency while providing essential information to the operating system for power-efficient rendering, thermal mitigation, and the scheduling of sustainable workloads.

  <doc://com.apple.documentation/documentation/QuartzCore/CAMetalLayer>

  <doc://com.apple.documentation/documentation/QuartzCore/CAMetalDrawable>

### Presenting with MetalKit

[Using Metal to draw a view’s contents](/documentation/Metal/using-metal-to-draw-a-view's-contents)

Create a MetalKit view and a render pass to draw the view’s contents.

  <doc://com.apple.documentation/documentation/MetalKit/MTKView>

  <doc://com.apple.documentation/documentation/MetalKit/MTKViewDelegate>



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)