// Generated by scripts/generate.mjs from bindings/api.mjs. Do not edit.

///|
#external
pub type WebGLRenderer

///|
pub extern "js" fn WebGLRenderer::dom_element(self : WebGLRenderer) -> Canvas =
  #| (self) => self.domElement

///|
pub extern "js" fn WebGLRenderer::render(
  self : WebGLRenderer,
  scene : Scene,
  camera : Camera,
) -> Unit =
  #| (self, scene, camera) => self.render(scene, camera)

///|
pub extern "js" fn WebGLRenderer::set_pixel_ratio(
  self : WebGLRenderer,
  ratio : Double,
) -> Unit =
  #| (self, ratio) => self.setPixelRatio(ratio)

///|
pub extern "js" fn WebGLRenderer::get_pixel_ratio(
  self : WebGLRenderer,
) -> Double =
  #| (self) => self.getPixelRatio()

///|
pub extern "js" fn WebGLRenderer::get_size(
  self : WebGLRenderer,
  target : Vector2,
) -> Vector2 =
  #| (self, target) => self.getSize(target)

///|
pub extern "js" fn WebGLRenderer::set_clear_color(
  self : WebGLRenderer,
  color : Color,
  alpha : Double,
) -> Unit =
  #| (self, color, alpha) => self.setClearColor(color, alpha)

///|
pub extern "js" fn WebGLRenderer::clear(
  self : WebGLRenderer,
  color : Bool,
  depth : Bool,
  stencil : Bool,
) -> Unit =
  #| (self, color, depth, stencil) => self.clear(color, depth, stencil)

///|
pub extern "js" fn WebGLRenderer::auto_clear(self : WebGLRenderer) -> Bool =
  #| (self) => self.autoClear

///|
pub extern "js" fn WebGLRenderer::set_auto_clear(
  self : WebGLRenderer,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.autoClear = value; }

///|
extern "js" fn WebGLRenderer::ffi_set_render_target(
  self : WebGLRenderer,
  value : Nullable[WebGLRenderTarget],
) -> Unit =
  #| (self, value) => { self.setRenderTarget(value); }

///|
pub fn WebGLRenderer::set_render_target(
  self : WebGLRenderer,
  value : WebGLRenderTarget?,
) -> Unit {
  self.ffi_set_render_target(Nullable::from_option(value))
}

///|
pub extern "js" fn WebGLRenderer::read_render_target_pixels(
  self : WebGLRenderer,
  target : WebGLRenderTarget,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
  buffer : Bytes,
) -> Unit =
  #| (self, target, x, y, width, height, buffer) => self.readRenderTargetPixels(target, x, y, width, height, buffer)

///|
pub extern "js" fn WebGLRenderer::set_animation_loop(
  self : WebGLRenderer,
  callback : (Double) -> Unit,
) -> Unit =
  #| (self, callback) => self.setAnimationLoop(callback)

///|
pub extern "js" fn WebGLRenderer::stop_animation_loop(
  self : WebGLRenderer,
) -> Unit =
  #| (self) => { self.setAnimationLoop(null); }

///|
pub extern "js" fn WebGLRenderer::set_shadows_enabled(
  self : WebGLRenderer,
  enabled : Bool,
) -> Unit =
  #| (self, enabled) => { self.shadowMap.enabled = enabled; }

///|
pub extern "js" fn WebGLRenderer::tone_mapping(
  self : WebGLRenderer,
) -> ToneMapping =
  #| (self) => self.toneMapping

///|
pub extern "js" fn WebGLRenderer::set_tone_mapping(
  self : WebGLRenderer,
  value : ToneMapping,
) -> Unit =
  #| (self, value) => { self.toneMapping = value; }

///|
pub extern "js" fn WebGLRenderer::tone_mapping_exposure(
  self : WebGLRenderer,
) -> Double =
  #| (self) => self.toneMappingExposure

///|
pub extern "js" fn WebGLRenderer::set_tone_mapping_exposure(
  self : WebGLRenderer,
  value : Double,
) -> Unit =
  #| (self, value) => { self.toneMappingExposure = value; }

///|
pub extern "js" fn WebGLRenderer::dispose(self : WebGLRenderer) -> Unit =
  #| (self) => self.dispose()

///|
pub extern "js" fn WebGLRenderer::force_context_loss(
  self : WebGLRenderer,
) -> Unit =
  #| (self) => self.forceContextLoss()

