             self._texture = device.makeTexture(descriptor: textureDescriptor)
         }
         
-        if let commandBuffer = self._commandQueue?.makeCommandBuffer(),
-            let renderPassDescriptor = self._renderPassDescriptor,
-            let texture = self._texture {
-            
+        guard let text = self._texture else {
+            CVPixelBufferUnlockBaseAddress(pixelBuffer, CVPixelBufferLockFlags.readOnly)
+            return
+        }
+        
+        if let commandBuffer = self._commandQueue?.makeCommandBuffer() {
             renderPassDescriptor.colorAttachments[0].texture = texture
             renderPassDescriptor.colorAttachments[0].loadAction = .clear
             renderPassDescriptor.colorAttachments[0].clearColor = MTLClearColorMake(0, 0, 0, 1.0);

            return
        }
        
        let options : [CIContextOption : Any] = [.outputColorSpace : CGColorSpaceCreateDeviceRGB(),
                                                 .outputPremultiplied : true,
                                                 .useSoftwareRenderer : NSNumber(booleanLiteral: false)]
        self._ciContext = CIContext(mtlDevice: device, options: options)
    }
    
    internal func setupPixelBufferPoolIfNecessary(_ pixelBuffer: CVPixelBuffer, orientation: CGImagePropertyOrientation) {
        let formatType = CVPixelBufferGetPixelFormatType(pixelBuffer)
        let width = CVPixelBufferGetWidth(pixelBuffer)
        let height = CVPixelBufferGetHeight(pixelBuffer)

    ///   - time: SCNSceneRendererDelegate time
    public func renderer(_ renderer: SCNSceneRenderer, didRenderScene scene: SCNScene, atTime time: TimeInterval) {        
        guard let arView = self._arView,
              let pixelBuffer = arView.session.currentFrame?.capturedImage,
              let pointOfView = arView.pointOfView,
              let device = self._device else {
                return
        }
        
