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

Unified Diff: gpu/demos/framework/plugin.cc

Issue 554053: Added infrastructure to run gpu demos under Pepper3D. Created a Demo class th... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 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 | « gpu/demos/framework/plugin.h ('k') | gpu/demos/framework/plugin.def » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/demos/framework/plugin.cc
===================================================================
--- gpu/demos/framework/plugin.cc (revision 0)
+++ gpu/demos/framework/plugin.cc (revision 0)
@@ -0,0 +1,147 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/demos/framework/plugin.h"
+
+#include "base/logging.h"
+#include "gpu/demos/framework/demo_factory.h"
+
+namespace {
+const int32 kCommandBufferSize = 1024 * 1024;
+NPExtensions* g_extensions = NULL;
+
+// Plugin class functions.
+using gpu::demos::Plugin;
+NPObject* PluginAllocate(NPP npp, NPClass* the_class) {
+ Plugin* plugin = new Plugin(npp);
+ return plugin;
+}
+
+void PluginDeallocate(NPObject* header) {
+ Plugin* plugin = static_cast<Plugin*>(header);
+ delete plugin;
+}
+
+void PluginInvalidate(NPObject* obj) {
+}
+
+bool PluginHasMethod(NPObject* obj, NPIdentifier name) {
+ return false;
+}
+
+bool PluginInvoke(NPObject* header,
+ NPIdentifier name,
+ const NPVariant* args, uint32 arg_count,
+ NPVariant* result) {
+ return false;
+}
+
+bool PluginInvokeDefault(NPObject* obj,
+ const NPVariant* args, uint32 arg_count,
+ NPVariant* result) {
+ VOID_TO_NPVARIANT(*result);
+ return true;
+}
+
+bool PluginHasProperty(NPObject* obj, NPIdentifier name) {
+ return false;
+}
+
+bool PluginGetProperty(NPObject* obj,
+ NPIdentifier name,
+ NPVariant* result) {
+ return false;
+}
+
+bool PluginSetProperty(NPObject* obj,
+ NPIdentifier name,
+ const NPVariant* variant) {
+ return false;
+}
+
+NPClass plugin_class = {
+ NP_CLASS_STRUCT_VERSION,
+ PluginAllocate,
+ PluginDeallocate,
+ PluginInvalidate,
+ PluginHasMethod,
+ PluginInvoke,
+ PluginInvokeDefault,
+ PluginHasProperty,
+ PluginGetProperty,
+ PluginSetProperty,
+};
+
+void PaintCallback(void* data) {
+ reinterpret_cast<gpu::demos::Plugin*>(data)->Paint();
+}
+}
+
+namespace gpu {
+namespace demos {
+
+NPNetscapeFuncs* g_browser;
+
+Plugin::Plugin(NPP npp)
+ : npp_(npp),
+ device3d_(NULL),
+ pgl_context_(NULL),
+ demo_(CreateDemo()) {
+ memset(&context3d_, 0, sizeof(context3d_));
+}
+
+Plugin::~Plugin() {
+ pglMakeCurrent(NULL);
+ pglDestroyContext(pgl_context_);
+}
+
+NPClass* Plugin::GetPluginClass() {
+ return &plugin_class;
+}
+
+void Plugin::New(NPMIMEType pluginType,
+ int16 argc, char* argn[], char* argv[]) {
+ if (!g_extensions) {
+ g_browser->getvalue(npp_, NPNVPepperExtensions, &g_extensions);
+ CHECK(g_extensions);
+ }
+
+ device3d_ = g_extensions->acquireDevice(npp_, NPPepper3DDevice);
+ CHECK(device3d_);
+}
+
+void Plugin::SetWindow(const NPWindow& window) {
+ if (!pgl_context_) {
+ // Initialize a 3D context.
+ NPDeviceContext3DConfig config;
+ config.commandBufferEntries = kCommandBufferSize;
+ device3d_->initializeContext(npp_, &config, &context3d_);
+
+ // Create a PGL context.
+ pgl_context_ = pglCreateContext(npp_, device3d_, &context3d_);
+
+ // Initialize demo.
+ pglMakeCurrent(pgl_context_);
+ demo_->InitWindowSize(window.width, window.height);
+ CHECK(demo_->InitGL());
+ pglMakeCurrent(NULL);
+ }
+
+ // Schedule the first call to Draw.
+ g_browser->pluginthreadasynccall(npp_, PaintCallback, this);
+}
+
+void Plugin::Paint() {
+ // Render some stuff.
+ pglMakeCurrent(pgl_context_);
+ demo_->Draw();
+ pglSwapBuffers();
+ pglMakeCurrent(NULL);
+
+ // Schedule another call to Paint.
+ g_browser->pluginthreadasynccall(npp_, PaintCallback, this);
+}
+
+} // namespace demos
+} // namespace gpu
Property changes on: gpu\demos\framework\plugin.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « gpu/demos/framework/plugin.h ('k') | gpu/demos/framework/plugin.def » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698