| // Copyright (c) 2012 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. |
| |
| #ifndef EXAMPLES_TUMBLER_TUMBLER_H_ |
| #define EXAMPLES_TUMBLER_TUMBLER_H_ |
| |
| #include <pthread.h> |
| #include <map> |
| #include <vector> |
| |
| #include "ppapi/cpp/instance.h" |
| |
| #include "cube.h" |
| #include "opengl_context.h" |
| #include "opengl_context_ptrs.h" |
| #include "scripting_bridge.h" |
| |
| namespace tumbler { |
| |
| class Tumbler : public pp::Instance { |
| public: |
| explicit Tumbler(PP_Instance instance); |
| |
| // The dtor makes the 3D context current before deleting the cube view, then |
| // destroys the 3D context both in the module and in the browser. |
| virtual ~Tumbler(); |
| |
| // Called by the browser when the NaCl module is loaded and all ready to go. |
| virtual bool Init(uint32_t argc, const char* argn[], const char* argv[]); |
| |
| // Called whenever the in-browser window changes size. |
| virtual void DidChangeView(const pp::View& view); |
| |
| // Called by the browser to handle the postMessage() call in Javascript. |
| virtual void HandleMessage(const pp::Var& message); |
| |
| // Bind and publish the module's methods to JavaScript. |
| void InitializeMethods(ScriptingBridge* bridge); |
| |
| // Set the camera orientation to the quaternion in |args[0]|. |args| must |
| // have length at least 1; the first element is expeted to be an Array |
| // object containing 4 floating point number elements (the quaternion). |
| // This method is bound to the JavaScript "setCameraOrientation" method and |
| // is called like this: |
| // module.setCameraOrientation([0.0, 1.0, 0.0, 0.0]); |
| void SetCameraOrientation( |
| const tumbler::ScriptingBridge& bridge, |
| const tumbler::MethodParameter& parameters); |
| |
| // Called to draw the contents of the module's browser area. |
| void DrawSelf(); |
| |
| private: |
| // Browser connectivity and scripting support. |
| ScriptingBridge scripting_bridge_; |
| |
| SharedOpenGLContext opengl_context_; |
| // Wouldn't it be awesome if we had boost::scoped_ptr<>? |
| Cube* cube_; |
| }; |
| |
| } // namespace tumbler |
| |
| #endif // EXAMPLES_TUMBLER_TUMBLER_H_ |