Мы пытаемся использовать многопоточность на Hololens, но безуспешно. Поскольку мы не знаем, как и что реализовать в дополнительных потоках.
В настоящее время наше приложение выполняет множество операций в основном потоке, что, если мы запустим наш «живой поток» (работающий с WebcamTexture),Голограммы больше не появляются.
Итак, для начала мы хотим спросить, как мы можем использовать потоки для более эффективного выполнения частей нашего кода фотозахвата (см. Ниже)? Таким образом, мы можем понять, какие части следует запускать в разных потоках.
Мы используем Unity 2018.4.10f1
using UnityEngine;
using System.Linq;
using UnityEngine.XR.WSA.WebCam;
public partial class PhotocaptureFrame : MonoBehaviour
{
public PhotoCapture photoCaptureObject = null;
public GameObject quad;
public static PhotocaptureFrame Instance { get; set; }
private Texture2D imageTexture;
private CameraParameters c;
private Resolution cameraResolution;
private void Start()
{
cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First();
PhotoCapture.CreateAsync(false, delegate (PhotoCapture captureObject)
{
photoCaptureObject = captureObject;
//CameraParameters c = new CameraParameters();
c.hologramOpacity = 0.0f;
c.cameraResolutionWidth = cameraResolution.width;
c.cameraResolutionHeight = cameraResolution.height;
c.pixelFormat = CapturePixelFormat.BGRA32;
captureObject.StartPhotoModeAsync(c, delegate (PhotoCapture.PhotoCaptureResult result)
{
photoCaptureObject.TakePhotoAsync(OnCapturedPhotoToMemory);
});
});
Instance = this;
}
public void MakePhoto()
{
PhotoCapture.CreateAsync(false, delegate (PhotoCapture captureObject)
{
photoCaptureObject = captureObject;
captureObject.StartPhotoModeAsync(c, delegate (PhotoCapture.PhotoCaptureResult result)
{
photoCaptureObject.TakePhotoAsync(OnCapturedPhotoToMemory);
});
});
}
public void OnCapturedPhotoToMemory(PhotoCapture.PhotoCaptureResult result, PhotoCaptureFrame photoCaptureFrame)
{
Resolution cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First(); // Create our Texture2D for use and set the correct resolution
Texture2D targetTexture = new Texture2D(cameraResolution.width, cameraResolution.height);
photoCaptureFrame.UploadImageDataToTexture(targetTexture); // Copy the raw image data into our target texture
imageTexture = targetTexture; //Save image to new Texture to not loose it
quad.GetComponent<Renderer>().material.mainTexture = imageTexture; // Do as we wish with the texture such as apply it to a material, etc.
//photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoModeEnd);
// Clean up
photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoModeEnd);
}
public void OnStoppedPhotoModeEnd(PhotoCapture.PhotoCaptureResult result)
{
photoCaptureObject.Dispose();
photoCaptureObject = null;
Debug.Log("Photo object disposed.");
}
}
Мы ожидаем, что выходные данные будут знать, какие чанки мы можем запустить в разных потоках икак называть разные темы на Hololens.
Спасибо большое и всякая помощь приветствуется.