mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
address review comments
This commit is contained in:
parent
9b306aced6
commit
8438db89e1
8 changed files with 42 additions and 39 deletions
|
@ -131,7 +131,6 @@ pub enum CanvasWebGLMsg {
|
||||||
|
|
||||||
#[derive(Clone, Copy, PartialEq)]
|
#[derive(Clone, Copy, PartialEq)]
|
||||||
pub enum WebGLError {
|
pub enum WebGLError {
|
||||||
NoError,
|
|
||||||
InvalidEnum,
|
InvalidEnum,
|
||||||
InvalidOperation,
|
InvalidOperation,
|
||||||
InvalidValue,
|
InvalidValue,
|
||||||
|
|
|
@ -34,8 +34,9 @@ impl WebGLBuffer {
|
||||||
pub fn maybe_new(global: GlobalRef, renderer: Sender<CanvasMsg>) -> Option<Root<WebGLBuffer>> {
|
pub fn maybe_new(global: GlobalRef, renderer: Sender<CanvasMsg>) -> Option<Root<WebGLBuffer>> {
|
||||||
let (sender, receiver) = channel();
|
let (sender, receiver) = channel();
|
||||||
renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::CreateBuffer(sender))).unwrap();
|
renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::CreateBuffer(sender))).unwrap();
|
||||||
receiver.recv().unwrap()
|
|
||||||
.map(|buffer_id| WebGLBuffer::new(global, renderer, *buffer_id))
|
let result = receiver.recv().unwrap();
|
||||||
|
result.map(|buffer_id| WebGLBuffer::new(global, renderer, *buffer_id))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(global: GlobalRef, renderer: Sender<CanvasMsg>, id: u32) -> Root<WebGLBuffer> {
|
pub fn new(global: GlobalRef, renderer: Sender<CanvasMsg>, id: u32) -> Root<WebGLBuffer> {
|
||||||
|
|
|
@ -34,8 +34,9 @@ impl WebGLFramebuffer {
|
||||||
pub fn maybe_new(global: GlobalRef, renderer: Sender<CanvasMsg>) -> Option<Root<WebGLFramebuffer>> {
|
pub fn maybe_new(global: GlobalRef, renderer: Sender<CanvasMsg>) -> Option<Root<WebGLFramebuffer>> {
|
||||||
let (sender, receiver) = channel();
|
let (sender, receiver) = channel();
|
||||||
renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::CreateFramebuffer(sender))).unwrap();
|
renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::CreateFramebuffer(sender))).unwrap();
|
||||||
receiver.recv().unwrap()
|
|
||||||
.map(|fb_id| WebGLFramebuffer::new(global, renderer, *fb_id))
|
let result = receiver.recv().unwrap();
|
||||||
|
result.map(|fb_id| WebGLFramebuffer::new(global, renderer, *fb_id))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(global: GlobalRef, renderer: Sender<CanvasMsg>, id: u32) -> Root<WebGLFramebuffer> {
|
pub fn new(global: GlobalRef, renderer: Sender<CanvasMsg>, id: u32) -> Root<WebGLFramebuffer> {
|
||||||
|
@ -55,9 +56,8 @@ impl<'a> WebGLFramebufferHelpers for &'a WebGLFramebuffer {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bind(self, target: u32) {
|
fn bind(self, target: u32) {
|
||||||
self.renderer.send(
|
let cmd = CanvasWebGLMsg::BindFramebuffer(target, WebGLFramebufferBindingRequest::Explicit(self.id));
|
||||||
CanvasMsg::WebGL(
|
self.renderer.send(CanvasMsg::WebGL(cmd)).unwrap();
|
||||||
CanvasWebGLMsg::BindFramebuffer(target, WebGLFramebufferBindingRequest::Explicit(self.id)))).unwrap();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn delete(self) {
|
fn delete(self) {
|
||||||
|
|
|
@ -42,8 +42,9 @@ impl WebGLProgram {
|
||||||
pub fn maybe_new(global: GlobalRef, renderer: Sender<CanvasMsg>) -> Option<Root<WebGLProgram>> {
|
pub fn maybe_new(global: GlobalRef, renderer: Sender<CanvasMsg>) -> Option<Root<WebGLProgram>> {
|
||||||
let (sender, receiver) = channel();
|
let (sender, receiver) = channel();
|
||||||
renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::CreateProgram(sender))).unwrap();
|
renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::CreateProgram(sender))).unwrap();
|
||||||
receiver.recv().unwrap()
|
|
||||||
.map(|program_id| WebGLProgram::new(global, renderer, *program_id))
|
let result = receiver.recv().unwrap();
|
||||||
|
result.map(|program_id| WebGLProgram::new(global, renderer, *program_id))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(global: GlobalRef, renderer: Sender<CanvasMsg>, id: u32) -> Root<WebGLProgram> {
|
pub fn new(global: GlobalRef, renderer: Sender<CanvasMsg>, id: u32) -> Root<WebGLProgram> {
|
||||||
|
@ -87,7 +88,7 @@ impl<'a> WebGLProgramHelpers for &'a WebGLProgram {
|
||||||
_ => return Err(WebGLError::InvalidOperation),
|
_ => return Err(WebGLError::InvalidOperation),
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO(ecoal95): Differenciate between same shader already assigned and other previous
|
// TODO(ecoal95): Differentiate between same shader already assigned and other previous
|
||||||
// shader.
|
// shader.
|
||||||
if shader_slot.get().is_some() {
|
if shader_slot.get().is_some() {
|
||||||
return Err(WebGLError::InvalidOperation);
|
return Err(WebGLError::InvalidOperation);
|
||||||
|
|
|
@ -34,8 +34,9 @@ impl WebGLRenderbuffer {
|
||||||
pub fn maybe_new(global: GlobalRef, renderer: Sender<CanvasMsg>) -> Option<Root<WebGLRenderbuffer>> {
|
pub fn maybe_new(global: GlobalRef, renderer: Sender<CanvasMsg>) -> Option<Root<WebGLRenderbuffer>> {
|
||||||
let (sender, receiver) = channel();
|
let (sender, receiver) = channel();
|
||||||
renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::CreateRenderbuffer(sender))).unwrap();
|
renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::CreateRenderbuffer(sender))).unwrap();
|
||||||
receiver.recv().unwrap()
|
|
||||||
.map(|renderbuffer_id| WebGLRenderbuffer::new(global, renderer, *renderbuffer_id))
|
let result = receiver.recv().unwrap();
|
||||||
|
result.map(|renderbuffer_id| WebGLRenderbuffer::new(global, renderer, *renderbuffer_id))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(global: GlobalRef, renderer: Sender<CanvasMsg>, id: u32) -> Root<WebGLRenderbuffer> {
|
pub fn new(global: GlobalRef, renderer: Sender<CanvasMsg>, id: u32) -> Root<WebGLRenderbuffer> {
|
||||||
|
|
|
@ -34,7 +34,7 @@ use std::sync::mpsc::{channel, Sender};
|
||||||
use util::str::DOMString;
|
use util::str::DOMString;
|
||||||
use offscreen_gl_context::GLContextAttributes;
|
use offscreen_gl_context::GLContextAttributes;
|
||||||
|
|
||||||
pub const MAX_UNIFORM_AND_ATTRIBUTE_LEN : usize = 256;
|
pub const MAX_UNIFORM_AND_ATTRIBUTE_LEN: usize = 256;
|
||||||
|
|
||||||
macro_rules! handle_potential_webgl_error {
|
macro_rules! handle_potential_webgl_error {
|
||||||
($context:ident, $call:expr, $return_on_error:expr) => {
|
($context:ident, $call:expr, $return_on_error:expr) => {
|
||||||
|
@ -54,7 +54,7 @@ pub struct WebGLRenderingContext {
|
||||||
global: GlobalField,
|
global: GlobalField,
|
||||||
renderer: Sender<CanvasMsg>,
|
renderer: Sender<CanvasMsg>,
|
||||||
canvas: JS<HTMLCanvasElement>,
|
canvas: JS<HTMLCanvasElement>,
|
||||||
last_error: Cell<WebGLError>,
|
last_error: Cell<Option<WebGLError>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WebGLRenderingContext {
|
impl WebGLRenderingContext {
|
||||||
|
@ -69,7 +69,7 @@ impl WebGLRenderingContext {
|
||||||
reflector_: Reflector::new(),
|
reflector_: Reflector::new(),
|
||||||
global: GlobalField::from_rooted(&global),
|
global: GlobalField::from_rooted(&global),
|
||||||
renderer: chan,
|
renderer: chan,
|
||||||
last_error: Cell::new(WebGLError::NoError),
|
last_error: Cell::new(None),
|
||||||
canvas: JS::from_ref(canvas),
|
canvas: JS::from_ref(canvas),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -134,15 +134,18 @@ impl<'a> WebGLRenderingContextMethods for &'a WebGLRenderingContext {
|
||||||
|
|
||||||
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3
|
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3
|
||||||
fn GetError(self) -> u32 {
|
fn GetError(self) -> u32 {
|
||||||
let error_code = match self.last_error.get() {
|
let error_code = if let Some(error) = self.last_error.get() {
|
||||||
WebGLError::NoError => constants::NO_ERROR,
|
match error {
|
||||||
WebGLError::InvalidEnum => constants::INVALID_ENUM,
|
WebGLError::InvalidEnum => constants::INVALID_ENUM,
|
||||||
WebGLError::InvalidValue => constants::INVALID_VALUE,
|
WebGLError::InvalidValue => constants::INVALID_VALUE,
|
||||||
WebGLError::InvalidOperation => constants::INVALID_OPERATION,
|
WebGLError::InvalidOperation => constants::INVALID_OPERATION,
|
||||||
WebGLError::OutOfMemory => constants::OUT_OF_MEMORY,
|
WebGLError::OutOfMemory => constants::OUT_OF_MEMORY,
|
||||||
WebGLError::ContextLost => constants::CONTEXT_LOST_WEBGL,
|
WebGLError::ContextLost => constants::CONTEXT_LOST_WEBGL,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
constants::NO_ERROR
|
||||||
};
|
};
|
||||||
self.last_error.set(WebGLError::NoError);
|
self.last_error.set(None);
|
||||||
error_code
|
error_code
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,9 +234,8 @@ impl<'a> WebGLRenderingContextMethods for &'a WebGLRenderingContext {
|
||||||
framebuffer.bind(target)
|
framebuffer.bind(target)
|
||||||
} else {
|
} else {
|
||||||
// Bind the default framebuffer
|
// Bind the default framebuffer
|
||||||
self.renderer.send(
|
let cmd = CanvasWebGLMsg::BindFramebuffer(target, WebGLFramebufferBindingRequest::Default);
|
||||||
CanvasMsg::WebGL(
|
self.renderer.send(CanvasMsg::WebGL(cmd)).unwrap();
|
||||||
CanvasWebGLMsg::BindFramebuffer(target, WebGLFramebufferBindingRequest::Default))).unwrap()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -502,8 +504,8 @@ impl<'a> WebGLRenderingContextHelpers for &'a WebGLRenderingContext {
|
||||||
fn handle_webgl_error(&self, err: WebGLError) {
|
fn handle_webgl_error(&self, err: WebGLError) {
|
||||||
// If an error has been detected no further errors must be
|
// If an error has been detected no further errors must be
|
||||||
// recorded until `getError` has been called
|
// recorded until `getError` has been called
|
||||||
if self.last_error.get() == WebGLError::NoError {
|
if self.last_error.get().is_none() {
|
||||||
self.last_error.set(err);
|
self.last_error.set(Some(err));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,9 @@ pub struct WebGLShader {
|
||||||
webgl_object: WebGLObject,
|
webgl_object: WebGLObject,
|
||||||
id: u32,
|
id: u32,
|
||||||
gl_type: u32,
|
gl_type: u32,
|
||||||
// TODO(ecoal95): is RefCell ok?
|
|
||||||
source: RefCell<Option<String>>,
|
source: RefCell<Option<String>>,
|
||||||
is_deleted: Cell<bool>,
|
is_deleted: Cell<bool>,
|
||||||
// TODO(ecoal95): Valorate moving this to `WebGLObject`
|
// TODO(ecoal95): Evaluate moving this to `WebGLObject`
|
||||||
renderer: Sender<CanvasMsg>,
|
renderer: Sender<CanvasMsg>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,8 +44,9 @@ impl WebGLShader {
|
||||||
shader_type: u32) -> Option<Root<WebGLShader>> {
|
shader_type: u32) -> Option<Root<WebGLShader>> {
|
||||||
let (sender, receiver) = channel();
|
let (sender, receiver) = channel();
|
||||||
renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::CreateShader(shader_type, sender))).unwrap();
|
renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::CreateShader(shader_type, sender))).unwrap();
|
||||||
receiver.recv().unwrap()
|
|
||||||
.map(|shader_id| WebGLShader::new(global, renderer, *shader_id, shader_type))
|
let result = receiver.recv().unwrap();
|
||||||
|
result.map(|shader_id| WebGLShader::new(global, renderer, *shader_id, shader_type))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(global: GlobalRef,
|
pub fn new(global: GlobalRef,
|
||||||
|
@ -81,13 +81,11 @@ impl<'a> WebGLShaderHelpers for &'a WebGLShader {
|
||||||
// TODO(ecoal95): Validate shaders to be conforming to the WebGL spec
|
// TODO(ecoal95): Validate shaders to be conforming to the WebGL spec
|
||||||
/// glCompileShader
|
/// glCompileShader
|
||||||
fn compile(self) {
|
fn compile(self) {
|
||||||
// NB(ecoal95): We intentionally don't check for source, we don't wan't
|
|
||||||
// to change gl error behavior
|
|
||||||
self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::CompileShader(self.id))).unwrap()
|
self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::CompileShader(self.id))).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Mark this shader as deleted (if it wasn't previously)
|
/// Mark this shader as deleted (if it wasn't previously)
|
||||||
/// and delete it as if calling tr glDeleteShader.
|
/// and delete it as if calling glDeleteShader.
|
||||||
fn delete(self) {
|
fn delete(self) {
|
||||||
if !self.is_deleted.get() {
|
if !self.is_deleted.get() {
|
||||||
self.is_deleted.set(true);
|
self.is_deleted.set(true);
|
||||||
|
@ -116,7 +114,7 @@ impl<'a> WebGLShaderHelpers for &'a WebGLShader {
|
||||||
|
|
||||||
/// Get the shader source
|
/// Get the shader source
|
||||||
fn source(self) -> Option<String> {
|
fn source(self) -> Option<String> {
|
||||||
(*self.source.borrow()).clone()
|
self.source.borrow().clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// glShaderSource
|
/// glShaderSource
|
||||||
|
|
|
@ -34,8 +34,9 @@ impl WebGLTexture {
|
||||||
pub fn maybe_new(global: GlobalRef, renderer: Sender<CanvasMsg>) -> Option<Root<WebGLTexture>> {
|
pub fn maybe_new(global: GlobalRef, renderer: Sender<CanvasMsg>) -> Option<Root<WebGLTexture>> {
|
||||||
let (sender, receiver) = channel();
|
let (sender, receiver) = channel();
|
||||||
renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::CreateTexture(sender))).unwrap();
|
renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::CreateTexture(sender))).unwrap();
|
||||||
receiver.recv().unwrap()
|
|
||||||
.map(|texture_id| WebGLTexture::new(global, renderer, *texture_id))
|
let result = receiver.recv().unwrap();
|
||||||
|
result.map(|texture_id| WebGLTexture::new(global, renderer, *texture_id))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(global: GlobalRef, renderer: Sender<CanvasMsg>, id: u32) -> Root<WebGLTexture> {
|
pub fn new(global: GlobalRef, renderer: Sender<CanvasMsg>, id: u32) -> Root<WebGLTexture> {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue