public uint Update() { if (wasInitialized) { if (isMobile) { if (Screen.orientation != currentOrientation && Time.frameCount > 1) { ApplyViewSettings(); MobileWrapper.String_SetProjectionAndViewport(_camera.projectionMatrix, _camera.rect, (int)(currentOrientation = Screen.orientation), _reorientIPhoneSplash); } markerCount = MobileWrapper.String_GetData(markerInfo, maxMarkerCount); } else { if (DesktopWrapper.IsNewFrameReady()) { DesktopWrapper.ProcessFrame((uint)videoTextures[0].GetNativeTextureID(), 0); markerCount = DesktopWrapper.GetDataQuaternionBased(markerInfo, maxMarkerCount); videoPlaneObject.active = true; } } } else { // Write dummy output data markerCount = 1; markerInfo[0].DummyData(); } return(markerCount); }
public int LoadImageMarker(string fileName, string extension) { if (wasInitialized) { if (isMobile) { return(MobileWrapper.String_LoadImageMarker("Data/Raw/" + fileName, extension)); } else { string path = Application.dataPath + "/StreamingAssets/" + fileName; int id = DesktopWrapper.LoadImageMarker(path, extension); if (id < 0) { Debug.LogWarning("Failed to load marker image \"" + path + "." + extension + "\""); } else { Debug.Log("Loaded marker image \"" + path + "." + extension + "\""); } return(id); } } else { return(-1); } }
/// <summary> /// Refreshes toolbar graphics /// </summary> internal void Refresh() => DesktopWrapper?.Invalidate();
void InitializePreviewPlugin(string preferredDeviceName, Camera camera) { // Test library compatibility if (DesktopWrapper.GetInterfaceVersion() != 3) { Debug.LogError("You appear to be using incompatible versions of StringWrapper.cs and String.bundle; Please make sure you're using the latest versions of both."); return; } // Enumerate devices uint maxDeviceCount = 10; DeviceInfo[] deviceInfo = new DeviceInfo[maxDeviceCount]; uint deviceCount = DesktopWrapper.EnumerateDevices(deviceInfo, maxDeviceCount); for (int i = 0; i < deviceCount; i++) { Debug.Log("Found camera \"" + deviceInfo[i].name + "\" (" + (deviceInfo[i].isAvailable ? "available for use.)" : "not available for use.)")); } if (deviceCount > 0) { uint i; for (i = 0; i < deviceCount; i++) { if (deviceInfo[i].name == preferredDeviceName) { break; } } if (i < deviceCount) { Debug.Log("Capturing video from preferred device \"" + deviceInfo[i].name + "\"."); } else { i = 0; if (preferredDeviceName != null) { Debug.Log("Preferred device was not found. Using \"" + deviceInfo[i].name + "\"."); } else { Debug.Log("Capturing video from device \"" + deviceInfo[i].name + "\"."); } } if (DesktopWrapper.InitTracker(deviceInfo[i].id, ref previewWidth, ref previewHeight, _previewCamApproxVerticalFOV)) { CreateVideoMaterial(); CreateVideoMesh(); float scale = camera.farClipPlane * 0.99f; float verticalScale = scale * Mathf.Tan(_previewCamApproxVerticalFOV * Mathf.PI / 360f); videoPlaneObject = new GameObject("Video Plane", new Type[] { typeof(MeshRenderer), typeof(MeshFilter) }); videoPlaneObject.hideFlags = HideFlags.HideAndDontSave; videoPlaneObject.active = false; videoPlaneObject.renderer.material = videoMaterial; MeshFilter meshFilter = (MeshFilter)videoPlaneObject.GetComponent(typeof(MeshFilter)); meshFilter.sharedMesh = videoPlaneMesh; videoPlaneObject.transform.parent = camera.transform; videoPlaneObject.transform.localPosition = new Vector3(0, 0, scale); videoPlaneObject.transform.localRotation = Quaternion.identity; videoPlaneObject.transform.localScale = new Vector3(verticalScale * (float)previewWidth / previewHeight, verticalScale, 1); wasInitialized = true; } else { Debug.Log("Failed to initialize String."); } } else { Debug.LogError("No devices suitable for video capture were detected."); } }