/** * Returns what the device's camera is capturing as an RGBA texture. */ public Texture2D GetRealityRGBATexture() { var appEnvironment = bridge.GetXRAppEnvironment(); var envTex = appEnvironment.getManagedCameraTextures().getRgbaTexture(); if (realityRGBATexture != null && realityRGBATexture.height == envTex.getHeight() && realityRGBATexture.width == envTex.getWidth()) { return(realityRGBATexture); } // Create a texture IntPtr envTexPtr = (IntPtr)envTex.getPtr(); if (envTexPtr != IntPtr.Zero) { realityRGBATexture = Texture2D.CreateExternalTexture( envTex.getWidth(), envTex.getHeight(), TextureFormat.RGBA32, false, false, envTexPtr); } else { realityRGBATexture = new Texture2D( envTex.getWidth(), envTex.getHeight(), TextureFormat.RGBA32, false); } captureAspect = envTex.getWidth() * 1.0f / envTex.getHeight(); // Set point filtering just so we can see the pixels clearly realityRGBATexture.filterMode = FilterMode.Point; // Call Apply() so it's actually uploaded to the GPU realityRGBATexture.Apply(); if (envTexPtr == IntPtr.Zero) { // Pass texture pointer to the plugin only if it doesn't manage one itself. bridge.SetManagedCameraRGBATexture( realityRGBATexture.GetNativeTexturePtr(), realityRGBATexture.width, realityRGBATexture.height, GetRenderingSystem()); } return(realityRGBATexture); }