mirror of
https://github.com/servo/servo.git
synced 2025-07-16 11:53:39 +01:00
Simplify gl.getShaderParameter() (fixes #20562)
The expectation change is due to the shader now using its DOM-side compile status. It is actually a bug for the shader to think it actually compiled successfully, but at least it does so consistently now.
This commit is contained in:
parent
a0fc4c9832
commit
76f23f7d78
5 changed files with 13 additions and 41 deletions
|
@ -932,20 +932,6 @@ impl WebGLImpl {
|
|||
}
|
||||
sender.send(value[0]).unwrap()
|
||||
}
|
||||
WebGLCommand::GetShaderParameterBool(shader, param, ref sender) => {
|
||||
let mut value = [0];
|
||||
unsafe {
|
||||
ctx.gl().get_shader_iv(shader.get(), param as u32, &mut value);
|
||||
}
|
||||
sender.send(value[0] != 0).unwrap()
|
||||
}
|
||||
WebGLCommand::GetShaderParameterInt(shader, param, ref sender) => {
|
||||
let mut value = [0];
|
||||
unsafe {
|
||||
ctx.gl().get_shader_iv(shader.get(), param as u32, &mut value);
|
||||
}
|
||||
sender.send(value[0]).unwrap()
|
||||
}
|
||||
WebGLCommand::GetCurrentVertexAttrib(index, ref sender) => {
|
||||
let mut value = [0.; 4];
|
||||
unsafe {
|
||||
|
|
|
@ -273,8 +273,6 @@ pub enum WebGLCommand {
|
|||
GetParameterFloat4(ParameterFloat4, WebGLSender<[f32; 4]>),
|
||||
GetProgramValidateStatus(WebGLProgramId, WebGLSender<bool>),
|
||||
GetProgramActiveUniforms(WebGLProgramId, WebGLSender<i32>),
|
||||
GetShaderParameterBool(WebGLShaderId, ShaderParameterBool, WebGLSender<bool>),
|
||||
GetShaderParameterInt(WebGLShaderId, ShaderParameterInt, WebGLSender<i32>),
|
||||
GetCurrentVertexAttrib(u32, WebGLSender<[f32; 4]>),
|
||||
GetTexParameterFloat(u32, TexParameterFloat, WebGLSender<f32>),
|
||||
GetTexParameterInt(u32, TexParameterInt, WebGLSender<i32>),
|
||||
|
@ -583,18 +581,6 @@ parameters! {
|
|||
}
|
||||
}
|
||||
|
||||
parameters! {
|
||||
ShaderParameter {
|
||||
Bool(ShaderParameterBool {
|
||||
DeleteStatus = gl::DELETE_STATUS,
|
||||
CompileStatus = gl::COMPILE_STATUS,
|
||||
}),
|
||||
Int(ShaderParameterInt {
|
||||
ShaderType = gl::SHADER_TYPE,
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
parameters! {
|
||||
TexParameter {
|
||||
Float(TexParameterFloat {
|
||||
|
|
|
@ -5,8 +5,7 @@
|
|||
use byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt};
|
||||
use canvas_traits::canvas::{byte_swap, multiply_u8_pixel};
|
||||
use canvas_traits::webgl::{ActiveAttribInfo, DOMToTextureCommand, Parameter};
|
||||
use canvas_traits::webgl::{ShaderParameter, TexParameter, WebGLCommand};
|
||||
use canvas_traits::webgl::{WebGLContextShareMode, WebGLError};
|
||||
use canvas_traits::webgl::{TexParameter, WebGLCommand, WebGLContextShareMode, WebGLError};
|
||||
use canvas_traits::webgl::{WebGLFramebufferBindingRequest, WebGLMsg, WebGLMsgSender};
|
||||
use canvas_traits::webgl::{WebGLProgramId, WebGLResult, WebGLSLVersion, WebGLSender};
|
||||
use canvas_traits::webgl::{WebGLVersion, WebVRCommand, webgl_channel};
|
||||
|
@ -2737,16 +2736,13 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
|||
self.webgl_error(InvalidValue);
|
||||
return NullValue();
|
||||
}
|
||||
match handle_potential_webgl_error!(self, ShaderParameter::from_u32(param), return NullValue()) {
|
||||
ShaderParameter::Bool(param) => {
|
||||
let (sender, receiver) = webgl_channel().unwrap();
|
||||
self.send_command(WebGLCommand::GetShaderParameterBool(shader.id(), param, sender));
|
||||
BooleanValue(receiver.recv().unwrap())
|
||||
}
|
||||
ShaderParameter::Int(param) => {
|
||||
let (sender, receiver) = webgl_channel().unwrap();
|
||||
self.send_command(WebGLCommand::GetShaderParameterInt(shader.id(), param, sender));
|
||||
Int32Value(receiver.recv().unwrap())
|
||||
match param {
|
||||
constants::DELETE_STATUS => BooleanValue(shader.is_marked_for_deletion()),
|
||||
constants::COMPILE_STATUS => BooleanValue(shader.successfully_compiled()),
|
||||
constants::SHADER_TYPE => UInt32Value(shader.gl_type()),
|
||||
_ => {
|
||||
self.webgl_error(InvalidEnum);
|
||||
NullValue()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -192,6 +192,10 @@ impl WebGLShader {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn is_marked_for_deletion(&self) -> bool {
|
||||
self.marked_for_deletion.get()
|
||||
}
|
||||
|
||||
pub fn is_deleted(&self) -> bool {
|
||||
self.marked_for_deletion.get() && !self.is_attached()
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
[WebGL test #2: [unexpected fragment shader compile status\] (expected: true) vertex shader with variant varying and fragment shader with invariant (global setting) varying must fail]
|
||||
expected: FAIL
|
||||
|
||||
[WebGL test #9: [unexpected fragment shader compile status\] (expected: true) vertex shader with invariant varying and fragment shader with invariant (global setting) varying must succeed]
|
||||
[WebGL test #9: [unexpected link status\] vertex shader with invariant varying and fragment shader with invariant (global setting) varying must succeed]
|
||||
expected: FAIL
|
||||
|
||||
[WebGL test #11: [unexpected link status\] vertex shader with variant gl_Position and fragment shader with invariant gl_FragCoord must fail]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue