/// <summary> /// Starts the current render loop. /// </summary> /// <param name="frameRequestQueue">The <see cref="IFrameRequestQueue"/> instance to use, if available.</param> /// <param name="shaderRunner">The <see cref="IShaderRunner"/> instance to use to render frames.</param> public async void StartRenderLoop(IFrameRequestQueue?frameRequestQueue, IShaderRunner shaderRunner) { ThrowIfDisposed(); Guard.IsNotNull(shaderRunner, nameof(shaderRunner)); using (await this.setupSemaphore.LockAsync()) { this.renderCancellationTokenSource?.Cancel(); await this.renderSemaphore.WaitAsync(); Thread newRenderThread = new(static args => ((SwapChainManager <TOwner>)args !).SwitchAndStartRenderLoop());
public ComputeShader(string name, IShaderRunner shaderRunner) { Name = name; ShaderRunner = shaderRunner; }