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

Unified Diff: webkit/tools/pepper_test_plugin/plugin_object.cc

Issue 367002: Added Pepper 3D render context that instantiates the GPU plugin.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years 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 | « webkit/tools/pepper_test_plugin/plugin_object.h ('k') | webkit/tools/pepper_test_plugin/test_page.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/tools/pepper_test_plugin/plugin_object.cc
===================================================================
--- webkit/tools/pepper_test_plugin/plugin_object.cc (revision 35153)
+++ webkit/tools/pepper_test_plugin/plugin_object.cc (working copy)
@@ -29,6 +29,8 @@
#include <string>
#include "base/logging.h"
+#include "gpu/command_buffer/client/gles2_lib.h"
+#include "gpu/command_buffer/client/gles2_demo_cc.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/effects/SkGradientShader.h"
@@ -247,13 +249,6 @@
: npp_(npp),
test_object_(browser->createobject(npp, GetTestClass())),
device2d_(NULL) {
- if (!extensions) {
- browser->getvalue(npp_, NPNVPepperExtensions,
- reinterpret_cast<void*>(&extensions));
- CHECK(extensions);
- }
- device2d_ = extensions->acquireDevice(npp, NPPepper2DDevice);
- CHECK(device2d_);
}
PluginObject::~PluginObject() {
@@ -266,24 +261,105 @@
return &plugin_class;
}
+namespace {
+void Draw3DCallback(void* data) {
+ static_cast<PluginObject*>(data)->Draw3D();
+}
+}
+
+void PluginObject::New(NPMIMEType pluginType,
+ int16 argc,
+ char* argn[],
+ char* argv[]) {
+ // Default to 2D rendering.
+ dimensions_ = 2;
+
+ for (int i = 0; i < argc; ++i) {
+ if (strcmp(argn[i], "dimensions") == 0)
+ dimensions_ = atoi(argv[i]);
+ }
+
+ if (!extensions) {
+ browser->getvalue(npp_, NPNVPepperExtensions,
+ reinterpret_cast<void*>(&extensions));
+ CHECK(extensions);
+ }
+ device2d_ = extensions->acquireDevice(npp_, NPPepper2DDevice);
+ CHECK(device2d_);
+}
+
void PluginObject::SetWindow(const NPWindow& window) {
- size_.set_width(window.width);
- size_.set_height(window.height);
+ if (dimensions_ == 2) {
+ size_.set_width(window.width);
+ size_.set_height(window.height);
- NPDeviceContext2DConfig config;
- NPDeviceContext2D context;
- device2d_->initializeContext(npp_, &config, &context);
+ NPDeviceContext2DConfig config;
+ NPDeviceContext2D context;
+ device2d_->initializeContext(npp_, &config, &context);
- SkBitmap bitmap;
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, window.width, window.height);
- bitmap.setPixels(context.region);
+ SkBitmap bitmap;
+ bitmap.setConfig(SkBitmap::kARGB_8888_Config, window.width, window.height);
+ bitmap.setPixels(context.region);
- SkCanvas canvas(bitmap);
- DrawSampleBitmap(canvas, window.width, window.height);
+ SkCanvas canvas(bitmap);
+ DrawSampleBitmap(canvas, window.width, window.height);
- // TODO(brettw) figure out why this cast is necessary, the functions seem to
- // match. Could be a calling convention mismatch?
- NPDeviceFlushContextCallbackPtr callback =
- reinterpret_cast<NPDeviceFlushContextCallbackPtr>(&FlushCallback);
- device2d_->flushContext(npp_, &context, callback, NULL);
+ // TODO(brettw) figure out why this cast is necessary, the functions seem to
+ // match. Could be a calling convention mismatch?
+ NPDeviceFlushContextCallbackPtr callback =
+ reinterpret_cast<NPDeviceFlushContextCallbackPtr>(&FlushCallback);
+ device2d_->flushContext(npp_, &context, callback, NULL);
+ } else {
+ if (!command_buffer_.get()) {
+ if (!InitializeCommandBuffer())
+ return;
+ }
+
+ gles2_implementation_->Viewport(0, 0, window.width, window.height);
+
+ // Schedule the first call to Draw.
+ browser->pluginthreadasynccall(npp_, Draw3DCallback, this);
+ }
}
+
+void PluginObject::Draw3D() {
+ // Render some stuff.
+ gles2::g_gl_impl = gles2_implementation_.get();
+ GLFromCPPTestFunction();
+ gles2::GetGLContext()->SwapBuffers();
+ helper_->Flush();
+ gles2::g_gl_impl = NULL;
+
+ // Schedule another call to Draw.
+ browser->pluginthreadasynccall(npp_, Draw3DCallback, this);
+}
+
+bool PluginObject::InitializeCommandBuffer() {
+ const static int32 kCommandBufferSize = 512 * 1024;
+ command_buffer_.reset(new CommandBufferPepper(npp_, browser));
+ if (command_buffer_->Initialize(kCommandBufferSize)) {
+ helper_.reset(new gpu::gles2::GLES2CmdHelper(command_buffer_.get()));
+ if (helper_->Initialize()) {
+
+ const int32 kTransferBufferSize = 512 * 1024;
+ int32 transfer_buffer_id =
+ command_buffer_->CreateTransferBuffer(kTransferBufferSize);
+ gpu::Buffer transfer_buffer =
+ command_buffer_->GetTransferBuffer(transfer_buffer_id);
+ if (transfer_buffer.ptr) {
+ gles2_implementation_.reset(new gpu::gles2::GLES2Implementation(
+ helper_.get(),
+ transfer_buffer.size,
+ transfer_buffer.ptr,
+ transfer_buffer_id));
+ return true;
+ }
+ }
+
+ helper_.reset();
+ }
+
+ command_buffer_.reset();
+
+ return false;
+}
« no previous file with comments | « webkit/tools/pepper_test_plugin/plugin_object.h ('k') | webkit/tools/pepper_test_plugin/test_page.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698