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

Side by Side Diff: content/renderer/gpu/webgraphicscontext3d_guest.cc

Issue 9609008: Implemented Browser Plugin (NOT FOR REVIEW) (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Merged with Tip-of-Tree Created 8 years, 9 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" 5 #if defined(ENABLE_GPU)
6 6
7 #include "third_party/khronos/GLES2/gl2.h" 7 #include "content/renderer/gpu/webgraphicscontext3d_guest.h"
8 #ifndef GL_GLEXT_PROTOTYPES 8
9 #define GL_GLEXT_PROTOTYPES 1 9 #define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0
10 #endif 10 #define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255
11 #include "third_party/khronos/GLES2/gl2ext.h"
12 11
13 #include <algorithm> 12 #include <algorithm>
14 #include <set> 13 #include <set>
15 14
16 #include "base/bind.h" 15 #include "base/bind.h"
17 #include "base/lazy_instance.h" 16 #include "base/lazy_instance.h"
18 #include "base/string_tokenizer.h" 17 #include "base/string_tokenizer.h"
19 #include "base/command_line.h" 18 #include "base/command_line.h"
20 #include "base/debug/trace_event.h" 19 #include "base/debug/trace_event.h"
21 #include "base/logging.h" 20 #include "base/logging.h"
22 #include "base/message_loop.h" 21 #include "base/message_loop.h"
23 #include "base/metrics/histogram.h" 22 #include "base/metrics/histogram.h"
24 #include "base/synchronization/lock.h" 23 #include "base/synchronization/lock.h"
25 #include "content/common/gpu/gpu_memory_allocation.h" 24 #include "content/common/child_process.h"
26 #include "content/common/gpu/client/command_buffer_proxy.h" 25 #include "content/common/gpu/client/command_buffer_proxy.h"
27 #include "content/common/gpu/client/gpu_channel_host.h" 26 #include "content/common/gpu/client/gpu_channel_host.h"
28 #include "content/public/common/content_switches.h" 27 #include "content/public/common/content_switches.h"
28 #include "content/renderer/guest_to_host_channel.h"
29 #include "content/renderer/render_thread_impl.h"
30 #include "content/renderer/render_view_impl.h"
31 #include "gpu/command_buffer/client/gles2_lib.h"
29 #include "gpu/command_buffer/client/gles2_implementation.h" 32 #include "gpu/command_buffer/client/gles2_implementation.h"
33 #include "gpu/command_buffer/client/transfer_buffer.h"
30 #include "gpu/command_buffer/common/constants.h" 34 #include "gpu/command_buffer/common/constants.h"
35 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h"
36 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
37 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
31 #include "webkit/glue/gl_bindings_skia_cmd_buffer.h" 38 #include "webkit/glue/gl_bindings_skia_cmd_buffer.h"
32 39
33 static base::LazyInstance<base::Lock>::Leaky 40 WebGraphicsContext3DGuest::WebGraphicsContext3DGuest(
34 g_all_shared_contexts_lock = LAZY_INSTANCE_INITIALIZER; 41 gpu::CommandBuffer* command_buffer,
35 static base::LazyInstance<std::set<WebGraphicsContext3DCommandBufferImpl*> > 42 GuestToHostChannel* channel,
36 g_all_shared_contexts = LAZY_INSTANCE_INITIALIZER; 43 WebKit::WebView* webview)
37 44 : channel_(channel),
38 namespace { 45 initialize_failed_(false),
39 46 web_view_(webview),
40 void ClearSharedContexts() { 47 context_lost_callback_(0),
41 base::AutoLock lock(g_all_shared_contexts_lock.Get()); 48 context_lost_reason_(GL_NO_ERROR),
42 g_all_shared_contexts.Pointer()->clear(); 49 swapbuffers_complete_callback_(0),
50 cached_width_(0),
51 cached_height_(0),
52 dead_(false),
53 bound_fbo_(0),
54 weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
55 command_buffer_.reset(command_buffer);
56 if (!command_buffer_->Initialize()) {
57 initialize_failed_ = true;
58 return;
59 }
43 } 60 }
44 61
45 } // namespace anonymous 62 WebGraphicsContext3DGuest::~WebGraphicsContext3DGuest() {
46
47
48 WebGraphicsContext3DCommandBufferImpl::WebGraphicsContext3DCommandBufferImpl(
49 int surface_id,
50 const GURL& active_url,
51 const base::WeakPtr<WebGraphicsContext3DSwapBuffersClient>& swap_client)
52 : initialize_failed_(false),
53 context_(NULL),
54 gl_(NULL),
55 host_(NULL),
56 surface_id_(surface_id),
57 active_url_(active_url),
58 swap_client_(swap_client),
59 memory_allocation_changed_callback_(0),
60 context_lost_callback_(0),
61 context_lost_reason_(GL_NO_ERROR),
62 error_message_callback_(0),
63 swapbuffers_complete_callback_(0),
64 gpu_preference_(gfx::PreferIntegratedGpu),
65 cached_width_(0),
66 cached_height_(0),
67 bound_fbo_(0),
68 weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
69 } 63 }
70 64
71 WebGraphicsContext3DCommandBufferImpl:: 65 bool WebGraphicsContext3DGuest::MaybeInitializeGL() {
72 ~WebGraphicsContext3DCommandBufferImpl() { 66 if (gl_.get())
73 if (host_) { 67 return true;
74 if (host_->WillGpuSwitchOccur(false, gpu_preference_)) {
75 host_->ForciblyCloseChannel();
76 ClearSharedContexts();
77 }
78 }
79 68
80 {
81 base::AutoLock lock(g_all_shared_contexts_lock.Get());
82 g_all_shared_contexts.Pointer()->erase(this);
83 }
84 delete context_;
85 }
86
87 bool WebGraphicsContext3DCommandBufferImpl::Initialize(
88 const WebGraphicsContext3D::Attributes& attributes) {
89 DCHECK(!context_);
90 TRACE_EVENT0("gpu", "WebGfxCtx3DCmdBfrImpl::initialize");
91 GpuChannelHostFactory* factory = GpuChannelHostFactory::instance();
92 if (!factory)
93 return false;
94
95 // The noExtensions and canRecoverFromContextLoss flags are
96 // currently used as hints that we are creating a context on
97 // behalf of WebGL or accelerated 2D canvas, respectively.
98 if (attributes.noExtensions || !attributes.canRecoverFromContextLoss)
99 gpu_preference_ = gfx::PreferDiscreteGpu;
100
101 bool retry = false;
102
103 // Note similar code in Pepper PlatformContext3DImpl::Init.
104 do {
105 host_ = factory->EstablishGpuChannelSync(
106 content::
107 CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE);
108 if (!host_)
109 return false;
110 DCHECK(host_->state() == GpuChannelHost::kConnected);
111
112 if (!retry) {
113 // If the creation of this context requires all contexts for this
114 // client to be destroyed on the GPU process side, then drop the
115 // channel and recreate it.
116 if (host_->WillGpuSwitchOccur(true, gpu_preference_)) {
117 host_->ForciblyCloseChannel();
118 ClearSharedContexts();
119 retry = true;
120 }
121 } else {
122 retry = false;
123 }
124 } while (retry);
125
126 const content::GPUInfo& gpu_info = host_->gpu_info();
127 UMA_HISTOGRAM_ENUMERATION(
128 "GPU.WebGraphicsContext3D_Init_CanLoseContext",
129 attributes.canRecoverFromContextLoss * 2 + gpu_info.can_lose_context,
130 4);
131 if (attributes.canRecoverFromContextLoss == false) {
132 if (gpu_info.can_lose_context)
133 return false;
134 }
135
136 attributes_ = attributes;
137 return true;
138 }
139
140 bool WebGraphicsContext3DCommandBufferImpl::MaybeInitializeGL() {
141 if (context_)
142 return true;
143 if (initialize_failed_) 69 if (initialize_failed_)
144 return false; 70 return false;
145 71
146 TRACE_EVENT0("gpu", "WebGfxCtx3DCmdBfrImpl::MaybeInitializeGL"); 72 // Create the GLES2 helper, which writes the command buffer protocol.
73 gles2_helper_.reset(new gpu::gles2::GLES2CmdHelper(command_buffer_.get()));
74 if (!gles2_helper_->Initialize(kCommandBufferSize)) {
75 initialize_failed_ = true;
76 return false;
77 }
78 // Map the buffer into the renderer process's address space.
79 transfer_buffer_.reset(new gpu::TransferBuffer(gles2_helper_.get()));
147 80
148 // Convert WebGL context creation attributes into ContentGLContext / EGL size 81 // Create the object exposing the OpenGL API.
149 // requests. 82 gl_.reset(new gpu::gles2::GLES2Implementation(
150 const int alpha_size = attributes_.alpha ? 8 : 0; 83 gles2_helper_.get(),
151 const int depth_size = attributes_.depth ? 24 : 0; 84 transfer_buffer_.get(),
152 const int stencil_size = attributes_.stencil ? 8 : 0; 85 false,
153 const int samples = attributes_.antialias ? 4 : 0; 86 true));
154 const int sample_buffers = attributes_.antialias ? 1 : 0;
155 const int32 attribs[] = {
156 ContentGLContext::ALPHA_SIZE, alpha_size,
157 ContentGLContext::DEPTH_SIZE, depth_size,
158 ContentGLContext::STENCIL_SIZE, stencil_size,
159 ContentGLContext::SAMPLES, samples,
160 ContentGLContext::SAMPLE_BUFFERS, sample_buffers,
161 ContentGLContext::SHARE_RESOURCES, attributes_.shareResources ? 1 : 0,
162 ContentGLContext::BIND_GENERATES_RESOURCES, 0,
163 ContentGLContext::NONE,
164 };
165 87
166 const char* preferred_extensions = "*"; 88 // TODO(fsamuel): Is this right?
167 89 if (!gl_->Initialize(
168 // We need to lock g_all_shared_contexts until after ContentGLContext::Create 90 kTransferBufferSize,
169 // to ensure that the context we picked for our share group isn't deleted. 91 kTransferBufferSize,
170 // (There's also a lock in our destructor.) 92 kTransferBufferSize))
171 {
172 base::AutoLock lock(g_all_shared_contexts_lock.Get());
173 ContentGLContext* share_group = NULL;
174 if (attributes_.shareResources) {
175 share_group = g_all_shared_contexts.Pointer()->empty() ?
176 NULL : (*g_all_shared_contexts.Pointer()->begin())->context_;
177 }
178
179 if (surface_id_) {
180 context_ = ContentGLContext::CreateViewContext(
181 host_,
182 surface_id_,
183 share_group,
184 preferred_extensions,
185 attribs,
186 active_url_,
187 gpu_preference_);
188 } else {
189 context_ = ContentGLContext::CreateOffscreenContext(
190 host_,
191 gfx::Size(1, 1),
192 share_group,
193 preferred_extensions,
194 attribs,
195 active_url_,
196 gpu_preference_);
197 }
198 }
199
200 if (!context_)
201 return false; 93 return false;
202 94
203 gl_ = context_->GetImplementation(); 95 if (!channel_->BindGraphics()) {
204 96 initialize_failed_ = true;
205 // TODO(twiz): This code is too fragile in that it assumes that only WebGL 97 return false;
206 // contexts will request noExtensions.
207 if (gl_ && attributes_.noExtensions)
208 gl_->EnableFeatureCHROMIUM("webgl_enable_glsl_webgl_validation");
209
210 context_->SetContextLostCallback(
211 base::Bind(&WebGraphicsContext3DCommandBufferImpl::OnContextLost,
212 weak_ptr_factory_.GetWeakPtr()));
213
214 context_->GetCommandBufferProxy()->SetOnConsoleMessageCallback(
215 base::Bind(&WebGraphicsContext3DCommandBufferImpl::OnErrorMessage,
216 weak_ptr_factory_.GetWeakPtr()));
217
218 // TODO(gman): Remove this.
219 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
220 if (command_line.HasSwitch(switches::kDisableGLSLTranslator)) {
221 context_->DisableShaderTranslation();
222 } 98 }
223
224 // Set attributes_ from created offscreen context. 99 // Set attributes_ from created offscreen context.
225 { 100 {
226 GLint alpha_bits = 0; 101 GLint alpha_bits = 0;
227 getIntegerv(GL_ALPHA_BITS, &alpha_bits); 102 getIntegerv(GL_ALPHA_BITS, &alpha_bits);
228 attributes_.alpha = alpha_bits > 0; 103 attributes_.alpha = alpha_bits > 0;
229 GLint depth_bits = 0; 104 GLint depth_bits = 0;
230 getIntegerv(GL_DEPTH_BITS, &depth_bits); 105 getIntegerv(GL_DEPTH_BITS, &depth_bits);
231 attributes_.depth = depth_bits > 0; 106 attributes_.depth = depth_bits > 0;
232 GLint stencil_bits = 0; 107 GLint stencil_bits = 0;
233 getIntegerv(GL_STENCIL_BITS, &stencil_bits); 108 getIntegerv(GL_STENCIL_BITS, &stencil_bits);
234 attributes_.stencil = stencil_bits > 0; 109 attributes_.stencil = stencil_bits > 0;
235 GLint samples = 0; 110 GLint samples = 0;
236 getIntegerv(GL_SAMPLES, &samples); 111 getIntegerv(GL_SAMPLES, &samples);
237 attributes_.antialias = samples > 0; 112 attributes_.antialias = samples > 0;
238 } 113 }
239 114
240 if (attributes_.shareResources) {
241 base::AutoLock lock(g_all_shared_contexts_lock.Get());
242 g_all_shared_contexts.Pointer()->insert(this);
243 }
244
245 context_->SetMemoryAllocationChangedCallback(base::Bind(
246 &WebGraphicsContext3DCommandBufferImpl::OnMemoryAllocationChanged,
247 weak_ptr_factory_.GetWeakPtr()));
248
249 return true; 115 return true;
250 } 116 }
251 117
252 bool WebGraphicsContext3DCommandBufferImpl::makeContextCurrent() { 118 bool WebGraphicsContext3DGuest::makeContextCurrent() {
253 if (!MaybeInitializeGL()) 119 if (!MaybeInitializeGL())
254 return false; 120 return false;
255 return ContentGLContext::MakeCurrent(context_); 121 gles2::SetGLContext(gl_.get());
122
123 // Don't request latest error status from service. Just use the locally
124 // cached information from the last flush.
125 // TODO(apatrick): I'm not sure if this should actually change the
126 // current context if it fails. For now it gets changed even if it fails
127 // because making GL calls with a NULL context crashes.
128 if (command_buffer_->GetLastState().error != gpu::error::kNoError)
129 return false;
130 return true;
256 } 131 }
257 132
258 int WebGraphicsContext3DCommandBufferImpl::width() { 133 int WebGraphicsContext3DGuest::width() {
259 return cached_width_; 134 return cached_width_;
260 } 135 }
261 136
262 int WebGraphicsContext3DCommandBufferImpl::height() { 137 int WebGraphicsContext3DGuest::height() {
263 return cached_height_; 138 return cached_height_;
264 } 139 }
265 140
266 bool WebGraphicsContext3DCommandBufferImpl::isGLES2Compliant() { 141 void WebGraphicsContext3DGuest::playDead() {
142 dead_ = true;
143 OnContextLost();
144 }
145
146 bool WebGraphicsContext3DGuest::isGLES2Compliant() {
267 return true; 147 return true;
268 } 148 }
269 149
270 bool WebGraphicsContext3DCommandBufferImpl::setParentContext( 150 bool WebGraphicsContext3DGuest::setParentContext(
271 WebGraphicsContext3D* parent_context) { 151 WebGraphicsContext3D* parent_context) {
272 WebGraphicsContext3DCommandBufferImpl* parent_context_impl = 152 NOTIMPLEMENTED();
273 static_cast<WebGraphicsContext3DCommandBufferImpl*>(parent_context); 153 return true;
274 return context_->SetParent(
275 parent_context_impl ? parent_context_impl->context() : NULL);
276 } 154 }
277 155
278 WebGLId WebGraphicsContext3DCommandBufferImpl::getPlatformTextureId() { 156 WebGLId WebGraphicsContext3DGuest::getPlatformTextureId() {
279 return context_->GetParentTextureId(); 157 NOTIMPLEMENTED();
158 return 0;
280 } 159 }
281 160
282 void WebGraphicsContext3DCommandBufferImpl::prepareTexture() { 161 void WebGraphicsContext3DGuest::prepareTexture() {
283 // Copies the contents of the off-screen render target into the texture 162 // Copies the contents of the off-screen render target into the texture
284 // used by the compositor. 163 // used by the compositor.
285 if (ShouldUseSwapClient()) 164 RenderViewImpl* renderview =
286 swap_client_->OnViewContextSwapBuffersPosted(); 165 web_view_ ? RenderViewImpl::FromWebView(web_view_) : NULL;
287 context_->SwapBuffers(); 166 if (renderview)
288 context_->Echo(base::Bind( 167 renderview->OnViewContextSwapBuffersPosted();
289 &WebGraphicsContext3DCommandBufferImpl::OnSwapBuffersComplete, 168
290 weak_ptr_factory_.GetWeakPtr())); 169 // Swap buffers
170 gl_->SwapBuffers();
171 channel_->IssueSwapBuffers();
172 // TODO(fsamuel): GuestToHostChannel will call OnSwapBuffersComplete
173 // when it receives a swap buffers ACK message from the host.
291 #if defined(OS_MACOSX) 174 #if defined(OS_MACOSX)
292 // It appears that making the compositor's on-screen context current on 175 // It appears that making the compositor's on-screen context current on
293 // other platforms implies this flush. TODO(kbr): this means that the 176 // other platforms implies this flush. TODO(kbr): this means that the
294 // TOUCH build and, in the future, other platforms might need this. 177 // TOUCH build and, in the future, other platforms might need this.
295 gl_->Flush(); 178 gl_->Flush();
296 #endif 179 #endif
297 } 180 }
298 181
299 void WebGraphicsContext3DCommandBufferImpl::postSubBufferCHROMIUM( 182 void WebGraphicsContext3DGuest::postSubBufferCHROMIUM(
300 int x, int y, int width, int height) { 183 int x, int y, int width, int height) {
301 // Same flow control as WebGraphicsContext3DCommandBufferImpl::prepareTexture 184 // Same flow control as WebGraphicsContext3DGuest::prepareTexture
302 // (see above). 185 // (see above).
303 if (ShouldUseSwapClient()) 186 RenderViewImpl* renderview =
304 swap_client_->OnViewContextSwapBuffersPosted(); 187 web_view_ ? RenderViewImpl::FromWebView(web_view_) : NULL;
188 if (renderview)
189 renderview->OnViewContextSwapBuffersPosted();
305 gl_->PostSubBufferCHROMIUM(x, y, width, height); 190 gl_->PostSubBufferCHROMIUM(x, y, width, height);
306 context_->Echo(base::Bind( 191 channel_->IssueSwapBuffers();
307 &WebGraphicsContext3DCommandBufferImpl::OnSwapBuffersComplete,
308 weak_ptr_factory_.GetWeakPtr()));
309 } 192 }
310 193
311 void WebGraphicsContext3DCommandBufferImpl::reshape(int width, int height) { 194 void WebGraphicsContext3DGuest::reshape(int width, int height) {
312 cached_width_ = width; 195 cached_width_ = width;
313 cached_height_ = height; 196 cached_height_ = height;
314 197
315 gl_->ResizeCHROMIUM(width, height); 198 gl_->ResizeCHROMIUM(width, height);
199
200 #ifdef FLIP_FRAMEBUFFER_VERTICALLY
201 scanline_.reset(new uint8[width * 4]);
202 #endif // FLIP_FRAMEBUFFER_VERTICALLY
316 } 203 }
317 204
318 #ifdef FLIP_FRAMEBUFFER_VERTICALLY 205 #ifdef FLIP_FRAMEBUFFER_VERTICALLY
319 void WebGraphicsContext3DCommandBufferImpl::FlipVertically( 206 void WebGraphicsContext3DGuest::FlipVertically(
320 uint8* framebuffer, 207 uint8* framebuffer,
321 unsigned int width, 208 unsigned int width,
322 unsigned int height) { 209 unsigned int height) {
323 if (width == 0) 210 uint8* scanline = scanline_.get();
211 if (!scanline)
324 return; 212 return;
325 scanline_.resize(width * 4);
326 uint8* scanline = &scanline_[0];
327 unsigned int row_bytes = width * 4; 213 unsigned int row_bytes = width * 4;
328 unsigned int count = height / 2; 214 unsigned int count = height / 2;
329 for (unsigned int i = 0; i < count; i++) { 215 for (unsigned int i = 0; i < count; i++) {
330 uint8* row_a = framebuffer + i * row_bytes; 216 uint8* row_a = framebuffer + i * row_bytes;
331 uint8* row_b = framebuffer + (height - i - 1) * row_bytes; 217 uint8* row_b = framebuffer + (height - i - 1) * row_bytes;
332 // TODO(kbr): this is where the multiplication of the alpha 218 // TODO(kbr): this is where the multiplication of the alpha
333 // channel into the color buffer will need to occur if the 219 // channel into the color buffer will need to occur if the
334 // user specifies the "premultiplyAlpha" flag in the context 220 // user specifies the "premultiplyAlpha" flag in the context
335 // creation attributes. 221 // creation attributes.
336 memcpy(scanline, row_b, row_bytes); 222 memcpy(scanline, row_b, row_bytes);
337 memcpy(row_b, row_a, row_bytes); 223 memcpy(row_b, row_a, row_bytes);
338 memcpy(row_a, scanline, row_bytes); 224 memcpy(row_a, scanline, row_bytes);
339 } 225 }
340 } 226 }
341 #endif 227 #endif
342 228
343 bool WebGraphicsContext3DCommandBufferImpl::readBackFramebuffer( 229 bool WebGraphicsContext3DGuest::readBackFramebuffer(
344 unsigned char* pixels, 230 unsigned char* pixels,
345 size_t buffer_size, 231 size_t buffer_size,
346 WebGLId buffer, 232 WebGLId buffer,
347 int width, 233 int width,
348 int height) { 234 int height) {
349 if (buffer_size != static_cast<size_t>(4 * width * height)) { 235 if (buffer_size != static_cast<size_t>(4 * width * height)) {
350 return false; 236 return false;
351 } 237 }
352 238
353 // Earlier versions of this code used the GPU to flip the 239 // Earlier versions of this code used the GPU to flip the
(...skipping 21 matching lines...) Expand all
375 261
376 #ifdef FLIP_FRAMEBUFFER_VERTICALLY 262 #ifdef FLIP_FRAMEBUFFER_VERTICALLY
377 if (pixels) { 263 if (pixels) {
378 FlipVertically(pixels, width, height); 264 FlipVertically(pixels, width, height);
379 } 265 }
380 #endif 266 #endif
381 267
382 return true; 268 return true;
383 } 269 }
384 270
385 bool WebGraphicsContext3DCommandBufferImpl::readBackFramebuffer( 271 bool WebGraphicsContext3DGuest::readBackFramebuffer(
386 unsigned char* pixels, 272 unsigned char* pixels,
387 size_t buffer_size) { 273 size_t buffer_size) {
388 return readBackFramebuffer(pixels, buffer_size, 0, width(), height()); 274 return readBackFramebuffer(pixels, buffer_size, 0, width(), height());
389 } 275 }
390 276
391 void WebGraphicsContext3DCommandBufferImpl::synthesizeGLError( 277 void WebGraphicsContext3DGuest::synthesizeGLError(
392 WGC3Denum error) { 278 WGC3Denum error) {
393 if (std::find(synthetic_errors_.begin(), synthetic_errors_.end(), error) == 279 if (std::find(synthetic_errors_.begin(), synthetic_errors_.end(), error) ==
394 synthetic_errors_.end()) { 280 synthetic_errors_.end()) {
395 synthetic_errors_.push_back(error); 281 synthetic_errors_.push_back(error);
396 } 282 }
397 } 283 }
398 284
399 void* WebGraphicsContext3DCommandBufferImpl::mapBufferSubDataCHROMIUM( 285 void* WebGraphicsContext3DGuest::mapBufferSubDataCHROMIUM(
400 WGC3Denum target, 286 WGC3Denum target,
401 WGC3Dintptr offset, 287 WGC3Dintptr offset,
402 WGC3Dsizeiptr size, 288 WGC3Dsizeiptr size,
403 WGC3Denum access) { 289 WGC3Denum access) {
404 return gl_->MapBufferSubDataCHROMIUM(target, offset, size, access); 290 return gl_->MapBufferSubDataCHROMIUM(target, offset, size, access);
405 } 291 }
406 292
407 void WebGraphicsContext3DCommandBufferImpl::unmapBufferSubDataCHROMIUM( 293 void WebGraphicsContext3DGuest::unmapBufferSubDataCHROMIUM(
408 const void* mem) { 294 const void* mem) {
409 return gl_->UnmapBufferSubDataCHROMIUM(mem); 295 return gl_->UnmapBufferSubDataCHROMIUM(mem);
410 } 296 }
411 297
412 void* WebGraphicsContext3DCommandBufferImpl::mapTexSubImage2DCHROMIUM( 298 void* WebGraphicsContext3DGuest::mapTexSubImage2DCHROMIUM(
413 WGC3Denum target, 299 WGC3Denum target,
414 WGC3Dint level, 300 WGC3Dint level,
415 WGC3Dint xoffset, 301 WGC3Dint xoffset,
416 WGC3Dint yoffset, 302 WGC3Dint yoffset,
417 WGC3Dsizei width, 303 WGC3Dsizei width,
418 WGC3Dsizei height, 304 WGC3Dsizei height,
419 WGC3Denum format, 305 WGC3Denum format,
420 WGC3Denum type, 306 WGC3Denum type,
421 WGC3Denum access) { 307 WGC3Denum access) {
422 return gl_->MapTexSubImage2DCHROMIUM( 308 return gl_->MapTexSubImage2DCHROMIUM(
423 target, level, xoffset, yoffset, width, height, format, type, access); 309 target, level, xoffset, yoffset, width, height, format, type, access);
424 } 310 }
425 311
426 void WebGraphicsContext3DCommandBufferImpl::unmapTexSubImage2DCHROMIUM( 312 void WebGraphicsContext3DGuest::unmapTexSubImage2DCHROMIUM(
427 const void* mem) { 313 const void* mem) {
428 gl_->UnmapTexSubImage2DCHROMIUM(mem); 314 gl_->UnmapTexSubImage2DCHROMIUM(mem);
429 } 315 }
430 316
431 void WebGraphicsContext3DCommandBufferImpl::setVisibilityCHROMIUM( 317 void WebGraphicsContext3DGuest::setVisibilityCHROMIUM(
432 bool visible) { 318 bool visible) {
433 gl_->Flush(); 319 gl_->Flush();
434 context_->SetSurfaceVisible(visible); 320 // TODO(fsamuel): There doesn't seem to be an equivalent ppapi
321 // message. Do we care?
322 //context_->SetSurfaceVisible(visible);
435 if (!visible) 323 if (!visible)
436 gl_->FreeEverything(); 324 gl_->FreeEverything();
437 } 325 }
438 326
439 void WebGraphicsContext3DCommandBufferImpl:: 327 void WebGraphicsContext3DGuest::copyTextureToParentTextureCHROMIUM(
440 setMemoryAllocationChangedCallbackCHROMIUM(
441 WebGraphicsMemoryAllocationChangedCallbackCHROMIUM* callback) {
442 memory_allocation_changed_callback_ = callback;
443 }
444
445
446 void WebGraphicsContext3DCommandBufferImpl::copyTextureToParentTextureCHROMIUM(
447 WebGLId texture, WebGLId parentTexture) { 328 WebGLId texture, WebGLId parentTexture) {
448 NOTIMPLEMENTED(); 329 NOTIMPLEMENTED();
449 } 330 }
450 331
451 void WebGraphicsContext3DCommandBufferImpl:: 332 void WebGraphicsContext3DGuest::
452 rateLimitOffscreenContextCHROMIUM() { 333 rateLimitOffscreenContextCHROMIUM() {
453 gl_->RateLimitOffscreenContextCHROMIUM(); 334 gl_->RateLimitOffscreenContextCHROMIUM();
454 } 335 }
455 336
456 WebKit::WebString WebGraphicsContext3DCommandBufferImpl:: 337 WebKit::WebString WebGraphicsContext3DGuest::
457 getRequestableExtensionsCHROMIUM() { 338 getRequestableExtensionsCHROMIUM() {
458 return WebKit::WebString::fromUTF8( 339 return WebKit::WebString::fromUTF8(
459 gl_->GetRequestableExtensionsCHROMIUM()); 340 gl_->GetRequestableExtensionsCHROMIUM());
460 } 341 }
461 342
462 void WebGraphicsContext3DCommandBufferImpl::requestExtensionCHROMIUM( 343 void WebGraphicsContext3DGuest::requestExtensionCHROMIUM(
463 const char* extension) { 344 const char* extension) {
464 gl_->RequestExtensionCHROMIUM(extension); 345 gl_->RequestExtensionCHROMIUM(extension);
465 } 346 }
466 347
467 void WebGraphicsContext3DCommandBufferImpl::blitFramebufferCHROMIUM( 348 void WebGraphicsContext3DGuest::blitFramebufferCHROMIUM(
468 WGC3Dint srcX0, WGC3Dint srcY0, WGC3Dint srcX1, WGC3Dint srcY1, 349 WGC3Dint srcX0, WGC3Dint srcY0, WGC3Dint srcX1, WGC3Dint srcY1,
469 WGC3Dint dstX0, WGC3Dint dstY0, WGC3Dint dstX1, WGC3Dint dstY1, 350 WGC3Dint dstX0, WGC3Dint dstY0, WGC3Dint dstX1, WGC3Dint dstY1,
470 WGC3Dbitfield mask, WGC3Denum filter) { 351 WGC3Dbitfield mask, WGC3Denum filter) {
471 gl_->BlitFramebufferEXT( 352 gl_->BlitFramebufferEXT(
472 srcX0, srcY0, srcX1, srcY1, 353 srcX0, srcY0, srcX1, srcY1,
473 dstX0, dstY0, dstX1, dstY1, 354 dstX0, dstY0, dstX1, dstY1,
474 mask, filter); 355 mask, filter);
475 } 356 }
476 357
477 void WebGraphicsContext3DCommandBufferImpl:: 358 void WebGraphicsContext3DGuest::
478 renderbufferStorageMultisampleCHROMIUM( 359 renderbufferStorageMultisampleCHROMIUM(
479 WGC3Denum target, WGC3Dsizei samples, WGC3Denum internalformat, 360 WGC3Denum target, WGC3Dsizei samples, WGC3Denum internalformat,
480 WGC3Dsizei width, WGC3Dsizei height) { 361 WGC3Dsizei width, WGC3Dsizei height) {
481 gl_->RenderbufferStorageMultisampleEXT( 362 gl_->RenderbufferStorageMultisampleEXT(
482 target, samples, internalformat, width, height); 363 target, samples, internalformat, width, height);
483 } 364 }
484 365
485 // Helper macros to reduce the amount of code. 366 // Helper macros to reduce the amount of code.
486 367
487 #define DELEGATE_TO_GL(name, glname) \ 368 #define DELEGATE_TO_GL(name, glname) \
488 void WebGraphicsContext3DCommandBufferImpl::name() { \ 369 void WebGraphicsContext3DGuest::name() { \
489 gl_->glname(); \ 370 gl_->glname(); \
490 } 371 }
491 372
492 #define DELEGATE_TO_GL_1(name, glname, t1) \ 373 #define DELEGATE_TO_GL_1(name, glname, t1) \
493 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1) { \ 374 void WebGraphicsContext3DGuest::name(t1 a1) { \
494 gl_->glname(a1); \ 375 gl_->glname(a1); \
495 } 376 }
496 377
497 #define DELEGATE_TO_GL_1R(name, glname, t1, rt) \ 378 #define DELEGATE_TO_GL_1R(name, glname, t1, rt) \
498 rt WebGraphicsContext3DCommandBufferImpl::name(t1 a1) { \ 379 rt WebGraphicsContext3DGuest::name(t1 a1) { \
499 return gl_->glname(a1); \ 380 return gl_->glname(a1); \
500 } 381 }
501 382
502 #define DELEGATE_TO_GL_1RB(name, glname, t1, rt) \ 383 #define DELEGATE_TO_GL_1RB(name, glname, t1, rt) \
503 rt WebGraphicsContext3DCommandBufferImpl::name(t1 a1) { \ 384 rt WebGraphicsContext3DGuest::name(t1 a1) { \
504 return gl_->glname(a1) ? true : false; \ 385 return gl_->glname(a1) ? true : false; \
505 } 386 }
506 387
507 #define DELEGATE_TO_GL_2(name, glname, t1, t2) \ 388 #define DELEGATE_TO_GL_2(name, glname, t1, t2) \
508 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2) { \ 389 void WebGraphicsContext3DGuest::name(t1 a1, t2 a2) { \
509 gl_->glname(a1, a2); \ 390 gl_->glname(a1, a2); \
510 } 391 }
511 392
512 #define DELEGATE_TO_GL_2R(name, glname, t1, t2, rt) \ 393 #define DELEGATE_TO_GL_2R(name, glname, t1, t2, rt) \
513 rt WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2) { \ 394 rt WebGraphicsContext3DGuest::name(t1 a1, t2 a2) { \
514 return gl_->glname(a1, a2); \ 395 return gl_->glname(a1, a2); \
515 } 396 }
516 397
517 #define DELEGATE_TO_GL_3(name, glname, t1, t2, t3) \ 398 #define DELEGATE_TO_GL_3(name, glname, t1, t2, t3) \
518 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3) { \ 399 void WebGraphicsContext3DGuest::name(t1 a1, t2 a2, t3 a3) { \
519 gl_->glname(a1, a2, a3); \ 400 gl_->glname(a1, a2, a3); \
520 } 401 }
521 402
522 #define DELEGATE_TO_GL_4(name, glname, t1, t2, t3, t4) \ 403 #define DELEGATE_TO_GL_4(name, glname, t1, t2, t3, t4) \
523 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, t4 a4) { \ 404 void WebGraphicsContext3DGuest::name(t1 a1, t2 a2, t3 a3, t4 a4) { \
524 gl_->glname(a1, a2, a3, a4); \ 405 gl_->glname(a1, a2, a3, a4); \
525 } 406 }
526 407
527 #define DELEGATE_TO_GL_5(name, glname, t1, t2, t3, t4, t5) \ 408 #define DELEGATE_TO_GL_5(name, glname, t1, t2, t3, t4, t5) \
528 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ 409 void WebGraphicsContext3DGuest::name(t1 a1, t2 a2, t3 a3, \
529 t4 a4, t5 a5) { \ 410 t4 a4, t5 a5) { \
530 gl_->glname(a1, a2, a3, a4, a5); \ 411 gl_->glname(a1, a2, a3, a4, a5); \
531 } 412 }
532 413
533 #define DELEGATE_TO_GL_6(name, glname, t1, t2, t3, t4, t5, t6) \ 414 #define DELEGATE_TO_GL_6(name, glname, t1, t2, t3, t4, t5, t6) \
534 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ 415 void WebGraphicsContext3DGuest::name(t1 a1, t2 a2, t3 a3, \
535 t4 a4, t5 a5, t6 a6) { \ 416 t4 a4, t5 a5, t6 a6) { \
536 gl_->glname(a1, a2, a3, a4, a5, a6); \ 417 gl_->glname(a1, a2, a3, a4, a5, a6); \
537 } 418 }
538 419
539 #define DELEGATE_TO_GL_7(name, glname, t1, t2, t3, t4, t5, t6, t7) \ 420 #define DELEGATE_TO_GL_7(name, glname, t1, t2, t3, t4, t5, t6, t7) \
540 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ 421 void WebGraphicsContext3DGuest::name(t1 a1, t2 a2, t3 a3, \
541 t4 a4, t5 a5, t6 a6, t7 a7) { \ 422 t4 a4, t5 a5, t6 a6, t7 a7) { \
542 gl_->glname(a1, a2, a3, a4, a5, a6, a7); \ 423 gl_->glname(a1, a2, a3, a4, a5, a6, a7); \
543 } 424 }
544 425
545 #define DELEGATE_TO_GL_8(name, glname, t1, t2, t3, t4, t5, t6, t7, t8) \ 426 #define DELEGATE_TO_GL_8(name, glname, t1, t2, t3, t4, t5, t6, t7, t8) \
546 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ 427 void WebGraphicsContext3DGuest::name(t1 a1, t2 a2, t3 a3, \
547 t4 a4, t5 a5, t6 a6, \ 428 t4 a4, t5 a5, t6 a6, \
548 t7 a7, t8 a8) { \ 429 t7 a7, t8 a8) { \
549 gl_->glname(a1, a2, a3, a4, a5, a6, a7, a8); \ 430 gl_->glname(a1, a2, a3, a4, a5, a6, a7, a8); \
550 } 431 }
551 432
552 #define DELEGATE_TO_GL_9(name, glname, t1, t2, t3, t4, t5, t6, t7, t8, t9) \ 433 #define DELEGATE_TO_GL_9(name, glname, t1, t2, t3, t4, t5, t6, t7, t8, t9) \
553 void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \ 434 void WebGraphicsContext3DGuest::name(t1 a1, t2 a2, t3 a3, \
554 t4 a4, t5 a5, t6 a6, \ 435 t4 a4, t5 a5, t6 a6, \
555 t7 a7, t8 a8, t9 a9) { \ 436 t7 a7, t8 a8, t9 a9) { \
556 gl_->glname(a1, a2, a3, a4, a5, a6, a7, a8, a9); \ 437 gl_->glname(a1, a2, a3, a4, a5, a6, a7, a8, a9); \
557 } 438 }
558 439
559 DELEGATE_TO_GL_1(activeTexture, ActiveTexture, WGC3Denum) 440 DELEGATE_TO_GL_1(activeTexture, ActiveTexture, WGC3Denum)
560 441
561 DELEGATE_TO_GL_2(attachShader, AttachShader, WebGLId, WebGLId) 442 DELEGATE_TO_GL_2(attachShader, AttachShader, WebGLId, WebGLId)
562 443
563 DELEGATE_TO_GL_3(bindAttribLocation, BindAttribLocation, WebGLId, 444 DELEGATE_TO_GL_3(bindAttribLocation, BindAttribLocation, WebGLId,
564 WGC3Duint, const WGC3Dchar*) 445 WGC3Duint, const WGC3Dchar*)
565 446
566 DELEGATE_TO_GL_2(bindBuffer, BindBuffer, WGC3Denum, WebGLId) 447 DELEGATE_TO_GL_2(bindBuffer, BindBuffer, WGC3Denum, WebGLId)
567 448
568 void WebGraphicsContext3DCommandBufferImpl::bindFramebuffer( 449 void WebGraphicsContext3DGuest::bindFramebuffer(
569 WGC3Denum target, 450 WGC3Denum target,
570 WebGLId framebuffer) { 451 WebGLId framebuffer) {
571 gl_->BindFramebuffer(target, framebuffer); 452 gl_->BindFramebuffer(target, framebuffer);
572 bound_fbo_ = framebuffer; 453 bound_fbo_ = framebuffer;
573 } 454 }
574 455
575 DELEGATE_TO_GL_2(bindRenderbuffer, BindRenderbuffer, WGC3Denum, WebGLId) 456 DELEGATE_TO_GL_2(bindRenderbuffer, BindRenderbuffer, WGC3Denum, WebGLId)
576 457
577 DELEGATE_TO_GL_2(bindTexture, BindTexture, WGC3Denum, WebGLId) 458 DELEGATE_TO_GL_2(bindTexture, BindTexture, WGC3Denum, WebGLId)
578 459
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 519
639 DELEGATE_TO_GL_2(detachShader, DetachShader, WebGLId, WebGLId) 520 DELEGATE_TO_GL_2(detachShader, DetachShader, WebGLId, WebGLId)
640 521
641 DELEGATE_TO_GL_1(disable, Disable, WGC3Denum) 522 DELEGATE_TO_GL_1(disable, Disable, WGC3Denum)
642 523
643 DELEGATE_TO_GL_1(disableVertexAttribArray, DisableVertexAttribArray, 524 DELEGATE_TO_GL_1(disableVertexAttribArray, DisableVertexAttribArray,
644 WGC3Duint) 525 WGC3Duint)
645 526
646 DELEGATE_TO_GL_3(drawArrays, DrawArrays, WGC3Denum, WGC3Dint, WGC3Dsizei) 527 DELEGATE_TO_GL_3(drawArrays, DrawArrays, WGC3Denum, WGC3Dint, WGC3Dsizei)
647 528
648 void WebGraphicsContext3DCommandBufferImpl::drawElements(WGC3Denum mode, 529 void WebGraphicsContext3DGuest::drawElements(WGC3Denum mode,
649 WGC3Dsizei count, 530 WGC3Dsizei count,
650 WGC3Denum type, 531 WGC3Denum type,
651 WGC3Dintptr offset) { 532 WGC3Dintptr offset) {
652 gl_->DrawElements( 533 gl_->DrawElements(
653 mode, count, type, 534 mode, count, type,
654 reinterpret_cast<void*>(static_cast<intptr_t>(offset))); 535 reinterpret_cast<void*>(static_cast<intptr_t>(offset)));
655 } 536 }
656 537
657 DELEGATE_TO_GL_1(enable, Enable, WGC3Denum) 538 DELEGATE_TO_GL_1(enable, Enable, WGC3Denum)
658 539
659 DELEGATE_TO_GL_1(enableVertexAttribArray, EnableVertexAttribArray, 540 DELEGATE_TO_GL_1(enableVertexAttribArray, EnableVertexAttribArray,
660 WGC3Duint) 541 WGC3Duint)
661 542
662 DELEGATE_TO_GL(finish, Finish) 543 DELEGATE_TO_GL(finish, Finish)
663 544
664 DELEGATE_TO_GL(flush, Flush) 545 DELEGATE_TO_GL(flush, Flush)
665 546
666 DELEGATE_TO_GL_4(framebufferRenderbuffer, FramebufferRenderbuffer, 547 DELEGATE_TO_GL_4(framebufferRenderbuffer, FramebufferRenderbuffer,
667 WGC3Denum, WGC3Denum, WGC3Denum, WebGLId) 548 WGC3Denum, WGC3Denum, WGC3Denum, WebGLId)
668 549
669 DELEGATE_TO_GL_5(framebufferTexture2D, FramebufferTexture2D, 550 DELEGATE_TO_GL_5(framebufferTexture2D, FramebufferTexture2D,
670 WGC3Denum, WGC3Denum, WGC3Denum, WebGLId, WGC3Dint) 551 WGC3Denum, WGC3Denum, WGC3Denum, WebGLId, WGC3Dint)
671 552
672 DELEGATE_TO_GL_1(frontFace, FrontFace, WGC3Denum) 553 DELEGATE_TO_GL_1(frontFace, FrontFace, WGC3Denum)
673 554
674 DELEGATE_TO_GL_1(generateMipmap, GenerateMipmap, WGC3Denum) 555 DELEGATE_TO_GL_1(generateMipmap, GenerateMipmap, WGC3Denum)
675 556
676 bool WebGraphicsContext3DCommandBufferImpl::getActiveAttrib( 557 bool WebGraphicsContext3DGuest::getActiveAttrib(
677 WebGLId program, WGC3Duint index, ActiveInfo& info) { 558 WebGLId program, WGC3Duint index, ActiveInfo& info) {
678 if (!program) { 559 if (!program) {
679 synthesizeGLError(GL_INVALID_VALUE); 560 synthesizeGLError(GL_INVALID_VALUE);
680 return false; 561 return false;
681 } 562 }
682 GLint max_name_length = -1; 563 GLint max_name_length = -1;
683 gl_->GetProgramiv( 564 gl_->GetProgramiv(
684 program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &max_name_length); 565 program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &max_name_length);
685 if (max_name_length < 0) 566 if (max_name_length < 0)
686 return false; 567 return false;
687 scoped_array<GLchar> name(new GLchar[max_name_length]); 568 scoped_array<GLchar> name(new GLchar[max_name_length]);
688 if (!name.get()) { 569 if (!name.get()) {
689 synthesizeGLError(GL_OUT_OF_MEMORY); 570 synthesizeGLError(GL_OUT_OF_MEMORY);
690 return false; 571 return false;
691 } 572 }
692 GLsizei length = 0; 573 GLsizei length = 0;
693 GLint size = -1; 574 GLint size = -1;
694 GLenum type = 0; 575 GLenum type = 0;
695 gl_->GetActiveAttrib( 576 gl_->GetActiveAttrib(
696 program, index, max_name_length, &length, &size, &type, name.get()); 577 program, index, max_name_length, &length, &size, &type, name.get());
697 if (size < 0) { 578 if (size < 0) {
698 return false; 579 return false;
699 } 580 }
700 info.name = WebKit::WebString::fromUTF8(name.get(), length); 581 info.name = WebKit::WebString::fromUTF8(name.get(), length);
701 info.type = type; 582 info.type = type;
702 info.size = size; 583 info.size = size;
703 return true; 584 return true;
704 } 585 }
705 586
706 bool WebGraphicsContext3DCommandBufferImpl::getActiveUniform( 587 bool WebGraphicsContext3DGuest::getActiveUniform(
707 WebGLId program, WGC3Duint index, ActiveInfo& info) { 588 WebGLId program, WGC3Duint index, ActiveInfo& info) {
708 GLint max_name_length = -1; 589 GLint max_name_length = -1;
709 gl_->GetProgramiv( 590 gl_->GetProgramiv(
710 program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &max_name_length); 591 program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &max_name_length);
711 if (max_name_length < 0) 592 if (max_name_length < 0)
712 return false; 593 return false;
713 scoped_array<GLchar> name(new GLchar[max_name_length]); 594 scoped_array<GLchar> name(new GLchar[max_name_length]);
714 if (!name.get()) { 595 if (!name.get()) {
715 synthesizeGLError(GL_OUT_OF_MEMORY); 596 synthesizeGLError(GL_OUT_OF_MEMORY);
716 return false; 597 return false;
(...skipping 17 matching lines...) Expand all
734 615
735 DELEGATE_TO_GL_2R(getAttribLocation, GetAttribLocation, 616 DELEGATE_TO_GL_2R(getAttribLocation, GetAttribLocation,
736 WebGLId, const WGC3Dchar*, WGC3Dint) 617 WebGLId, const WGC3Dchar*, WGC3Dint)
737 618
738 DELEGATE_TO_GL_2(getBooleanv, GetBooleanv, WGC3Denum, WGC3Dboolean*) 619 DELEGATE_TO_GL_2(getBooleanv, GetBooleanv, WGC3Denum, WGC3Dboolean*)
739 620
740 DELEGATE_TO_GL_3(getBufferParameteriv, GetBufferParameteriv, 621 DELEGATE_TO_GL_3(getBufferParameteriv, GetBufferParameteriv,
741 WGC3Denum, WGC3Denum, WGC3Dint*) 622 WGC3Denum, WGC3Denum, WGC3Dint*)
742 623
743 WebKit::WebGraphicsContext3D::Attributes 624 WebKit::WebGraphicsContext3D::Attributes
744 WebGraphicsContext3DCommandBufferImpl::getContextAttributes() { 625 WebGraphicsContext3DGuest::getContextAttributes() {
745 return attributes_; 626 return attributes_;
746 } 627 }
747 628
748 WGC3Denum WebGraphicsContext3DCommandBufferImpl::getError() { 629 WGC3Denum WebGraphicsContext3DGuest::getError() {
749 if (!synthetic_errors_.empty()) { 630 if (!synthetic_errors_.empty()) {
750 std::vector<WGC3Denum>::iterator iter = synthetic_errors_.begin(); 631 std::vector<WGC3Denum>::iterator iter = synthetic_errors_.begin();
751 WGC3Denum err = *iter; 632 WGC3Denum err = *iter;
752 synthetic_errors_.erase(iter); 633 synthetic_errors_.erase(iter);
753 return err; 634 return err;
754 } 635 }
755 636
756 return gl_->GetError(); 637 return gl_->GetError();
757 } 638 }
758 639
759 bool WebGraphicsContext3DCommandBufferImpl::isContextLost() { 640 bool WebGraphicsContext3DGuest::isContextLost() {
760 return initialize_failed_ || 641 // TODO(fsamuel): Context is assumed to be never lost
761 (context_ && context_->IsCommandBufferContextLost()) || 642 // until I find a cleaner way to do this.
762 context_lost_reason_ != GL_NO_ERROR; 643 return dead_ || initialize_failed_;
763 } 644 }
764 645
765 DELEGATE_TO_GL_2(getFloatv, GetFloatv, WGC3Denum, WGC3Dfloat*) 646 DELEGATE_TO_GL_2(getFloatv, GetFloatv, WGC3Denum, WGC3Dfloat*)
766 647
767 DELEGATE_TO_GL_4(getFramebufferAttachmentParameteriv, 648 DELEGATE_TO_GL_4(getFramebufferAttachmentParameteriv,
768 GetFramebufferAttachmentParameteriv, 649 GetFramebufferAttachmentParameteriv,
769 WGC3Denum, WGC3Denum, WGC3Denum, WGC3Dint*) 650 WGC3Denum, WGC3Denum, WGC3Denum, WGC3Dint*)
770 651
771 DELEGATE_TO_GL_2(getIntegerv, GetIntegerv, WGC3Denum, WGC3Dint*) 652 DELEGATE_TO_GL_2(getIntegerv, GetIntegerv, WGC3Denum, WGC3Dint*)
772 653
773 DELEGATE_TO_GL_3(getProgramiv, GetProgramiv, WebGLId, WGC3Denum, WGC3Dint*) 654 DELEGATE_TO_GL_3(getProgramiv, GetProgramiv, WebGLId, WGC3Denum, WGC3Dint*)
774 655
775 WebKit::WebString WebGraphicsContext3DCommandBufferImpl::getProgramInfoLog( 656 WebKit::WebString WebGraphicsContext3DGuest::getProgramInfoLog(
776 WebGLId program) { 657 WebGLId program) {
777 GLint logLength = 0; 658 GLint logLength = 0;
778 gl_->GetProgramiv(program, GL_INFO_LOG_LENGTH, &logLength); 659 gl_->GetProgramiv(program, GL_INFO_LOG_LENGTH, &logLength);
779 if (!logLength) 660 if (!logLength)
780 return WebKit::WebString(); 661 return WebKit::WebString();
781 scoped_array<GLchar> log(new GLchar[logLength]); 662 scoped_array<GLchar> log(new GLchar[logLength]);
782 if (!log.get()) 663 if (!log.get())
783 return WebKit::WebString(); 664 return WebKit::WebString();
784 GLsizei returnedLogLength = 0; 665 GLsizei returnedLogLength = 0;
785 gl_->GetProgramInfoLog( 666 gl_->GetProgramInfoLog(
786 program, logLength, &returnedLogLength, log.get()); 667 program, logLength, &returnedLogLength, log.get());
787 DCHECK_EQ(logLength, returnedLogLength + 1); 668 DCHECK_EQ(logLength, returnedLogLength + 1);
788 WebKit::WebString res = 669 WebKit::WebString res =
789 WebKit::WebString::fromUTF8(log.get(), returnedLogLength); 670 WebKit::WebString::fromUTF8(log.get(), returnedLogLength);
790 return res; 671 return res;
791 } 672 }
792 673
793 DELEGATE_TO_GL_3(getRenderbufferParameteriv, GetRenderbufferParameteriv, 674 DELEGATE_TO_GL_3(getRenderbufferParameteriv, GetRenderbufferParameteriv,
794 WGC3Denum, WGC3Denum, WGC3Dint*) 675 WGC3Denum, WGC3Denum, WGC3Dint*)
795 676
796 DELEGATE_TO_GL_3(getShaderiv, GetShaderiv, WebGLId, WGC3Denum, WGC3Dint*) 677 DELEGATE_TO_GL_3(getShaderiv, GetShaderiv, WebGLId, WGC3Denum, WGC3Dint*)
797 678
798 WebKit::WebString WebGraphicsContext3DCommandBufferImpl::getShaderInfoLog( 679 WebKit::WebString WebGraphicsContext3DGuest::getShaderInfoLog(
799 WebGLId shader) { 680 WebGLId shader) {
800 GLint logLength = 0; 681 GLint logLength = 0;
801 gl_->GetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength); 682 gl_->GetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength);
802 if (!logLength) 683 if (!logLength)
803 return WebKit::WebString(); 684 return WebKit::WebString();
804 scoped_array<GLchar> log(new GLchar[logLength]); 685 scoped_array<GLchar> log(new GLchar[logLength]);
805 if (!log.get()) 686 if (!log.get())
806 return WebKit::WebString(); 687 return WebKit::WebString();
807 GLsizei returnedLogLength = 0; 688 GLsizei returnedLogLength = 0;
808 gl_->GetShaderInfoLog( 689 gl_->GetShaderInfoLog(
809 shader, logLength, &returnedLogLength, log.get()); 690 shader, logLength, &returnedLogLength, log.get());
810 DCHECK_EQ(logLength, returnedLogLength + 1); 691 DCHECK_EQ(logLength, returnedLogLength + 1);
811 WebKit::WebString res = 692 WebKit::WebString res =
812 WebKit::WebString::fromUTF8(log.get(), returnedLogLength); 693 WebKit::WebString::fromUTF8(log.get(), returnedLogLength);
813 return res; 694 return res;
814 } 695 }
815 696
816 WebKit::WebString WebGraphicsContext3DCommandBufferImpl::getShaderSource( 697 WebKit::WebString WebGraphicsContext3DGuest::getShaderSource(
817 WebGLId shader) { 698 WebGLId shader) {
818 GLint logLength = 0; 699 GLint logLength = 0;
819 gl_->GetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &logLength); 700 gl_->GetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &logLength);
820 if (!logLength) 701 if (!logLength)
821 return WebKit::WebString(); 702 return WebKit::WebString();
822 scoped_array<GLchar> log(new GLchar[logLength]); 703 scoped_array<GLchar> log(new GLchar[logLength]);
823 if (!log.get()) 704 if (!log.get())
824 return WebKit::WebString(); 705 return WebKit::WebString();
825 GLsizei returnedLogLength = 0; 706 GLsizei returnedLogLength = 0;
826 gl_->GetShaderSource( 707 gl_->GetShaderSource(
827 shader, logLength, &returnedLogLength, log.get()); 708 shader, logLength, &returnedLogLength, log.get());
828 if (!returnedLogLength) 709 if (!returnedLogLength)
829 return WebKit::WebString(); 710 return WebKit::WebString();
830 DCHECK_EQ(logLength, returnedLogLength + 1); 711 DCHECK_EQ(logLength, returnedLogLength + 1);
831 WebKit::WebString res = 712 WebKit::WebString res =
832 WebKit::WebString::fromUTF8(log.get(), returnedLogLength); 713 WebKit::WebString::fromUTF8(log.get(), returnedLogLength);
833 return res; 714 return res;
834 } 715 }
835 716
836 WebKit::WebString WebGraphicsContext3DCommandBufferImpl:: 717 WebKit::WebString WebGraphicsContext3DGuest::
837 getTranslatedShaderSourceANGLE(WebGLId shader) { 718 getTranslatedShaderSourceANGLE(WebGLId shader) {
838 GLint logLength = 0; 719 GLint logLength = 0;
839 gl_->GetShaderiv( 720 gl_->GetShaderiv(
840 shader, GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE, &logLength); 721 shader, GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE, &logLength);
841 if (!logLength) 722 if (!logLength)
842 return WebKit::WebString(); 723 return WebKit::WebString();
843 scoped_array<GLchar> log(new GLchar[logLength]); 724 scoped_array<GLchar> log(new GLchar[logLength]);
844 if (!log.get()) 725 if (!log.get())
845 return WebKit::WebString(); 726 return WebKit::WebString();
846 GLsizei returnedLogLength = 0; 727 GLsizei returnedLogLength = 0;
847 gl_->GetTranslatedShaderSourceANGLE( 728 gl_->GetTranslatedShaderSourceANGLE(
848 shader, logLength, &returnedLogLength, log.get()); 729 shader, logLength, &returnedLogLength, log.get());
849 if (!returnedLogLength) 730 if (!returnedLogLength)
850 return WebKit::WebString(); 731 return WebKit::WebString();
851 DCHECK_EQ(logLength, returnedLogLength + 1); 732 DCHECK_EQ(logLength, returnedLogLength + 1);
852 WebKit::WebString res = 733 WebKit::WebString res =
853 WebKit::WebString::fromUTF8(log.get(), returnedLogLength); 734 WebKit::WebString::fromUTF8(log.get(), returnedLogLength);
854 return res; 735 return res;
855 } 736 }
856 737
857 WebKit::WebString WebGraphicsContext3DCommandBufferImpl::getString( 738 WebKit::WebString WebGraphicsContext3DGuest::getString(
858 WGC3Denum name) { 739 WGC3Denum name) {
859 return WebKit::WebString::fromUTF8( 740 return WebKit::WebString::fromUTF8(
860 reinterpret_cast<const char*>(gl_->GetString(name))); 741 reinterpret_cast<const char*>(gl_->GetString(name)));
861 } 742 }
862 743
863 DELEGATE_TO_GL_3(getTexParameterfv, GetTexParameterfv, 744 DELEGATE_TO_GL_3(getTexParameterfv, GetTexParameterfv,
864 WGC3Denum, WGC3Denum, WGC3Dfloat*) 745 WGC3Denum, WGC3Denum, WGC3Dfloat*)
865 746
866 DELEGATE_TO_GL_3(getTexParameteriv, GetTexParameteriv, 747 DELEGATE_TO_GL_3(getTexParameteriv, GetTexParameteriv,
867 WGC3Denum, WGC3Denum, WGC3Dint*) 748 WGC3Denum, WGC3Denum, WGC3Dint*)
868 749
869 DELEGATE_TO_GL_3(getUniformfv, GetUniformfv, WebGLId, WGC3Dint, WGC3Dfloat*) 750 DELEGATE_TO_GL_3(getUniformfv, GetUniformfv, WebGLId, WGC3Dint, WGC3Dfloat*)
870 751
871 DELEGATE_TO_GL_3(getUniformiv, GetUniformiv, WebGLId, WGC3Dint, WGC3Dint*) 752 DELEGATE_TO_GL_3(getUniformiv, GetUniformiv, WebGLId, WGC3Dint, WGC3Dint*)
872 753
873 DELEGATE_TO_GL_2R(getUniformLocation, GetUniformLocation, 754 DELEGATE_TO_GL_2R(getUniformLocation, GetUniformLocation,
874 WebGLId, const WGC3Dchar*, WGC3Dint) 755 WebGLId, const WGC3Dchar*, WGC3Dint)
875 756
876 DELEGATE_TO_GL_3(getVertexAttribfv, GetVertexAttribfv, 757 DELEGATE_TO_GL_3(getVertexAttribfv, GetVertexAttribfv,
877 WGC3Duint, WGC3Denum, WGC3Dfloat*) 758 WGC3Duint, WGC3Denum, WGC3Dfloat*)
878 759
879 DELEGATE_TO_GL_3(getVertexAttribiv, GetVertexAttribiv, 760 DELEGATE_TO_GL_3(getVertexAttribiv, GetVertexAttribiv,
880 WGC3Duint, WGC3Denum, WGC3Dint*) 761 WGC3Duint, WGC3Denum, WGC3Dint*)
881 762
882 WGC3Dsizeiptr WebGraphicsContext3DCommandBufferImpl::getVertexAttribOffset( 763 WGC3Dsizeiptr WebGraphicsContext3DGuest::getVertexAttribOffset(
883 WGC3Duint index, WGC3Denum pname) { 764 WGC3Duint index, WGC3Denum pname) {
884 GLvoid* value = NULL; 765 GLvoid* value = NULL;
885 // NOTE: If pname is ever a value that returns more then 1 element 766 // NOTE: If pname is ever a value that returns more then 1 element
886 // this will corrupt memory. 767 // this will corrupt memory.
887 gl_->GetVertexAttribPointerv(index, pname, &value); 768 gl_->GetVertexAttribPointerv(index, pname, &value);
888 return static_cast<WGC3Dsizeiptr>(reinterpret_cast<intptr_t>(value)); 769 return static_cast<WGC3Dsizeiptr>(reinterpret_cast<intptr_t>(value));
889 } 770 }
890 771
891 DELEGATE_TO_GL_2(hint, Hint, WGC3Denum, WGC3Denum) 772 DELEGATE_TO_GL_2(hint, Hint, WGC3Denum, WGC3Denum)
892 773
(...skipping 16 matching lines...) Expand all
909 DELEGATE_TO_GL_1(linkProgram, LinkProgram, WebGLId) 790 DELEGATE_TO_GL_1(linkProgram, LinkProgram, WebGLId)
910 791
911 DELEGATE_TO_GL_2(pixelStorei, PixelStorei, WGC3Denum, WGC3Dint) 792 DELEGATE_TO_GL_2(pixelStorei, PixelStorei, WGC3Denum, WGC3Dint)
912 793
913 DELEGATE_TO_GL_2(polygonOffset, PolygonOffset, WGC3Dfloat, WGC3Dfloat) 794 DELEGATE_TO_GL_2(polygonOffset, PolygonOffset, WGC3Dfloat, WGC3Dfloat)
914 795
915 DELEGATE_TO_GL_7(readPixels, ReadPixels, 796 DELEGATE_TO_GL_7(readPixels, ReadPixels,
916 WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei, WGC3Denum, 797 WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei, WGC3Denum,
917 WGC3Denum, void*) 798 WGC3Denum, void*)
918 799
919 void WebGraphicsContext3DCommandBufferImpl::releaseShaderCompiler() { 800 void WebGraphicsContext3DGuest::releaseShaderCompiler() {
920 } 801 }
921 802
922 DELEGATE_TO_GL_4(renderbufferStorage, RenderbufferStorage, 803 DELEGATE_TO_GL_4(renderbufferStorage, RenderbufferStorage,
923 WGC3Denum, WGC3Denum, WGC3Dsizei, WGC3Dsizei) 804 WGC3Denum, WGC3Denum, WGC3Dsizei, WGC3Dsizei)
924 805
925 DELEGATE_TO_GL_2(sampleCoverage, SampleCoverage, WGC3Dfloat, WGC3Dboolean) 806 DELEGATE_TO_GL_2(sampleCoverage, SampleCoverage, WGC3Dfloat, WGC3Dboolean)
926 807
927 DELEGATE_TO_GL_4(scissor, Scissor, WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei) 808 DELEGATE_TO_GL_4(scissor, Scissor, WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei)
928 809
929 void WebGraphicsContext3DCommandBufferImpl::shaderSource( 810 void WebGraphicsContext3DGuest::shaderSource(
930 WebGLId shader, const WGC3Dchar* string) { 811 WebGLId shader, const WGC3Dchar* string) {
931 GLint length = strlen(string); 812 GLint length = strlen(string);
932 gl_->ShaderSource(shader, 1, &string, &length); 813 gl_->ShaderSource(shader, 1, &string, &length);
933 } 814 }
934 815
935 DELEGATE_TO_GL_3(stencilFunc, StencilFunc, WGC3Denum, WGC3Dint, WGC3Duint) 816 DELEGATE_TO_GL_3(stencilFunc, StencilFunc, WGC3Denum, WGC3Dint, WGC3Duint)
936 817
937 DELEGATE_TO_GL_4(stencilFuncSeparate, StencilFuncSeparate, 818 DELEGATE_TO_GL_4(stencilFuncSeparate, StencilFuncSeparate,
938 WGC3Denum, WGC3Denum, WGC3Dint, WGC3Duint) 819 WGC3Denum, WGC3Denum, WGC3Dint, WGC3Duint)
939 820
(...skipping 10 matching lines...) Expand all
950 831
951 DELEGATE_TO_GL_9(texImage2D, TexImage2D, 832 DELEGATE_TO_GL_9(texImage2D, TexImage2D,
952 WGC3Denum, WGC3Dint, WGC3Denum, WGC3Dsizei, WGC3Dsizei, 833 WGC3Denum, WGC3Dint, WGC3Denum, WGC3Dsizei, WGC3Dsizei,
953 WGC3Dint, WGC3Denum, WGC3Denum, const void*) 834 WGC3Dint, WGC3Denum, WGC3Denum, const void*)
954 835
955 DELEGATE_TO_GL_3(texParameterf, TexParameterf, 836 DELEGATE_TO_GL_3(texParameterf, TexParameterf,
956 WGC3Denum, WGC3Denum, WGC3Dfloat); 837 WGC3Denum, WGC3Denum, WGC3Dfloat);
957 838
958 static const unsigned int kTextureWrapR = 0x8072; 839 static const unsigned int kTextureWrapR = 0x8072;
959 840
960 void WebGraphicsContext3DCommandBufferImpl::texParameteri( 841 void WebGraphicsContext3DGuest::texParameteri(
961 WGC3Denum target, WGC3Denum pname, WGC3Dint param) { 842 WGC3Denum target, WGC3Denum pname, WGC3Dint param) {
962 // TODO(kbr): figure out whether the setting of TEXTURE_WRAP_R in 843 // TODO(kbr): figure out whether the setting of TEXTURE_WRAP_R in
963 // GraphicsContext3D.cpp is strictly necessary to avoid seams at the 844 // GraphicsContext3D.cpp is strictly necessary to avoid seams at the
964 // edge of cube maps, and, if it is, push it into the GLES2 service 845 // edge of cube maps, and, if it is, push it into the GLES2 service
965 // side code. 846 // side code.
966 if (pname == kTextureWrapR) { 847 if (pname == kTextureWrapR) {
967 return; 848 return;
968 } 849 }
969 gl_->TexParameteri(target, pname, param); 850 gl_->TexParameteri(target, pname, param);
970 } 851 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1041 922
1042 DELEGATE_TO_GL_2(vertexAttrib3fv, VertexAttrib3fv, WGC3Duint, 923 DELEGATE_TO_GL_2(vertexAttrib3fv, VertexAttrib3fv, WGC3Duint,
1043 const WGC3Dfloat*) 924 const WGC3Dfloat*)
1044 925
1045 DELEGATE_TO_GL_5(vertexAttrib4f, VertexAttrib4f, WGC3Duint, 926 DELEGATE_TO_GL_5(vertexAttrib4f, VertexAttrib4f, WGC3Duint,
1046 WGC3Dfloat, WGC3Dfloat, WGC3Dfloat, WGC3Dfloat) 927 WGC3Dfloat, WGC3Dfloat, WGC3Dfloat, WGC3Dfloat)
1047 928
1048 DELEGATE_TO_GL_2(vertexAttrib4fv, VertexAttrib4fv, WGC3Duint, 929 DELEGATE_TO_GL_2(vertexAttrib4fv, VertexAttrib4fv, WGC3Duint,
1049 const WGC3Dfloat*) 930 const WGC3Dfloat*)
1050 931
1051 void WebGraphicsContext3DCommandBufferImpl::vertexAttribPointer( 932 void WebGraphicsContext3DGuest::vertexAttribPointer(
1052 WGC3Duint index, WGC3Dint size, WGC3Denum type, WGC3Dboolean normalized, 933 WGC3Duint index, WGC3Dint size, WGC3Denum type, WGC3Dboolean normalized,
1053 WGC3Dsizei stride, WGC3Dintptr offset) { 934 WGC3Dsizei stride, WGC3Dintptr offset) {
1054 gl_->VertexAttribPointer( 935 gl_->VertexAttribPointer(
1055 index, size, type, normalized, stride, 936 index, size, type, normalized, stride,
1056 reinterpret_cast<void*>(static_cast<intptr_t>(offset))); 937 reinterpret_cast<void*>(static_cast<intptr_t>(offset)));
1057 } 938 }
1058 939
1059 DELEGATE_TO_GL_4(viewport, Viewport, 940 DELEGATE_TO_GL_4(viewport, Viewport,
1060 WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei) 941 WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei)
1061 942
1062 WebGLId WebGraphicsContext3DCommandBufferImpl::createBuffer() { 943 WebGLId WebGraphicsContext3DGuest::createBuffer() {
1063 GLuint o; 944 GLuint o;
1064 gl_->GenBuffers(1, &o); 945 gl_->GenBuffers(1, &o);
1065 return o; 946 return o;
1066 } 947 }
1067 948
1068 WebGLId WebGraphicsContext3DCommandBufferImpl::createFramebuffer() { 949 WebGLId WebGraphicsContext3DGuest::createFramebuffer() {
1069 GLuint o = 0; 950 GLuint o = 0;
1070 gl_->GenFramebuffers(1, &o); 951 gl_->GenFramebuffers(1, &o);
1071 return o; 952 return o;
1072 } 953 }
1073 954
1074 WebGLId WebGraphicsContext3DCommandBufferImpl::createProgram() { 955 WebGLId WebGraphicsContext3DGuest::createProgram() {
1075 return gl_->CreateProgram(); 956 return gl_->CreateProgram();
1076 } 957 }
1077 958
1078 WebGLId WebGraphicsContext3DCommandBufferImpl::createRenderbuffer() { 959 WebGLId WebGraphicsContext3DGuest::createRenderbuffer() {
1079 GLuint o; 960 GLuint o;
1080 gl_->GenRenderbuffers(1, &o); 961 gl_->GenRenderbuffers(1, &o);
1081 return o; 962 return o;
1082 } 963 }
1083 964
1084 DELEGATE_TO_GL_1R(createShader, CreateShader, WGC3Denum, WebGLId); 965 DELEGATE_TO_GL_1R(createShader, CreateShader, WGC3Denum, WebGLId);
1085 966
1086 WebGLId WebGraphicsContext3DCommandBufferImpl::createTexture() { 967 WebGLId WebGraphicsContext3DGuest::createTexture() {
1087 GLuint o; 968 GLuint o;
1088 gl_->GenTextures(1, &o); 969 gl_->GenTextures(1, &o);
1089 return o; 970 return o;
1090 } 971 }
1091 972
1092 void WebGraphicsContext3DCommandBufferImpl::deleteBuffer(WebGLId buffer) { 973 void WebGraphicsContext3DGuest::deleteBuffer(WebGLId buffer) {
1093 gl_->DeleteBuffers(1, &buffer); 974 gl_->DeleteBuffers(1, &buffer);
1094 } 975 }
1095 976
1096 void WebGraphicsContext3DCommandBufferImpl::deleteFramebuffer( 977 void WebGraphicsContext3DGuest::deleteFramebuffer(
1097 WebGLId framebuffer) { 978 WebGLId framebuffer) {
1098 gl_->DeleteFramebuffers(1, &framebuffer); 979 gl_->DeleteFramebuffers(1, &framebuffer);
1099 } 980 }
1100 981
1101 void WebGraphicsContext3DCommandBufferImpl::deleteProgram(WebGLId program) { 982 void WebGraphicsContext3DGuest::deleteProgram(WebGLId program) {
1102 gl_->DeleteProgram(program); 983 gl_->DeleteProgram(program);
1103 } 984 }
1104 985
1105 void WebGraphicsContext3DCommandBufferImpl::deleteRenderbuffer( 986 void WebGraphicsContext3DGuest::deleteRenderbuffer(
1106 WebGLId renderbuffer) { 987 WebGLId renderbuffer) {
1107 gl_->DeleteRenderbuffers(1, &renderbuffer); 988 gl_->DeleteRenderbuffers(1, &renderbuffer);
1108 } 989 }
1109 990
1110 void WebGraphicsContext3DCommandBufferImpl::deleteShader(WebGLId shader) { 991 void WebGraphicsContext3DGuest::deleteShader(WebGLId shader) {
1111 gl_->DeleteShader(shader); 992 gl_->DeleteShader(shader);
1112 } 993 }
1113 994
1114 void WebGraphicsContext3DCommandBufferImpl::deleteTexture(WebGLId texture) { 995 void WebGraphicsContext3DGuest::deleteTexture(WebGLId texture) {
1115 gl_->DeleteTextures(1, &texture); 996 gl_->DeleteTextures(1, &texture);
1116 } 997 }
1117 998
1118 bool WebGraphicsContext3DCommandBufferImpl::ShouldUseSwapClient() { 999 void WebGraphicsContext3DGuest::OnSwapBuffersComplete() {
1119 GpuChannelHostFactory* factory = GpuChannelHostFactory::instance();
1120 return factory && factory->IsMainThread() && swap_client_.get();
1121 }
1122
1123 void WebGraphicsContext3DCommandBufferImpl::OnSwapBuffersComplete() {
1124 typedef WebGraphicsContext3DSwapBuffersClient WGC3DSwapClient;
1125 // This may be called after tear-down of the RenderView. 1000 // This may be called after tear-down of the RenderView.
1126 if (ShouldUseSwapClient()) { 1001 RenderViewImpl* renderview =
1127 MessageLoop::current()->PostTask(FROM_HERE, base::Bind( 1002 web_view_ ? RenderViewImpl::FromWebView(web_view_) : NULL;
1128 &WGC3DSwapClient::OnViewContextSwapBuffersComplete, swap_client_)); 1003 if (renderview) {
1004 MessageLoop::current()->PostTask(
1005 FROM_HERE,
1006 base::Bind(&RenderViewImpl::OnViewContextSwapBuffersComplete,
1007 renderview));
1129 } 1008 }
1130 1009
1131 if (swapbuffers_complete_callback_) 1010 if (swapbuffers_complete_callback_)
1132 swapbuffers_complete_callback_->onSwapBuffersComplete(); 1011 swapbuffers_complete_callback_->onSwapBuffersComplete();
1133 } 1012 }
1134 1013
1135 void WebGraphicsContext3DCommandBufferImpl::OnMemoryAllocationChanged( 1014 void WebGraphicsContext3DGuest::setContextLostCallback(
1136 const GpuMemoryAllocation& allocation) {
1137 if (memory_allocation_changed_callback_)
1138 memory_allocation_changed_callback_->onMemoryAllocationChanged(
1139 allocation.gpu_resource_size_in_bytes);
1140 }
1141
1142 void WebGraphicsContext3DCommandBufferImpl::setErrorMessageCallback(
1143 WebGraphicsContext3D::WebGraphicsErrorMessageCallback* cb) {
1144 error_message_callback_ = cb;
1145 }
1146
1147 void WebGraphicsContext3DCommandBufferImpl::setContextLostCallback(
1148 WebGraphicsContext3D::WebGraphicsContextLostCallback* cb) { 1015 WebGraphicsContext3D::WebGraphicsContextLostCallback* cb) {
1149 context_lost_callback_ = cb; 1016 context_lost_callback_ = cb;
1150 } 1017 }
1151 1018
1152 WGC3Denum WebGraphicsContext3DCommandBufferImpl::getGraphicsResetStatusARB() { 1019 WGC3Denum WebGraphicsContext3DGuest::getGraphicsResetStatusARB() {
1153 if (context_->IsCommandBufferContextLost() && 1020 return dead_ ? GL_UNKNOWN_CONTEXT_RESET_ARB : GL_NO_ERROR;
1154 context_lost_reason_ == GL_NO_ERROR) {
1155 return GL_UNKNOWN_CONTEXT_RESET_ARB;
1156 }
1157
1158 return context_lost_reason_;
1159 } 1021 }
1160 1022
1161 void WebGraphicsContext3DCommandBufferImpl:: 1023 void WebGraphicsContext3DGuest::
1162 setSwapBuffersCompleteCallbackCHROMIUM( 1024 setSwapBuffersCompleteCallbackCHROMIUM(
1163 WebGraphicsContext3D::WebGraphicsSwapBuffersCompleteCallbackCHROMIUM* cb) { 1025 WebGraphicsContext3D::WebGraphicsSwapBuffersCompleteCallbackCHROMIUM* cb) {
1164 swapbuffers_complete_callback_ = cb; 1026 swapbuffers_complete_callback_ = cb;
1165 } 1027 }
1166 1028
1167 DELEGATE_TO_GL_5(texImageIOSurface2DCHROMIUM, TexImageIOSurface2DCHROMIUM, 1029 DELEGATE_TO_GL_5(texImageIOSurface2DCHROMIUM, TexImageIOSurface2DCHROMIUM,
1168 WGC3Denum, WGC3Dint, WGC3Dint, WGC3Duint, WGC3Duint) 1030 WGC3Denum, WGC3Dint, WGC3Dint, WGC3Duint, WGC3Duint)
1169 1031
1170 DELEGATE_TO_GL_5(texStorage2DEXT, TexStorage2DEXT, 1032 DELEGATE_TO_GL_5(texStorage2DEXT, TexStorage2DEXT,
1171 WGC3Denum, WGC3Dint, WGC3Duint, WGC3Dint, WGC3Dint) 1033 WGC3Denum, WGC3Dint, WGC3Duint, WGC3Dint, WGC3Dint)
1172 1034
1173 #if WEBKIT_USING_SKIA 1035 void WebGraphicsContext3DGuest::OnContextLost() {
1174 GrGLInterface* WebGraphicsContext3DCommandBufferImpl::onCreateGrGLInterface() { 1036 fprintf(stderr, ">>>>%s\n", __PRETTY_FUNCTION__);
1175 return webkit_glue::CreateCommandBufferSkiaGLBinding(); 1037 RenderViewImpl* renderview =
1176 } 1038 web_view_ ? RenderViewImpl::FromWebView(web_view_) : NULL;
1177 #endif 1039 if (renderview) {
1178 1040 fprintf(stderr, ">>>Found a renderview\n");
1179 namespace { 1041 renderview->OnViewContextSwapBuffersAborted();
1180
1181 WGC3Denum convertReason(ContentGLContext::ContextLostReason reason) {
1182 switch (reason) {
1183 case ContentGLContext::kGuilty:
1184 return GL_GUILTY_CONTEXT_RESET_ARB;
1185 case ContentGLContext::kInnocent:
1186 return GL_INNOCENT_CONTEXT_RESET_ARB;
1187 case ContentGLContext::kUnknown:
1188 return GL_UNKNOWN_CONTEXT_RESET_ARB;
1189 }
1190
1191 NOTREACHED();
1192 return GL_UNKNOWN_CONTEXT_RESET_ARB;
1193 }
1194
1195 } // anonymous namespace
1196
1197 void WebGraphicsContext3DCommandBufferImpl::OnContextLost(
1198 ContentGLContext::ContextLostReason reason) {
1199 context_lost_reason_ = convertReason(reason);
1200 if (context_lost_callback_) {
1201 context_lost_callback_->onContextLost();
1202 }
1203 if (attributes_.shareResources)
1204 ClearSharedContexts();
1205 if (ShouldUseSwapClient())
1206 swap_client_->OnViewContextSwapBuffersAborted();
1207 }
1208
1209 void WebGraphicsContext3DCommandBufferImpl::OnErrorMessage(
1210 const std::string& message, int id) {
1211 if (error_message_callback_) {
1212 WebKit::WebString str = WebKit::WebString::fromUTF8(message.c_str());
1213 error_message_callback_->onErrorMessage(str, id);
1214 } 1042 }
1215 } 1043 }
1216 1044
1045 #endif // defined(ENABLE_GPU)
OLDNEW
« no previous file with comments | « content/renderer/gpu/webgraphicscontext3d_guest.h ('k') | content/renderer/guest_render_view_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698