11import { createRenderTarget } from "../core/renderTarget" ;
22import { findUniformName } from "../internal/findName" ;
3+ import { useHook } from "../internal/useHook" ;
34import type { CompositeEffectPass , EffectPass , RenderPass } from "../types" ;
45import { floatTargetConfig } from "./useEffectPass" ;
56
@@ -18,6 +19,9 @@ export function useCompositor(
1819 // add the ability to render to floating-point buffers
1920 gl . getExtension ( "EXT_color_buffer_float" ) ;
2021
22+ const [ onBeforeRender , executeBeforeRenderCallbacks ] = useHook ( ) ;
23+ const [ onAfterRender , executeAfterRenderCallbacks ] = useHook ( ) ;
24+
2125 if ( effects . length > 0 && renderPass . target === null ) {
2226 renderPass . setTarget ( createRenderTarget ( gl , floatTargetConfig ) ) ;
2327 }
@@ -47,9 +51,11 @@ export function useCompositor(
4751 const allPasses = [ renderPass , ...effects ] ;
4852
4953 function render ( ) {
54+ executeBeforeRenderCallbacks ( ) ;
5055 for ( const pass of allPasses ) {
5156 pass . render ( ) ;
5257 }
58+ executeAfterRenderCallbacks ( ) ;
5359 }
5460
5561 function setSize ( size : { width : number ; height : number } ) {
@@ -58,7 +64,7 @@ export function useCompositor(
5864 }
5965 }
6066
61- return { render, setSize, allPasses } ;
67+ return { render, setSize, allPasses, onBeforeRender , onAfterRender } ;
6268}
6369
6470function isCompositeEffectPass (
0 commit comments