There are several steps to installing the SDK and getting set up for the contest. They include:
1. Installing Xcode 6.1 and iOS 8.1 on your Mac
2. Downloading and installing the Metal framework (and its command-line tools) using a beta version of Xcode 6.2
3. Downloading and installing the latest version of Metal Shader Tools. This step is optional, but recommended as it provides support for Metal shader syntax highlighting in Xcode’s source code editor, as well as improved syntax checking support while you write your shaders.
4. Downloading and installing the “Metal Game” starter project from Apple’s developer website (this project includes a rendering engine that supports both iOS 8 and OS X 10.10).
Download the latest Metal Shading Language (MSL) compiler [here](http://developer.apple.com/metal). A developer account is required.
Place the compiled file at /usr/local/bin/msl2xc.py, which is where this tutorial expects to find it. If you installed the compiler in a different location, please update the path in the Xcode project to point to your installation.
After downloading and installing the SDK, open MetalTutorials.xcodeproj:
Getting started with Metal is as easy as downloading Xcode and running the built-in Metal Apps template. Metal is a low-level graphics API that is designed to bring the benefits of low-level programming to iOS developers. It optimizes your code so that the GPU can work more efficiently with your app, giving you better battery life and higher frame rates.
The Metal Apps template was added in Xcode 7.3 and is available for both Swift and Objective-C. It uses the same project structure as SpriteKit or SceneKit projects, but instead of loading a scene file it uses a set of predefined shaders to render simple geometry. The sample code can be adapted to show animated 3D objects by using the same techniques that you would use in OpenGL or other 3D APIs.
Although many apps will benefit from using Metal without any code changes, there are some apps that will benefit the most from the full power of the API:
Games – Getting the maximum performance out of your game is critical to user experience. If you already have an app written using OpenGL ES or another 3D API, consider replacing it with Metal for better performance and battery life.
Visualization – Take advantage of the increased performance and feature set of Metal to visualize data in new
The first thing you’ll need to do is get a new Xcode project set up. For this, I’ve created a single view application with the name MetalPlayground and selected Swift as the language.
Next, you’ll want to open your info.plist and add a key called MetalKitCompilerArguments with an array for its type. Inside this array, we’ll specify some compiler arguments for our shaders. In this example, we’re going to use -D LIGHT_COUNT=4 but you can specify any argument here that you would normally specify in the shader source file itself. This will become useful if you have multiple shaders that use different arguments.
Now, head over to GameViewController.swift and add the following code to viewDidLoad() .
In this code snippet, we’re setting up our view controller’s view as a MetalKit view while also providing it with our main render pipeline descriptor and render pipeline state so it knows how to render our drawable objects later on.
Next, head over to ViewController+MetalKitViewDelegate.swift and add the following code:
Here we’re just creating a basic vertex buffer storing vertices for two triangles forming a quad which we’ll be using
We were lucky to have several great teams from the US, Canada, and Brazil participate in our first Google Code Jam Contest for iOS developers. The competition was fierce, but the following three teams were victorious:
First Place: iDevs (Evan Doll, Mike Lee and Joe Hewitt)
You can check if your Mac supports Metal by going to System Preferences > Display and then selecting the Display tab. You will see a list of all displays connected to your Mac, including the built-in display. If you have a Mac with an integrated GPU (iGPU) such as the Intel Iris Pro 5200, you will see “Supports Metal” next to the display name.
Google has run a coding competition called Code Jam since 2003. Competitors try to solve algorithmic puzzles, and those who succeed can move on to the next round until only a handful remain.
In 2008, Google ran a Code Jam event at the University of Washington, and in one round gave competitors ten minutes to solve a problem called “Rope Intranet.” The details are somewhat complicated, but the basic idea was as follows: you’re given a diagram of 50 points connected by 49 pieces of rope. Each piece of rope connects two points and has an associated number, and your goal is to find a way to arrange the ropes so that the product of each pair adds up to a specific target value. In other words, imagine that you have 50 different options for where each piece of rope can be attached (one for each pair of points), and if you choose the right ones, you’ll get exactly what you’re looking for.
The problem is designed so that there’s no efficient algorithm that can solve it. If you could write down all 50! (50 factorial) possible combinations of rope configurations and compute their values, that would take too long even with a supercomputer. But it’s still possible to get an answer in ten minutes—if you know