mirror of
https://github.com/servo/servo.git
synced 2025-08-02 20:20:14 +01:00
Fix highp precision in shaders & Implement WebGL::GetShaderPrecisionFormat
This commit is contained in:
parent
7f825d2119
commit
6b0c898e1a
7 changed files with 31 additions and 346 deletions
|
@ -31,6 +31,7 @@ use dom::webglframebuffer::WebGLFramebuffer;
|
|||
use dom::webglprogram::WebGLProgram;
|
||||
use dom::webglrenderbuffer::WebGLRenderbuffer;
|
||||
use dom::webglshader::WebGLShader;
|
||||
use dom::webglshaderprecisionformat::WebGLShaderPrecisionFormat;
|
||||
use dom::webgltexture::{TexParameterValue, WebGLTexture};
|
||||
use dom::webgluniformlocation::WebGLUniformLocation;
|
||||
use dom::window::Window;
|
||||
|
@ -1902,6 +1903,27 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
|||
}
|
||||
}
|
||||
|
||||
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
|
||||
fn GetShaderPrecisionFormat(&self,
|
||||
shader_type: u32,
|
||||
precision_type: u32)
|
||||
-> Option<Root<WebGLShaderPrecisionFormat>> {
|
||||
let (sender, receiver) = webrender_traits::channel::msg_channel().unwrap();
|
||||
self.ipc_renderer.send(CanvasMsg::WebGL(WebGLCommand::GetShaderPrecisionFormat(shader_type,
|
||||
precision_type,
|
||||
sender)))
|
||||
.unwrap();
|
||||
match receiver.recv().unwrap() {
|
||||
Ok((range_min, range_max, precision)) => {
|
||||
Some(WebGLShaderPrecisionFormat::new(self.global().as_window(), range_min, range_max, precision))
|
||||
},
|
||||
Err(error) => {
|
||||
self.webgl_error(error);
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
|
||||
fn GetUniformLocation(&self,
|
||||
program: Option<&WebGLProgram>,
|
||||
|
|
|
@ -106,9 +106,11 @@ impl WebGLShader {
|
|||
}
|
||||
|
||||
if let Some(ref source) = *self.source.borrow() {
|
||||
let mut params = BuiltInResources::default();
|
||||
params.FragmentPrecisionHigh = 1;
|
||||
let validator = ShaderValidator::for_webgl(self.gl_type,
|
||||
SHADER_OUTPUT_FORMAT,
|
||||
&BuiltInResources::default()).unwrap();
|
||||
¶ms).unwrap();
|
||||
match validator.compile_and_translate(&[source]) {
|
||||
Ok(translated_source) => {
|
||||
debug!("Shader translated: {}", translated_source);
|
||||
|
|
|
@ -595,7 +595,7 @@ interface WebGLRenderingContextBase
|
|||
DOMString? getProgramInfoLog(WebGLProgram? program);
|
||||
//any getRenderbufferParameter(GLenum target, GLenum pname);
|
||||
any getShaderParameter(WebGLShader? shader, GLenum pname);
|
||||
//WebGLShaderPrecisionFormat? getShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype);
|
||||
WebGLShaderPrecisionFormat? getShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype);
|
||||
DOMString? getShaderInfoLog(WebGLShader? shader);
|
||||
|
||||
DOMString? getShaderSource(WebGLShader? shader);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue