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

Side by Side Diff: ui/gl/gl_image_io_surface.cc

Issue 1251783002: Mac Overlays: Wire up overlays on Mac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@part22
Patch Set: Leave widget type unchanged Created 5 years, 5 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
« no previous file with comments | « ui/gl/gl_image_io_surface.h ('k') | ui/gl/gl_image_io_surface.mm » ('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 2013 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 "ui/gl/gl_image_io_surface.h"
6
7 #include "ui/gl/gl_bindings.h"
8 #include "ui/gl/gl_context.h"
9
10 // Note that this must be included after gl_bindings.h to avoid conflicts.
11 #include <OpenGL/CGLIOSurface.h>
12
13 namespace gfx {
14 namespace {
15
16 bool ValidInternalFormat(unsigned internalformat) {
17 switch (internalformat) {
18 case GL_R8:
19 case GL_BGRA_EXT:
20 return true;
21 default:
22 return false;
23 }
24 }
25
26 bool ValidFormat(GpuMemoryBuffer::Format format) {
27 switch (format) {
28 case GpuMemoryBuffer::R_8:
29 case GpuMemoryBuffer::BGRA_8888:
30 return true;
31 case GpuMemoryBuffer::ATC:
32 case GpuMemoryBuffer::ATCIA:
33 case GpuMemoryBuffer::DXT1:
34 case GpuMemoryBuffer::DXT5:
35 case GpuMemoryBuffer::ETC1:
36 case GpuMemoryBuffer::RGBA_4444:
37 case GpuMemoryBuffer::RGBA_8888:
38 case GpuMemoryBuffer::RGBX_8888:
39 case GpuMemoryBuffer::YUV_420:
40 return false;
41 }
42
43 NOTREACHED();
44 return false;
45 }
46
47 GLenum TextureFormat(GpuMemoryBuffer::Format format) {
48 switch (format) {
49 case GpuMemoryBuffer::R_8:
50 return GL_RED;
51 case GpuMemoryBuffer::BGRA_8888:
52 return GL_RGBA;
53 case GpuMemoryBuffer::ATC:
54 case GpuMemoryBuffer::ATCIA:
55 case GpuMemoryBuffer::DXT1:
56 case GpuMemoryBuffer::DXT5:
57 case GpuMemoryBuffer::ETC1:
58 case GpuMemoryBuffer::RGBA_4444:
59 case GpuMemoryBuffer::RGBA_8888:
60 case GpuMemoryBuffer::RGBX_8888:
61 case GpuMemoryBuffer::YUV_420:
62 NOTREACHED();
63 return 0;
64 }
65
66 NOTREACHED();
67 return 0;
68 }
69
70 GLenum DataFormat(GpuMemoryBuffer::Format format) {
71 switch (format) {
72 case GpuMemoryBuffer::R_8:
73 return GL_RED;
74 case GpuMemoryBuffer::BGRA_8888:
75 return GL_BGRA;
76 case GpuMemoryBuffer::ATC:
77 case GpuMemoryBuffer::ATCIA:
78 case GpuMemoryBuffer::DXT1:
79 case GpuMemoryBuffer::DXT5:
80 case GpuMemoryBuffer::ETC1:
81 case GpuMemoryBuffer::RGBA_4444:
82 case GpuMemoryBuffer::RGBA_8888:
83 case GpuMemoryBuffer::RGBX_8888:
84 case GpuMemoryBuffer::YUV_420:
85 NOTREACHED();
86 return 0;
87 }
88
89 NOTREACHED();
90 return 0;
91 }
92
93 GLenum DataType(GpuMemoryBuffer::Format format) {
94 switch (format) {
95 case GpuMemoryBuffer::R_8:
96 return GL_UNSIGNED_BYTE;
97 case GpuMemoryBuffer::BGRA_8888:
98 return GL_UNSIGNED_INT_8_8_8_8_REV;
99 case GpuMemoryBuffer::ATC:
100 case GpuMemoryBuffer::ATCIA:
101 case GpuMemoryBuffer::DXT1:
102 case GpuMemoryBuffer::DXT5:
103 case GpuMemoryBuffer::ETC1:
104 case GpuMemoryBuffer::RGBA_4444:
105 case GpuMemoryBuffer::RGBA_8888:
106 case GpuMemoryBuffer::RGBX_8888:
107 case GpuMemoryBuffer::YUV_420:
108 NOTREACHED();
109 return 0;
110 }
111
112 NOTREACHED();
113 return 0;
114 }
115
116 } // namespace
117
118 GLImageIOSurface::GLImageIOSurface(const gfx::Size& size,
119 unsigned internalformat)
120 : size_(size),
121 internalformat_(internalformat),
122 format_(GpuMemoryBuffer::RGBA_8888) {
123 }
124
125 GLImageIOSurface::~GLImageIOSurface() {
126 DCHECK(thread_checker_.CalledOnValidThread());
127 DCHECK(!io_surface_);
128 }
129
130 bool GLImageIOSurface::Initialize(IOSurfaceRef io_surface,
131 GpuMemoryBuffer::Format format) {
132 DCHECK(thread_checker_.CalledOnValidThread());
133 DCHECK(!io_surface_);
134
135 if (!ValidInternalFormat(internalformat_)) {
136 LOG(ERROR) << "Invalid internalformat: " << internalformat_;
137 return false;
138 }
139
140 if (!ValidFormat(format)) {
141 LOG(ERROR) << "Invalid format: " << format;
142 return false;
143 }
144
145 format_ = format;
146 io_surface_.reset(io_surface, base::scoped_policy::RETAIN);
147 return true;
148 }
149
150 void GLImageIOSurface::Destroy(bool have_context) {
151 DCHECK(thread_checker_.CalledOnValidThread());
152 io_surface_.reset();
153 }
154
155 gfx::Size GLImageIOSurface::GetSize() { return size_; }
156
157 unsigned GLImageIOSurface::GetInternalFormat() { return internalformat_; }
158
159 bool GLImageIOSurface::BindTexImage(unsigned target) {
160 DCHECK(thread_checker_.CalledOnValidThread());
161 if (target != GL_TEXTURE_RECTANGLE_ARB) {
162 // This might be supported in the future. For now, perform strict
163 // validation so we know what's going on.
164 LOG(ERROR) << "IOSurface requires TEXTURE_RECTANGLE_ARB target";
165 return false;
166 }
167
168 CGLContextObj cgl_context =
169 static_cast<CGLContextObj>(GLContext::GetCurrent()->GetHandle());
170
171 DCHECK(io_surface_);
172 CGLError cgl_error =
173 CGLTexImageIOSurface2D(cgl_context, target, TextureFormat(format_),
174 size_.width(), size_.height(), DataFormat(format_),
175 DataType(format_), io_surface_.get(), 0);
176 if (cgl_error != kCGLNoError) {
177 LOG(ERROR) << "Error in CGLTexImageIOSurface2D";
178 return false;
179 }
180
181 return true;
182 }
183
184 bool GLImageIOSurface::CopyTexSubImage(unsigned target,
185 const Point& offset,
186 const Rect& rect) {
187 return false;
188 }
189
190 bool GLImageIOSurface::ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
191 int z_order,
192 OverlayTransform transform,
193 const Rect& bounds_rect,
194 const RectF& crop_rect) {
195 return false;
196 }
197
198 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gl/gl_image_io_surface.h ('k') | ui/gl/gl_image_io_surface.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698