OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/renderer_host/accelerated_surface_container_mac.h" | 5 #include "chrome/browser/renderer_host/accelerated_surface_container_mac.h" |
6 | 6 |
7 #include "app/surface/io_surface_support_mac.h" | 7 #include "app/surface/io_surface_support_mac.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "webkit/glue/webplugin.h" | 9 #include "webkit/glue/webplugin.h" |
10 #include "chrome/browser/renderer_host/accelerated_surface_container_manager_mac
.h" | 10 #include "chrome/browser/renderer_host/accelerated_surface_container_manager_mac
.h" |
11 | 11 |
12 AcceleratedSurfaceContainerMac::AcceleratedSurfaceContainerMac() | 12 AcceleratedSurfaceContainerMac::AcceleratedSurfaceContainerMac( |
13 : x_(0), | 13 AcceleratedSurfaceContainerManagerMac* manager) |
| 14 : manager_(manager), |
| 15 x_(0), |
14 y_(0), | 16 y_(0), |
15 surface_(NULL), | 17 surface_(NULL), |
16 width_(0), | 18 width_(0), |
17 height_(0), | 19 height_(0), |
18 texture_(0), | 20 texture_(0), |
19 texture_needs_upload_(true) { | 21 texture_needs_upload_(true) { |
20 } | 22 } |
21 | 23 |
22 AcceleratedSurfaceContainerMac::~AcceleratedSurfaceContainerMac() { | 24 AcceleratedSurfaceContainerMac::~AcceleratedSurfaceContainerMac() { |
| 25 EnqueueTextureForDeletion(); |
23 ReleaseIOSurface(); | 26 ReleaseIOSurface(); |
24 } | 27 } |
25 | 28 |
26 void AcceleratedSurfaceContainerMac::ReleaseIOSurface() { | 29 void AcceleratedSurfaceContainerMac::ReleaseIOSurface() { |
27 if (surface_) { | 30 if (surface_) { |
28 CFRelease(surface_); | 31 CFRelease(surface_); |
29 surface_ = NULL; | 32 surface_ = NULL; |
30 } | 33 } |
31 } | 34 } |
32 | 35 |
33 void AcceleratedSurfaceContainerMac::SetSizeAndIOSurface( | 36 void AcceleratedSurfaceContainerMac::SetSizeAndIOSurface( |
34 int32 width, | 37 int32 width, |
35 int32 height, | 38 int32 height, |
36 uint64 io_surface_identifier, | 39 uint64 io_surface_identifier) { |
37 AcceleratedSurfaceContainerManagerMac* manager) { | |
38 ReleaseIOSurface(); | 40 ReleaseIOSurface(); |
39 IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize(); | 41 IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize(); |
40 if (io_surface_support) { | 42 if (io_surface_support) { |
41 surface_ = io_surface_support->IOSurfaceLookup( | 43 surface_ = io_surface_support->IOSurfaceLookup( |
42 static_cast<uint32>(io_surface_identifier)); | 44 static_cast<uint32>(io_surface_identifier)); |
43 EnqueueTextureForDeletion(manager); | 45 EnqueueTextureForDeletion(); |
44 width_ = width; | 46 width_ = width; |
45 height_ = height; | 47 height_ = height; |
46 } | 48 } |
47 } | 49 } |
48 | 50 |
49 void AcceleratedSurfaceContainerMac::SetSizeAndTransportDIB( | 51 void AcceleratedSurfaceContainerMac::SetSizeAndTransportDIB( |
50 int32 width, | 52 int32 width, |
51 int32 height, | 53 int32 height, |
52 TransportDIB::Handle transport_dib, | 54 TransportDIB::Handle transport_dib) { |
53 AcceleratedSurfaceContainerManagerMac* manager) { | |
54 if (TransportDIB::is_valid(transport_dib)) { | 55 if (TransportDIB::is_valid(transport_dib)) { |
55 transport_dib_.reset(TransportDIB::Map(transport_dib)); | 56 transport_dib_.reset(TransportDIB::Map(transport_dib)); |
56 EnqueueTextureForDeletion(manager); | 57 EnqueueTextureForDeletion(); |
57 width_ = width; | 58 width_ = width; |
58 height_ = height; | 59 height_ = height; |
59 } | 60 } |
60 } | 61 } |
61 | 62 |
62 void AcceleratedSurfaceContainerMac::MoveTo( | 63 void AcceleratedSurfaceContainerMac::MoveTo( |
63 const webkit_glue::WebPluginGeometry& geom) { | 64 const webkit_glue::WebPluginGeometry& geom) { |
64 x_ = geom.window_rect.x(); | 65 x_ = geom.window_rect.x(); |
65 y_ = geom.window_rect.y(); | 66 y_ = geom.window_rect.y(); |
66 // TODO(kbr): may need to pay attention to cutout rects. | 67 // TODO(kbr): may need to pay attention to cutout rects. |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 glVertex3f(x + clipWidth, y, 0); | 148 glVertex3f(x + clipWidth, y, 0); |
148 glTexCoord2f(clipX, height_ - clipY - clipHeight); | 149 glTexCoord2f(clipX, height_ - clipY - clipHeight); |
149 glVertex3f(x, y + clipHeight, 0); | 150 glVertex3f(x, y + clipHeight, 0); |
150 glTexCoord2f(clipX + clipWidth, height_ - clipY - clipHeight); | 151 glTexCoord2f(clipX + clipWidth, height_ - clipY - clipHeight); |
151 glVertex3f(x + clipWidth, y + clipHeight, 0); | 152 glVertex3f(x + clipWidth, y + clipHeight, 0); |
152 glEnd(); | 153 glEnd(); |
153 glDisable(target); | 154 glDisable(target); |
154 } | 155 } |
155 } | 156 } |
156 | 157 |
157 void AcceleratedSurfaceContainerMac::EnqueueTextureForDeletion( | 158 void AcceleratedSurfaceContainerMac::EnqueueTextureForDeletion() { |
158 AcceleratedSurfaceContainerManagerMac* manager) { | 159 if (texture_) { |
159 manager->EnqueueTextureForDeletion(texture_); | 160 manager_->EnqueueTextureForDeletion(texture_); |
160 texture_ = 0; | 161 texture_ = 0; |
| 162 } |
161 } | 163 } |
162 | 164 |
OLD | NEW |