| 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
|
|
|
|
|