aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglprogram.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-04-22 11:25:29 -0700
committerbors-servo <lbergstrom+bors@mozilla.com>2016-04-22 11:25:29 -0700
commitf1defb446e8cd4e36231acae77f11c72c74964b0 (patch)
treefdf0d92dbc5d74c5c2efad7ebfaa504408a68489 /components/script/dom/webglprogram.rs
parentd926b5d3762a101d5280266f806f2b979f73b695 (diff)
parent9fff9d45d1108fcb2a594feb091e0f64d2cab7e4 (diff)
downloadservo-f1defb446e8cd4e36231acae77f11c72c74964b0.tar.gz
servo-f1defb446e8cd4e36231acae77f11c72c74964b0.zip
Auto merge of #10443 - emilio:webgl-teximage2d-overload, r=jdm
webgl: Implement the pending texImage2D overload, and add more validation This is a large-ish refactor of the Texture2D code, but it should be easier to read and of course more correct. I tried to annotate every error condition with a spec paragraph. I made just a reftest to ensure this works as intended, since I expect #10373 to land pretty soon. <!-- 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/10443) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/webglprogram.rs')
-rw-r--r--components/script/dom/webglprogram.rs22
1 files changed, 16 insertions, 6 deletions
diff --git a/components/script/dom/webglprogram.rs b/components/script/dom/webglprogram.rs
index 0458e2ae2ca..6cc122cf459 100644
--- a/components/script/dom/webglprogram.rs
+++ b/components/script/dom/webglprogram.rs
@@ -23,6 +23,7 @@ pub struct WebGLProgram {
webgl_object: WebGLObject,
id: u32,
is_deleted: Cell<bool>,
+ linked: Cell<bool>,
fragment_shader: MutNullableHeap<JS<WebGLShader>>,
vertex_shader: MutNullableHeap<JS<WebGLShader>>,
#[ignore_heap_size_of = "Defined in ipc-channel"]
@@ -35,6 +36,7 @@ impl WebGLProgram {
webgl_object: WebGLObject::new_inherited(),
id: id,
is_deleted: Cell::new(false),
+ linked: Cell::new(false),
fragment_shader: Default::default(),
vertex_shader: Default::default(),
renderer: renderer,
@@ -71,19 +73,27 @@ impl WebGLProgram {
/// glLinkProgram
pub fn link(&self) {
- self.renderer.send(CanvasMsg::WebGL(WebGLCommand::LinkProgram(self.id))).unwrap();
- }
+ self.linked.set(false);
- /// glUseProgram
- pub fn use_program(&self) -> WebGLResult<()> {
match self.fragment_shader.get() {
Some(ref shader) if shader.successfully_compiled() => {},
- _ => return Err(WebGLError::InvalidOperation),
+ _ => return,
}
match self.vertex_shader.get() {
Some(ref shader) if shader.successfully_compiled() => {},
- _ => return Err(WebGLError::InvalidOperation),
+ _ => return,
+ }
+
+ self.linked.set(true);
+
+ self.renderer.send(CanvasMsg::WebGL(WebGLCommand::LinkProgram(self.id))).unwrap();
+ }
+
+ /// glUseProgram
+ pub fn use_program(&self) -> WebGLResult<()> {
+ if !self.linked.get() {
+ return Err(WebGLError::InvalidOperation);
}
self.renderer.send(CanvasMsg::WebGL(WebGLCommand::UseProgram(self.id))).unwrap();