/// <summary> /// Commits all current instances to the scene. /// </summary> public void Commit() { foreach (var entry in instances) { var instance = entry.Value; instance.Geometry.Commit(); var xtf = new float[12] // Column-major order { instance.Transform.U.X, instance.Transform.U.Y, instance.Transform.U.Z, instance.Transform.V.X, instance.Transform.V.Y, instance.Transform.V.Z, instance.Transform.W.X, instance.Transform.W.Y, instance.Transform.W.Z, instance.Transform.T.X, instance.Transform.T.Y, instance.Transform.T.Z }; var pinned = GCHandle.Alloc(xtf, GCHandleType.Pinned); // Pin transform matrix to raw float* array RTC.SetTransform(scenePtr, entry.Key, RTC.MatrixLayout.ColumnMajor, pinned.AddrOfPinnedObject()); pinned.Free(); // Release before checking for error RTC.CheckLastError(); if (instance.Enabled) { RTC.EnableGeometry(scenePtr, entry.Key); } else { RTC.DisableGeometry(scenePtr, entry.Key); } RTC.CheckLastError(); if (sceneFlags.HasFlag(SceneFlags.Dynamic)) { RTC.UpdateGeometry(scenePtr, entry.Key); RTC.CheckLastError(); // static mesh? } } RTC.Commit(scenePtr); RTC.CheckLastError(); }