Final patch for Canvas 3D support
https://bugs.webkit.org/show_bug.cgi?id=28018
This hooks everything up and provides a working implementation of
Canvas 3D. I plumb the creation of the 3D canvas down to GraphicsLayer,
passing the opaque context and texture pointers so a Canvas3DLayer can be
created (more on that later). It also plumbs changes to the 3D canvas so
that Canvas3DLayer can recomposite the results.
A 3D Canvas element needs a RenderLayer and compositing layer to render.
This is because it renders to an off-screen texture in the GPU and then
hands it to a Canvas3DLayer, which is a subclass of CAOpenGLLayer, to
render that texture as a 3D quad. This keeps everything in GPU memory to
maximize performance. When a CanvasRenderingContext3D is created it
forces a style recalc which creates the RenderLayer and compositing
layer if needed.
I repurposed an existing flag which was put in place for animation to accomplish
this. This flag is passed to setNeedsStyleRecalc(), and I renamed it from
AnimationStyleChange to SyntheticStyleChange. It essentially says that you need
to do a complete style recalc, even though the style itself has not really
changed.
This patch also fixes a couple of bugs discovered when testing with 3d-canvas
turned on. I also added a constructor DOMWindow.idl for CanvasRenderingContext3D.
This is needed when making a JS wrapper for the object so the prototype
property can be set.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@47843 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/rendering/RenderLayerCompositor.h b/WebCore/rendering/RenderLayerCompositor.h
index 8dd689c..a809a70 100644
--- a/WebCore/rendering/RenderLayerCompositor.h
+++ b/WebCore/rendering/RenderLayerCompositor.h
@@ -164,6 +164,7 @@
bool requiresCompositingForAnimation(RenderObject*) const;
bool requiresCompositingForTransform(RenderObject*) const;
bool requiresCompositingForVideo(RenderObject*) const;
+ bool requiresCompositingForCanvas(RenderObject*) const;
bool requiresCompositingWhenDescendantsAreCompositing(RenderObject*) const;
private: