Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: ui/gfx/surface/io_surface_support_mac.cc

Issue 10351002: ui: Move surface/ directory out of gfx/, up to ui/. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix gpu DEPS Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/gfx/surface/io_surface_support_mac.h ('k') | ui/gfx/surface/surface.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <dlfcn.h>
6
7 #include "base/memory/singleton.h"
8 #include "ui/gfx/surface/io_surface_support_mac.h"
9
10 typedef CFTypeRef (*IOSurfaceCreateProcPtr)(CFDictionaryRef properties);
11 typedef uint32 (*IOSurfaceGetIDProcPtr)(CFTypeRef io_surface);
12 typedef CFTypeRef (*IOSurfaceLookupProcPtr)(uint32 io_surface_id);
13 typedef mach_port_t (*IOSurfaceCreateMachPortProcPtr)(CFTypeRef io_surface);
14 typedef CFTypeRef (*IOSurfaceLookupFromMachPortProcPtr)(mach_port_t port);
15 typedef size_t (*IOSurfaceGetWidthPtr)(CFTypeRef io_surface);
16 typedef size_t (*IOSurfaceGetHeightPtr)(CFTypeRef io_surface);
17 typedef CGLError (*CGLTexImageIOSurface2DProcPtr)(CGLContextObj ctx,
18 GLenum target,
19 GLenum internal_format,
20 GLsizei width,
21 GLsizei height,
22 GLenum format,
23 GLenum type,
24 CFTypeRef io_surface,
25 GLuint plane);
26
27 class IOSurfaceSupportImpl : public IOSurfaceSupport {
28 public:
29 static IOSurfaceSupportImpl* GetInstance();
30
31 bool InitializedSuccessfully() {
32 return initialized_successfully_;
33 }
34
35 virtual CFStringRef GetKIOSurfaceWidth();
36 virtual CFStringRef GetKIOSurfaceHeight();
37 virtual CFStringRef GetKIOSurfaceBytesPerElement();
38 virtual CFStringRef GetKIOSurfaceIsGlobal();
39
40 virtual CFTypeRef IOSurfaceCreate(CFDictionaryRef properties);
41 virtual uint32 IOSurfaceGetID(CFTypeRef io_surface);
42 virtual CFTypeRef IOSurfaceLookup(uint32 io_surface_id);
43 virtual mach_port_t IOSurfaceCreateMachPort(CFTypeRef io_surface);
44 virtual CFTypeRef IOSurfaceLookupFromMachPort(mach_port_t port);
45
46 virtual size_t IOSurfaceGetWidth(CFTypeRef io_surface);
47 virtual size_t IOSurfaceGetHeight(CFTypeRef io_surface);
48
49 virtual CGLError CGLTexImageIOSurface2D(CGLContextObj ctx,
50 GLenum target,
51 GLenum internal_format,
52 GLsizei width,
53 GLsizei height,
54 GLenum format,
55 GLenum type,
56 CFTypeRef io_surface,
57 GLuint plane);
58
59 private:
60 IOSurfaceSupportImpl();
61 ~IOSurfaceSupportImpl();
62
63 void* iosurface_handle_;
64 void* opengl_handle_;
65 CFStringRef k_io_surface_width_;
66 CFStringRef k_io_surface_height_;
67 CFStringRef k_io_surface_bytes_per_element_;
68 CFStringRef k_io_surface_is_global_;
69 IOSurfaceCreateProcPtr io_surface_create_;
70 IOSurfaceGetIDProcPtr io_surface_get_id_;
71 IOSurfaceLookupProcPtr io_surface_lookup_;
72 IOSurfaceCreateMachPortProcPtr io_surface_create_mach_port_;
73 IOSurfaceLookupFromMachPortProcPtr io_surface_lookup_from_mach_port_;
74 IOSurfaceGetWidthPtr io_surface_get_width_;
75 IOSurfaceGetHeightPtr io_surface_get_height_;
76 CGLTexImageIOSurface2DProcPtr cgl_tex_image_io_surface_2d_;
77 bool initialized_successfully_;
78
79 friend struct DefaultSingletonTraits<IOSurfaceSupportImpl>;
80 DISALLOW_COPY_AND_ASSIGN(IOSurfaceSupportImpl);
81 };
82
83 IOSurfaceSupportImpl* IOSurfaceSupportImpl::GetInstance() {
84 IOSurfaceSupportImpl* impl = Singleton<IOSurfaceSupportImpl>::get();
85 if (impl->InitializedSuccessfully())
86 return impl;
87 return NULL;
88 }
89
90 CFStringRef IOSurfaceSupportImpl::GetKIOSurfaceWidth() {
91 return k_io_surface_width_;
92 }
93
94 CFStringRef IOSurfaceSupportImpl::GetKIOSurfaceHeight() {
95 return k_io_surface_height_;
96 }
97
98 CFStringRef IOSurfaceSupportImpl::GetKIOSurfaceBytesPerElement() {
99 return k_io_surface_bytes_per_element_;
100 }
101
102 CFStringRef IOSurfaceSupportImpl::GetKIOSurfaceIsGlobal() {
103 return k_io_surface_is_global_;
104 }
105
106 CFTypeRef IOSurfaceSupportImpl::IOSurfaceCreate(CFDictionaryRef properties) {
107 return io_surface_create_(properties);
108 }
109
110 uint32 IOSurfaceSupportImpl::IOSurfaceGetID(
111 CFTypeRef io_surface) {
112 return io_surface_get_id_(io_surface);
113 }
114
115 CFTypeRef IOSurfaceSupportImpl::IOSurfaceLookup(uint32 io_surface_id) {
116 return io_surface_lookup_(io_surface_id);
117 }
118
119 mach_port_t IOSurfaceSupportImpl::IOSurfaceCreateMachPort(
120 CFTypeRef io_surface) {
121 return io_surface_create_mach_port_(io_surface);
122 }
123
124 CFTypeRef IOSurfaceSupportImpl::IOSurfaceLookupFromMachPort(mach_port_t port) {
125 return io_surface_lookup_from_mach_port_(port);
126 }
127
128 size_t IOSurfaceSupportImpl::IOSurfaceGetWidth(CFTypeRef io_surface) {
129 return io_surface_get_width_(io_surface);
130 }
131
132 size_t IOSurfaceSupportImpl::IOSurfaceGetHeight(CFTypeRef io_surface) {
133 return io_surface_get_height_(io_surface);
134 }
135
136
137 CGLError IOSurfaceSupportImpl::CGLTexImageIOSurface2D(CGLContextObj ctx,
138 GLenum target,
139 GLenum internal_format,
140 GLsizei width,
141 GLsizei height,
142 GLenum format,
143 GLenum type,
144 CFTypeRef io_surface,
145 GLuint plane) {
146 return cgl_tex_image_io_surface_2d_(ctx,
147 target,
148 internal_format,
149 width,
150 height,
151 format,
152 type,
153 io_surface,
154 plane);
155 }
156
157 IOSurfaceSupportImpl::IOSurfaceSupportImpl()
158 : iosurface_handle_(NULL),
159 opengl_handle_(NULL),
160 k_io_surface_width_(NULL),
161 k_io_surface_height_(NULL),
162 k_io_surface_bytes_per_element_(NULL),
163 k_io_surface_is_global_(NULL),
164 io_surface_create_(NULL),
165 io_surface_get_id_(NULL),
166 io_surface_lookup_(NULL),
167 io_surface_create_mach_port_(NULL),
168 io_surface_lookup_from_mach_port_(NULL),
169 io_surface_get_width_(NULL),
170 io_surface_get_height_(NULL),
171 cgl_tex_image_io_surface_2d_(NULL),
172 initialized_successfully_(false) {
173 iosurface_handle_ = dlopen(
174 "/System/Library/Frameworks/IOSurface.framework/IOSurface",
175 RTLD_LAZY | RTLD_LOCAL);
176 if (!iosurface_handle_)
177 return;
178 opengl_handle_ = dlopen(
179 "/System/Library/Frameworks/OpenGL.framework/OpenGL",
180 RTLD_LAZY | RTLD_LOCAL);
181 if (!opengl_handle_) {
182 dlclose(iosurface_handle_);
183 iosurface_handle_ = NULL;
184 return;
185 }
186
187 void* surface_width_ptr = dlsym(iosurface_handle_, "kIOSurfaceWidth");
188 void* surface_height_ptr = dlsym(iosurface_handle_, "kIOSurfaceHeight");
189 void* surface_bytes_per_element_ptr =
190 dlsym(iosurface_handle_, "kIOSurfaceBytesPerElement");
191 void* surface_is_global_ptr =
192 dlsym(iosurface_handle_, "kIOSurfaceIsGlobal");
193 void* surface_create_ptr = dlsym(iosurface_handle_, "IOSurfaceCreate");
194 void* surface_get_id_ptr = dlsym(iosurface_handle_, "IOSurfaceGetID");
195 void* surface_lookup_ptr = dlsym(iosurface_handle_, "IOSurfaceLookup");
196 void* surface_create_mach_port_ptr =
197 dlsym(iosurface_handle_, "IOSurfaceCreateMachPort");
198 void* surface_lookup_from_mach_port_ptr =
199 dlsym(iosurface_handle_, "IOSurfaceLookupFromMachPort");
200 void* io_surface_get_width_ptr =
201 dlsym(iosurface_handle_, "IOSurfaceGetWidth");
202 void* io_surface_get_height_ptr =
203 dlsym(iosurface_handle_, "IOSurfaceGetHeight");
204 void* tex_image_io_surface_2d_ptr =
205 dlsym(opengl_handle_, "CGLTexImageIOSurface2D");
206 if (!surface_width_ptr ||
207 !surface_height_ptr ||
208 !surface_bytes_per_element_ptr ||
209 !surface_is_global_ptr ||
210 !surface_create_ptr ||
211 !surface_get_id_ptr ||
212 !surface_lookup_ptr ||
213 !surface_create_mach_port_ptr ||
214 !surface_lookup_from_mach_port_ptr ||
215 !io_surface_get_width_ptr ||
216 !io_surface_get_height_ptr ||
217 !tex_image_io_surface_2d_ptr) {
218 dlclose(iosurface_handle_);
219 iosurface_handle_ = NULL;
220 dlclose(opengl_handle_);
221 opengl_handle_ = NULL;
222 return;
223 }
224
225 k_io_surface_width_ = *static_cast<CFStringRef*>(surface_width_ptr);
226 k_io_surface_height_ = *static_cast<CFStringRef*>(surface_height_ptr);
227 k_io_surface_bytes_per_element_ =
228 *static_cast<CFStringRef*>(surface_bytes_per_element_ptr);
229 k_io_surface_is_global_ = *static_cast<CFStringRef*>(surface_is_global_ptr);
230 io_surface_create_ = reinterpret_cast<IOSurfaceCreateProcPtr>(
231 surface_create_ptr);
232 io_surface_get_id_ =
233 reinterpret_cast<IOSurfaceGetIDProcPtr>(surface_get_id_ptr);
234 io_surface_lookup_ =
235 reinterpret_cast<IOSurfaceLookupProcPtr>(surface_lookup_ptr);
236 io_surface_create_mach_port_ =
237 reinterpret_cast<IOSurfaceCreateMachPortProcPtr>(
238 surface_create_mach_port_ptr);
239 io_surface_lookup_from_mach_port_ =
240 reinterpret_cast<IOSurfaceLookupFromMachPortProcPtr>(
241 surface_lookup_from_mach_port_ptr);
242 io_surface_get_width_ =
243 reinterpret_cast<IOSurfaceGetWidthPtr>(
244 io_surface_get_width_ptr);
245 io_surface_get_height_ =
246 reinterpret_cast<IOSurfaceGetHeightPtr>(
247 io_surface_get_height_ptr);
248 cgl_tex_image_io_surface_2d_ =
249 reinterpret_cast<CGLTexImageIOSurface2DProcPtr>(
250 tex_image_io_surface_2d_ptr);
251 initialized_successfully_ = true;
252 }
253
254 IOSurfaceSupportImpl::~IOSurfaceSupportImpl() {
255 if (iosurface_handle_)
256 dlclose(iosurface_handle_);
257 if (opengl_handle_)
258 dlclose(opengl_handle_);
259 }
260
261 IOSurfaceSupport* IOSurfaceSupport::Initialize() {
262 return IOSurfaceSupportImpl::GetInstance();
263 }
264
265 IOSurfaceSupport::IOSurfaceSupport() {
266 }
267
268 IOSurfaceSupport::~IOSurfaceSupport() {
269 }
270
OLDNEW
« no previous file with comments | « ui/gfx/surface/io_surface_support_mac.h ('k') | ui/gfx/surface/surface.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698