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

Unified Diff: chrome/renderer/pepper_platform_context_3d_impl.cc

Issue 6293023: PPAPI: move GLES2Implementation to PPAPI glue (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/pepper_platform_context_3d_impl.h ('k') | webkit/plugins/ppapi/plugin_delegate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/pepper_platform_context_3d_impl.cc
diff --git a/chrome/renderer/pepper_platform_context_3d_impl.cc b/chrome/renderer/pepper_platform_context_3d_impl.cc
index 57b849aba2b2d5aa15da99ea304ae2b7f3a2e3be..3d4ab7cb5f6e6ef5ce7376a9e240f59c66f987ac 100644
--- a/chrome/renderer/pepper_platform_context_3d_impl.cc
+++ b/chrome/renderer/pepper_platform_context_3d_impl.cc
@@ -4,40 +4,58 @@
#include "chrome/renderer/pepper_platform_context_3d_impl.h"
+#include "chrome/renderer/command_buffer_proxy.h"
#include "chrome/renderer/ggl/ggl.h"
#include "chrome/renderer/gpu_channel_host.h"
#include "chrome/renderer/render_thread.h"
+#include "gpu/command_buffer/client/gles2_cmd_helper.h"
+#include "gpu/command_buffer/client/gles2_implementation.h"
#ifdef ENABLE_GPU
PlatformContext3DImpl::PlatformContext3DImpl(ggl::Context* parent_context)
: parent_context_(parent_context),
- context_(NULL) {
+ command_buffer_(NULL) {
}
PlatformContext3DImpl::~PlatformContext3DImpl() {
- if (context_) {
- ggl::DestroyContext(context_);
- context_ = NULL;
+ if (command_buffer_) {
+ DCHECK(channel_.get());
+ channel_->DestroyCommandBuffer(command_buffer_);
+ command_buffer_ = NULL;
}
+
+ channel_ = NULL;
+
+ if (parent_context_ && parent_texture_id_ != 0) {
+ ggl::GetImplementation(parent_context_)->FreeTextureId(parent_texture_id_);
+ }
+
}
bool PlatformContext3DImpl::Init() {
// Ignore initializing more than once.
- if (context_)
+ if (command_buffer_)
return true;
RenderThread* render_thread = RenderThread::current();
if (!render_thread)
return false;
- GpuChannelHost* host = render_thread->GetGpuChannel();
- if (!host)
+ channel_ = render_thread->GetGpuChannel();
+ if (!channel_.get())
return false;
- DCHECK(host->state() == GpuChannelHost::kConnected);
+ DCHECK(channel_->state() == GpuChannelHost::kConnected);
+
+ // Flush any remaining commands in the parent context to make sure the
+ // texture id accounting stays consistent.
+ gpu::gles2::GLES2Implementation* parent_gles2 =
+ ggl::GetImplementation(parent_context_);
+ parent_gles2->helper()->CommandBufferHelper::Finish();
+ parent_texture_id_ = parent_gles2->MakeTextureId();
// TODO(apatrick): Let Pepper plugins configure their back buffer surface.
- static const int32 attribs[] = {
+ static const int32 kAttribs[] = {
ggl::GGL_ALPHA_SIZE, 8,
ggl::GGL_DEPTH_SIZE, 24,
ggl::GGL_STENCIL_SIZE, 8,
@@ -45,44 +63,35 @@ bool PlatformContext3DImpl::Init() {
ggl::GGL_SAMPLE_BUFFERS, 0,
ggl::GGL_NONE,
};
-
- // TODO(apatrick): Decide which extensions to expose to Pepper plugins.
- // Currently they get only core GLES2.
- context_ = ggl::CreateOffscreenContext(host,
- parent_context_,
- gfx::Size(1, 1),
- "",
- attribs);
- if (!context_)
+ std::vector<int32> attribs(kAttribs, kAttribs + ARRAYSIZE_UNSAFE(kAttribs));
+ CommandBufferProxy* parent_command_buffer =
+ ggl::GetCommandBufferProxy(parent_context_);
+ command_buffer_ = channel_->CreateOffscreenCommandBuffer(
+ parent_command_buffer,
+ gfx::Size(1, 1),
+ "",
+ attribs,
+ parent_texture_id_);
+
+ if (!command_buffer_)
return false;
return true;
}
-bool PlatformContext3DImpl::SwapBuffers() {
- DCHECK(context_);
- return ggl::SwapBuffers(context_);
-}
-
-unsigned PlatformContext3DImpl::GetError() {
- DCHECK(context_);
- return ggl::GetError(context_);
-}
-
void PlatformContext3DImpl::SetSwapBuffersCallback(Callback0::Type* callback) {
- DCHECK(context_);
- ggl::SetSwapBuffersCallback(context_, callback);
+ DCHECK(command_buffer_);
+ command_buffer_->SetSwapBuffersCallback(callback);
}
unsigned PlatformContext3DImpl::GetBackingTextureId() {
- DCHECK(context_);
- return ggl::GetParentTextureId(context_);
+ DCHECK(command_buffer_);
+ return parent_texture_id_;
}
-gpu::gles2::GLES2Implementation*
- PlatformContext3DImpl::GetGLES2Implementation() {
- DCHECK(context_);
- return ggl::GetImplementation(context_);
+gpu::CommandBuffer*
+ PlatformContext3DImpl::GetCommandBuffer() {
+ return command_buffer_;
}
#endif // ENABLE_GPU
« no previous file with comments | « chrome/renderer/pepper_platform_context_3d_impl.h ('k') | webkit/plugins/ppapi/plugin_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698