Add WebGL page cache and runtime checks
This commit is contained in:
@@ -46,6 +46,7 @@ class SentenceQueueModule extends BaseModule {
|
||||
'getPreparedSentence',
|
||||
'prefetchAhead',
|
||||
'prefetchWebGLBookPresentation',
|
||||
'isWebGLBookPresentationPrepared',
|
||||
'prepareSpeechMetadata',
|
||||
'preloadAssetsForItem',
|
||||
'normalizeTtsText',
|
||||
@@ -200,10 +201,12 @@ class SentenceQueueModule extends BaseModule {
|
||||
|
||||
const sentence = await this.getPreparedSentence(item);
|
||||
if (!this.isCurrentQueueItem(item, queueGeneration)) return;
|
||||
await this.prefetchWebGLBookPresentation(sentence, {
|
||||
queueGeneration,
|
||||
queueIndex: 0
|
||||
});
|
||||
if (!this.isWebGLBookPresentationPrepared(sentence)) {
|
||||
await this.prefetchWebGLBookPresentation(sentence, {
|
||||
queueGeneration,
|
||||
queueIndex: 0
|
||||
});
|
||||
}
|
||||
if (!this.isCurrentQueueItem(item, queueGeneration)) return;
|
||||
|
||||
// Prefetch far enough ahead that media pauses do not block TTS
|
||||
@@ -898,6 +901,10 @@ class SentenceQueueModule extends BaseModule {
|
||||
const bookTextureRenderer = this.getModule('book-texture-renderer');
|
||||
if (!bookPagination || !bookTextureRenderer) return null;
|
||||
|
||||
if (this.isWebGLBookPresentationPrepared(sentence)) {
|
||||
return sentence.webglBookPresentation?.spread || null;
|
||||
}
|
||||
|
||||
if (!Array.isArray(sentence.animation?.wordTimings) || sentence.animation.wordTimings.length === 0) {
|
||||
const words = String(sentence.layoutText || sentence.text || '').match(/\S+/g) || [];
|
||||
sentence.animation = this.calculateAnimationTiming(words, sentence.tts?.duration || 0, sentence.cueMarkers || []);
|
||||
@@ -929,10 +936,23 @@ class SentenceQueueModule extends BaseModule {
|
||||
spread,
|
||||
preloadOnly: true
|
||||
}, { preloadOnly: true });
|
||||
sentence.webglBookPresentation = {
|
||||
prepared: true,
|
||||
blockId,
|
||||
spread
|
||||
};
|
||||
}
|
||||
return spread;
|
||||
}
|
||||
|
||||
isWebGLBookPresentationPrepared(sentence) {
|
||||
const blockId = sentence?.blockId ?? sentence?.metadata?.blockId ?? null;
|
||||
if (blockId == null) return false;
|
||||
if (sentence?.webglBookPresentation?.prepared === true) return true;
|
||||
const bookTextureRenderer = this.getModule('book-texture-renderer');
|
||||
return Boolean(bookTextureRenderer?.hasPreparedRevealBlock?.(blockId));
|
||||
}
|
||||
|
||||
isCurrentQueueItem(item, queueGeneration = this.queueGeneration) {
|
||||
return queueGeneration === this.queueGeneration && this.sentenceQueue[0] === item;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user