mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
webgl: Fix support for float/half-float texture formats.
This commit is contained in:
parent
8789a6a8d8
commit
29ab55d076
10 changed files with 88 additions and 56 deletions
|
@ -2,7 +2,7 @@
|
|||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use super::{ext_constants, WebGLExtension, WebGLExtensionSpec, WebGLExtensions};
|
||||
use super::{WebGLExtension, WebGLExtensionSpec, WebGLExtensions};
|
||||
use crate::dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextConstants as constants;
|
||||
|
||||
pub mod angleinstancedarrays;
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use super::{
|
||||
constants as webgl, ext_constants as gl, WebGLExtension, WebGLExtensionSpec, WebGLExtensions,
|
||||
constants as webgl, WebGLExtension, WebGLExtensionSpec, WebGLExtensions,
|
||||
};
|
||||
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
|
||||
use crate::dom::bindings::root::DomRoot;
|
||||
use crate::dom::webglrenderingcontext::WebGLRenderingContext;
|
||||
use canvas_traits::webgl::WebGLVersion;
|
||||
use canvas_traits::webgl::{TexFormat, WebGLVersion};
|
||||
use dom_struct::dom_struct;
|
||||
|
||||
#[dom_struct]
|
||||
|
@ -44,14 +44,14 @@ impl WebGLExtension for OESTextureFloat {
|
|||
|
||||
fn enable(ext: &WebGLExtensions) {
|
||||
ext.enable_tex_type(webgl::FLOAT);
|
||||
ext.add_effective_tex_internal_format(webgl::RGBA, webgl::FLOAT, gl::RGBA32F);
|
||||
ext.add_effective_tex_internal_format(webgl::RGB, webgl::FLOAT, gl::RGB32F);
|
||||
ext.add_effective_tex_internal_format(webgl::LUMINANCE, webgl::FLOAT, gl::LUMINANCE32F_ARB);
|
||||
ext.add_effective_tex_internal_format(webgl::ALPHA, webgl::FLOAT, gl::ALPHA32F_ARB);
|
||||
ext.add_effective_tex_internal_format(TexFormat::RGBA, webgl::FLOAT, TexFormat::RGBA32f);
|
||||
ext.add_effective_tex_internal_format(TexFormat::RGB, webgl::FLOAT, TexFormat::RGB32f);
|
||||
ext.add_effective_tex_internal_format(TexFormat::Luminance, webgl::FLOAT, TexFormat::Luminance32f);
|
||||
ext.add_effective_tex_internal_format(TexFormat::Alpha, webgl::FLOAT, TexFormat::Alpha32f);
|
||||
ext.add_effective_tex_internal_format(
|
||||
webgl::LUMINANCE_ALPHA,
|
||||
TexFormat::LuminanceAlpha,
|
||||
webgl::FLOAT,
|
||||
gl::LUMINANCE_ALPHA32F_ARB,
|
||||
TexFormat::LuminanceAlpha32f,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -2,14 +2,12 @@
|
|||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use super::{
|
||||
constants as webgl, ext_constants as gl, WebGLExtension, WebGLExtensionSpec, WebGLExtensions,
|
||||
};
|
||||
use super::{WebGLExtension, WebGLExtensionSpec, WebGLExtensions};
|
||||
use crate::dom::bindings::codegen::Bindings::OESTextureHalfFloatBinding::OESTextureHalfFloatConstants;
|
||||
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
|
||||
use crate::dom::bindings::root::DomRoot;
|
||||
use crate::dom::webglrenderingcontext::WebGLRenderingContext;
|
||||
use canvas_traits::webgl::WebGLVersion;
|
||||
use canvas_traits::webgl::{TexFormat, WebGLVersion};
|
||||
use dom_struct::dom_struct;
|
||||
|
||||
#[dom_struct]
|
||||
|
@ -50,14 +48,14 @@ impl WebGLExtension for OESTextureHalfFloat {
|
|||
fn enable(ext: &WebGLExtensions) {
|
||||
let hf = OESTextureHalfFloatConstants::HALF_FLOAT_OES;
|
||||
ext.enable_tex_type(hf);
|
||||
ext.add_effective_tex_internal_format(webgl::RGBA, hf, gl::RGBA16F);
|
||||
ext.add_effective_tex_internal_format(webgl::RGB, hf, gl::RGB16F);
|
||||
ext.add_effective_tex_internal_format(webgl::LUMINANCE, hf, gl::LUMINANCE16F_ARB);
|
||||
ext.add_effective_tex_internal_format(webgl::ALPHA, hf, gl::ALPHA16F_ARB);
|
||||
ext.add_effective_tex_internal_format(TexFormat::RGBA, hf, TexFormat::RGBA16f);
|
||||
ext.add_effective_tex_internal_format(TexFormat::RGB, hf, TexFormat::RGB16f);
|
||||
ext.add_effective_tex_internal_format(TexFormat::Luminance, hf, TexFormat::Luminance16f);
|
||||
ext.add_effective_tex_internal_format(TexFormat::Alpha, hf, TexFormat::Alpha16f);
|
||||
ext.add_effective_tex_internal_format(
|
||||
webgl::LUMINANCE_ALPHA,
|
||||
TexFormat::LuminanceAlpha,
|
||||
hf,
|
||||
gl::LUMINANCE_ALPHA16F_ARB,
|
||||
TexFormat::LuminanceAlpha16f,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ use crate::dom::oestexturehalffloat::OESTextureHalfFloat;
|
|||
use crate::dom::webglcolorbufferfloat::WEBGLColorBufferFloat;
|
||||
use crate::dom::webglrenderingcontext::WebGLRenderingContext;
|
||||
use crate::dom::webgltexture::TexCompression;
|
||||
use canvas_traits::webgl::{GlType, WebGLVersion};
|
||||
use canvas_traits::webgl::{GlType, TexFormat, WebGLVersion};
|
||||
use fnv::{FnvHashMap, FnvHashSet};
|
||||
use js::jsapi::JSObject;
|
||||
use malloc_size_of::MallocSizeOf;
|
||||
|
@ -82,7 +82,7 @@ struct WebGLExtensionFeatures {
|
|||
gl_extensions: FnvHashSet<String>,
|
||||
disabled_tex_types: FnvHashSet<GLenum>,
|
||||
not_filterable_tex_types: FnvHashSet<GLenum>,
|
||||
effective_tex_internal_formats: FnvHashMap<TexFormatType, u32>,
|
||||
effective_tex_internal_formats: FnvHashMap<TexFormatType, TexFormat>,
|
||||
/// WebGL Hint() targets enabled by extensions.
|
||||
hint_targets: FnvHashSet<GLenum>,
|
||||
/// WebGL GetParameter() names enabled by extensions.
|
||||
|
@ -273,9 +273,9 @@ impl WebGLExtensions {
|
|||
|
||||
pub fn add_effective_tex_internal_format(
|
||||
&self,
|
||||
source_internal_format: u32,
|
||||
source_internal_format: TexFormat,
|
||||
source_data_type: u32,
|
||||
effective_internal_format: u32,
|
||||
effective_internal_format: TexFormat,
|
||||
) {
|
||||
let format = TexFormatType(source_internal_format, source_data_type);
|
||||
self.features
|
||||
|
@ -286,9 +286,9 @@ impl WebGLExtensions {
|
|||
|
||||
pub fn get_effective_tex_internal_format(
|
||||
&self,
|
||||
source_internal_format: u32,
|
||||
source_internal_format: TexFormat,
|
||||
source_data_type: u32,
|
||||
) -> u32 {
|
||||
) -> TexFormat {
|
||||
let format = TexFormatType(source_internal_format, source_data_type);
|
||||
*(self
|
||||
.features
|
||||
|
@ -453,4 +453,4 @@ impl WebGLExtensions {
|
|||
|
||||
// Helper structs
|
||||
#[derive(Eq, Hash, JSTraceable, MallocSizeOf, PartialEq)]
|
||||
struct TexFormatType(u32, u32);
|
||||
struct TexFormatType(TexFormat, u32);
|
||||
|
|
|
@ -7,20 +7,6 @@ mod extension;
|
|||
mod extensions;
|
||||
mod wrapper;
|
||||
|
||||
// Some extra constants not exposed in WebGLRenderingContext constants
|
||||
pub mod ext_constants {
|
||||
pub const ALPHA16F_ARB: u32 = 0x881C;
|
||||
pub const ALPHA32F_ARB: u32 = 0x8816;
|
||||
pub const LUMINANCE16F_ARB: u32 = 0x881E;
|
||||
pub const LUMINANCE32F_ARB: u32 = 0x8818;
|
||||
pub const LUMINANCE_ALPHA16F_ARB: u32 = 0x881F;
|
||||
pub const LUMINANCE_ALPHA32F_ARB: u32 = 0x8819;
|
||||
pub const RGBA16F: u32 = 0x881A;
|
||||
pub const RGB16F: u32 = 0x881B;
|
||||
pub const RGBA32F: u32 = 0x8814;
|
||||
pub const RGB32F: u32 = 0x8815;
|
||||
}
|
||||
|
||||
pub use self::extension::WebGLExtension;
|
||||
pub use self::extension::WebGLExtensionSpec;
|
||||
pub use self::extensions::WebGLExtensions;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue