react-native-filament-buildcores
Version:
A real-time physically based 3D rendering engine for React Native
67 lines (65 loc) • 2.42 kB
JavaScript
import { useEffect } from 'react';
import { optionsToJSI } from '../types';
import { useFilamentContext } from '../hooks/useFilamentContext';
import { makeAmbientOcclusionHostObject } from '../utilities/makeAmbientOcclusionHostObject';
import { makeBloomHostObject } from '../utilities/makeBloomHostObject';
import { makeDynamicResolutionHostObject } from '../utilities/makeDynamicResolutionHostObject';
/**
* Takes configurations as props and applies them using the imperative API.
* Needs to have a valid `FilamentScene` in the tree.
*
* @private
*/
export function Configurator({
rendererProps,
viewProps,
children
}) {
const {
view,
renderer
} = useFilamentContext();
// Apply view configs
const {
ambientOcclusionOptions,
antiAliasing,
bloomOptions,
dithering,
dynamicResolutionOptions,
postProcessing,
screenSpaceRefraction,
shadowing,
temporalAntiAliasingOptions
} = viewProps;
useEffect(() => {
if (ambientOcclusionOptions != null) {
const options = makeAmbientOcclusionHostObject(view, ambientOcclusionOptions);
view.setAmbientOcclusionOptions(options);
}
if (bloomOptions != null) {
const options = makeBloomHostObject(view, bloomOptions);
view.setBloomOptions(options);
}
if (dynamicResolutionOptions != null) {
const options = makeDynamicResolutionHostObject(view, dynamicResolutionOptions);
view.setDynamicResolutionOptions(options);
}
if (antiAliasing != null) view.antiAliasing = antiAliasing;
if (dithering != null) view.dithering = dithering;
if (postProcessing != null) view.postProcessing = postProcessing;
if (screenSpaceRefraction != null) view.screenSpaceRefraction = screenSpaceRefraction;
if (shadowing != null) view.shadowing = shadowing;
if (temporalAntiAliasingOptions != null) view.temporalAntiAliasingOptions = optionsToJSI(temporalAntiAliasingOptions);
}, [view, ambientOcclusionOptions, antiAliasing, bloomOptions, dithering, dynamicResolutionOptions, postProcessing, screenSpaceRefraction, shadowing, temporalAntiAliasingOptions]);
// Apply renderer configs
const {
frameRateOptions
} = rendererProps ?? {};
useEffect(() => {
if (frameRateOptions != null) {
renderer.setFrameRateOptions(frameRateOptions);
}
}, [renderer, frameRateOptions]);
return children;
}
//# sourceMappingURL=Configurator.js.map