Index: webkit/glue/plugins/mac_gpu_plugin_container.h |
=================================================================== |
--- webkit/glue/plugins/mac_gpu_plugin_container.h (revision 0) |
+++ webkit/glue/plugins/mac_gpu_plugin_container.h (revision 0) |
@@ -0,0 +1,98 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef WEBKIT_GLUE_PLUGINS_MAC_GPU_PLUGIN_CONTAINER_H_ |
+#define WEBKIT_GLUE_PLUGINS_MAC_GPU_PLUGIN_CONTAINER_H_ |
+ |
+// The "GPU plugin" is currently implemented as a special kind of |
+// NPAPI plugin to provide high-performance on-screen 3D rendering for |
+// Pepper 3D. |
+// |
+// On Windows and X11 platforms the GPU plugin relies on cross-process |
+// parenting of windows, which is not supported via any public APIs in |
+// the Mac OS X window system. |
+// |
+// To achieve full hardware acceleration we use the new IOSurface APIs |
+// introduced in Mac OS X 10.6. The GPU plugin's process produces an |
+// IOSurface and renders into it using OpenGL. It uses the |
+// IOSurfaceGetID and IOSurfaceLookup APIs to pass a reference to this |
+// surface to the browser process for on-screen rendering. The GPU |
+// plugin essentially looks like a windowless plugin; the browser |
+// process gets all of the mouse events, because the plugin process |
+// does not have an on-screen window. |
+// |
+// This class encapsulates some of the management of these data |
+// structures, in conjunction with the MacGPUPluginContainerManager. |
+ |
+#include <CoreFoundation/CoreFoundation.h> |
+#include <OpenGL/OpenGL.h> |
+ |
+#include "app/gfx/native_widget_types.h" |
+#include "base/basictypes.h" |
+ |
+namespace webkit_glue { |
+struct WebPluginGeometry; |
+} |
+ |
+class MacGPUPluginContainerManager; |
+ |
+class MacGPUPluginContainer { |
+ public: |
+ MacGPUPluginContainer(); |
+ virtual ~MacGPUPluginContainer(); |
+ |
+ // Sets the backing store and size of this plugin container. |
+ void SetSizeAndBackingStore(int32 width, |
+ int32 height, |
+ uint64 io_surface_identifier, |
+ MacGPUPluginContainerManager* manager); |
+ |
+ // Tells the plugin container that it has moved relative to the |
+ // origin of the window, for example because of a scroll event. |
+ void MoveTo(const webkit_glue::WebPluginGeometry& geom); |
+ |
+ // Draws this plugin's contents, texture mapped onto a quad in the |
+ // given OpenGL context. TODO(kbr): figure out and define exactly |
+ // how the coordinate system will work out. |
+ void Draw(CGLContextObj context); |
+ |
+ // Enqueue our texture for later deletion. Call this before deleting |
+ // this object. |
+ void EnqueueTextureForDeletion(MacGPUPluginContainerManager* manager); |
+ |
+ private: |
+ // We currently only have a viable implementation of this class on |
+ // Snow Leopard. We need to think about fallback strategies that |
+ // will work on Leopard. |
+ |
+ // The x and y coordinates of the plugin window on the web page. |
+ // TODO(kbr): see whether additional clipping information is |
+ // necessary. |
+ int x_; |
+ int y_; |
+ |
+ void ReleaseIOSurface(); |
+ |
+ // The IOSurfaceRef, if any, that has been handed from the GPU |
+ // plugin process back to the browser process for drawing. |
+ // This is held as a CFTypeRef because we can't refer to the |
+ // IOSurfaceRef type when building on 10.5. |
+ CFTypeRef surface_; |
+ |
+ // The width and height of the surface. |
+ int32 width_; |
+ int32 height_; |
+ |
+ // The "live" OpenGL texture referring to this IOSurfaceRef. Note |
+ // that per the CGLTexImageIOSurface2D API we do not need to |
+ // explicitly update this texture's contents once created. All we |
+ // need to do is ensure it is re-bound before attempting to draw |
+ // with it. |
+ GLuint texture_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MacGPUPluginContainer); |
+}; |
+ |
+#endif // WEBKIT_GLUE_PLUGINS_MAC_GPU_PLUGIN_CONTAINER_H_ |
+ |
Property changes on: webkit/glue/plugins/mac_gpu_plugin_container.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |