* Render the animation using the provided settings. * * @param settings - The rendering settings.
(settings: RendererSettings)
| 141 | * @param settings - The rendering settings. |
| 142 | */ |
| 143 | public async render(settings: RendererSettings) { |
| 144 | if (this.state.current !== RendererState.Initial) return; |
| 145 | await this.lock.acquire(); |
| 146 | this.estimator.reset(); |
| 147 | this.state.current = RendererState.Working; |
| 148 | let result: RendererResult; |
| 149 | try { |
| 150 | this.abortController = new AbortController(); |
| 151 | result = await this.run(settings, this.abortController.signal); |
| 152 | } catch (e: any) { |
| 153 | this.project.logger.error(e); |
| 154 | result = RendererResult.Error; |
| 155 | if (this.exporter) { |
| 156 | try { |
| 157 | await this.exporter.stop?.(result); |
| 158 | } catch (_) { |
| 159 | throw Error(e.message); |
| 160 | } |
| 161 | this.exporter = null; |
| 162 | throw Error(e.message); |
| 163 | } |
| 164 | } |
| 165 | |
| 166 | this.estimator.update(1); |
| 167 | this.state.current = RendererState.Initial; |
| 168 | this.finished.dispatch(result); |
| 169 | this.sharedWebGLContext.dispose(); |
| 170 | this.lock.release(); |
| 171 | } |
| 172 | |
| 173 | /** |
| 174 | * Abort the ongoing render process. |