mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Simplify GetTexParameter
This commit is contained in:
parent
730bd5ec80
commit
431e3ddf8d
3 changed files with 32 additions and 37 deletions
|
@ -1066,21 +1066,8 @@ impl WebGLImpl {
|
||||||
fn get_tex_parameter(gl: &gl::Gl,
|
fn get_tex_parameter(gl: &gl::Gl,
|
||||||
target: u32,
|
target: u32,
|
||||||
pname: u32,
|
pname: u32,
|
||||||
chan: WebGLSender<WebGLResult<WebGLParameter>> ) {
|
chan: WebGLSender<i32> ) {
|
||||||
let result = match pname {
|
let result = gl.get_tex_parameter_iv(target, pname);
|
||||||
gl::TEXTURE_MAG_FILTER |
|
|
||||||
gl::TEXTURE_MIN_FILTER |
|
|
||||||
gl::TEXTURE_WRAP_S |
|
|
||||||
gl::TEXTURE_WRAP_T => {
|
|
||||||
let parameter = gl.get_tex_parameter_iv(target, pname);
|
|
||||||
if parameter == 0 {
|
|
||||||
Ok(WebGLParameter::Invalid)
|
|
||||||
} else {
|
|
||||||
Ok(WebGLParameter::Int(parameter))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => Err(WebGLError::InvalidEnum)
|
|
||||||
};
|
|
||||||
chan.send(result).unwrap();
|
chan.send(result).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -207,7 +207,7 @@ pub enum WebGLCommand {
|
||||||
GetBufferParameter(u32, u32, WebGLSender<WebGLResult<WebGLParameter>>),
|
GetBufferParameter(u32, u32, WebGLSender<WebGLResult<WebGLParameter>>),
|
||||||
GetExtensions(WebGLSender<String>),
|
GetExtensions(WebGLSender<String>),
|
||||||
GetParameter(u32, WebGLSender<WebGLResult<WebGLParameter>>),
|
GetParameter(u32, WebGLSender<WebGLResult<WebGLParameter>>),
|
||||||
GetTexParameter(u32, u32, WebGLSender<WebGLResult<WebGLParameter>>),
|
GetTexParameter(u32, u32, WebGLSender<i32>),
|
||||||
GetProgramParameter(WebGLProgramId, u32, WebGLSender<WebGLResult<WebGLParameter>>),
|
GetProgramParameter(WebGLProgramId, u32, WebGLSender<WebGLResult<WebGLParameter>>),
|
||||||
GetShaderParameter(WebGLShaderId, u32, WebGLSender<WebGLResult<WebGLParameter>>),
|
GetShaderParameter(WebGLShaderId, u32, WebGLSender<WebGLResult<WebGLParameter>>),
|
||||||
GetShaderPrecisionFormat(u32, u32, WebGLSender<WebGLResult<(i32, i32, i32)>>),
|
GetShaderPrecisionFormat(u32, u32, WebGLSender<WebGLResult<(i32, i32, i32)>>),
|
||||||
|
|
|
@ -1342,31 +1342,39 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8
|
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8
|
||||||
unsafe fn GetTexParameter(&self, _cx: *mut JSContext, target: u32, pname: u32) -> JSVal {
|
unsafe fn GetTexParameter(&self, _cx: *mut JSContext, target: u32, pname: u32) -> JSVal {
|
||||||
let texture = match target {
|
let target_matches = match target {
|
||||||
constants::TEXTURE_2D |
|
constants::TEXTURE_2D |
|
||||||
constants::TEXTURE_CUBE_MAP => self.bound_texture(target),
|
constants::TEXTURE_CUBE_MAP => true,
|
||||||
|
_ => false,
|
||||||
|
};
|
||||||
|
|
||||||
|
let pname_matches = match pname {
|
||||||
|
constants::TEXTURE_MAG_FILTER |
|
||||||
|
constants::TEXTURE_MIN_FILTER |
|
||||||
|
constants::TEXTURE_WRAP_S |
|
||||||
|
constants::TEXTURE_WRAP_T => true,
|
||||||
|
_ => false,
|
||||||
|
};
|
||||||
|
|
||||||
|
if !target_matches || !pname_matches {
|
||||||
|
self.webgl_error(InvalidEnum);
|
||||||
|
return NullValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
if self.bound_texture(target).is_none() {
|
||||||
|
self.webgl_error(InvalidOperation);
|
||||||
|
return NullValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
let (sender, receiver) = webgl_channel().unwrap();
|
||||||
|
self.send_command(WebGLCommand::GetTexParameter(target, pname, sender));
|
||||||
|
|
||||||
|
match receiver.recv().unwrap() {
|
||||||
|
value if value != 0 => Int32Value(value),
|
||||||
_ => {
|
_ => {
|
||||||
self.webgl_error(InvalidEnum);
|
self.webgl_error(InvalidEnum);
|
||||||
return NullValue();
|
NullValue()
|
||||||
}
|
}
|
||||||
};
|
|
||||||
if texture.is_some() {
|
|
||||||
let (sender, receiver) = webgl_channel().unwrap();
|
|
||||||
self.send_command(WebGLCommand::GetTexParameter(target, pname, sender));
|
|
||||||
match handle_potential_webgl_error!(self, receiver.recv().unwrap(), WebGLParameter::Invalid) {
|
|
||||||
WebGLParameter::Int(val) => Int32Value(val),
|
|
||||||
WebGLParameter::Bool(_) => panic!("Texture parameter should not be bool"),
|
|
||||||
WebGLParameter::Float(_) => panic!("Texture parameter should not be float"),
|
|
||||||
WebGLParameter::FloatArray(_) => panic!("Texture parameter should not be float array"),
|
|
||||||
WebGLParameter::String(_) => panic!("Texture parameter should not be string"),
|
|
||||||
WebGLParameter::Invalid => {
|
|
||||||
self.webgl_error(InvalidEnum);
|
|
||||||
NullValue()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
self.webgl_error(InvalidOperation);
|
|
||||||
NullValue()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue