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

///|
#external
pub type ShaderMaterial

///|
pub fn ShaderMaterial::as_material(self : ShaderMaterial) -> Material = "%identity"

///|
pub extern "js" fn ShaderMaterial::uniforms(self : ShaderMaterial) -> Uniforms =
  #| (self) => self.uniforms

///|
pub extern "js" fn ShaderMaterial::vertex_shader(
  self : ShaderMaterial,
) -> String =
  #| (self) => self.vertexShader

///|
pub extern "js" fn ShaderMaterial::set_vertex_shader(
  self : ShaderMaterial,
  value : String,
) -> Unit =
  #| (self, value) => { self.vertexShader = value; }

///|
pub extern "js" fn ShaderMaterial::fragment_shader(
  self : ShaderMaterial,
) -> String =
  #| (self) => self.fragmentShader

///|
pub extern "js" fn ShaderMaterial::set_fragment_shader(
  self : ShaderMaterial,
  value : String,
) -> Unit =
  #| (self, value) => { self.fragmentShader = value; }

///|
pub extern "js" fn ShaderMaterial::wireframe(self : ShaderMaterial) -> Bool =
  #| (self) => self.wireframe

///|
pub extern "js" fn ShaderMaterial::set_wireframe(
  self : ShaderMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.wireframe = value; }

///|
extern "js" fn ShaderMaterial::ffi_glsl_version(
  self : ShaderMaterial,
) -> Nullable[GLSLVersion] =
  #| (self) => self.glslVersion === "300 es" ? 300 : self.glslVersion === "100" ? 100 : null

///|
pub fn ShaderMaterial::glsl_version(self : ShaderMaterial) -> GLSLVersion? {
  self.ffi_glsl_version().to_option()
}

///|
extern "js" fn ShaderMaterial::ffi_set_glsl_version(
  self : ShaderMaterial,
  value : Nullable[GLSLVersion],
) -> Unit =
  #| (self, value) => { self.glslVersion = value == null ? null : value === 300 ? "300 es" : "100"; }

///|
pub fn ShaderMaterial::set_glsl_version(
  self : ShaderMaterial,
  value : GLSLVersion?,
) -> Unit {
  self.ffi_set_glsl_version(Nullable::from_option(value))
}

///|
pub extern "js" fn ShaderMaterial::linewidth(self : ShaderMaterial) -> Double =
  #| (self) => self.linewidth

///|
pub extern "js" fn ShaderMaterial::set_linewidth(
  self : ShaderMaterial,
  value : Double,
) -> Unit =
  #| (self, value) => { self.linewidth = value; }

///|
pub extern "js" fn ShaderMaterial::wireframe_linewidth(
  self : ShaderMaterial,
) -> Double =
  #| (self) => self.wireframeLinewidth

///|
pub extern "js" fn ShaderMaterial::set_wireframe_linewidth(
  self : ShaderMaterial,
  value : Double,
) -> Unit =
  #| (self, value) => { self.wireframeLinewidth = value; }

///|
pub extern "js" fn ShaderMaterial::fog(self : ShaderMaterial) -> Bool =
  #| (self) => self.fog

///|
pub extern "js" fn ShaderMaterial::set_fog(
  self : ShaderMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.fog = value; }

///|
pub extern "js" fn ShaderMaterial::lights(self : ShaderMaterial) -> Bool =
  #| (self) => self.lights

///|
pub extern "js" fn ShaderMaterial::set_lights(
  self : ShaderMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.lights = value; }

///|
pub extern "js" fn ShaderMaterial::clipping(self : ShaderMaterial) -> Bool =
  #| (self) => self.clipping

///|
pub extern "js" fn ShaderMaterial::set_clipping(
  self : ShaderMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.clipping = value; }

///|
pub extern "js" fn ShaderMaterial::uniforms_need_update(
  self : ShaderMaterial,
) -> Bool =
  #| (self) => self.uniformsNeedUpdate

///|
pub extern "js" fn ShaderMaterial::set_uniforms_need_update(
  self : ShaderMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.uniformsNeedUpdate = value; }

