summaryrefslogtreecommitdiffstats
path: root/o3d/plugin
diff options
context:
space:
mode:
authorapatrick@google.com <apatrick@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-19 18:43:09 +0000
committerapatrick@google.com <apatrick@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-19 18:43:09 +0000
commit52f88d8d6be4ddfad56c25d3c9a13cd22a768628 (patch)
treeccf9de7149854ab9c04fe451fb8b58a9de41e9d4 /o3d/plugin
parent52d08b12e8e7ff7c9b865837a2aeb17fb9dc2d42 (diff)
downloadchromium_src-52f88d8d6be4ddfad56c25d3c9a13cd22a768628.zip
chromium_src-52f88d8d6be4ddfad56c25d3c9a13cd22a768628.tar.gz
chromium_src-52f88d8d6be4ddfad56c25d3c9a13cd22a768628.tar.bz2
Changed O3D to use CommandBuffer in-process. Still not connecting to the GPU plugin.
I removed all the NaCl dependencies. Synchronous messages are now sent by NPAPI. Removed BufferSyncInterface and replaced it with CommandBuffer. CommandBufferHelper now uses NPAPI. Changed some unsigned ints to int32s because NPAPI doesn't support unsigned int. There are now two subclasses of RendererCB. RendererCBLocal is for use with an in-process CommandBuffer. RendererCBRemote is for use with an out-of-process CommandBuffer. I'm going to rearrange the locations of the source files under gpu_plugin next. CommandBuffer and GPUProcessor probably belong in the command_buffer_service library now. np_utils and system_services should be standalone libraries. TEST=none BUG=none Review URL: http://codereview.chromium.org/266068 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@29429 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'o3d/plugin')
-rw-r--r--o3d/plugin/cross/o3d_glue.cc12
-rw-r--r--o3d/plugin/plugin.gyp1
-rw-r--r--o3d/plugin/win/main_win.cc46
3 files changed, 52 insertions, 7 deletions
diff --git a/o3d/plugin/cross/o3d_glue.cc b/o3d/plugin/cross/o3d_glue.cc
index d041907..c52e242 100644
--- a/o3d/plugin/cross/o3d_glue.cc
+++ b/o3d/plugin/cross/o3d_glue.cc
@@ -29,7 +29,6 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
#include <build/build_config.h>
#ifdef OS_WIN
#include <windows.h>
@@ -40,12 +39,12 @@
#include <algorithm>
#include "core/cross/renderer.h"
#include "core/cross/client_info.h"
+#include "gpu_plugin/np_utils/np_headers.h"
#include "plugin/cross/o3d_glue.h"
#include "plugin/cross/config.h"
#include "plugin/cross/stream_manager.h"
#include "client_glue.h"
#include "globals_glue.h"
-#include "third_party/nixysa/static_glue/npapi/common.h"
#ifdef OS_MACOSX
#include "plugin_mac.h"
@@ -659,14 +658,15 @@ void PluginObject::Resize(int width, int height) {
if (prev_width_ != width || prev_height_ != height) {
prev_width_ = width;
prev_height_ = height;
+
if (renderer_ && !fullscreen_) {
// Tell the renderer and client that our window has been resized.
// If we're in fullscreen mode when this happens, we don't want to pass
// the information through; the renderer will pick it up when we switch
// back to plugin mode.
- renderer_->Resize(width, height);
+ renderer_->Resize(prev_width_, prev_height_);
// This is just so that the client can send an event to the user.
- client()->SendResizeEvent(width, height, fullscreen_);
+ client()->SendResizeEvent(prev_width_, prev_height_, fullscreen_);
}
}
}
@@ -721,8 +721,8 @@ void PluginObject::RedirectToFile(const char *url) {
NPObject *global_object;
NPN_GetValue(npp(), NPNVWindowNPObject, &global_object);
NPString string;
- string.utf8characters = full_cmd.get();
- string.utf8length = strlen(string.utf8characters);
+ string.UTF8Characters = full_cmd.get();
+ string.UTF8Length = strlen(string.UTF8Characters);
NPVariant result;
bool temp = NPN_Evaluate(npp(), global_object, &string, &result);
if (temp) {
diff --git a/o3d/plugin/plugin.gyp b/o3d/plugin/plugin.gyp
index 45d3fe2..27248dc 100644
--- a/o3d/plugin/plugin.gyp
+++ b/o3d/plugin/plugin.gyp
@@ -50,6 +50,7 @@
'../../v8/tools/gyp/v8.gyp:v8',
'../core/core.gyp:o3dCore',
'../core/core.gyp:o3dCorePlatform',
+ '../gpu_plugin/gpu_plugin.gyp:np_utils',
'../import/archive.gyp:o3dArchive',
'../utils/utils.gyp:o3dUtils',
'../../native_client/src/shared/imc/imc.gyp:google_nacl_imc',
diff --git a/o3d/plugin/win/main_win.cc b/o3d/plugin/win/main_win.cc
index 9458819..33561c7 100644
--- a/o3d/plugin/win/main_win.cc
+++ b/o3d/plugin/win/main_win.cc
@@ -42,6 +42,7 @@
#include "base/at_exit.h"
#include "base/command_line.h"
#include "base/logging.h"
+#include "base/ref_counted.h"
#include "core/cross/display_mode.h"
#include "core/cross/event.h"
#include "plugin/cross/plugin_logging.h"
@@ -50,14 +51,32 @@
#include "v8/include/v8.h"
#include "breakpad/win/bluescreen_detector.h"
+#if defined(RENDERER_CB)
+#include "core/cross/command_buffer/renderer_cb.h"
+#include "core/cross/command_buffer/display_window_cb.h"
+#include "gpu_plugin/command_buffer.h"
+#endif
+
using glue::_o3d::PluginObject;
using glue::StreamManager;
using o3d::DisplayWindowWindows;
using o3d::Event;
+#if defined(RENDERER_CB)
+using o3d::gpu_plugin::CommandBuffer;
+using o3d::gpu_plugin::NPObjectPointer;
+#endif
+
namespace {
// The instance handle of the O3D DLL.
HINSTANCE g_module_instance;
+
+// TODO(apatrick): We can have an NPBrowser in the other configurations when we
+// move over to gyp. This is just to avoid having to write scons files for
+// np_utils.
+#if defined(RENDERER_CB)
+o3d::gpu_plugin::NPBrowser* g_browser;
+#endif
} // namespace anonymous
#if !defined(O3D_INTERNAL_PLUGIN)
@@ -717,6 +736,11 @@ extern "C" {
NPError OSCALL NP_Initialize(NPNetscapeFuncs *browserFuncs) {
HANDLE_CRASHES;
+
+#if defined(RENDERER_CB)
+ g_browser = new o3d::gpu_plugin::NPBrowser(browserFuncs);
+#endif
+
NPError retval = InitializeNPNApi(browserFuncs);
if (retval != NPERR_NO_ERROR) return retval;
return InitializePlugin();
@@ -755,6 +779,11 @@ NPError OSCALL NP_Shutdown(void) {
g_bluescreen_detector = NULL;
}
+#if defined(RENDERER_CB)
+ delete g_browser;
+ g_browser = NULL;
+#endif
+
#endif // O3D_INTERNAL_PLUGIN
return NPERR_NO_ERROR;
@@ -887,11 +916,26 @@ NPError NPP_SetWindow(NPP instance, NPWindow *window) {
::ShowWindow(content_window, SW_SHOW);
// create and assign the graphics context
+#if defined(RENDERER_CB)
+ const unsigned int kDefaultCommandBufferSize = 256 << 10;
+ NPObjectPointer<CommandBuffer> command_buffer =
+ RendererCBLocal::CreateCommandBuffer(instance,
+ obj->GetHWnd(),
+ kDefaultCommandBufferSize);
+
+ DisplayWindowCB default_display;
+ default_display.set_npp(instance);
+ default_display.set_command_buffer(command_buffer);
+
+ obj->CreateRenderer(default_display);
+ obj->renderer()->Resize(window->width, window->height);
+ obj->client()->Init();
+#else
DisplayWindowWindows default_display;
default_display.set_hwnd(obj->GetHWnd());
-
obj->CreateRenderer(default_display);
obj->client()->Init();
+#endif
// we set the timer to 10ms or 100fps. At the time of this comment
// the renderer does a vsync the max fps it will run will be the refresh