import type { IRenderBuffer , RboOpts } from "./api/buffers.js" ; import { error } from "./error.js" ; export class RBO implements IRenderBuffer { gl : WebGLRenderingContext ; buffer : WebGLRenderbuffer ; format ! : number ; width ! : number ; height ! : number ; constructor ( gl , opts ) { this . gl = gl ; this . buffer = gl . createRenderbuffer ( ) || error ( "error creating RBO" ) ; this . configure ( opts ) ; } bind ( ) { this . gl . bindRenderbuffer ( this . gl . RENDERBUFFER , this . buffer ) ; return true ; } unbind ( ) { this . gl . bindRenderbuffer ( this . gl . RENDERBUFFER , null ) ; return true ; } release ( ) { this . gl . deleteRenderbuffer ( this . buffer ) ; delete ( < any > this ) . buffer ; return true ; } configure ( opts , unbind = true ) { const gl = this . gl ; this . bind ( ) ; this . format = opts . format || gl . DEPTH_COMPONENT16 ; this . width = opts . width ; this . height = opts . height ; gl . renderbufferStorage ( gl . RENDERBUFFER , opts . format || gl . DEPTH_COMPONENT16 , opts . width , opts . height ) ; return unbind ? this . unbind ( ) : true ; } } export const defRBO = ( gl , opts ) => new RBO ( gl , opts ) ;