UNPKG

@react-three/drei

Version:

useful add-ons for react-three-fiber

56 lines (53 loc) 1.48 kB
import * as THREE from 'three'; import * as React from 'react'; import { useThree, createPortal, useFrame } from '@react-three/fiber'; function RenderHud({ defaultScene, defaultCamera, renderPriority = 1 }) { const { gl, scene, camera } = useThree(); let oldCLear; useFrame(() => { oldCLear = gl.autoClear; if (renderPriority === 1) { // Clear scene and render the default scene gl.autoClear = true; gl.render(defaultScene, defaultCamera); } // Disable cleaning and render the portal with its own camera gl.autoClear = false; gl.clearDepth(); gl.render(scene, camera); // Restore default gl.autoClear = oldCLear; }, renderPriority); // Without an element that receives pointer events state.pointer will always be 0/0 return /*#__PURE__*/React.createElement("group", { onPointerOver: () => null }); } function Hud({ children, renderPriority = 1 }) { const { scene: defaultScene, camera: defaultCamera } = useThree(); const [hudScene] = React.useState(() => new THREE.Scene()); return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(/*#__PURE__*/React.createElement(React.Fragment, null, children, /*#__PURE__*/React.createElement(RenderHud, { defaultScene: defaultScene, defaultCamera: defaultCamera, renderPriority: renderPriority })), hudScene, { events: { priority: renderPriority + 1 } })); } export { Hud };