Spaces:
Running
Running
File size: 1,799 Bytes
01488bc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | import * as THREE from "three";
import { useFBO } from "@react-three/drei";
import { useEffect, useMemo } from "react";
import { useDoubleFBO } from "../hooks/useDoubleFBO";
import { DEFAULT_CONFIG } from "../constant";
export const useFBOs = () => {
const density = useDoubleFBO(DEFAULT_CONFIG.dyeRes, DEFAULT_CONFIG.dyeRes, {
type: THREE.HalfFloatType,
format: THREE.RGBAFormat,
minFilter: THREE.LinearFilter,
depthBuffer: false,
});
const velocity = useDoubleFBO(DEFAULT_CONFIG.simRes, DEFAULT_CONFIG.simRes, {
type: THREE.HalfFloatType,
format: THREE.RGFormat,
minFilter: THREE.LinearFilter,
depthBuffer: false,
});
const pressure = useDoubleFBO(DEFAULT_CONFIG.simRes, DEFAULT_CONFIG.simRes, {
type: THREE.HalfFloatType,
format: THREE.RedFormat,
minFilter: THREE.NearestFilter,
depthBuffer: false,
});
const divergence = useFBO(DEFAULT_CONFIG.simRes, DEFAULT_CONFIG.simRes, {
type: THREE.HalfFloatType,
format: THREE.RedFormat,
minFilter: THREE.NearestFilter,
depthBuffer: false,
});
const curl = useFBO(DEFAULT_CONFIG.simRes, DEFAULT_CONFIG.simRes, {
type: THREE.HalfFloatType,
format: THREE.RedFormat,
minFilter: THREE.NearestFilter,
depthBuffer: false,
});
const FBOs = useMemo(() => {
return {
density,
velocity,
pressure,
divergence,
curl,
};
}, [curl, density, divergence, pressure, velocity]);
useEffect(() => {
for (const FBO of Object.values(FBOs)) {
if ("write" in FBO) {
FBO.setGenerateMipmaps(false);
} else {
FBO.texture.generateMipmaps = false;
}
}
return () => {
for (const FBO of Object.values(FBOs)) {
FBO.dispose();
}
};
}, [FBOs]);
return FBOs;
};
|