Skip to content

Commit

Permalink
Merge #155
Browse files Browse the repository at this point in the history
155: Add CaptureDescriptor r=kvark a=chinedufn

This PR adds the `CaptureDescriptor`, closing #153 

Co-authored-by: Chinedu Francis Nwafili <[email protected]>
  • Loading branch information
bors[bot] and chinedufn authored Jul 11, 2020
2 parents 261bf55 + 95a5ff1 commit d75c1a6
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 0 deletions.
79 changes: 79 additions & 0 deletions src/capturedescriptor.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
// Copyright 2020 GFX developers
//
// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
// http://opensource.org/licenses/MIT>, at your option. This file may not be
// copied, modified, or distributed except according to those terms.

use super::*;

use std::path::Path;

/// https://developer.apple.com/documentation/metal/mtlcapturedestination?language=objc
#[repr(u64)]
#[allow(non_camel_case_types)]
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
pub enum MTLCaptureDestination {
DeveloperTools = 1,
GpuTraceDocument = 2,
}

/// https://developer.apple.com/documentation/metal/mtlcapturedescriptor
pub enum MTLCaptureDescriptor {}

foreign_obj_type! {
type CType = MTLCaptureDescriptor;
pub struct CaptureDescriptor;
pub struct CaptureDescriptorRef;
}

impl CaptureDescriptor {
pub fn new() -> CaptureDescriptor {
unsafe {
let class = class!(MTLCaptureDescriptor);
msg_send![class, new]
}
}
}

impl CaptureDescriptorRef {
/// https://developer.apple.com/documentation/metal/mtlcapturedescriptor/3237248-captureobject
pub fn set_capture_device(&self, device: &DeviceRef) {
unsafe { msg_send![self, setCaptureObject: device] }
}

/// https://developer.apple.com/documentation/metal/mtlcapturedescriptor/3237248-captureobject
pub fn set_capture_scope(&self, scope: &CaptureScopeRef) {
unsafe { msg_send![self, setCaptureObject: scope] }
}

/// https://developer.apple.com/documentation/metal/mtlcapturedescriptor/3237248-captureobject
pub fn set_capture_command_queue(&self, command_queue: &CommandQueueRef) {
unsafe { msg_send![self, setCaptureObject: command_queue] }
}

/// https://developer.apple.com/documentation/metal/mtlcapturedescriptor/3237250-outputurl
pub fn output_url(&self) -> &Path {
let output_url = unsafe { msg_send![self, outputURL] };
let output_url = nsstring_as_str(output_url);

Path::new(output_url)
}

/// https://developer.apple.com/documentation/metal/mtlcapturedescriptor/3237250-outputurl
pub fn set_output_url<P: AsRef<Path>>(&self, output_url: P) {
let output_url = nsstring_from_str(output_url.as_ref().to_str().unwrap());

unsafe { msg_send![self, setOutputURL: output_url] }
}

/// https://developer.apple.com/documentation/metal/mtlcapturedescriptor?language=objc
pub fn destination(&self) -> MTLCaptureDestination {
unsafe { msg_send![self, destination] }
}

/// https://developer.apple.com/documentation/metal/mtlcapturedescriptor?language=objc
pub fn set_destination(&self, destination: MTLCaptureDestination) {
unsafe { msg_send![self, setDestination: destination] }
}
}
16 changes: 16 additions & 0 deletions src/capturemanager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
// copied, modified, or distributed except according to those terms.

use super::*;
use std::ffi::CStr;

pub enum MTLCaptureScope {}

Expand Down Expand Up @@ -69,6 +70,16 @@ impl CaptureManagerRef {
unsafe { msg_send![self, setDefaultCaptureScope: scope] }
}

/// https://developer.apple.com/documentation/metal/mtlcapturemanager/3237259-startcapture
pub fn start_capture(&self, descriptor: &CaptureDescriptorRef) -> Result<(), String> {
unsafe {
try_objc! { err =>
msg_send![self, startCaptureWithDescriptor: descriptor
error: &mut err]
}
}
}

pub fn start_capture_with_device(&self, device: &DeviceRef) {
unsafe { msg_send![self, startCaptureWithDevice: device] }
}
Expand All @@ -88,4 +99,9 @@ impl CaptureManagerRef {
pub fn is_capturing(&self) -> bool {
unsafe { msg_send![self, isCapturing] }
}

/// https://developer.apple.com/documentation/metal/mtlcapturemanager/3237260-supportsdestination?language=objc
pub fn supports_destination(&self, destination: MTLCaptureDestination) -> bool {
unsafe { msg_send![self, supportsDestination: destination] }
}
}
2 changes: 2 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,7 @@ impl CoreAnimationLayerRef {

mod argument;
mod buffer;
mod capturedescriptor;
mod capturemanager;
mod commandbuffer;
mod commandqueue;
Expand All @@ -381,6 +382,7 @@ mod vertexdescriptor;
pub use {
argument::*,
buffer::*,
capturedescriptor::*,
capturemanager::*,
commandbuffer::*,
commandqueue::*,
Expand Down

0 comments on commit d75c1a6

Please sign in to comment.