mirror of
https://github.com/servo/servo.git
synced 2025-07-25 08:10:21 +01:00
Auto merge of #11892 - nox:webgl-wrappers, r=emilio
Use wrappers for GL IDs See https://github.com/servo/webrender_traits/pull/62. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/11892) <!-- Reviewable:end -->
This commit is contained in:
commit
dca85ae98d
11 changed files with 117 additions and 59 deletions
|
@ -96,7 +96,8 @@ use style::values::specified::Length;
|
||||||
use url::Origin as UrlOrigin;
|
use url::Origin as UrlOrigin;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
use webrender_traits::WebGLError;
|
use webrender_traits::{WebGLBufferId, WebGLError, WebGLFramebufferId, WebGLProgramId};
|
||||||
|
use webrender_traits::{WebGLRenderbufferId, WebGLShaderId, WebGLTextureId};
|
||||||
|
|
||||||
/// A trait to allow tracing (only) DOM objects.
|
/// A trait to allow tracing (only) DOM objects.
|
||||||
pub trait JSTraceable {
|
pub trait JSTraceable {
|
||||||
|
@ -332,6 +333,13 @@ no_jsmanaged_fields!(SystemTime);
|
||||||
no_jsmanaged_fields!(SelectedFileId);
|
no_jsmanaged_fields!(SelectedFileId);
|
||||||
no_jsmanaged_fields!(OpaqueStyleAndLayoutData);
|
no_jsmanaged_fields!(OpaqueStyleAndLayoutData);
|
||||||
no_jsmanaged_fields!(CSSErrorReporter);
|
no_jsmanaged_fields!(CSSErrorReporter);
|
||||||
|
no_jsmanaged_fields!(WebGLBufferId);
|
||||||
|
no_jsmanaged_fields!(WebGLFramebufferId);
|
||||||
|
no_jsmanaged_fields!(WebGLProgramId);
|
||||||
|
no_jsmanaged_fields!(WebGLRenderbufferId);
|
||||||
|
no_jsmanaged_fields!(WebGLShaderId);
|
||||||
|
no_jsmanaged_fields!(WebGLTextureId);
|
||||||
|
|
||||||
|
|
||||||
impl JSTraceable for Box<ScriptChan + Send> {
|
impl JSTraceable for Box<ScriptChan + Send> {
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -11,12 +11,12 @@ use dom::bindings::reflector::reflect_dom_object;
|
||||||
use dom::webglobject::WebGLObject;
|
use dom::webglobject::WebGLObject;
|
||||||
use ipc_channel::ipc::{self, IpcSender};
|
use ipc_channel::ipc::{self, IpcSender};
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use webrender_traits::{WebGLCommand, WebGLError, WebGLResult};
|
use webrender_traits::{WebGLBufferId, WebGLCommand, WebGLError, WebGLResult};
|
||||||
|
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
pub struct WebGLBuffer {
|
pub struct WebGLBuffer {
|
||||||
webgl_object: WebGLObject,
|
webgl_object: WebGLObject,
|
||||||
id: u32,
|
id: WebGLBufferId,
|
||||||
/// The target to which this buffer was bound the first time
|
/// The target to which this buffer was bound the first time
|
||||||
target: Cell<Option<u32>>,
|
target: Cell<Option<u32>>,
|
||||||
capacity: Cell<usize>,
|
capacity: Cell<usize>,
|
||||||
|
@ -26,7 +26,9 @@ pub struct WebGLBuffer {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WebGLBuffer {
|
impl WebGLBuffer {
|
||||||
fn new_inherited(renderer: IpcSender<CanvasMsg>, id: u32) -> WebGLBuffer {
|
fn new_inherited(renderer: IpcSender<CanvasMsg>,
|
||||||
|
id: WebGLBufferId)
|
||||||
|
-> WebGLBuffer {
|
||||||
WebGLBuffer {
|
WebGLBuffer {
|
||||||
webgl_object: WebGLObject::new_inherited(),
|
webgl_object: WebGLObject::new_inherited(),
|
||||||
id: id,
|
id: id,
|
||||||
|
@ -43,17 +45,21 @@ impl WebGLBuffer {
|
||||||
renderer.send(CanvasMsg::WebGL(WebGLCommand::CreateBuffer(sender))).unwrap();
|
renderer.send(CanvasMsg::WebGL(WebGLCommand::CreateBuffer(sender))).unwrap();
|
||||||
|
|
||||||
let result = receiver.recv().unwrap();
|
let result = receiver.recv().unwrap();
|
||||||
result.map(|buffer_id| WebGLBuffer::new(global, renderer, *buffer_id))
|
result.map(|buffer_id| WebGLBuffer::new(global, renderer, buffer_id))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(global: GlobalRef, renderer: IpcSender<CanvasMsg>, id: u32) -> Root<WebGLBuffer> {
|
pub fn new(global: GlobalRef,
|
||||||
reflect_dom_object(box WebGLBuffer::new_inherited(renderer, id), global, WebGLBufferBinding::Wrap)
|
renderer: IpcSender<CanvasMsg>,
|
||||||
|
id: WebGLBufferId)
|
||||||
|
-> Root<WebGLBuffer> {
|
||||||
|
reflect_dom_object(box WebGLBuffer::new_inherited(renderer, id),
|
||||||
|
global, WebGLBufferBinding::Wrap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
impl WebGLBuffer {
|
impl WebGLBuffer {
|
||||||
pub fn id(&self) -> u32 {
|
pub fn id(&self) -> WebGLBufferId {
|
||||||
self.id
|
self.id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,7 +72,8 @@ impl WebGLBuffer {
|
||||||
} else {
|
} else {
|
||||||
self.target.set(Some(target));
|
self.target.set(Some(target));
|
||||||
}
|
}
|
||||||
self.renderer.send(CanvasMsg::WebGL(WebGLCommand::BindBuffer(target, self.id))).unwrap();
|
let msg = CanvasMsg::WebGL(WebGLCommand::BindBuffer(target, Some(self.id)));
|
||||||
|
self.renderer.send(msg).unwrap();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,12 +11,12 @@ use dom::bindings::reflector::reflect_dom_object;
|
||||||
use dom::webglobject::WebGLObject;
|
use dom::webglobject::WebGLObject;
|
||||||
use ipc_channel::ipc::{self, IpcSender};
|
use ipc_channel::ipc::{self, IpcSender};
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use webrender_traits::{WebGLCommand, WebGLFramebufferBindingRequest};
|
use webrender_traits::{WebGLCommand, WebGLFramebufferBindingRequest, WebGLFramebufferId};
|
||||||
|
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
pub struct WebGLFramebuffer {
|
pub struct WebGLFramebuffer {
|
||||||
webgl_object: WebGLObject,
|
webgl_object: WebGLObject,
|
||||||
id: u32,
|
id: WebGLFramebufferId,
|
||||||
/// target can only be gl::FRAMEBUFFER at the moment
|
/// target can only be gl::FRAMEBUFFER at the moment
|
||||||
target: Cell<Option<u32>>,
|
target: Cell<Option<u32>>,
|
||||||
is_deleted: Cell<bool>,
|
is_deleted: Cell<bool>,
|
||||||
|
@ -25,7 +25,9 @@ pub struct WebGLFramebuffer {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WebGLFramebuffer {
|
impl WebGLFramebuffer {
|
||||||
fn new_inherited(renderer: IpcSender<CanvasMsg>, id: u32) -> WebGLFramebuffer {
|
fn new_inherited(renderer: IpcSender<CanvasMsg>,
|
||||||
|
id: WebGLFramebufferId)
|
||||||
|
-> WebGLFramebuffer {
|
||||||
WebGLFramebuffer {
|
WebGLFramebuffer {
|
||||||
webgl_object: WebGLObject::new_inherited(),
|
webgl_object: WebGLObject::new_inherited(),
|
||||||
id: id,
|
id: id,
|
||||||
|
@ -41,18 +43,22 @@ impl WebGLFramebuffer {
|
||||||
renderer.send(CanvasMsg::WebGL(WebGLCommand::CreateFramebuffer(sender))).unwrap();
|
renderer.send(CanvasMsg::WebGL(WebGLCommand::CreateFramebuffer(sender))).unwrap();
|
||||||
|
|
||||||
let result = receiver.recv().unwrap();
|
let result = receiver.recv().unwrap();
|
||||||
result.map(|fb_id| WebGLFramebuffer::new(global, renderer, *fb_id))
|
result.map(|fb_id| WebGLFramebuffer::new(global, renderer, fb_id))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(global: GlobalRef, renderer: IpcSender<CanvasMsg>, id: u32)
|
pub fn new(global: GlobalRef,
|
||||||
|
renderer: IpcSender<CanvasMsg>,
|
||||||
|
id: WebGLFramebufferId)
|
||||||
-> Root<WebGLFramebuffer> {
|
-> Root<WebGLFramebuffer> {
|
||||||
reflect_dom_object(box WebGLFramebuffer::new_inherited(renderer, id), global, WebGLFramebufferBinding::Wrap)
|
reflect_dom_object(box WebGLFramebuffer::new_inherited(renderer, id),
|
||||||
|
global,
|
||||||
|
WebGLFramebufferBinding::Wrap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
impl WebGLFramebuffer {
|
impl WebGLFramebuffer {
|
||||||
pub fn id(&self) -> u32 {
|
pub fn id(&self) -> WebGLFramebufferId {
|
||||||
self.id
|
self.id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,12 +16,13 @@ use dom::webglrenderingcontext::MAX_UNIFORM_AND_ATTRIBUTE_LEN;
|
||||||
use dom::webglshader::WebGLShader;
|
use dom::webglshader::WebGLShader;
|
||||||
use ipc_channel::ipc::{self, IpcSender};
|
use ipc_channel::ipc::{self, IpcSender};
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use webrender_traits::{WebGLCommand, WebGLError, WebGLParameter, WebGLResult};
|
use webrender_traits::{WebGLCommand, WebGLError, WebGLParameter};
|
||||||
|
use webrender_traits::{WebGLProgramId, WebGLResult};
|
||||||
|
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
pub struct WebGLProgram {
|
pub struct WebGLProgram {
|
||||||
webgl_object: WebGLObject,
|
webgl_object: WebGLObject,
|
||||||
id: u32,
|
id: WebGLProgramId,
|
||||||
is_deleted: Cell<bool>,
|
is_deleted: Cell<bool>,
|
||||||
linked: Cell<bool>,
|
linked: Cell<bool>,
|
||||||
fragment_shader: MutNullableHeap<JS<WebGLShader>>,
|
fragment_shader: MutNullableHeap<JS<WebGLShader>>,
|
||||||
|
@ -31,7 +32,9 @@ pub struct WebGLProgram {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WebGLProgram {
|
impl WebGLProgram {
|
||||||
fn new_inherited(renderer: IpcSender<CanvasMsg>, id: u32) -> WebGLProgram {
|
fn new_inherited(renderer: IpcSender<CanvasMsg>,
|
||||||
|
id: WebGLProgramId)
|
||||||
|
-> WebGLProgram {
|
||||||
WebGLProgram {
|
WebGLProgram {
|
||||||
webgl_object: WebGLObject::new_inherited(),
|
webgl_object: WebGLObject::new_inherited(),
|
||||||
id: id,
|
id: id,
|
||||||
|
@ -49,17 +52,22 @@ impl WebGLProgram {
|
||||||
renderer.send(CanvasMsg::WebGL(WebGLCommand::CreateProgram(sender))).unwrap();
|
renderer.send(CanvasMsg::WebGL(WebGLCommand::CreateProgram(sender))).unwrap();
|
||||||
|
|
||||||
let result = receiver.recv().unwrap();
|
let result = receiver.recv().unwrap();
|
||||||
result.map(|program_id| WebGLProgram::new(global, renderer, *program_id))
|
result.map(|program_id| WebGLProgram::new(global, renderer, program_id))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(global: GlobalRef, renderer: IpcSender<CanvasMsg>, id: u32) -> Root<WebGLProgram> {
|
pub fn new(global: GlobalRef,
|
||||||
reflect_dom_object(box WebGLProgram::new_inherited(renderer, id), global, WebGLProgramBinding::Wrap)
|
renderer: IpcSender<CanvasMsg>,
|
||||||
|
id: WebGLProgramId)
|
||||||
|
-> Root<WebGLProgram> {
|
||||||
|
reflect_dom_object(box WebGLProgram::new_inherited(renderer, id),
|
||||||
|
global,
|
||||||
|
WebGLProgramBinding::Wrap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
impl WebGLProgram {
|
impl WebGLProgram {
|
||||||
pub fn id(&self) -> u32 {
|
pub fn id(&self) -> WebGLProgramId {
|
||||||
self.id
|
self.id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,12 +11,12 @@ use dom::bindings::reflector::reflect_dom_object;
|
||||||
use dom::webglobject::WebGLObject;
|
use dom::webglobject::WebGLObject;
|
||||||
use ipc_channel::ipc::{self, IpcSender};
|
use ipc_channel::ipc::{self, IpcSender};
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use webrender_traits::WebGLCommand;
|
use webrender_traits::{WebGLCommand, WebGLRenderbufferId};
|
||||||
|
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
pub struct WebGLRenderbuffer {
|
pub struct WebGLRenderbuffer {
|
||||||
webgl_object: WebGLObject,
|
webgl_object: WebGLObject,
|
||||||
id: u32,
|
id: WebGLRenderbufferId,
|
||||||
ever_bound: Cell<bool>,
|
ever_bound: Cell<bool>,
|
||||||
is_deleted: Cell<bool>,
|
is_deleted: Cell<bool>,
|
||||||
#[ignore_heap_size_of = "Defined in ipc-channel"]
|
#[ignore_heap_size_of = "Defined in ipc-channel"]
|
||||||
|
@ -24,7 +24,9 @@ pub struct WebGLRenderbuffer {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WebGLRenderbuffer {
|
impl WebGLRenderbuffer {
|
||||||
fn new_inherited(renderer: IpcSender<CanvasMsg>, id: u32) -> WebGLRenderbuffer {
|
fn new_inherited(renderer: IpcSender<CanvasMsg>,
|
||||||
|
id: WebGLRenderbufferId)
|
||||||
|
-> WebGLRenderbuffer {
|
||||||
WebGLRenderbuffer {
|
WebGLRenderbuffer {
|
||||||
webgl_object: WebGLObject::new_inherited(),
|
webgl_object: WebGLObject::new_inherited(),
|
||||||
id: id,
|
id: id,
|
||||||
|
@ -40,24 +42,29 @@ impl WebGLRenderbuffer {
|
||||||
renderer.send(CanvasMsg::WebGL(WebGLCommand::CreateRenderbuffer(sender))).unwrap();
|
renderer.send(CanvasMsg::WebGL(WebGLCommand::CreateRenderbuffer(sender))).unwrap();
|
||||||
|
|
||||||
let result = receiver.recv().unwrap();
|
let result = receiver.recv().unwrap();
|
||||||
result.map(|renderbuffer_id| WebGLRenderbuffer::new(global, renderer, *renderbuffer_id))
|
result.map(|renderbuffer_id| WebGLRenderbuffer::new(global, renderer, renderbuffer_id))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(global: GlobalRef, renderer: IpcSender<CanvasMsg>, id: u32)
|
pub fn new(global: GlobalRef,
|
||||||
|
renderer: IpcSender<CanvasMsg>,
|
||||||
|
id: WebGLRenderbufferId)
|
||||||
-> Root<WebGLRenderbuffer> {
|
-> Root<WebGLRenderbuffer> {
|
||||||
reflect_dom_object(box WebGLRenderbuffer::new_inherited(renderer, id), global, WebGLRenderbufferBinding::Wrap)
|
reflect_dom_object(box WebGLRenderbuffer::new_inherited(renderer, id),
|
||||||
|
global,
|
||||||
|
WebGLRenderbufferBinding::Wrap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
impl WebGLRenderbuffer {
|
impl WebGLRenderbuffer {
|
||||||
pub fn id(&self) -> u32 {
|
pub fn id(&self) -> WebGLRenderbufferId {
|
||||||
self.id
|
self.id
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn bind(&self, target: u32) {
|
pub fn bind(&self, target: u32) {
|
||||||
self.ever_bound.set(true);
|
self.ever_bound.set(true);
|
||||||
self.renderer.send(CanvasMsg::WebGL(WebGLCommand::BindRenderbuffer(target, self.id))).unwrap();
|
let msg = CanvasMsg::WebGL(WebGLCommand::BindRenderbuffer(target, Some(self.id)));
|
||||||
|
self.renderer.send(msg).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn delete(&self) {
|
pub fn delete(&self) {
|
||||||
|
|
|
@ -661,7 +661,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
||||||
slot.set(None);
|
slot.set(None);
|
||||||
// Unbind the current buffer
|
// Unbind the current buffer
|
||||||
self.ipc_renderer
|
self.ipc_renderer
|
||||||
.send(CanvasMsg::WebGL(WebGLCommand::BindBuffer(target, 0)))
|
.send(CanvasMsg::WebGL(WebGLCommand::BindBuffer(target, None)))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -692,7 +692,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
||||||
} else {
|
} else {
|
||||||
// Unbind the currently bound renderbuffer
|
// Unbind the currently bound renderbuffer
|
||||||
self.ipc_renderer
|
self.ipc_renderer
|
||||||
.send(CanvasMsg::WebGL(WebGLCommand::BindRenderbuffer(target, 0)))
|
.send(CanvasMsg::WebGL(WebGLCommand::BindRenderbuffer(target, None)))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -713,7 +713,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
||||||
} else {
|
} else {
|
||||||
// Unbind the currently bound texture
|
// Unbind the currently bound texture
|
||||||
self.ipc_renderer
|
self.ipc_renderer
|
||||||
.send(CanvasMsg::WebGL(WebGLCommand::BindTexture(target, 0)))
|
.send(CanvasMsg::WebGL(WebGLCommand::BindTexture(target, None)))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ use dom::webglobject::WebGLObject;
|
||||||
use ipc_channel::ipc::{self, IpcSender};
|
use ipc_channel::ipc::{self, IpcSender};
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use std::sync::{ONCE_INIT, Once};
|
use std::sync::{ONCE_INIT, Once};
|
||||||
use webrender_traits::{WebGLCommand, WebGLParameter, WebGLResult};
|
use webrender_traits::{WebGLCommand, WebGLParameter, WebGLResult, WebGLShaderId};
|
||||||
|
|
||||||
#[derive(Clone, Copy, PartialEq, Debug, JSTraceable, HeapSizeOf)]
|
#[derive(Clone, Copy, PartialEq, Debug, JSTraceable, HeapSizeOf)]
|
||||||
pub enum ShaderCompilationStatus {
|
pub enum ShaderCompilationStatus {
|
||||||
|
@ -27,7 +27,7 @@ pub enum ShaderCompilationStatus {
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
pub struct WebGLShader {
|
pub struct WebGLShader {
|
||||||
webgl_object: WebGLObject,
|
webgl_object: WebGLObject,
|
||||||
id: u32,
|
id: WebGLShaderId,
|
||||||
gl_type: u32,
|
gl_type: u32,
|
||||||
source: DOMRefCell<Option<DOMString>>,
|
source: DOMRefCell<Option<DOMString>>,
|
||||||
info_log: DOMRefCell<Option<String>>,
|
info_log: DOMRefCell<Option<String>>,
|
||||||
|
@ -47,7 +47,10 @@ const SHADER_OUTPUT_FORMAT: Output = Output::Essl;
|
||||||
static GLSLANG_INITIALIZATION: Once = ONCE_INIT;
|
static GLSLANG_INITIALIZATION: Once = ONCE_INIT;
|
||||||
|
|
||||||
impl WebGLShader {
|
impl WebGLShader {
|
||||||
fn new_inherited(renderer: IpcSender<CanvasMsg>, id: u32, shader_type: u32) -> WebGLShader {
|
fn new_inherited(renderer: IpcSender<CanvasMsg>,
|
||||||
|
id: WebGLShaderId,
|
||||||
|
shader_type: u32)
|
||||||
|
-> WebGLShader {
|
||||||
GLSLANG_INITIALIZATION.call_once(|| ::angle::hl::initialize().unwrap());
|
GLSLANG_INITIALIZATION.call_once(|| ::angle::hl::initialize().unwrap());
|
||||||
WebGLShader {
|
WebGLShader {
|
||||||
webgl_object: WebGLObject::new_inherited(),
|
webgl_object: WebGLObject::new_inherited(),
|
||||||
|
@ -69,21 +72,23 @@ impl WebGLShader {
|
||||||
renderer.send(CanvasMsg::WebGL(WebGLCommand::CreateShader(shader_type, sender))).unwrap();
|
renderer.send(CanvasMsg::WebGL(WebGLCommand::CreateShader(shader_type, sender))).unwrap();
|
||||||
|
|
||||||
let result = receiver.recv().unwrap();
|
let result = receiver.recv().unwrap();
|
||||||
result.map(|shader_id| WebGLShader::new(global, renderer, *shader_id, shader_type))
|
result.map(|shader_id| WebGLShader::new(global, renderer, shader_id, shader_type))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(global: GlobalRef,
|
pub fn new(global: GlobalRef,
|
||||||
renderer: IpcSender<CanvasMsg>,
|
renderer: IpcSender<CanvasMsg>,
|
||||||
id: u32,
|
id: WebGLShaderId,
|
||||||
shader_type: u32) -> Root<WebGLShader> {
|
shader_type: u32)
|
||||||
reflect_dom_object(
|
-> Root<WebGLShader> {
|
||||||
box WebGLShader::new_inherited(renderer, id, shader_type), global, WebGLShaderBinding::Wrap)
|
reflect_dom_object(box WebGLShader::new_inherited(renderer, id, shader_type),
|
||||||
|
global,
|
||||||
|
WebGLShaderBinding::Wrap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
impl WebGLShader {
|
impl WebGLShader {
|
||||||
pub fn id(&self) -> u32 {
|
pub fn id(&self) -> WebGLShaderId {
|
||||||
self.id
|
self.id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ use dom::webglobject::WebGLObject;
|
||||||
use ipc_channel::ipc::{self, IpcSender};
|
use ipc_channel::ipc::{self, IpcSender};
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use std::cmp;
|
use std::cmp;
|
||||||
use webrender_traits::{WebGLCommand, WebGLError, WebGLResult};
|
use webrender_traits::{WebGLCommand, WebGLError, WebGLResult, WebGLTextureId};
|
||||||
|
|
||||||
pub enum TexParameterValue {
|
pub enum TexParameterValue {
|
||||||
Float(f32),
|
Float(f32),
|
||||||
|
@ -30,7 +30,7 @@ no_jsmanaged_fields!([ImageInfo; MAX_LEVEL_COUNT * MAX_FACE_COUNT]);
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
pub struct WebGLTexture {
|
pub struct WebGLTexture {
|
||||||
webgl_object: WebGLObject,
|
webgl_object: WebGLObject,
|
||||||
id: u32,
|
id: WebGLTextureId,
|
||||||
/// The target to which this texture was bound the first time
|
/// The target to which this texture was bound the first time
|
||||||
target: Cell<Option<u32>>,
|
target: Cell<Option<u32>>,
|
||||||
is_deleted: Cell<bool>,
|
is_deleted: Cell<bool>,
|
||||||
|
@ -45,7 +45,9 @@ pub struct WebGLTexture {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WebGLTexture {
|
impl WebGLTexture {
|
||||||
fn new_inherited(renderer: IpcSender<CanvasMsg>, id: u32) -> WebGLTexture {
|
fn new_inherited(renderer: IpcSender<CanvasMsg>,
|
||||||
|
id: WebGLTextureId)
|
||||||
|
-> WebGLTexture {
|
||||||
WebGLTexture {
|
WebGLTexture {
|
||||||
webgl_object: WebGLObject::new_inherited(),
|
webgl_object: WebGLObject::new_inherited(),
|
||||||
id: id,
|
id: id,
|
||||||
|
@ -64,17 +66,22 @@ impl WebGLTexture {
|
||||||
renderer.send(CanvasMsg::WebGL(WebGLCommand::CreateTexture(sender))).unwrap();
|
renderer.send(CanvasMsg::WebGL(WebGLCommand::CreateTexture(sender))).unwrap();
|
||||||
|
|
||||||
let result = receiver.recv().unwrap();
|
let result = receiver.recv().unwrap();
|
||||||
result.map(|texture_id| WebGLTexture::new(global, renderer, *texture_id))
|
result.map(|texture_id| WebGLTexture::new(global, renderer, texture_id))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(global: GlobalRef, renderer: IpcSender<CanvasMsg>, id: u32) -> Root<WebGLTexture> {
|
pub fn new(global: GlobalRef,
|
||||||
reflect_dom_object(box WebGLTexture::new_inherited(renderer, id), global, WebGLTextureBinding::Wrap)
|
renderer: IpcSender<CanvasMsg>,
|
||||||
|
id: WebGLTextureId)
|
||||||
|
-> Root<WebGLTexture> {
|
||||||
|
reflect_dom_object(box WebGLTexture::new_inherited(renderer, id),
|
||||||
|
global,
|
||||||
|
WebGLTextureBinding::Wrap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
impl WebGLTexture {
|
impl WebGLTexture {
|
||||||
pub fn id(&self) -> u32 {
|
pub fn id(&self) -> WebGLTextureId {
|
||||||
self.id
|
self.id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +106,8 @@ impl WebGLTexture {
|
||||||
self.target.set(Some(target));
|
self.target.set(Some(target));
|
||||||
}
|
}
|
||||||
|
|
||||||
self.renderer.send(CanvasMsg::WebGL(WebGLCommand::BindTexture(target, self.id))).unwrap();
|
let msg = CanvasMsg::WebGL(WebGLCommand::BindTexture(target, Some(self.id)));
|
||||||
|
self.renderer.send(msg).unwrap();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,16 +7,19 @@ use dom::bindings::codegen::Bindings::WebGLUniformLocationBinding;
|
||||||
use dom::bindings::global::GlobalRef;
|
use dom::bindings::global::GlobalRef;
|
||||||
use dom::bindings::js::Root;
|
use dom::bindings::js::Root;
|
||||||
use dom::bindings::reflector::{Reflector, reflect_dom_object};
|
use dom::bindings::reflector::{Reflector, reflect_dom_object};
|
||||||
|
use webrender_traits::WebGLProgramId;
|
||||||
|
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
pub struct WebGLUniformLocation {
|
pub struct WebGLUniformLocation {
|
||||||
reflector_: Reflector,
|
reflector_: Reflector,
|
||||||
id: i32,
|
id: i32,
|
||||||
program_id: u32,
|
program_id: WebGLProgramId,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WebGLUniformLocation {
|
impl WebGLUniformLocation {
|
||||||
fn new_inherited(id: i32, program_id: u32) -> WebGLUniformLocation {
|
fn new_inherited(id: i32,
|
||||||
|
program_id: WebGLProgramId)
|
||||||
|
-> WebGLUniformLocation {
|
||||||
WebGLUniformLocation {
|
WebGLUniformLocation {
|
||||||
reflector_: Reflector::new(),
|
reflector_: Reflector::new(),
|
||||||
id: id,
|
id: id,
|
||||||
|
@ -24,16 +27,20 @@ impl WebGLUniformLocation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(global: GlobalRef, id: i32, program_id: u32) -> Root<WebGLUniformLocation> {
|
pub fn new(global: GlobalRef,
|
||||||
reflect_dom_object(
|
id: i32,
|
||||||
box WebGLUniformLocation::new_inherited(id, program_id), global, WebGLUniformLocationBinding::Wrap)
|
program_id: WebGLProgramId)
|
||||||
|
-> Root<WebGLUniformLocation> {
|
||||||
|
reflect_dom_object(box WebGLUniformLocation::new_inherited(id, program_id),
|
||||||
|
global,
|
||||||
|
WebGLUniformLocationBinding::Wrap)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn id(&self) -> i32 {
|
pub fn id(&self) -> i32 {
|
||||||
self.id
|
self.id
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn program_id(&self) -> u32 {
|
pub fn program_id(&self) -> WebGLProgramId {
|
||||||
self.program_id
|
self.program_id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
3
components/servo/Cargo.lock
generated
3
components/servo/Cargo.lock
generated
|
@ -2609,13 +2609,14 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "webrender_traits"
|
name = "webrender_traits"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/servo/webrender_traits#9e9563e0a2528f169e826b3036adfc41cee9f160"
|
source = "git+https://github.com/servo/webrender_traits#a466592568193d9ec8a57de9837dddb28ee9631e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"app_units 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"app_units 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"core-graphics 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"core-graphics 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"euclid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"euclid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gleam 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gleam 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"ipc-channel 0.2.3 (git+https://github.com/servo/ipc-channel)",
|
"ipc-channel 0.2.3 (git+https://github.com/servo/ipc-channel)",
|
||||||
"offscreen_gl_context 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
"offscreen_gl_context 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
|
3
ports/cef/Cargo.lock
generated
3
ports/cef/Cargo.lock
generated
|
@ -2471,13 +2471,14 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "webrender_traits"
|
name = "webrender_traits"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/servo/webrender_traits#9e9563e0a2528f169e826b3036adfc41cee9f160"
|
source = "git+https://github.com/servo/webrender_traits#a466592568193d9ec8a57de9837dddb28ee9631e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"app_units 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"app_units 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"core-graphics 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"core-graphics 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"euclid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"euclid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gleam 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gleam 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"ipc-channel 0.2.3 (git+https://github.com/servo/ipc-channel)",
|
"ipc-channel 0.2.3 (git+https://github.com/servo/ipc-channel)",
|
||||||
"offscreen_gl_context 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
"offscreen_gl_context 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue