11import * as THREE from "three" ;
2- import { useLayoutEffect , useRef } from "react" ;
2+ import { useEffect , useLayoutEffect , useRef } from "react" ;
33import { useFrame , extend , useThree , useLoader } from "@react-three/fiber" ;
44import { FxMaterial , FxMaterialProps } from "@/utils/fxMaterial" ;
55import {
66 useDomSyncer ,
77 useWave ,
88 useFxTexture ,
9+ useCopyTexture ,
910} from "@/packages/use-shader-fx/src" ;
1011import { WaveParams } from "@/packages/use-shader-fx/src/hooks/useWave" ;
1112import gsap from "gsap" ;
@@ -36,7 +37,7 @@ export const DomSyncer = ({ state }: { state: number }) => {
3637 const size = useThree ( ( state ) => state . size ) ;
3738 const dpr = useThree ( ( state ) => state . viewport . dpr ) ;
3839
39- const [ updateFxTexture ] = useFxTexture ( { size, dpr } ) ;
40+ const [ updateFxTexture , , fxTextureObj ] = useFxTexture ( { size, dpr } ) ;
4041 const [ updateWave ] = useWave ( { size, dpr } ) ;
4142
4243 const [ updateDomSyncer , setDomSyncer , domSyncerObj ] = useDomSyncer (
@@ -48,6 +49,7 @@ export const DomSyncer = ({ state }: { state: number }) => {
4849
4950 useLayoutEffect ( ( ) => {
5051 CONFIG . waveArr = [ ] ;
52+
5153 if ( state === 0 ) {
5254 domArr . current = [ ...document . querySelectorAll ( ".item" ) ! ] ;
5355 } else {
@@ -83,11 +85,16 @@ export const DomSyncer = ({ state }: { state: number }) => {
8385 // eslint-disable-next-line react-hooks/exhaustive-deps
8486 } , [ state ] ) ;
8587
88+ const [ , copyTexture ] = useCopyTexture (
89+ { scene : fxTextureObj . scene , camera : fxTextureObj . camera , size, dpr } ,
90+ domArr . current . length
91+ ) ;
92+
8693 useFrame ( ( props ) => {
8794 const syncedTexture = updateDomSyncer ( props , {
8895 texture : [ ...Array ( domArr . current . length ) ] . map ( ( _ , i ) => {
8996 if ( domSyncerObj . isIntersecting ( i , false ) ) {
90- textureRef . current = updateFxTexture ( props , {
97+ updateFxTexture ( props , {
9198 padding : 0.0 ,
9299 map : updateWave ( props , {
93100 epicenter : CONFIG . waveArr [ i ] . epicenter ,
@@ -99,6 +106,8 @@ export const DomSyncer = ({ state }: { state: number }) => {
99106 textureResolution : CONFIG . textureResolution ,
100107 texture0 : momo ,
101108 } ) ;
109+
110+ return copyTexture ( props . gl , i ) ;
102111 }
103112 return textureRef . current ;
104113 } ) ,
0 commit comments