Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 029a2c2

Browse files
Merge pull request #29 from takuma-hmng8/dev
add useCopyTexture
2 parents 068819e + 8732440 commit 029a2c2

File tree

14 files changed

+449
-299
lines changed

14 files changed

+449
-299
lines changed

‎README.md‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,18 @@ const [params, setParams] = useParams<HooksParams>;
225225
}
226226
```
227227

228+
## useCopyTexture
229+
230+
Generate an FBO array to copy the texture.
231+
232+
```tsx
233+
const [renderTargets, copyTexture] = useCopyTexture(
234+
{ scene, camera, size, dpr },
235+
length
236+
);
237+
copyTexture(gl, index); // return texture
238+
```
239+
228240
# Other Hooks
229241

230242
## useDomSyncer
@@ -254,6 +266,11 @@ useLayoutEffect(() => {
254266
});
255267
}, [state]);
256268

269+
const [, copyTexture] = useCopyTexture(
270+
{ scene: fxTextureObj.scene, camera: fxTextureObj.camera, size, dpr },
271+
domArr.current.length
272+
);
273+
257274
useFrame((props) => {
258275
const syncedTexture = updateDomSyncer(props, {
259276
texture: [...Array(domArr.current.length)].map((_, i) => {
@@ -262,6 +279,7 @@ useFrame((props) => {
262279
map: someFx,
263280
texture0: someTexture,
264281
});
282+
return copyTexture(props.gl, i);
265283
}
266284
}),
267285
resolution: [...Array(domArr.current.length)].map(() =>

‎app/domSyncer/DomSyncer.tsx‎

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import * as THREE from "three";
2-
import { useLayoutEffect, useRef } from "react";
2+
import { useEffect,useLayoutEffect, useRef } from "react";
33
import { useFrame, extend, useThree, useLoader } from "@react-three/fiber";
44
import { FxMaterial, FxMaterialProps } from "@/utils/fxMaterial";
55
import {
66
useDomSyncer,
77
useWave,
88
useFxTexture,
9+
useCopyTexture,
910
} from "@/packages/use-shader-fx/src";
1011
import { WaveParams } from "@/packages/use-shader-fx/src/hooks/useWave";
1112
import 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
}),

‎app/domSyncer/page.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export default function Page() {
5252
key={i}
5353
style={{
5454
width: "calc(50% - 40px)",
55-
height: "120vh",
55+
height: "80vh",
5656
zIndex: 100,
5757
borderRadius: `${i * 50}px`,
5858
}}></div>

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /