Add the old Bullet 2.x obsolete demos, and CMake buildsystem files, and gradually move them to newer Bullet 3.x structure

Use statically linked freeglut, instead of dynamic glut for the obsolete Bullet 2.x demos
Add the 'reset' method to b3GpuDynamicsWorld, and use it in the BasicGpuDemo (pretty slow in debug mode, use release mode)
Don't crash in btCollisionWorld, if there is no collision dispatcher
This commit is contained in:
erwin coumans
2013-12-19 12:40:59 -08:00
parent 222ecb156d
commit 69e5454d18
320 changed files with 189807 additions and 105 deletions

View File

@@ -0,0 +1,92 @@
// Copyright (c) 2011 The Native Client 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_CALLBACK_H_
#define EXAMPLES_TUMBLER_CALLBACK_H_
#include <map>
#include <string>
#include <vector>
namespace tumbler {
class ScriptingBridge;
// Templates used to support method call-backs when a method or property is
// accessed from the browser code.
// Class suite used to publish a method name to Javascript. Typical use is
// like this:
// photo::MethodCallback<Calculator>* calculate_callback_;
// calculate_callback_ =
// new scripting::MethodCallback<Calculator>(this,
// &Calculator::Calculate);
// bridge->AddMethodNamed("calculate", calculate_callback_);
// ...
// delete calculate_callback_;
//
// The caller must delete the callback.
// Methods get parameters as a dictionary that maps parameter names to values.
typedef std::map<std::string, std::string> MethodParameter;
// Pure virtual class used in STL containers.
class MethodCallbackExecutor {
public:
virtual ~MethodCallbackExecutor() {}
virtual void Execute(
const ScriptingBridge& bridge,
const MethodParameter& parameters) = 0;
};
template <class T>
class MethodCallback : public MethodCallbackExecutor {
public:
typedef void (T::*Method)(
const ScriptingBridge& bridge,
const MethodParameter& parameters);
MethodCallback(T* instance, Method method)
: instance_(instance), method_(method) {}
virtual ~MethodCallback() {}
virtual void Execute(
const ScriptingBridge& bridge,
const MethodParameter& parameters) {
// Use "this->" to force C++ to look inside our templatized base class; see
// Effective C++, 3rd Ed, item 43, p210 for details.
((this->instance_)->*(this->method_))(bridge, parameters);
}
private:
T* instance_;
Method method_;
};
template <class T>
class ConstMethodCallback : public MethodCallbackExecutor {
public:
typedef void (T::*ConstMethod)(
const ScriptingBridge& bridge,
const MethodParameter& parameters) const;
ConstMethodCallback(const T* instance, ConstMethod method)
: instance_(instance), const_method_(method) {}
virtual ~ConstMethodCallback() {}
virtual void Execute(
const ScriptingBridge& bridge,
const MethodParameter& parameters) {
// Use "this->" to force C++ to look inside our templatized base class; see
// Effective C++, 3rd Ed, item 43, p210 for details.
((this->instance_)->*(this->const_method_))(bridge, parameters);
}
private:
const T* instance_;
ConstMethod const_method_;
};
} // namespace tumbler
#endif // EXAMPLES_TUMBLER_CALLBACK_H_