Added vid. tut. on home page, improved img. splitting
This commit is contained in:
@@ -610,15 +610,23 @@
|
||||
|
||||
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
||||
|
||||
// Initialize worker lazily
|
||||
// Initialize worker lazily using Vite worker syntax
|
||||
if (!irregularWorker.value) {
|
||||
irregularWorker.value = new Worker('/src/workers/irregularSpriteDetection.worker.ts', { type: 'module' });
|
||||
try {
|
||||
irregularWorker.value = new Worker(new URL('../workers/irregularSpriteDetection.worker.ts', import.meta.url), { type: 'module' });
|
||||
} catch (error) {
|
||||
console.error('Failed to create worker:', error);
|
||||
// Fallback to auto detection if worker fails
|
||||
await autoDetectSprites(img);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
const worker = irregularWorker.value!;
|
||||
|
||||
const handleMessage = async (e: MessageEvent) => {
|
||||
clearTimeout(timeout);
|
||||
worker.removeEventListener('message', handleMessage);
|
||||
worker.removeEventListener('error', handleError);
|
||||
|
||||
@@ -632,21 +640,40 @@
|
||||
}
|
||||
};
|
||||
|
||||
const handleError = (error: ErrorEvent) => {
|
||||
// Set timeout for worker processing
|
||||
const timeout = setTimeout(() => {
|
||||
worker.removeEventListener('message', handleMessage);
|
||||
worker.removeEventListener('error', handleError);
|
||||
reject(error);
|
||||
console.warn('Worker timeout, falling back to auto detection');
|
||||
// Fallback to auto detection
|
||||
autoDetectSprites(img).then(resolve).catch(reject);
|
||||
}, 30000); // 30 second timeout
|
||||
|
||||
const handleError = (error: ErrorEvent) => {
|
||||
clearTimeout(timeout);
|
||||
worker.removeEventListener('message', handleMessage);
|
||||
worker.removeEventListener('error', handleError);
|
||||
console.error('Worker error, falling back to auto detection:', error);
|
||||
// Fallback to auto detection
|
||||
autoDetectSprites(img).then(resolve).catch(reject);
|
||||
};
|
||||
|
||||
worker.addEventListener('message', handleMessage);
|
||||
worker.addEventListener('error', handleError);
|
||||
|
||||
worker.postMessage({
|
||||
type: 'detectIrregularSprites',
|
||||
imageData,
|
||||
sensitivity: sensitivity.value,
|
||||
maxSize: 2048, // Limit processing size for performance
|
||||
});
|
||||
try {
|
||||
worker.postMessage({
|
||||
type: 'detectIrregularSprites',
|
||||
imageData,
|
||||
sensitivity: sensitivity.value,
|
||||
maxSize: 2048, // Limit processing size for performance
|
||||
});
|
||||
} catch (error) {
|
||||
clearTimeout(timeout);
|
||||
console.error('Failed to post message to worker:', error);
|
||||
// Fallback to auto detection
|
||||
autoDetectSprites(img).then(resolve).catch(reject);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user