diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/mod.rs | 2 | ||||
-rw-r--r-- | components/script/dom/webglactiveinfo.rs | 49 | ||||
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 31 | ||||
-rw-r--r-- | components/script/dom/webglshaderprecisionformat.rs | 53 | ||||
-rw-r--r-- | components/script/dom/webidls/WebGLActiveInfo.webidl | 10 | ||||
-rw-r--r-- | components/script/dom/webidls/WebGLRenderingContext.webidl | 587 | ||||
-rw-r--r-- | components/script/dom/webidls/WebGLShaderPrecisionFormat.webidl | 10 |
7 files changed, 438 insertions, 304 deletions
diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs index c108186947a..813e7a09145 100644 --- a/components/script/dom/mod.rs +++ b/components/script/dom/mod.rs @@ -335,6 +335,8 @@ pub mod webgluniformlocation; pub mod webgltexture; pub mod webglframebuffer; pub mod webglrenderbuffer; +pub mod webglactiveinfo; +pub mod webglshaderprecisionformat; pub mod websocket; pub mod window; pub mod worker; diff --git a/components/script/dom/webglactiveinfo.rs b/components/script/dom/webglactiveinfo.rs new file mode 100644 index 00000000000..8edcb2bf806 --- /dev/null +++ b/components/script/dom/webglactiveinfo.rs @@ -0,0 +1,49 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// https://www.khronos.org/registry/webgl/specs/latest/1.0/webgl.idl +use dom::bindings::codegen::Bindings::WebGLActiveInfoBinding; +use dom::bindings::codegen::Bindings::WebGLActiveInfoBinding::WebGLActiveInfoMethods; +use dom::bindings::global::GlobalRef; +use dom::bindings::js::{Temporary, JSRef}; +use dom::bindings::utils::{Reflector,reflect_dom_object}; +use util::str::DOMString; + +#[dom_struct] +pub struct WebGLActiveInfo { + reflector_: Reflector, + size: i32, + // NOTE: `ty` stands for `type`, which is a reserved keyword + ty: u32, + name: String, +} + +impl WebGLActiveInfo { + fn new_inherited(size: i32, ty: u32, name: String) -> WebGLActiveInfo { + WebGLActiveInfo { + reflector_: Reflector::new(), + size: size, + ty: ty, + name: name, + } + } + + pub fn new(global: GlobalRef, size: i32, ty: u32, name: String) -> Temporary<WebGLActiveInfo> { + reflect_dom_object(box WebGLActiveInfo::new_inherited(size, ty, name), global, WebGLActiveInfoBinding::Wrap) + } +} + +impl<'a> WebGLActiveInfoMethods for JSRef<'a, WebGLActiveInfo> { + fn Size(self) -> i32 { + self.size + } + + fn Type(self) -> u32 { + self.ty + } + + fn Name(self) -> DOMString { + self.name.clone() + } +} diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 8e5e23cb3c6..1ce9561d90a 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -138,6 +138,37 @@ impl<'a> WebGLRenderingContextMethods for JSRef<'a, WebGLRenderingContext> { 0 as *mut JSObject } + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 + fn ActiveTexture(self, texture: u32) { + self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::ActiveTexture(texture))).unwrap(); + } + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 + fn BlendColor(self, r: f32, g: f32, b: f32, a: f32) { + self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::BlendColor(r, g, b, a))).unwrap(); + } + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 + fn BlendEquation(self, mode: u32) { + self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::BlendEquation(mode))).unwrap(); + } + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 + fn BlendEquationSeparate(self, mode_rgb: u32, mode_alpha: u32) { + self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::BlendEquationSeparate(mode_rgb, mode_alpha))).unwrap(); + } + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 + fn BlendFunc(self, src_factor: u32, dest_factor: u32) { + self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::BlendFunc(src_factor, dest_factor))).unwrap(); + } + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 + fn BlendFuncSeparate(self, src_rgb: u32, dest_rgb: u32, src_alpha: u32, dest_alpha: u32) { + self.renderer.send( + CanvasMsg::WebGL(CanvasWebGLMsg::BlendFuncSeparate(src_rgb, dest_rgb, src_alpha, dest_alpha))).unwrap(); + } + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 fn AttachShader(self, program: Option<JSRef<WebGLProgram>>, shader: Option<JSRef<WebGLShader>>) { let program_id = match program { diff --git a/components/script/dom/webglshaderprecisionformat.rs b/components/script/dom/webglshaderprecisionformat.rs new file mode 100644 index 00000000000..368d57358f6 --- /dev/null +++ b/components/script/dom/webglshaderprecisionformat.rs @@ -0,0 +1,53 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// https://www.khronos.org/registry/webgl/specs/latest/1.0/webgl.idl +use dom::bindings::codegen::Bindings::WebGLShaderPrecisionFormatBinding; +use dom::bindings::codegen::Bindings::WebGLShaderPrecisionFormatBinding::WebGLShaderPrecisionFormatMethods; +use dom::bindings::global::GlobalRef; +use dom::bindings::js::{Temporary, JSRef}; +use dom::bindings::utils::{Reflector,reflect_dom_object}; + +#[dom_struct] +pub struct WebGLShaderPrecisionFormat { + reflector_: Reflector, + range_min: i32, + range_max: i32, + precision: i32, +} + +impl WebGLShaderPrecisionFormat { + fn new_inherited(range_min: i32, range_max: i32, precision: i32) -> WebGLShaderPrecisionFormat { + WebGLShaderPrecisionFormat { + reflector_: Reflector::new(), + range_min: range_min, + range_max: range_max, + precision: precision, + } + } + + pub fn new(global: GlobalRef, + range_min: i32, + range_max: i32, + precision: i32) -> Temporary<WebGLShaderPrecisionFormat> { + reflect_dom_object( + box WebGLShaderPrecisionFormat::new_inherited(range_min, range_max, precision), + global, + WebGLShaderPrecisionFormatBinding::Wrap) + } +} + +impl<'a> WebGLShaderPrecisionFormatMethods for JSRef<'a, WebGLShaderPrecisionFormat> { + fn RangeMin(self) -> i32 { + self.range_min + } + + fn RangeMax(self) -> i32 { + self.range_max + } + + fn Precision(self) -> i32 { + self.precision + } +} diff --git a/components/script/dom/webidls/WebGLActiveInfo.webidl b/components/script/dom/webidls/WebGLActiveInfo.webidl new file mode 100644 index 00000000000..8b4d63ea0b7 --- /dev/null +++ b/components/script/dom/webidls/WebGLActiveInfo.webidl @@ -0,0 +1,10 @@ +// +// WebGL IDL definitions scraped from the Khronos specification: +// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.7 +// + +interface WebGLActiveInfo { + readonly attribute GLint size; + readonly attribute GLenum type; + readonly attribute DOMString name; +}; diff --git a/components/script/dom/webidls/WebGLRenderingContext.webidl b/components/script/dom/webidls/WebGLRenderingContext.webidl index 2dbd5f284a9..d3865c91c4a 100644 --- a/components/script/dom/webidls/WebGLRenderingContext.webidl +++ b/components/script/dom/webidls/WebGLRenderingContext.webidl @@ -33,27 +33,6 @@ dictionary WebGLContextAttributes { GLboolean failIfMajorPerformanceCaveat = false; }; -//interface WebGLFramebuffer : WebGLObject { -//}; - -//interface WebGLRenderbuffer : WebGLObject { -//}; - -//interface WebGLTexture : WebGLObject { -//}; - -//interface WebGLActiveInfo { -// readonly attribute GLint size; -// readonly attribute GLenum type; -// readonly attribute DOMString name; -//}; - -//interface WebGLShaderPrecisionFormat { -// readonly attribute GLint rangeMin; -// readonly attribute GLint rangeMax; -// readonly attribute GLint precision; -//}; - [NoInterfaceObject] interface WebGLRenderingContextBase { @@ -83,46 +62,46 @@ interface WebGLRenderingContextBase /* ALWAYS */ /* BlendingFactorDest */ - //const GLenum ZERO = 0; - //const GLenum ONE = 1; - //const GLenum SRC_COLOR = 0x0300; - //const GLenum ONE_MINUS_SRC_COLOR = 0x0301; - //const GLenum SRC_ALPHA = 0x0302; - //const GLenum ONE_MINUS_SRC_ALPHA = 0x0303; - //const GLenum DST_ALPHA = 0x0304; - //const GLenum ONE_MINUS_DST_ALPHA = 0x0305; + const GLenum ZERO = 0; + const GLenum ONE = 1; + const GLenum SRC_COLOR = 0x0300; + const GLenum ONE_MINUS_SRC_COLOR = 0x0301; + const GLenum SRC_ALPHA = 0x0302; + const GLenum ONE_MINUS_SRC_ALPHA = 0x0303; + const GLenum DST_ALPHA = 0x0304; + const GLenum ONE_MINUS_DST_ALPHA = 0x0305; /* BlendingFactorSrc */ /* ZERO */ /* ONE */ - //const GLenum DST_COLOR = 0x0306; - //const GLenum ONE_MINUS_DST_COLOR = 0x0307; - //const GLenum SRC_ALPHA_SATURATE = 0x0308; + const GLenum DST_COLOR = 0x0306; + const GLenum ONE_MINUS_DST_COLOR = 0x0307; + const GLenum SRC_ALPHA_SATURATE = 0x0308; /* SRC_ALPHA */ /* ONE_MINUS_SRC_ALPHA */ /* DST_ALPHA */ /* ONE_MINUS_DST_ALPHA */ /* BlendEquationSeparate */ - //const GLenum FUNC_ADD = 0x8006; - //const GLenum BLEND_EQUATION = 0x8009; - //const GLenum BLEND_EQUATION_RGB = 0x8009; /* same as BLEND_EQUATION */ - //const GLenum BLEND_EQUATION_ALPHA = 0x883D; + const GLenum FUNC_ADD = 0x8006; + const GLenum BLEND_EQUATION = 0x8009; + const GLenum BLEND_EQUATION_RGB = 0x8009; /* same as BLEND_EQUATION */ + const GLenum BLEND_EQUATION_ALPHA = 0x883D; /* BlendSubtract */ - //const GLenum FUNC_SUBTRACT = 0x800A; - //const GLenum FUNC_REVERSE_SUBTRACT = 0x800B; + const GLenum FUNC_SUBTRACT = 0x800A; + const GLenum FUNC_REVERSE_SUBTRACT = 0x800B; /* Separate Blend Functions */ - //const GLenum BLEND_DST_RGB = 0x80C8; - //const GLenum BLEND_SRC_RGB = 0x80C9; - //const GLenum BLEND_DST_ALPHA = 0x80CA; - //const GLenum BLEND_SRC_ALPHA = 0x80CB; - //const GLenum CONSTANT_COLOR = 0x8001; - //const GLenum ONE_MINUS_CONSTANT_COLOR = 0x8002; - //const GLenum CONSTANT_ALPHA = 0x8003; - //const GLenum ONE_MINUS_CONSTANT_ALPHA = 0x8004; - //const GLenum BLEND_COLOR = 0x8005; + const GLenum BLEND_DST_RGB = 0x80C8; + const GLenum BLEND_SRC_RGB = 0x80C9; + const GLenum BLEND_DST_ALPHA = 0x80CA; + const GLenum BLEND_SRC_ALPHA = 0x80CB; + const GLenum CONSTANT_COLOR = 0x8001; + const GLenum ONE_MINUS_CONSTANT_COLOR = 0x8002; + const GLenum CONSTANT_ALPHA = 0x8003; + const GLenum ONE_MINUS_CONSTANT_ALPHA = 0x8004; + const GLenum BLEND_COLOR = 0x8005; /* Buffer Objects */ const GLenum ARRAY_BUFFER = 0x8892; @@ -134,15 +113,15 @@ interface WebGLRenderingContextBase const GLenum STATIC_DRAW = 0x88E4; const GLenum DYNAMIC_DRAW = 0x88E8; - //const GLenum BUFFER_SIZE = 0x8764; - //const GLenum BUFFER_USAGE = 0x8765; + const GLenum BUFFER_SIZE = 0x8764; + const GLenum BUFFER_USAGE = 0x8765; - //const GLenum CURRENT_VERTEX_ATTRIB = 0x8626; + const GLenum CURRENT_VERTEX_ATTRIB = 0x8626; /* CullFaceMode */ - //const GLenum FRONT = 0x0404; - //const GLenum BACK = 0x0405; - //const GLenum FRONT_AND_BACK = 0x0408; + const GLenum FRONT = 0x0404; + const GLenum BACK = 0x0405; + const GLenum FRONT_AND_BACK = 0x0408; /* DepthFunction */ /* NEVER */ @@ -156,76 +135,76 @@ interface WebGLRenderingContextBase /* EnableCap */ /* TEXTURE_2D */ - //const GLenum CULL_FACE = 0x0B44; - //const GLenum BLEND = 0x0BE2; - //const GLenum DITHER = 0x0BD0; - //const GLenum STENCIL_TEST = 0x0B90; - //const GLenum DEPTH_TEST = 0x0B71; - //const GLenum SCISSOR_TEST = 0x0C11; - //const GLenum POLYGON_OFFSET_FILL = 0x8037; - //const GLenum SAMPLE_ALPHA_TO_COVERAGE = 0x809E; - //const GLenum SAMPLE_COVERAGE = 0x80A0; + const GLenum CULL_FACE = 0x0B44; + const GLenum BLEND = 0x0BE2; + const GLenum DITHER = 0x0BD0; + const GLenum STENCIL_TEST = 0x0B90; + const GLenum DEPTH_TEST = 0x0B71; + const GLenum SCISSOR_TEST = 0x0C11; + const GLenum POLYGON_OFFSET_FILL = 0x8037; + const GLenum SAMPLE_ALPHA_TO_COVERAGE = 0x809E; + const GLenum SAMPLE_COVERAGE = 0x80A0; /* ErrorCode */ - //const GLenum NO_ERROR = 0; - //const GLenum INVALID_ENUM = 0x0500; - //const GLenum INVALID_VALUE = 0x0501; - //const GLenum INVALID_OPERATION = 0x0502; - //const GLenum OUT_OF_MEMORY = 0x0505; + const GLenum NO_ERROR = 0; + const GLenum INVALID_ENUM = 0x0500; + const GLenum INVALID_VALUE = 0x0501; + const GLenum INVALID_OPERATION = 0x0502; + const GLenum OUT_OF_MEMORY = 0x0505; /* FrontFaceDirection */ - //const GLenum CW = 0x0900; - //const GLenum CCW = 0x0901; + const GLenum CW = 0x0900; + const GLenum CCW = 0x0901; /* GetPName */ - //const GLenum LINE_WIDTH = 0x0B21; - //const GLenum ALIASED_POINT_SIZE_RANGE = 0x846D; - //const GLenum ALIASED_LINE_WIDTH_RANGE = 0x846E; - //const GLenum CULL_FACE_MODE = 0x0B45; - //const GLenum FRONT_FACE = 0x0B46; - //const GLenum DEPTH_RANGE = 0x0B70; - //const GLenum DEPTH_WRITEMASK = 0x0B72; - //const GLenum DEPTH_CLEAR_VALUE = 0x0B73; - //const GLenum DEPTH_FUNC = 0x0B74; - //const GLenum STENCIL_CLEAR_VALUE = 0x0B91; - //const GLenum STENCIL_FUNC = 0x0B92; - //const GLenum STENCIL_FAIL = 0x0B94; - //const GLenum STENCIL_PASS_DEPTH_FAIL = 0x0B95; - //const GLenum STENCIL_PASS_DEPTH_PASS = 0x0B96; - //const GLenum STENCIL_REF = 0x0B97; - //const GLenum STENCIL_VALUE_MASK = 0x0B93; - //const GLenum STENCIL_WRITEMASK = 0x0B98; - //const GLenum STENCIL_BACK_FUNC = 0x8800; - //const GLenum STENCIL_BACK_FAIL = 0x8801; - //const GLenum STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802; - //const GLenum STENCIL_BACK_PASS_DEPTH_PASS = 0x8803; - //const GLenum STENCIL_BACK_REF = 0x8CA3; - //const GLenum STENCIL_BACK_VALUE_MASK = 0x8CA4; - //const GLenum STENCIL_BACK_WRITEMASK = 0x8CA5; - //const GLenum VIEWPORT = 0x0BA2; - //const GLenum SCISSOR_BOX = 0x0C10; + const GLenum LINE_WIDTH = 0x0B21; + const GLenum ALIASED_POINT_SIZE_RANGE = 0x846D; + const GLenum ALIASED_LINE_WIDTH_RANGE = 0x846E; + const GLenum CULL_FACE_MODE = 0x0B45; + const GLenum FRONT_FACE = 0x0B46; + const GLenum DEPTH_RANGE = 0x0B70; + const GLenum DEPTH_WRITEMASK = 0x0B72; + const GLenum DEPTH_CLEAR_VALUE = 0x0B73; + const GLenum DEPTH_FUNC = 0x0B74; + const GLenum STENCIL_CLEAR_VALUE = 0x0B91; + const GLenum STENCIL_FUNC = 0x0B92; + const GLenum STENCIL_FAIL = 0x0B94; + const GLenum STENCIL_PASS_DEPTH_FAIL = 0x0B95; + const GLenum STENCIL_PASS_DEPTH_PASS = 0x0B96; + const GLenum STENCIL_REF = 0x0B97; + const GLenum STENCIL_VALUE_MASK = 0x0B93; + const GLenum STENCIL_WRITEMASK = 0x0B98; + const GLenum STENCIL_BACK_FUNC = 0x8800; + const GLenum STENCIL_BACK_FAIL = 0x8801; + const GLenum STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802; + const GLenum STENCIL_BACK_PASS_DEPTH_PASS = 0x8803; + const GLenum STENCIL_BACK_REF = 0x8CA3; + const GLenum STENCIL_BACK_VALUE_MASK = 0x8CA4; + const GLenum STENCIL_BACK_WRITEMASK = 0x8CA5; + const GLenum VIEWPORT = 0x0BA2; + const GLenum SCISSOR_BOX = 0x0C10; /* SCISSOR_TEST */ - //const GLenum COLOR_CLEAR_VALUE = 0x0C22; - //const GLenum COLOR_WRITEMASK = 0x0C23; - //const GLenum UNPACK_ALIGNMENT = 0x0CF5; - //const GLenum PACK_ALIGNMENT = 0x0D05; - //const GLenum MAX_TEXTURE_SIZE = 0x0D33; - //const GLenum MAX_VIEWPORT_DIMS = 0x0D3A; - //const GLenum SUBPIXEL_BITS = 0x0D50; - //const GLenum RED_BITS = 0x0D52; - //const GLenum GREEN_BITS = 0x0D53; - //const GLenum BLUE_BITS = 0x0D54; - //const GLenum ALPHA_BITS = 0x0D55; - //const GLenum DEPTH_BITS = 0x0D56; - //const GLenum STENCIL_BITS = 0x0D57; - //const GLenum POLYGON_OFFSET_UNITS = 0x2A00; + const GLenum COLOR_CLEAR_VALUE = 0x0C22; + const GLenum COLOR_WRITEMASK = 0x0C23; + const GLenum UNPACK_ALIGNMENT = 0x0CF5; + const GLenum PACK_ALIGNMENT = 0x0D05; + const GLenum MAX_TEXTURE_SIZE = 0x0D33; + const GLenum MAX_VIEWPORT_DIMS = 0x0D3A; + const GLenum SUBPIXEL_BITS = 0x0D50; + const GLenum RED_BITS = 0x0D52; + const GLenum GREEN_BITS = 0x0D53; + const GLenum BLUE_BITS = 0x0D54; + const GLenum ALPHA_BITS = 0x0D55; + const GLenum DEPTH_BITS = 0x0D56; + const GLenum STENCIL_BITS = 0x0D57; + const GLenum POLYGON_OFFSET_UNITS = 0x2A00; /* POLYGON_OFFSET_FILL */ - //const GLenum POLYGON_OFFSET_FACTOR = 0x8038; - //const GLenum TEXTURE_BINDING_2D = 0x8069; - //const GLenum SAMPLE_BUFFERS = 0x80A8; - //const GLenum SAMPLES = 0x80A9; - //const GLenum SAMPLE_COVERAGE_VALUE = 0x80AA; - //const GLenum SAMPLE_COVERAGE_INVERT = 0x80AB; + const GLenum POLYGON_OFFSET_FACTOR = 0x8038; + const GLenum TEXTURE_BINDING_2D = 0x8069; + const GLenum SAMPLE_BUFFERS = 0x80A8; + const GLenum SAMPLES = 0x80A9; + const GLenum SAMPLE_COVERAGE_VALUE = 0x80AA; + const GLenum SAMPLE_COVERAGE_INVERT = 0x80AB; /* GetTextureParameter */ /* TEXTURE_MAG_FILTER */ @@ -233,15 +212,15 @@ interface WebGLRenderingContextBase /* TEXTURE_WRAP_S */ /* TEXTURE_WRAP_T */ - //const GLenum COMPRESSED_TEXTURE_FORMATS = 0x86A3; + const GLenum COMPRESSED_TEXTURE_FORMATS = 0x86A3; /* HintMode */ - //const GLenum DONT_CARE = 0x1100; - //const GLenum FASTEST = 0x1101; - //const GLenum NICEST = 0x1102; + const GLenum DONT_CARE = 0x1100; + const GLenum FASTEST = 0x1101; + const GLenum NICEST = 0x1102; /* HintTarget */ - //const GLenum GENERATE_MIPMAP_HINT = 0x8192; + const GLenum GENERATE_MIPMAP_HINT = 0x8192; /* DataType */ const GLenum BYTE = 0x1400; @@ -253,58 +232,58 @@ interface WebGLRenderingContextBase const GLenum FLOAT = 0x1406; /* PixelFormat */ - //const GLenum DEPTH_COMPONENT = 0x1902; - //const GLenum ALPHA = 0x1906; - //const GLenum RGB = 0x1907; - //const GLenum RGBA = 0x1908; - //const GLenum LUMINANCE = 0x1909; - //const GLenum LUMINANCE_ALPHA = 0x190A; + const GLenum DEPTH_COMPONENT = 0x1902; + const GLenum ALPHA = 0x1906; + const GLenum RGB = 0x1907; + const GLenum RGBA = 0x1908; + const GLenum LUMINANCE = 0x1909; + const GLenum LUMINANCE_ALPHA = 0x190A; /* PixelType */ /* UNSIGNED_BYTE */ - //const GLenum UNSIGNED_SHORT_4_4_4_4 = 0x8033; - //const GLenum UNSIGNED_SHORT_5_5_5_1 = 0x8034; - //const GLenum UNSIGNED_SHORT_5_6_5 = 0x8363; + const GLenum UNSIGNED_SHORT_4_4_4_4 = 0x8033; + const GLenum UNSIGNED_SHORT_5_5_5_1 = 0x8034; + const GLenum UNSIGNED_SHORT_5_6_5 = 0x8363; /* Shaders */ const GLenum FRAGMENT_SHADER = 0x8B30; const GLenum VERTEX_SHADER = 0x8B31; - //const GLenum MAX_VERTEX_ATTRIBS = 0x8869; - //const GLenum MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB; - //const GLenum MAX_VARYING_VECTORS = 0x8DFC; - //const GLenum MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D; - //const GLenum MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C; - //const GLenum MAX_TEXTURE_IMAGE_UNITS = 0x8872; - //const GLenum MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD; - //const GLenum SHADER_TYPE = 0x8B4F; - //const GLenum DELETE_STATUS = 0x8B80; - //const GLenum LINK_STATUS = 0x8B82; - //const GLenum VALIDATE_STATUS = 0x8B83; - //const GLenum ATTACHED_SHADERS = 0x8B85; - //const GLenum ACTIVE_UNIFORMS = 0x8B86; - //const GLenum ACTIVE_ATTRIBUTES = 0x8B89; - //const GLenum SHADING_LANGUAGE_VERSION = 0x8B8C; - //const GLenum CURRENT_PROGRAM = 0x8B8D; + const GLenum MAX_VERTEX_ATTRIBS = 0x8869; + const GLenum MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB; + const GLenum MAX_VARYING_VECTORS = 0x8DFC; + const GLenum MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D; + const GLenum MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C; + const GLenum MAX_TEXTURE_IMAGE_UNITS = 0x8872; + const GLenum MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD; + const GLenum SHADER_TYPE = 0x8B4F; + const GLenum DELETE_STATUS = 0x8B80; + const GLenum LINK_STATUS = 0x8B82; + const GLenum VALIDATE_STATUS = 0x8B83; + const GLenum ATTACHED_SHADERS = 0x8B85; + const GLenum ACTIVE_UNIFORMS = 0x8B86; + const GLenum ACTIVE_ATTRIBUTES = 0x8B89; + const GLenum SHADING_LANGUAGE_VERSION = 0x8B8C; + const GLenum CURRENT_PROGRAM = 0x8B8D; /* StencilFunction */ - //const GLenum NEVER = 0x0200; - //const GLenum LESS = 0x0201; - //const GLenum EQUAL = 0x0202; - //const GLenum LEQUAL = 0x0203; - //const GLenum GREATER = 0x0204; - //const GLenum NOTEQUAL = 0x0205; - //const GLenum GEQUAL = 0x0206; - //const GLenum ALWAYS = 0x0207; + const GLenum NEVER = 0x0200; + const GLenum LESS = 0x0201; + const GLenum EQUAL = 0x0202; + const GLenum LEQUAL = 0x0203; + const GLenum GREATER = 0x0204; + const GLenum NOTEQUAL = 0x0205; + const GLenum GEQUAL = 0x0206; + const GLenum ALWAYS = 0x0207; /* StencilOp */ /* ZERO */ - //const GLenum KEEP = 0x1E00; - //const GLenum REPLACE = 0x1E01; - //const GLenum INCR = 0x1E02; - //const GLenum DECR = 0x1E03; - //const GLenum INVERT = 0x150A; - //const GLenum INCR_WRAP = 0x8507; - //const GLenum DECR_WRAP = 0x8508; + const GLenum KEEP = 0x1E00; + const GLenum REPLACE = 0x1E01; + const GLenum INCR = 0x1E02; + const GLenum DECR = 0x1E03; + const GLenum INVERT = 0x150A; + const GLenum INCR_WRAP = 0x8507; + const GLenum DECR_WRAP = 0x8508; /* StringName */ const GLenum VENDOR = 0x1F00; @@ -312,170 +291,170 @@ interface WebGLRenderingContextBase const GLenum VERSION = 0x1F02; /* TextureMagFilter */ - //const GLenum NEAREST = 0x2600; - //const GLenum LINEAR = 0x2601; + const GLenum NEAREST = 0x2600; + const GLenum LINEAR = 0x2601; /* TextureMinFilter */ /* NEAREST */ /* LINEAR */ - //const GLenum NEAREST_MIPMAP_NEAREST = 0x2700; - //const GLenum LINEAR_MIPMAP_NEAREST = 0x2701; - //const GLenum NEAREST_MIPMAP_LINEAR = 0x2702; - //const GLenum LINEAR_MIPMAP_LINEAR = 0x2703; + const GLenum NEAREST_MIPMAP_NEAREST = 0x2700; + const GLenum LINEAR_MIPMAP_NEAREST = 0x2701; + const GLenum NEAREST_MIPMAP_LINEAR = 0x2702; + const GLenum LINEAR_MIPMAP_LINEAR = 0x2703; /* TextureParameterName */ - //const GLenum TEXTURE_MAG_FILTER = 0x2800; - //const GLenum TEXTURE_MIN_FILTER = 0x2801; - //const GLenum TEXTURE_WRAP_S = 0x2802; - //const GLenum TEXTURE_WRAP_T = 0x2803; + const GLenum TEXTURE_MAG_FILTER = 0x2800; + const GLenum TEXTURE_MIN_FILTER = 0x2801; + const GLenum TEXTURE_WRAP_S = 0x2802; + const GLenum TEXTURE_WRAP_T = 0x2803; /* TextureTarget */ - //const GLenum TEXTURE_2D = 0x0DE1; - //const GLenum TEXTURE = 0x1702; - - //const GLenum TEXTURE_CUBE_MAP = 0x8513; - //const GLenum TEXTURE_BINDING_CUBE_MAP = 0x8514; - //const GLenum TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515; - //const GLenum TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516; - //const GLenum TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517; - //const GLenum TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518; - //const GLenum TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519; - //const GLenum TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A; - //const GLenum MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C; + const GLenum TEXTURE_2D = 0x0DE1; + const GLenum TEXTURE = 0x1702; + + const GLenum TEXTURE_CUBE_MAP = 0x8513; + const GLenum TEXTURE_BINDING_CUBE_MAP = 0x8514; + const GLenum TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515; + const GLenum TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516; + const GLenum TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517; + const GLenum TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518; + const GLenum TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519; + const GLenum TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A; + const GLenum MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C; /* TextureUnit */ - //const GLenum TEXTURE0 = 0x84C0; - //const GLenum TEXTURE1 = 0x84C1; - //const GLenum TEXTURE2 = 0x84C2; - //const GLenum TEXTURE3 = 0x84C3; - //const GLenum TEXTURE4 = 0x84C4; - //const GLenum TEXTURE5 = 0x84C5; - //const GLenum TEXTURE6 = 0x84C6; - //const GLenum TEXTURE7 = 0x84C7; - //const GLenum TEXTURE8 = 0x84C8; - //const GLenum TEXTURE9 = 0x84C9; - //const GLenum TEXTURE10 = 0x84CA; - //const GLenum TEXTURE11 = 0x84CB; - //const GLenum TEXTURE12 = 0x84CC; - //const GLenum TEXTURE13 = 0x84CD; - //const GLenum TEXTURE14 = 0x84CE; - //const GLenum TEXTURE15 = 0x84CF; - //const GLenum TEXTURE16 = 0x84D0; - //const GLenum TEXTURE17 = 0x84D1; - //const GLenum TEXTURE18 = 0x84D2; - //const GLenum TEXTURE19 = 0x84D3; - //const GLenum TEXTURE20 = 0x84D4; - //const GLenum TEXTURE21 = 0x84D5; - //const GLenum TEXTURE22 = 0x84D6; - //const GLenum TEXTURE23 = 0x84D7; - //const GLenum TEXTURE24 = 0x84D8; - //const GLenum TEXTURE25 = 0x84D9; - //const GLenum TEXTURE26 = 0x84DA; - //const GLenum TEXTURE27 = 0x84DB; - //const GLenum TEXTURE28 = 0x84DC; - //const GLenum TEXTURE29 = 0x84DD; - //const GLenum TEXTURE30 = 0x84DE; - //const GLenum TEXTURE31 = 0x84DF; - //const GLenum ACTIVE_TEXTURE = 0x84E0; + const GLenum TEXTURE0 = 0x84C0; + const GLenum TEXTURE1 = 0x84C1; + const GLenum TEXTURE2 = 0x84C2; + const GLenum TEXTURE3 = 0x84C3; + const GLenum TEXTURE4 = 0x84C4; + const GLenum TEXTURE5 = 0x84C5; + const GLenum TEXTURE6 = 0x84C6; + const GLenum TEXTURE7 = 0x84C7; + const GLenum TEXTURE8 = 0x84C8; + const GLenum TEXTURE9 = 0x84C9; + const GLenum TEXTURE10 = 0x84CA; + const GLenum TEXTURE11 = 0x84CB; + const GLenum TEXTURE12 = 0x84CC; + const GLenum TEXTURE13 = 0x84CD; + const GLenum TEXTURE14 = 0x84CE; + const GLenum TEXTURE15 = 0x84CF; + const GLenum TEXTURE16 = 0x84D0; + const GLenum TEXTURE17 = 0x84D1; + const GLenum TEXTURE18 = 0x84D2; + const GLenum TEXTURE19 = 0x84D3; + const GLenum TEXTURE20 = 0x84D4; + const GLenum TEXTURE21 = 0x84D5; + const GLenum TEXTURE22 = 0x84D6; + const GLenum TEXTURE23 = 0x84D7; + const GLenum TEXTURE24 = 0x84D8; + const GLenum TEXTURE25 = 0x84D9; + const GLenum TEXTURE26 = 0x84DA; + const GLenum TEXTURE27 = 0x84DB; + const GLenum TEXTURE28 = 0x84DC; + const GLenum TEXTURE29 = 0x84DD; + const GLenum TEXTURE30 = 0x84DE; + const GLenum TEXTURE31 = 0x84DF; + const GLenum ACTIVE_TEXTURE = 0x84E0; /* TextureWrapMode */ - //const GLenum REPEAT = 0x2901; - //const GLenum CLAMP_TO_EDGE = 0x812F; - //const GLenum MIRRORED_REPEAT = 0x8370; + const GLenum REPEAT = 0x2901; + const GLenum CLAMP_TO_EDGE = 0x812F; + const GLenum MIRRORED_REPEAT = 0x8370; /* Uniform Types */ - //const GLenum FLOAT_VEC2 = 0x8B50; - //const GLenum FLOAT_VEC3 = 0x8B51; - //const GLenum FLOAT_VEC4 = 0x8B52; - //const GLenum INT_VEC2 = 0x8B53; - //const GLenum INT_VEC3 = 0x8B54; - //const GLenum INT_VEC4 = 0x8B55; - //const GLenum BOOL = 0x8B56; - //const GLenum BOOL_VEC2 = 0x8B57; - //const GLenum BOOL_VEC3 = 0x8B58; - //const GLenum BOOL_VEC4 = 0x8B59; - //const GLenum FLOAT_MAT2 = 0x8B5A; - //const GLenum FLOAT_MAT3 = 0x8B5B; - //const GLenum FLOAT_MAT4 = 0x8B5C; - //const GLenum SAMPLER_2D = 0x8B5E; - //const GLenum SAMPLER_CUBE = 0x8B60; + const GLenum FLOAT_VEC2 = 0x8B50; + const GLenum FLOAT_VEC3 = 0x8B51; + const GLenum FLOAT_VEC4 = 0x8B52; + const GLenum INT_VEC2 = 0x8B53; + const GLenum INT_VEC3 = 0x8B54; + const GLenum INT_VEC4 = 0x8B55; + const GLenum BOOL = 0x8B56; + const GLenum BOOL_VEC2 = 0x8B57; + const GLenum BOOL_VEC3 = 0x8B58; + const GLenum BOOL_VEC4 = 0x8B59; + const GLenum FLOAT_MAT2 = 0x8B5A; + const GLenum FLOAT_MAT3 = 0x8B5B; + const GLenum FLOAT_MAT4 = 0x8B5C; + const GLenum SAMPLER_2D = 0x8B5E; + const GLenum SAMPLER_CUBE = 0x8B60; /* Vertex Arrays */ - //const GLenum VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622; - //const GLenum VERTEX_ATTRIB_ARRAY_SIZE = 0x8623; - //const GLenum VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624; - //const GLenum VERTEX_ATTRIB_ARRAY_TYPE = 0x8625; - //const GLenum VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A; - //const GLenum VERTEX_ATTRIB_ARRAY_POINTER = 0x8645; - //const GLenum VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F; + const GLenum VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622; + const GLenum VERTEX_ATTRIB_ARRAY_SIZE = 0x8623; + const GLenum VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624; + const GLenum VERTEX_ATTRIB_ARRAY_TYPE = 0x8625; + const GLenum VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A; + const GLenum VERTEX_ATTRIB_ARRAY_POINTER = 0x8645; + const GLenum VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F; /* Read Format */ - //const GLenum IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A; - //const GLenum IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B; + const GLenum IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A; + const GLenum IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B; /* Shader Source */ const GLenum COMPILE_STATUS = 0x8B81; /* Shader Precision-Specified Types */ - //const GLenum LOW_FLOAT = 0x8DF0; - //const GLenum MEDIUM_FLOAT = 0x8DF1; - //const GLenum HIGH_FLOAT = 0x8DF2; - //const GLenum LOW_INT = 0x8DF3; - //const GLenum MEDIUM_INT = 0x8DF4; - //const GLenum HIGH_INT = 0x8DF5; + const GLenum LOW_FLOAT = 0x8DF0; + const GLenum MEDIUM_FLOAT = 0x8DF1; + const GLenum HIGH_FLOAT = 0x8DF2; + const GLenum LOW_INT = 0x8DF3; + const GLenum MEDIUM_INT = 0x8DF4; + const GLenum HIGH_INT = 0x8DF5; /* Framebuffer Object. */ - //const GLenum FRAMEBUFFER = 0x8D40; - //const GLenum RENDERBUFFER = 0x8D41; - - //const GLenum RGBA4 = 0x8056; - //const GLenum RGB5_A1 = 0x8057; - //const GLenum RGB565 = 0x8D62; - //const GLenum DEPTH_COMPONENT16 = 0x81A5; - //const GLenum STENCIL_INDEX = 0x1901; - //const GLenum STENCIL_INDEX8 = 0x8D48; - //const GLenum DEPTH_STENCIL = 0x84F9; - - //const GLenum RENDERBUFFER_WIDTH = 0x8D42; - //const GLenum RENDERBUFFER_HEIGHT = 0x8D43; - //const GLenum RENDERBUFFER_INTERNAL_FORMAT = 0x8D44; - //const GLenum RENDERBUFFER_RED_SIZE = 0x8D50; - //const GLenum RENDERBUFFER_GREEN_SIZE = 0x8D51; - //const GLenum RENDERBUFFER_BLUE_SIZE = 0x8D52; - //const GLenum RENDERBUFFER_ALPHA_SIZE = 0x8D53; - //const GLenum RENDERBUFFER_DEPTH_SIZE = 0x8D54; - //const GLenum RENDERBUFFER_STENCIL_SIZE = 0x8D55; - - //const GLenum FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0; - //const GLenum FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1; - //const GLenum FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2; - //const GLenum FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3; - - //const GLenum COLOR_ATTACHMENT0 = 0x8CE0; - //const GLenum DEPTH_ATTACHMENT = 0x8D00; - //const GLenum STENCIL_ATTACHMENT = 0x8D20; - //const GLenum DEPTH_STENCIL_ATTACHMENT = 0x821A; - - //const GLenum NONE = 0; - - //const GLenum FRAMEBUFFER_COMPLETE = 0x8CD5; - //const GLenum FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6; - //const GLenum FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7; - //const GLenum FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9; - //const GLenum FRAMEBUFFER_UNSUPPORTED = 0x8CDD; - - //const GLenum FRAMEBUFFER_BINDING = 0x8CA6; - //const GLenum RENDERBUFFER_BINDING = 0x8CA7; - //const GLenum MAX_RENDERBUFFER_SIZE = 0x84E8; - - //const GLenum INVALID_FRAMEBUFFER_OPERATION = 0x0506; + const GLenum FRAMEBUFFER = 0x8D40; + const GLenum RENDERBUFFER = 0x8D41; + + const GLenum RGBA4 = 0x8056; + const GLenum RGB5_A1 = 0x8057; + const GLenum RGB565 = 0x8D62; + const GLenum DEPTH_COMPONENT16 = 0x81A5; + const GLenum STENCIL_INDEX = 0x1901; + const GLenum STENCIL_INDEX8 = 0x8D48; + const GLenum DEPTH_STENCIL = 0x84F9; + + const GLenum RENDERBUFFER_WIDTH = 0x8D42; + const GLenum RENDERBUFFER_HEIGHT = 0x8D43; + const GLenum RENDERBUFFER_INTERNAL_FORMAT = 0x8D44; + const GLenum RENDERBUFFER_RED_SIZE = 0x8D50; + const GLenum RENDERBUFFER_GREEN_SIZE = 0x8D51; + const GLenum RENDERBUFFER_BLUE_SIZE = 0x8D52; + const GLenum RENDERBUFFER_ALPHA_SIZE = 0x8D53; + const GLenum RENDERBUFFER_DEPTH_SIZE = 0x8D54; + const GLenum RENDERBUFFER_STENCIL_SIZE = 0x8D55; + + const GLenum FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0; + const GLenum FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1; + const GLenum FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2; + const GLenum FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3; + + const GLenum COLOR_ATTACHMENT0 = 0x8CE0; + const GLenum DEPTH_ATTACHMENT = 0x8D00; + const GLenum STENCIL_ATTACHMENT = 0x8D20; + const GLenum DEPTH_STENCIL_ATTACHMENT = 0x821A; + + const GLenum NONE = 0; + + const GLenum FRAMEBUFFER_COMPLETE = 0x8CD5; + const GLenum FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6; + const GLenum FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7; + const GLenum FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9; + const GLenum FRAMEBUFFER_UNSUPPORTED = 0x8CDD; + + const GLenum FRAMEBUFFER_BINDING = 0x8CA6; + const GLenum RENDERBUFFER_BINDING = 0x8CA7; + const GLenum MAX_RENDERBUFFER_SIZE = 0x84E8; + + const GLenum INVALID_FRAMEBUFFER_OPERATION = 0x0506; /* WebGL-specific enums */ - //const GLenum UNPACK_FLIP_Y_WEBGL = 0x9240; - //const GLenum UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241; - //const GLenum CONTEXT_LOST_WEBGL = 0x9242; - //const GLenum UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243; - //const GLenum BROWSER_DEFAULT_WEBGL = 0x9244; + const GLenum UNPACK_FLIP_Y_WEBGL = 0x9240; + const GLenum UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241; + const GLenum CONTEXT_LOST_WEBGL = 0x9242; + const GLenum UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243; + const GLenum BROWSER_DEFAULT_WEBGL = 0x9244; readonly attribute HTMLCanvasElement canvas; readonly attribute GLsizei drawingBufferWidth; @@ -487,19 +466,19 @@ interface WebGLRenderingContextBase //sequence<DOMString>? getSupportedExtensions(); object? getExtension(DOMString name); - //void activeTexture(GLenum texture); + void activeTexture(GLenum texture); void attachShader(WebGLProgram? program, WebGLShader? shader); //void bindAttribLocation(WebGLProgram? program, GLuint index, DOMString name); void bindBuffer(GLenum target, WebGLBuffer? buffer); void bindFramebuffer(GLenum target, WebGLFramebuffer? framebuffer); void bindRenderbuffer(GLenum target, WebGLRenderbuffer? renderbuffer); void bindTexture(GLenum target, WebGLTexture? texture); - //void blendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); - //void blendEquation(GLenum mode); - //void blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha); - //void blendFunc(GLenum sfactor, GLenum dfactor); - //void blendFuncSeparate(GLenum srcRGB, GLenum dstRGB, - // GLenum srcAlpha, GLenum dstAlpha); + void blendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); + void blendEquation(GLenum mode); + void blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha); + void blendFunc(GLenum sfactor, GLenum dfactor); + void blendFuncSeparate(GLenum srcRGB, GLenum dstRGB, + GLenum srcAlpha, GLenum dstAlpha); // typedef (ArrayBuffer or ArrayBufferView) BufferDataSource; //void bufferData(GLenum target, GLsizeiptr size, GLenum usage); diff --git a/components/script/dom/webidls/WebGLShaderPrecisionFormat.webidl b/components/script/dom/webidls/WebGLShaderPrecisionFormat.webidl new file mode 100644 index 00000000000..acbbeeceea1 --- /dev/null +++ b/components/script/dom/webidls/WebGLShaderPrecisionFormat.webidl @@ -0,0 +1,10 @@ +// +// WebGL IDL definitions scraped from the Khronos specification: +// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.7 +// + +interface WebGLShaderPrecisionFormat { + readonly attribute GLint rangeMin; + readonly attribute GLint rangeMax; + readonly attribute GLint precision; +}; |