void CheckFrameTicking() { if (Time.frameCount != lastFrameCount) { framePassed = true; lastFrameCount = Time.frameCount; previousFrameRedrawScope = gizmos.frameRedrawScope; gizmos.frameRedrawScope = new RedrawScope(gizmos); Draw.builder.Dispose(); Draw.builder = gizmos.GetBuilder(); } else if (framePassed && Application.isPlaying) { // Rendered frame passed without a game frame passing! // This might mean the game is paused. // Redraw gizmos while the game is paused. // It might also just mean that we are rendering with multiple cameras. previousFrameRedrawScope.Draw(); } if (framePassed) { gizmos.TickFrame(); builtGizmos = false; framePassed = false; } }
public void Init(Hasher hasher, RedrawScope frameRedrawScope, RedrawScope customRedrawScope, bool isGizmos) { if (state != State.Reserved) { throw new System.InvalidOperationException(); } meta = new Meta { hasher = hasher, redrawScope1 = frameRedrawScope, redrawScope2 = customRedrawScope, isGizmos = isGizmos, version = 0, // Will be filled in later }; if (meshes == null) { meshes = new List <Mesh>(); } if (!commandBuffers.IsCreated) { commandBuffers = new NativeArray <UnsafeAppendBuffer>(JobsUtility.MaxJobThreadCount, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); for (int i = 0; i < commandBuffers.Length; i++) { commandBuffers[i] = new UnsafeAppendBuffer(0, 4, Allocator.Persistent); } } state = State.Initialized; }
public bool SetCustomScope(Hasher hasher, RedrawScope scope) { if (data == null) { return(false); } bool found = false; for (int i = 0; i < data.Length; i++) { if (data[i].isValid && data[i].meta.hasher.Hash == hasher.Hash) { data[i].meta.redrawScope2 = scope; found = true; } } return(found); }
public bool SetVersion(RedrawScope scope, int version) { if (data == null) { return(false); } bool found = false; for (int i = 0; i < data.Length; i++) { if (data[i].isValid && (data[i].meta.redrawScope1.id == scope.id || data[i].meta.redrawScope2.id == scope.id)) { data[i].meta.version = version; found = true; } } return(found); }
/// <summary> /// Get an empty builder for queuing drawing commands. /// TODO: Example usage. /// /// See: <see cref="Drawing.CommandBuilder"/> /// </summary> /// <param name="hasher">Hash of whatever inputs you used to generate the drawing data.</param> /// <param name="redrawScope">Scope for this command builder. See #GetRedrawScope.</param> /// <param name="renderInGame">If true, this builder will be rendered in standalone games and in the editor even if gizmos are disabled.</param> public static CommandBuilder GetBuilder(DrawingData.Hasher hasher, RedrawScope redrawScope = default, bool renderInGame = false) { return(instance.gizmos.GetBuilder(hasher, redrawScope, renderInGame)); }
/// <summary> /// Get an empty builder for queuing drawing commands. /// /// See: <see cref="Drawing.CommandBuilder"/> /// </summary> /// <param name="redrawScope">Scope for this command builder. See #GetRedrawScope.</param> /// <param name="renderInGame">If true, this builder will be rendered in standalone games and in the editor even if gizmos are disabled. /// If false, it will only be rendered in the editor when gizmos are enabled.</param> public static CommandBuilder GetBuilder(RedrawScope redrawScope, bool renderInGame = false) { return(instance.gizmos.GetBuilder(redrawScope, renderInGame)); }