Skip to content

Instantly share code, notes, and snippets.

guard let computePipelineState = self.computePipelineState,
let encoder = context.commandBuffer.makeComputeCommandEncoder()
else {
return
}
encoder.setComputePipelineState(computePipelineState)
encoder.setTexture(context.sourceColorTexture, index: 0)
encoder.setTexture(context.targetColorTexture, index: 1)
encoder.dispatchThreadgroups(self.threadgroupsPerGrid, threadsPerThreadgroup: self.threadsPerThreadgroup)
private func setupComputePipeline(targetTexture: MTLTexture) {
guard let device = MTLCreateSystemDefaultDevice(),
let library = device.makeDefaultLibrary(),
let postProcessingKernel = library.makeFunction(name: "inverseColorKernel"),
let pipelineState = try? device.makeComputePipelineState(function: postProcessingKernel)
else {
assertionFailure()
return
}
let device = MTLCreateSystemDefaultDevice()
let library = device.makeDefaultLibrary()
let postProcessingKernel = library.makeFunction(name: "inverseColorKernel")
let pipelineState = try? device.makeComputePipelineState(function: postProcessingKernel)
#include <metal_stdlib>
using namespace metal;
[[kernel]]
void inverseColorKernel(texture2d<float, access::read> sourceTexture [[texture(0)]],
texture2d<float, access::write> targetTexture [[texture(1)]],
uint2 gridPosition [[thread_position_in_grid]])
{
float4 sourceColor = sourceTexture.read(gridPosition);
float4 inverseColor = float4(1.0 - sourceColor.rgb, sourceColor.a);
arView.renderCallbacks.postProcess = { [weak self] context in
// ... post-processing code ...
}
//
// LoopAndGestureViewController.swift
//
//
// Created by Dennis Ippel on 02/04/2021.
//
import UIKit
import RealityKit
import Combine
import UIKit
import RealityKit
import Combine
class GameViewController: UIViewController {
var sceneEventsUpdateSubscription: Cancellable!
override func viewDidLoad() {
super.viewDidLoad()
struct FragmentOut {
float4 color [[color(0)]];
float depth [[depth(any)]];
};
fragment FragmentOut screenQuadFragment(ScreenQuadVertex inVertex [[stage_in]],
texture2d<uint, access::sample> segmentationTexture [[texture(0)]],
constant Uniforms& uniforms [[buffer(0)]])
{
FragmentOut out;
constant float4x4 quadVertices = float4x4(float4( -1.0, -1.0, 0.0, 1.0 ),
float4( 1.0, -1.0, 0.0, 1.0 ),
float4( -1.0, 1.0, 0.0, 1.0 ),
float4( 1.0, 1.0, 0.0, 1.0 ));
constant float4x2 quadTextureCoordinates = float4x2(float2( 1.0, 1.0 ),
float2( 0.0, 1.0 ),
float2( 1.0, 0.0 ),
float2( 0.0, 0.0 ));
let viewBoundingBox = viewSpaceBoundingBox(fromNormalizedImageBoundingBox: boundingBox,
usingDisplayTransform: displayTransform)
let midPoint = CGPoint(x: viewBoundingBox.midX,
y: viewBoundingBox.midY)
// Get the feature point that is closed to our detected rectangle's center
let results = sceneView.hitTest(midPoint, types: .featurePoint)
let depthBufferZ = calculateFragmentDepth(usingCamera: camera,