Skip to content

Commit

Permalink
error at run
Browse files Browse the repository at this point in the history
  • Loading branch information
FullMetalFist committed Sep 8, 2018
1 parent 36e70dd commit 2e50410
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 14 deletions.
4 changes: 4 additions & 0 deletions Metal001.xcodeproj/project.pbxproj
Expand Up @@ -7,13 +7,15 @@
objects = {

/* Begin PBXBuildFile section */
7C9B532C21437209009BEDF7 /* Shaders.metal in Sources */ = {isa = PBXBuildFile; fileRef = 7C9B532B21437209009BEDF7 /* Shaders.metal */; };
7CAC470821205D7600AF9C83 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CAC470721205D7600AF9C83 /* AppDelegate.swift */; };
7CAC470C21205D7700AF9C83 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7CAC470B21205D7700AF9C83 /* Assets.xcassets */; };
7CAC470F21205D7700AF9C83 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7CAC470D21205D7700AF9C83 /* Main.storyboard */; };
7CAC471821205DA300AF9C83 /* MetalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CAC471721205DA300AF9C83 /* MetalView.swift */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
7C9B532B21437209009BEDF7 /* Shaders.metal */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.metal; path = Shaders.metal; sourceTree = "<group>"; };
7CAC470421205D7600AF9C83 /* Metal001.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Metal001.app; sourceTree = BUILT_PRODUCTS_DIR; };
7CAC470721205D7600AF9C83 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7CAC470B21205D7700AF9C83 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
Expand Down Expand Up @@ -55,6 +57,7 @@
children = (
7CAC470721205D7600AF9C83 /* AppDelegate.swift */,
7CAC471721205DA300AF9C83 /* MetalView.swift */,
7C9B532B21437209009BEDF7 /* Shaders.metal */,
7CAC470B21205D7700AF9C83 /* Assets.xcassets */,
7CAC470D21205D7700AF9C83 /* Main.storyboard */,
7CAC471021205D7700AF9C83 /* Info.plist */,
Expand Down Expand Up @@ -133,6 +136,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
7C9B532C21437209009BEDF7 /* Shaders.metal in Sources */,
7CAC471821205DA300AF9C83 /* MetalView.swift in Sources */,
7CAC470821205D7600AF9C83 /* AppDelegate.swift in Sources */,
);
Expand Down
Binary file not shown.
55 changes: 41 additions & 14 deletions Metal001/MetalView.swift
Expand Up @@ -11,24 +11,51 @@ import MetalKit

class MetalView: MTKView {

var commandQueue: MTLCommandQueue?
var rps: MTLRenderPipelineState?
var vertexData: [Float]?
var vertexBuffer: MTLBuffer?

required init(coder: NSCoder) {
super.init(coder: coder)
render()
}

override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
render()
if let drawable = currentDrawable, let rpd = currentRenderPassDescriptor {
rpd.colorAttachments[0].clearColor = MTLClearColorMake(0, 0.5, 0.5, 1.0)
let commandBuffer = device!.makeCommandQueue()?.makeCommandBuffer()
let commandEncoder = commandBuffer?.makeRenderCommandEncoder(descriptor: rpd)

commandEncoder?.setRenderPipelineState(rps!)
commandEncoder?.setVertexBuffer(vertexBuffer, offset: 0, index: 0)
commandEncoder?.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: 3, instanceCount: 1)
commandEncoder?.endEncoding()
commandBuffer?.present(drawable)
commandBuffer?.commit()
}
}

func render () {
let device = MTLCreateSystemDefaultDevice()!
self.device = device
let rpd = MTLRenderPassDescriptor()
let bleen = MTLClearColor(red: 0, green: 0.5, blue: 0.5, alpha: 1)
rpd.colorAttachments[0].texture = currentDrawable!.texture
rpd.colorAttachments[0].clearColor = bleen
rpd.colorAttachments[0].loadAction = .clear
let commandQueue = device.makeCommandQueue()
let commandBuffer = commandQueue?.makeCommandBuffer()
let encoder = commandBuffer?.makeRenderCommandEncoder(descriptor: rpd)
encoder?.endEncoding()
commandBuffer?.present(currentDrawable!)
commandBuffer?.commit()
device = MTLCreateSystemDefaultDevice()!
commandQueue = device!.makeCommandQueue()
vertexData = [-1.0, -1.0, 0.0, 1.0,
1.0, -1.0, 0.0, 1.0,
0.0, 1.0, 0.0, 1.0]
let dataSize = vertexData!.count * MemoryLayout<Float>.size
vertexBuffer = device!.makeBuffer(bytes: vertexData!, length: dataSize, options: [])
let library = device!.makeDefaultLibrary()!
let vertex_func = library.makeFunction(name: "vertex_func")
let frag_func = library.makeFunction(name: "fragment_func")
let rpld = MTLRenderPipelineDescriptor()
rpld.vertexFunction = vertex_func
rpld.fragmentFunction = frag_func
rpld.colorAttachments[0].pixelFormat = .bgra8Unorm
do {
try rps = device!.makeRenderPipelineState(descriptor: rpld)
} catch let error {
self.printView("\(error)")
}
}
}
22 changes: 22 additions & 0 deletions Metal001/Shaders.metal
@@ -0,0 +1,22 @@
//
// Shaders.metal
// Metal001
//
// Created by Michael Vilabrera on 9/7/18.
// Copyright © 2018 Michael Vilabrera. All rights reserved.
//

#include <metal_stdlib>
using namespace metal;

struct Vertex {
float4 position [[position]];
};

vertex Vertex vertex_func(constant Vertex *vertices [[buffer(0)]], uint vid [[vertex_id]]) {
return vertices[vid];
}

fragment float4 fragment_func(Vertex vert [[stage_in]]) {
return float4(0.7, 1, 1, 1);
}
1 change: 1 addition & 0 deletions README.md
@@ -1 +1,2 @@
http://metalkit.org/2016/01/11/using-metalkit-part-1.html
http://metalkit.org/2016/01/18/using-metalkit-part-2.html

0 comments on commit 2e50410

Please sign in to comment.