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

Side by Side Diff: chrome/renderer/render_widget_fullscreen_pepper.cc

Issue 6343006: Route IPC through browser when creating a viewable command buffer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix nit. Created 9 years, 11 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) 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/renderer/render_widget_fullscreen_pepper.h" 5 #include "chrome/renderer/render_widget_fullscreen_pepper.h"
6 6
7 #include "chrome/common/render_messages.h" 7 #include "chrome/common/render_messages.h"
8 #include "chrome/renderer/ggl/ggl.h" 8 #include "chrome/renderer/ggl/ggl.h"
9 #include "chrome/renderer/gpu_channel_host.h" 9 #include "chrome/renderer/gpu_channel_host.h"
10 #include "chrome/renderer/pepper_platform_context_3d_impl.h" 10 #include "chrome/renderer/pepper_platform_context_3d_impl.h"
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 new RenderWidgetFullscreenPepper(render_thread, plugin)); 155 new RenderWidgetFullscreenPepper(render_thread, plugin));
156 widget->Init(opener_id); 156 widget->Init(opener_id);
157 return widget.release(); 157 return widget.release();
158 } 158 }
159 159
160 RenderWidgetFullscreenPepper::RenderWidgetFullscreenPepper( 160 RenderWidgetFullscreenPepper::RenderWidgetFullscreenPepper(
161 RenderThreadBase* render_thread, 161 RenderThreadBase* render_thread,
162 webkit::ppapi::PluginInstance* plugin) 162 webkit::ppapi::PluginInstance* plugin)
163 : RenderWidgetFullscreen(render_thread, WebKit::WebPopupTypeSelect), 163 : RenderWidgetFullscreen(render_thread, WebKit::WebPopupTypeSelect),
164 plugin_(plugin), 164 plugin_(plugin),
165 #if defined(OS_MACOSX)
166 plugin_handle_(NULL),
167 #endif
168 context_(NULL), 165 context_(NULL),
169 buffer_(0), 166 buffer_(0),
170 program_(0) { 167 program_(0) {
171 } 168 }
172 169
173 RenderWidgetFullscreenPepper::~RenderWidgetFullscreenPepper() { 170 RenderWidgetFullscreenPepper::~RenderWidgetFullscreenPepper() {
174 DestroyContext(); 171 DestroyContext();
175 } 172 }
176 173
177 void RenderWidgetFullscreenPepper::Invalidate() { 174 void RenderWidgetFullscreenPepper::Invalidate() {
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 return new PepperWidget(plugin_, this); 257 return new PepperWidget(plugin_, this);
261 } 258 }
262 259
263 void RenderWidgetFullscreenPepper::CreateContext() { 260 void RenderWidgetFullscreenPepper::CreateContext() {
264 DCHECK(!context_); 261 DCHECK(!context_);
265 RenderThread* render_thread = RenderThread::current(); 262 RenderThread* render_thread = RenderThread::current();
266 DCHECK(render_thread); 263 DCHECK(render_thread);
267 GpuChannelHost* host = render_thread->EstablishGpuChannelSync(); 264 GpuChannelHost* host = render_thread->EstablishGpuChannelSync();
268 if (!host) 265 if (!host)
269 return; 266 return;
270 gfx::NativeViewId view_id;
271 #if !defined(OS_MACOSX)
272 view_id = host_window();
273 #else
274 Send(new ViewHostMsg_AllocateFakePluginWindowHandle(
275 routing_id(), true, true, &plugin_handle_));
276 if (!plugin_handle_)
277 return;
278 view_id = static_cast<gfx::NativeViewId>(plugin_handle_);
279 #endif
280 const int32 attribs[] = { 267 const int32 attribs[] = {
281 ggl::GGL_ALPHA_SIZE, 8, 268 ggl::GGL_ALPHA_SIZE, 8,
282 ggl::GGL_DEPTH_SIZE, 0, 269 ggl::GGL_DEPTH_SIZE, 0,
283 ggl::GGL_STENCIL_SIZE, 0, 270 ggl::GGL_STENCIL_SIZE, 0,
284 ggl::GGL_SAMPLES, 0, 271 ggl::GGL_SAMPLES, 0,
285 ggl::GGL_SAMPLE_BUFFERS, 0, 272 ggl::GGL_SAMPLE_BUFFERS, 0,
286 ggl::GGL_NONE, 273 ggl::GGL_NONE,
287 }; 274 };
288 context_ = ggl::CreateViewContext( 275 context_ = ggl::CreateViewContext(
289 host, 276 host,
290 view_id,
291 routing_id(), 277 routing_id(),
292 "GL_OES_packed_depth_stencil GL_OES_depth24", 278 "GL_OES_packed_depth_stencil GL_OES_depth24",
293 attribs); 279 attribs);
294 if (!context_ || !InitContext()) { 280 if (!context_ || !InitContext()) {
295 DestroyContext(); 281 DestroyContext();
296 return; 282 return;
297 } 283 }
298 ggl::SetSwapBuffersCallback( 284 ggl::SetSwapBuffersCallback(
299 context_, 285 context_,
300 NewCallback(this, &RenderWidgetFullscreenPepper::DidFlushPaint)); 286 NewCallback(this, &RenderWidgetFullscreenPepper::DidFlushPaint));
301 } 287 }
302 288
303 void RenderWidgetFullscreenPepper::DestroyContext() { 289 void RenderWidgetFullscreenPepper::DestroyContext() {
304 if (context_) { 290 if (context_) {
305 gpu::gles2::GLES2Implementation* gl = ggl::GetImplementation(context_); 291 gpu::gles2::GLES2Implementation* gl = ggl::GetImplementation(context_);
306 if (program_) { 292 if (program_) {
307 gl->DeleteProgram(program_); 293 gl->DeleteProgram(program_);
308 program_ = 0; 294 program_ = 0;
309 } 295 }
310 if (buffer_) { 296 if (buffer_) {
311 gl->DeleteBuffers(1, &buffer_); 297 gl->DeleteBuffers(1, &buffer_);
312 buffer_ = 0; 298 buffer_ = 0;
313 } 299 }
314 ggl::DestroyContext(context_); 300 ggl::DestroyContext(context_);
315 context_ = NULL; 301 context_ = NULL;
316 } 302 }
317 #if defined(OS_MACOSX)
318 if (plugin_handle_) {
319 Send(new ViewHostMsg_DestroyFakePluginWindowHandle(routing_id(),
320 plugin_handle_));
321 plugin_handle_ = NULL;
322 }
323 #endif
324 } 303 }
325 304
326 namespace { 305 namespace {
327 306
328 const char kVertexShader[] = 307 const char kVertexShader[] =
329 "attribute vec2 in_tex_coord;\n" 308 "attribute vec2 in_tex_coord;\n"
330 "varying vec2 tex_coord;\n" 309 "varying vec2 tex_coord;\n"
331 "void main() {\n" 310 "void main() {\n"
332 " gl_Position = vec4(in_tex_coord.x * 2. - 1.,\n" 311 " gl_Position = vec4(in_tex_coord.x * 2. - 1.,\n"
333 " in_tex_coord.y * 2. - 1.,\n" 312 " in_tex_coord.y * 2. - 1.,\n"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 return true; 396 return true;
418 } 397 }
419 398
420 bool RenderWidgetFullscreenPepper::CheckCompositing() { 399 bool RenderWidgetFullscreenPepper::CheckCompositing() {
421 bool compositing = webwidget_->isAcceleratedCompositingActive(); 400 bool compositing = webwidget_->isAcceleratedCompositingActive();
422 if (compositing != is_accelerated_compositing_active_) { 401 if (compositing != is_accelerated_compositing_active_) {
423 didActivateAcceleratedCompositing(compositing); 402 didActivateAcceleratedCompositing(compositing);
424 } 403 }
425 return compositing; 404 return compositing;
426 } 405 }
OLDNEW
« no previous file with comments | « chrome/renderer/render_widget_fullscreen_pepper.h ('k') | chrome/renderer/webgraphicscontext3d_command_buffer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698