From 938aa721cf7f51899046acc9cd1871f08cb139f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Wed, 3 Apr 2024 14:22:24 +0200 Subject: [PATCH] fix: envmap new props + build snapshot --- README.md | 8 +- src/core/Environment.tsx | 101 ++++++++++++------ test/e2e/App.jsx | 10 +- ...pshot-should-match-previous-one-1-snap.png | Bin 1725 -> 30033 bytes 4 files changed, 78 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index eab305208..cc4ae65a1 100644 --- a/README.md +++ b/README.md @@ -4722,9 +4722,11 @@ Sets up a global cubemap, which affects the default `scene.environment`, and opt ```jsx @@ -35,57 +41,78 @@ function setEnvProps( scene: Scene | React.MutableRefObject | undefined, defaultScene: Scene, texture: Texture, - blur: number = 0, - intensity: number = 1, - rotation: Vector3 = [0, 0, 0] + sceneProps: Partial = {} ) { + // defaults + sceneProps = { + backgroundBlurriness: sceneProps.blur ?? 0, + backgroundIntensity: 1, + backgroundRotation: [0, 0, 0], + environmentIntensity: 1, + environmentRotation: [0, 0, 0], + ...sceneProps, + } + const target = resolveScene(scene || defaultScene) const oldbg = target.background const oldenv = target.environment - // @ts-ignore - const oldBlur = target.backgroundBlurriness || 0 - // @ts-ignore - const oldIntensity = target.environmentIntensity || 1 - // @ts-ignore - const oldRotation = target.backgroundBlurriness !== undefined ? target.backgroundRotation.copy() : 0 - if (background !== 'only') target.environment = texture - if (background) { - target.background = texture + const oldSceneProps = { + // @ts-ignore + backgroundBlurriness: target.backgroundBlurriness, // @ts-ignore - if (target.backgroundBlurriness !== undefined) target.backgroundBlurriness = blur + backgroundIntensity: target.backgroundIntensity, // @ts-ignore - if (target.environmentIntensity !== undefined) target.environmentIntensity = intensity + backgroundRotation: target.backgroundRotation?.clone?.() ?? [0, 0, 0], // @ts-ignore - if (target.backgroundRotation !== undefined) applyProps(target, { backgroundRotation: rotation }) + environmentIntensity: target.environmentIntensity, + // @ts-ignore + environmentRotation: target.environmentRotation?.clone?.() ?? [0, 0, 0], + } + if (background !== 'only') target.environment = texture + if (background) { + target.background = texture + applyProps(target as any, sceneProps) } return () => { if (background !== 'only') target.environment = oldenv if (background) { target.background = oldbg - // @ts-ignore - if (target.backgroundBlurriness !== undefined) target.backgroundBlurriness = oldBlur - // @ts-ignore - if (target.environmentIntensity !== undefined) target.environmentIntensity = oldIntensity - // @ts-ignore - if (target.backgroundRotation !== undefined) applyProps(target, { backgroundRotation: oldRotation }) + applyProps(target as any, oldSceneProps) } } } -export function EnvironmentMap({ scene, background = false, blur, rotation, intensity, map }: EnvironmentProps) { +export function EnvironmentMap({ scene, background = false, map, ...config }: EnvironmentProps) { const defaultScene = useThree((state) => state.scene) React.useLayoutEffect(() => { - if (map) return setEnvProps(background, scene, defaultScene, map, blur, intensity, rotation) - }, [defaultScene, scene, map, background, blur, rotation]) + if (map) return setEnvProps(background, scene, defaultScene, map, config) + }) return null } -export function EnvironmentCube({ background = false, scene, blur, rotation, intensity, ...rest }: EnvironmentProps) { +export function EnvironmentCube({ + background = false, + scene, + blur, + backgroundBlurriness, + backgroundIntensity, + backgroundRotation, + environmentIntensity, + environmentRotation, + ...rest +}: EnvironmentProps) { const texture = useEnvironment(rest) const defaultScene = useThree((state) => state.scene) React.useLayoutEffect(() => { - return setEnvProps(background, scene, defaultScene, texture, blur, intensity, rotation) - }, [texture, background, scene, defaultScene, blur, rotation]) + return setEnvProps(background, scene, defaultScene, texture, { + blur, + backgroundBlurriness, + backgroundIntensity, + backgroundRotation, + environmentIntensity, + environmentRotation, + }) + }) return null } @@ -98,8 +125,11 @@ export function EnvironmentPortal({ map, background = false, blur, - intensity, - rotation, + backgroundBlurriness, + backgroundIntensity, + backgroundRotation, + environmentIntensity, + environmentRotation, scene, files, path, @@ -118,7 +148,14 @@ export function EnvironmentPortal({ React.useLayoutEffect(() => { if (frames === 1) camera.current.update(gl, virtualScene) - return setEnvProps(background, scene, defaultScene, fbo.texture, blur, intensity, rotation) + return setEnvProps(background, scene, defaultScene, fbo.texture, { + blur, + backgroundBlurriness, + backgroundIntensity, + backgroundRotation, + environmentIntensity, + environmentRotation, + }) }, [children, virtualScene, fbo.texture, scene, defaultScene, background, frames, gl]) let count = 1 diff --git a/test/e2e/App.jsx b/test/e2e/App.jsx index 5a5d842cc..329336483 100644 --- a/test/e2e/App.jsx +++ b/test/e2e/App.jsx @@ -2,7 +2,7 @@ import { Suspense, useEffect } from 'react' import { Canvas } from '@react-three/fiber' -import { Box, Environment, CameraControls } from '@react-three/drei' // eslint-disable-line import/no-unresolved +import { Sphere, Environment, CameraControls } from '@react-three/drei' // eslint-disable-line import/no-unresolved function App() { return ( @@ -21,12 +21,10 @@ function Scene() { return ( <> - - - - + + + - ) diff --git a/test/e2e/__image_snapshots__/snapshot-test-js-snapshot-should-match-previous-one-1-snap.png b/test/e2e/__image_snapshots__/snapshot-test-js-snapshot-should-match-previous-one-1-snap.png index 54617209a3c859efcd7bf2a9401b98df00de39bb..6243f912f1955c0c75dc9545f71d75cfab939f65 100644 GIT binary patch literal 30033 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 M07*qoM6N<$g6AH8<^TWy literal 1725 zcmcgt`(Ki06emCA1u)P>P(+7)GKJ-})sm%|p(Sm34KI8B7xu$`dA{d7pL5RhJl}JkbF!kNLhTT1 z5HJ|bE<9}iK^SZW9+C^JEul4;s_cef#p#2g!7!qRx^j2GR>N8pq4Rk&|fG5PojNiP#IyrI;e?f>8` zW1_Rkv`b%W4EC?Y4}ix- zI*M@??K|N)14w-t!(mzB!K+TPtt#^pxj`*qUN+=Y8{n1Md?8Wh|3e7m2JV7;Z}C{( z8X?LAj$)=ofxQO70K~&i+aF>3#(nM#wzfX1u|Q|jQc6DWD&uQ0pxe}N>959NQXt3d zO!#OrT<8gPudd5L>i%leyY-DXm2wP?`K#RB>oRW9-yNShT(_cCV$pV-u zY!A10PYt`ntjucBt%DSG>VuIU-)!6T&}wP5>f=Iq!>S&U_wBpH_|3|+ z%6VialXjdZ7xhGIkyULI3upGdFdIi>E-cM;jT?uCwCJc?*J^`>-QkkDdamN+hOzgT zP`|&Up6%9ZbBx`6q|2-W=5#CLn>RIQCSSejtoe0SYOxDBlg(l0&KJ$~&svh=exVa) zc&%d%eM;fvo0q1IYEE+;yLZYINqn61I^GQny45$AF?D-Mf&=@vb7>CDX%?GI2Si#Lw;yiv!i$0TB)9!cw1A^$SS&r8_-PD z_5&^AsVj{Uh1|&Wg<2hO5i7BHwa36@MvVkGUsPU!>8M<>_rq;hJu}Co7yZ&&5#`LL zpQUU2*B32L+y(EI!Jm zv;JAy_g$)eQD2v0&?NA?t@1(NJf1WN%BbR>KlYJ8Idr4D70?S_`x%(yAsuwoHQLIa z$#WrxYo8jJW;UYVWynE7V<-os;~iN5JCoTG5VA*r>ckJYjulN7?KHBI7+Rt4x{w(@ zqiHaD;Qgp$)pEV0pEc#6V*b9Q?S+cyF1LAcx^s>kFTKFMuLJUFD-{ovetl*+<49Wb z)TGf+itOWKC53QrF>jgXLT=O2ODnefkxlaK$4GB+pK_$`8c;A!OAw%9otmlEA3VVz zoBrhax0EKUUMqt2CH1jxnfpEoX2~&EJ2S^Sypz}P*a{&JSXh5O8rsEO|;{hp* zQp{$7(BU-x8!VXIHIIXo8(r0Qq(dRn>ZDY+&Rp7&FBDM;RCP)JK#d{;xyBQ8!R@8c zg_|`Uu@z5NSE+2s?GZTz;0Q_PA0MIktr97SL{U>wwp7s~PA{yN61#Mhh8kKJxOzh zfaa&Hglr=n@N4{V6gnXvp3|;!f#M#wWxMlLCphdoq4rB*Ce@M@e9~YG^-sez1~zum k1KtYY*CRC+{~2c8F_g;>ct5@hgys<}oDj8N8cY-X3w0DA5&!@I