///|
pub extern "js" fn ShaderMaterial::clip_cull_distance(
  self : ShaderMaterial,
) -> Bool =
  #| (self) => self.extensions.clipCullDistance

///|
pub extern "js" fn ShaderMaterial::set_clip_cull_distance(
  self : ShaderMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.extensions.clipCullDistance = value; }

///|
pub extern "js" fn ShaderMaterial::multi_draw(self : ShaderMaterial) -> Bool =
  #| (self) => self.extensions.multiDraw

///|
pub extern "js" fn ShaderMaterial::set_multi_draw(
  self : ShaderMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.extensions.multiDraw = value; }

///|
extern "js" fn ShaderMaterial::ffi_index0_attribute_name(
  self : ShaderMaterial,
) -> Nullable[String] =
  #| (self) => self.index0AttributeName

///|
pub fn ShaderMaterial::index0_attribute_name(self : ShaderMaterial) -> String? {
  self.ffi_index0_attribute_name().to_option()
}

///|
extern "js" fn ShaderMaterial::ffi_set_index0_attribute_name(
  self : ShaderMaterial,
  value : Nullable[String],
) -> Unit =
  #| (self, value) => { self.index0AttributeName = value ?? undefined; }

///|
pub fn ShaderMaterial::set_index0_attribute_name(
  self : ShaderMaterial,
  value : String?,
) -> Unit {
  self.ffi_set_index0_attribute_name(Nullable::from_option(value))
}

///|
pub extern "js" fn ShaderMaterial::uniforms_groups(
  self : ShaderMaterial,
) -> FixedArray[UniformsGroup] =
  #| (self) => self.uniformsGroups.slice()

///|
pub extern "js" fn ShaderMaterial::set_uniforms_groups(
  self : ShaderMaterial,
  groups : FixedArray[UniformsGroup],
) -> Unit =
  #| (self, groups) => { self.uniformsGroups=groups.slice();self.needsUpdate=true; }

///|
pub extern "js" fn ShaderMaterial::id(self : ShaderMaterial) -> Int =
  #| (self) => self.id

///|
pub extern "js" fn ShaderMaterial::kind(self : ShaderMaterial) -> String =
  #| (self) => self.type

///|
pub extern "js" fn ShaderMaterial::name(self : ShaderMaterial) -> String =
  #| (self) => self.name

///|
pub extern "js" fn ShaderMaterial::set_name(
  self : ShaderMaterial,
  value : String,
) -> Unit =
  #| (self, value) => { self.name = value; }

///|
pub extern "js" fn ShaderMaterial::opacity(self : ShaderMaterial) -> Double =
  #| (self) => self.opacity

///|
pub extern "js" fn ShaderMaterial::set_opacity(
  self : ShaderMaterial,
  value : Double,
) -> Unit =
  #| (self, value) => { self.opacity = value; }

///|
pub extern "js" fn ShaderMaterial::transparent(self : ShaderMaterial) -> Bool =
  #| (self) => self.transparent

///|
pub extern "js" fn ShaderMaterial::set_transparent(
  self : ShaderMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.transparent = value; }

///|
pub extern "js" fn ShaderMaterial::visible(self : ShaderMaterial) -> Bool =
  #| (self) => self.visible

///|
pub extern "js" fn ShaderMaterial::set_visible(
  self : ShaderMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.visible = value; }

///|
pub extern "js" fn ShaderMaterial::depth_test(self : ShaderMaterial) -> Bool =
  #| (self) => self.depthTest

///|
pub extern "js" fn ShaderMaterial::set_depth_test(
  self : ShaderMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.depthTest = value; }

///|
pub extern "js" fn ShaderMaterial::depth_write(self : ShaderMaterial) -> Bool =
  #| (self) => self.depthWrite

///|
pub extern "js" fn ShaderMaterial::set_depth_write(
  self : ShaderMaterial,
  value : Bool,
) -> Unit =
  #| (self, value) => { self.depthWrite = value; }

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

///|
pub extern "js" fn ShaderMaterial::mark_needs_update(
  self : ShaderMaterial,
) -> Unit =
  #| (self) => { self.needsUpdate = true; }