MCPcopy Create free account
hub / github.com/ColmapView/Colmapview.github.io / useSelectedImageTexture

Function useSelectedImageTexture

src/hooks/useFrustumTexture.ts:330–396  ·  view source on GitHub ↗
(
  imageFile: File | undefined,
  imageName: string,
  isSelected: boolean,
  delayMs = 0
)

Source from the content-addressed store, hash-verified

328 * @returns High-res texture if selected, null otherwise
329 */
330export function useSelectedImageTexture(
331 imageFile: File | undefined,
332 imageName: string,
333 isSelected: boolean,
334 delayMs = 0
335): THREE.Texture | null {
336 const resourceRef = useRef<SelectedImageTextureResource | null>(null);
337 resourceRef.current ??= createSelectedImageTextureResource({
338 getCachedTexture: getSelectedImageTexture,
339 clearTextureCache: clearSelectedImageTextureCache,
340 createBitmap: createImageBitmap,
341 createTextureFromBitmap: createSelectedImageTextureFromBitmap,
342 replaceTexture: replaceSelectedImageTexture,
343 });
344 const resource = resourceRef.current;
345 const snapshot = useSyncExternalStore(
346 resource.subscribe,
347 resource.getSnapshot,
348 resource.getSnapshot
349 );
350 const cacheKey = getSelectedImageTextureCacheKey(imageFile, imageName, isSelected);
351
352 useEffect(() => {
353 if (!isSelected || !imageFile) {
354 resource.sync({
355 imageFile,
356 imageName,
357 isSelected: false,
358 });
359 return;
360 }
361
362 if (delayMs <= 0 || getSelectedImageTexture(imageName)) {
363 resource.sync({
364 imageFile,
365 imageName,
366 isSelected,
367 });
368 return;
369 }
370
371 resource.sync({
372 imageFile: undefined,
373 imageName,
374 isSelected: false,
375 });
376
377 const timeoutId = setTimeout(() => {
378 resource.sync({
379 imageFile,
380 imageName,
381 isSelected,
382 });
383 }, delayMs);
384
385 return () => {
386 clearTimeout(timeoutId);
387 resource.sync({

Callers 2

Tested by

no test coverage detected