///|
pub extern "js" fn WebGLRenderer::set_viewport(
  self : WebGLRenderer,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit =
  #| (self, x, y, width, height) => self.setViewport(x, y, width, height)

///|
pub extern "js" fn WebGLRenderer::get_viewport(
  self : WebGLRenderer,
  target : Vector4,
) -> Vector4 =
  #| (self, target) => self.getViewport(target)

///|
pub extern "js" fn WebGLRenderer::set_scissor(
  self : WebGLRenderer,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit =
  #| (self, x, y, width, height) => self.setScissor(x, y, width, height)

///|
pub extern "js" fn WebGLRenderer::get_scissor(
  self : WebGLRenderer,
  target : Vector4,
) -> Vector4 =
  #| (self, target) => self.getScissor(target)

///|
pub extern "js" fn WebGLRenderer::set_scissor_test(
  self : WebGLRenderer,
  enabled : Bool,
) -> Unit =
  #| (self, enabled) => self.setScissorTest(enabled)

///|
pub extern "js" fn WebGLRenderer::get_scissor_test(
  self : WebGLRenderer,
) -> Bool =
  #| (self) => self.getScissorTest()

///|
pub extern "js" fn WebGLRenderer::get_drawing_buffer_size(
  self : WebGLRenderer,
  target : Vector2,
) -> Vector2 =
  #| (self, target) => self.getDrawingBufferSize(target)

///|
pub extern "js" fn WebGLRenderer::info(self : WebGLRenderer) -> RendererInfo =
  #| (self) => self.info

///|
pub extern "js" fn WebGLRenderer::capabilities(
  self : WebGLRenderer,
) -> RendererCapabilities =
  #| (self) => self.capabilities

///|
pub extern "js" fn WebGLRenderer::local_clipping_enabled(
  self : WebGLRenderer,
) -> Bool =
  #| (self) => self.localClippingEnabled

///|
pub extern "js" fn WebGLRenderer::set_local_clipping_enabled(
  self : WebGLRenderer,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.localClippingEnabled = value; }

///|
pub extern "js" fn WebGLRenderer::set_clipping_planes(
  self : WebGLRenderer,
  planes : FixedArray[Plane],
) -> Unit =
  #| (self, planes) => { self.clippingPlanes = planes.slice(); }

///|
pub extern "js" fn WebGLRenderer::set_shadow_map_type(
  self : WebGLRenderer,
  value : ShadowMapType,
) -> Unit =
  #| (self, value) => { self.shadowMap.type = value; }

///|
pub extern "js" fn WebGLRenderer::compile(
  self : WebGLRenderer,
  scene : Scene,
  camera : Camera,
) -> Unit =
  #| (self, scene, camera) => self.compile(scene, camera)

///|
pub extern "js" fn WebGLRenderer::set_cube_render_target(
  self : WebGLRenderer,
  target : WebGLCubeRenderTarget,
  face : Int,
  mip_level : Int,
) -> Unit =
  #| (self, target, face, mip_level) => self.setRenderTarget(target, face, mip_level)

///|
pub extern "js" fn WebGLRenderer::copy_framebuffer_to_texture(
  self : WebGLRenderer,
  texture : Texture,
  position : Vector2,
  level : Int,
) -> Unit =
  #| (self, texture, position, level) => self.copyFramebufferToTexture(texture, position, level)

///|
pub extern "js" fn WebGLRenderer::copy_texture_2d(
  self : WebGLRenderer,
  source : Texture,
  target : Texture,
  region : Box2,
  position : Vector2,
  source_level : Int,
  target_level : Int,
) -> Unit =
  #| (self, source, target, region, position, source_level, target_level) => self.copyTextureToTexture(source, target, region, position, source_level, target_level)

///|
pub extern "js" fn WebGLRenderer::copy_texture_3d(
  self : WebGLRenderer,
  source : Texture,
  target : Texture,
  region : Box3,
  position : Vector3,
  source_level : Int,
  target_level : Int,
) -> Unit =
  #| (self, source, target, region, position, source_level, target_level) => self.copyTextureToTexture(source, target, region, position, source_level, target_level)

///|
pub extern "js" fn WebGLRenderer::copy_texture(
  self : WebGLRenderer,
  source : Texture,
  target : Texture,
) -> Unit =
  #| (self, source, target) => self.copyTextureToTexture(source,target)

///|
pub extern "js" fn WebGLRenderer::init_render_target(
  self : WebGLRenderer,
  target : WebGLRenderTarget,
) -> Unit =
  #| (self, target) => self.initRenderTarget(target)

///|
pub extern "js" fn WebGLRenderer::init_texture(
  self : WebGLRenderer,
  texture : Texture,
) -> Unit =
  #| (self, texture) => self.initTexture(texture)

///|
pub extern "js" fn WebGLRenderer::reset_state(self : WebGLRenderer) -> Unit =
  #| (self) => self.resetState()

///|
extern "js" fn WebGLRenderer::ffi_render_target(
  self : WebGLRenderer,
) -> Nullable[WebGLRenderTarget] =
  #| (self) => self.getRenderTarget()

///|
pub fn WebGLRenderer::render_target(self : WebGLRenderer) -> WebGLRenderTarget? {
  self.ffi_render_target().to_option()
}

///|
pub extern "js" fn WebGLRenderer::active_mipmap_level(
  self : WebGLRenderer,
) -> Int =
  #| (self) => self.getActiveMipmapLevel()

///|
pub extern "js" fn WebGLRenderer::active_cube_face(self : WebGLRenderer) -> Int =
  #| (self) => self.getActiveCubeFace()

///|
pub extern "js" fn WebGLRenderer::set_3d_render_target(
  self : WebGLRenderer,
  target : WebGL3DRenderTarget,
  layer : Int,
  mip_level : Int,
) -> Unit =
  #| (self, target, layer, mip_level) => self.setRenderTarget(target, layer, mip_level)

///|
pub extern "js" fn WebGLRenderer::set_array_render_target(
  self : WebGLRenderer,
  target : WebGLArrayRenderTarget,
  layer : Int,
  mip_level : Int,
) -> Unit =
  #| (self, target, layer, mip_level) => self.setRenderTarget(target, layer, mip_level)