diff options
author | apatrick@google.com <apatrick@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-19 18:43:09 +0000 |
---|---|---|
committer | apatrick@google.com <apatrick@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-19 18:43:09 +0000 |
commit | 52f88d8d6be4ddfad56c25d3c9a13cd22a768628 (patch) | |
tree | ccf9de7149854ab9c04fe451fb8b58a9de41e9d4 /o3d/plugin | |
parent | 52d08b12e8e7ff7c9b865837a2aeb17fb9dc2d42 (diff) | |
download | chromium_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.cc | 12 | ||||
-rw-r--r-- | o3d/plugin/plugin.gyp | 1 | ||||
-rw-r--r-- | o3d/plugin/win/main_win.cc | 46 |
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 |