質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Metal

Metalは、Apple社が提供するローレベルなグラフィックスAPIです。各macOS/iOSの各バージョンで利用でき、OpenGLとOpenCLに似た機能をAPIとして提供しています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

571閲覧

Swift MetalKit blitEncoder エラーThread 1: signal SIGABRT EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, ...

退会済みユーザー

退会済みユーザー

総合スコア0

Metal

Metalは、Apple社が提供するローレベルなグラフィックスAPIです。各macOS/iOSの各バージョンで利用でき、OpenGLとOpenCLに似た機能をAPIとして提供しています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/04/30 07:07

Swift

1class ViewController: NSViewController, MTKViewDelegate { 2 3 private let device: MTLDevice! = MTLCreateSystemDefaultDevice()! 4 private var commandQueue: MTLCommandQueue! 5 private var texture: MTLTexture! 6 private let theScreen = NSScreen.main 7 8 @IBOutlet private var mtkView: MTKView! 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 print("viewDidLoad\n") 13 mtkView = MTKView(frame: CGRect(x: 0, y: 0, width: 727, height: 1024), device: device) 14 self.view.addSubview(mtkView) 15 16 setupMetal() 17 loadTexture() 18 19 mtkView.enableSetNeedsDisplay = true 20 mtkView.setNeedsDisplay(NSRect(x: 0, y: 0, width: 727, height: 1024)) 21 } 22 23 private func setupMetal() { 24 print("setupMetal") 25 commandQueue = device.makeCommandQueue() 26 mtkView.device = device 27 mtkView.delegate = self 28 } 29 private func loadTexture() { 30 print("loadTexture") 31 // MTKTextureの初期化 32 let textureLoader = MTKTextureLoader(device: device) 33 34 // textureをロードする関数を呼ぶ 35 texture = try! textureLoader.newTexture(name: "sample", scaleFactor: theScreen!.backingScaleFactor, bundle: nil) 36 37 38 } 39 40 func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) { 41 print("(self.classForCoder)") 42 } 43 44 func draw(in view: MTKView) { 45 print("draw") 46 let drawable = view.currentDrawable! 47 48 // コマンドバッファを作成 49 let commandBuffer = commandQueue.makeCommandBuffer()! 50 51 // MTLBlitCommandEncoderを作成 52 53 let w = min(texture.width, drawable.texture.width) 54 let h = min(texture.height, drawable.texture.height) 55 56 // MTLBlitCommandEncoderを作成 57 let blitEncoder = commandBuffer.makeBlitCommandEncoder()! 58 59 // コピーコマンドをエンコード 60 blitEncoder.copy(from: texture, //------ ここでエラー -------- 61 sourceSlice: 0, 62 sourceLevel: 0, 63 sourceOrigin: MTLOrigin(x: 0, y: 0, z: 0), 64 sourceSize: MTLSizeMake(w, h, texture.depth), 65 to: drawable.texture, // コピー先テクスチャ 66 destinationSlice: 0, 67 destinationLevel: 0, 68 destinationOrigin: MTLOrigin(x: 0, y: 0, z: 0)) 69 70 // エンコード完了 71 blitEncoder.endEncoding() 72 73 // 表示するドローアブルを登録 74 commandBuffer.present(drawable) 75 76 // コマンドバッファをコミット(エンキュー) 77 commandBuffer.commit() 78 79 // 完了まで待つ 80 commandBuffer.waitUntilCompleted() 81 } 82 83} 84

Swift

1import Cocoa 2 3 4class WindowController: NSWindowController { 5 6 7 override func windowDidLoad() { 8 super.windowDidLoad() 9 print("WindowDidLoad") 10// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. 11 12 13 14 window?.isOpaque = false 15 window?.backgroundColor = NSColor(white: 1, alpha: 0.8) 16 17 window?.isMovableByWindowBackground = true 18 window?.titleVisibility = .hidden 19 window?.titlebarAppearsTransparent = true 20 window?.hasShadow = false 21 22 window?.styleMask.remove(NSWindow.StyleMask.titled) 23 24 print("windowDidLoad End") 25 } 26} 27

https://github.com/shu223/MetalBook/blob/master/01_MetalImageRender/MetalImageRender/ViewController.swift
このurl先のコードはiOS向けなのでこれをMac用に
見よう見まねで書いてみました。
ですがblitEncoderのところでエラーが出てしまい困ってます。
実行するとThread 1: signal SIGABRTというエラーが出て
そこでstep outするとThread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
というエラーが出ます。

調べてみたところ@IBOutlet関連のエラーらしいですが
@IBOutletしたのはコード上のmtkViewだけです。

原因わかりますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問