| Index: webkit/glue/plugins/mac_gpu_plugin_container.cc
|
| ===================================================================
|
| --- webkit/glue/plugins/mac_gpu_plugin_container.cc (revision 0)
|
| +++ webkit/glue/plugins/mac_gpu_plugin_container.cc (revision 0)
|
| @@ -0,0 +1,104 @@
|
| +// 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.
|
| +
|
| +#include "webkit/glue/plugins/mac_gpu_plugin_container.h"
|
| +
|
| +#include "webkit/glue/webplugin.h"
|
| +#include "webkit/glue/plugins/mac_gpu_plugin_container_manager.h"
|
| +#include "chrome/common/io_surface_support_mac.h"
|
| +
|
| +MacGPUPluginContainer::MacGPUPluginContainer()
|
| + : x_(0),
|
| + y_(0),
|
| + surface_(NULL),
|
| + width_(0),
|
| + height_(0),
|
| + texture_(0) {
|
| +}
|
| +
|
| +MacGPUPluginContainer::~MacGPUPluginContainer() {
|
| + ReleaseIOSurface();
|
| +}
|
| +
|
| +void MacGPUPluginContainer::ReleaseIOSurface() {
|
| + if (surface_) {
|
| + CFRelease(surface_);
|
| + surface_ = NULL;
|
| + }
|
| +}
|
| +
|
| +void MacGPUPluginContainer::SetSizeAndBackingStore(
|
| + int32 width,
|
| + int32 height,
|
| + uint64 io_surface_identifier,
|
| + MacGPUPluginContainerManager* manager) {
|
| + ReleaseIOSurface();
|
| + IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize();
|
| + if (io_surface_support) {
|
| + surface_ = io_surface_support->IOSurfaceLookup(
|
| + static_cast<uint32>(io_surface_identifier));
|
| + EnqueueTextureForDeletion(manager);
|
| + width_ = width;
|
| + height_ = height;
|
| + }
|
| +}
|
| +
|
| +void MacGPUPluginContainer::MoveTo(
|
| + const webkit_glue::WebPluginGeometry& geom) {
|
| + // TODO(kbr): figure out whether additional information is necessary
|
| + // to keep around.
|
| + x_ = geom.window_rect.x();
|
| + y_ = geom.window_rect.y();
|
| +}
|
| +
|
| +void MacGPUPluginContainer::Draw(CGLContextObj context) {
|
| + IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize();
|
| + if (!io_surface_support)
|
| + return;
|
| +
|
| + GLenum target = GL_TEXTURE_RECTANGLE_ARB;
|
| + if (!texture_ && surface_) {
|
| + glGenTextures(1, &texture_);
|
| + glBindTexture(target, texture_);
|
| + glTexParameterf(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
| + glTexParameterf(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
| + // Don't think we need to identify a plane.
|
| + GLuint plane = 0;
|
| + io_surface_support->CGLTexImageIOSurface2D(context,
|
| + target,
|
| + GL_RGBA,
|
| + width_,
|
| + height_,
|
| + GL_BGRA,
|
| + GL_UNSIGNED_INT_8_8_8_8_REV,
|
| + surface_,
|
| + plane);
|
| + }
|
| +
|
| + if (texture_) {
|
| + // TODO(kbr): convert this to use only OpenGL ES 2.0 functionality
|
| + glBindTexture(target, texture_);
|
| + glEnable(target);
|
| + glBegin(GL_TRIANGLE_STRIP);
|
| + int x = x_;
|
| + int y = y_;
|
| + glTexCoord2f(0, height_);
|
| + glVertex3f(x, y, 0);
|
| + glTexCoord2f(width_, height_);
|
| + glVertex3f(x + width_, y, 0);
|
| + glTexCoord2f(0, 0);
|
| + glVertex3f(x, y + height_, 0);
|
| + glTexCoord2f(width_, 0);
|
| + glVertex3f(x + width_, y + height_, 0);
|
| + glDisable(target);
|
| + glEnd();
|
| + }
|
| +}
|
| +
|
| +void MacGPUPluginContainer::EnqueueTextureForDeletion(
|
| + MacGPUPluginContainerManager* manager) {
|
| + manager->EnqueueTextureForDeletion(texture_);
|
| + texture_ = 0;
|
| +}
|
| +
|
|
|
| Property changes on: webkit/glue/plugins/mac_gpu_plugin_container.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|