private void UpdateMesh() { if (_dataSource == null) { return; } //Get the new model #if USE_NATIVE_LIB System.IntPtr normalAddr = System.IntPtr.Zero; if (_computeNormals) { if (_newNormals == null) { _newNormals = new Vector3[_dataSource.MaxVertices]; _newNormalsHandle = GCHandle.Alloc(_newNormals, GCHandleType.Pinned); } normalAddr = _newNormalsHandle.AddrOfPinnedObject(); } int modelId = Bridge4DS.UpdateModel(_dataSource.FDVUUID, _newVerticesHandle.AddrOfPinnedObject(), _newUVsHandle.AddrOfPinnedObject(), _newTrianglesHandle.AddrOfPinnedObject(), _newTextureDataHandle.AddrOfPinnedObject(), normalAddr, _lastModelId, ref _nbVertices, ref _nbTriangles); #endif //look for end of range event if (Bridge4DS.OutOfRangeEvent(_dataSource.FDVUUID)) { //Send event if (onOutOfRange != null) { onOutOfRange(); } if (_outRangeMode == OUT_RANGE_MODE.Stop) { Play(false); } if (_outRangeMode == OUT_RANGE_MODE.Hide) { Play(false); _meshComponent.sharedMesh.Clear(); } } //Check if there is model if (!_newMeshAvailable) { _newMeshAvailable = (modelId != -1 && modelId != _lastModelId); } if (modelId == -1) { modelId = _lastModelId; } else { _lastModelId = modelId; } if (_debugInfo) { double timeInMSeconds = System.DateTime.Now.Subtract(_lastDecodingTime).TotalMilliseconds; if (_lastDecodingId == 0 || timeInMSeconds > 500f) { _decodingFPS = (float)((double)(Mathf.Abs((float)(modelId - _lastDecodingId))) / timeInMSeconds) * 1000f; _lastDecodingTime = System.DateTime.Now; _lastDecodingId = modelId; } } }