private void createTexture() { uint movieWidth = MetaioSDKUnity.getMovieTextureWidth(movieGeometry); uint movieHeight = MetaioSDKUnity.getMovieTextureHeight(movieGeometry); // Shouldn't happen, dimensions are initialized by now if (movieWidth == 0 || movieHeight == 0) { throw new Exception("Movie not loaded yet, width/height is zero"); } int textureSizeX = nextPowerOf2(movieWidth); int textureSizeY = nextPowerOf2(movieHeight); Texture2D texture = new Texture2D(textureSizeX, textureSizeY, TextureFormat.RGBA32, false); // User has to set transparency-supporting shader himself since he might as well overwrite the shader with // a custom one, so we do not force anyone to use the Unity built-in shader Material mat = gameObject.renderer.material; texture.wrapMode = TextureWrapMode.Clamp; mat.mainTexture = texture; // Most videos are not a power of 2 in dimensions, so scale the UV coordinates appropriately. // Unity seems to interpret the (0,0) coordinate of OpenGL textures as bottom left, so we // need to vertically flip the V coordinate here. mat.mainTextureScale = new Vector2((float)movieWidth / textureSizeX, -(float)movieHeight / textureSizeY); mat.mainTextureOffset = new Vector2(0, (float)movieHeight / textureSizeY); textureID = texture.GetNativeTextureID(); Debug.Log(string.Format("Texture ID for movie {0} ({1}x{2}): {3}", movieFile, movieWidth, movieHeight, textureID)); }