mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 02:15:43 -04:00
build p3dembed with ppremake system
This commit is contained in:
parent
c5e6e3b556
commit
fad81481b4
@ -1,4 +1,5 @@
|
|||||||
#define INSTALL_SCRIPTS genPyCode.py
|
#define INSTALL_SCRIPTS genPyCode.py
|
||||||
|
#define INSTALL_MODULES panda3d.py
|
||||||
|
|
||||||
// If we're on Win32 without Cygwin, install the genPyCode.bat file;
|
// If we're on Win32 without Cygwin, install the genPyCode.bat file;
|
||||||
// for all other platforms, install the genPyCode sh script.
|
// for all other platforms, install the genPyCode sh script.
|
||||||
|
@ -27,7 +27,7 @@ class Standalone:
|
|||||||
|
|
||||||
hostDir = Filename(Filename.getTempDirectory(), 'pdeploy/')
|
hostDir = Filename(Filename.getTempDirectory(), 'pdeploy/')
|
||||||
hostDir.makeDir()
|
hostDir.makeDir()
|
||||||
self.host = HostInfo("http://runtime.panda3d.org/", hostDir = hostDir, asMirror = False, perPlatform = True)
|
self.host = HostInfo(PandaSystem.getPackageHostUrl(), hostDir = hostDir, asMirror = False, perPlatform = True)
|
||||||
|
|
||||||
self.http = HTTPClient.getGlobalPtr()
|
self.http = HTTPClient.getGlobalPtr()
|
||||||
if not self.host.readContentsFile():
|
if not self.host.readContentsFile():
|
||||||
|
@ -13,24 +13,7 @@
|
|||||||
// who are preparing a custom Panda3D package for download by the
|
// who are preparing a custom Panda3D package for download by the
|
||||||
// plugin will need to build this.
|
// plugin will need to build this.
|
||||||
|
|
||||||
#begin lib_target
|
#define COREAPI_SOURCES \
|
||||||
|
|
||||||
//
|
|
||||||
// p3d_plugin.dll, the main entry point to the Core API.
|
|
||||||
//
|
|
||||||
|
|
||||||
#define BUILD_TARGET $[and $[HAVE_P3D_PLUGIN],$[HAVE_TINYXML],$[HAVE_OPENSSL],$[HAVE_ZLIB],$[HAVE_JPEG],$[HAVE_PNG]]
|
|
||||||
#define USE_PACKAGES tinyxml openssl zlib jpeg png x11
|
|
||||||
#define TARGET p3d_plugin
|
|
||||||
#define LIB_PREFIX
|
|
||||||
|
|
||||||
#define OTHER_LIBS \
|
|
||||||
$[if $[OSX_PLATFORM],subprocbuffer]
|
|
||||||
|
|
||||||
#define COMBINED_SOURCES \
|
|
||||||
$[TARGET]_composite1.cxx
|
|
||||||
|
|
||||||
#define SOURCES \
|
|
||||||
fileSpec.cxx fileSpec.h fileSpec.I \
|
fileSpec.cxx fileSpec.h fileSpec.I \
|
||||||
find_root_dir.cxx find_root_dir.h \
|
find_root_dir.cxx find_root_dir.h \
|
||||||
$[if $[IS_OSX],find_root_dir_assist.mm] \
|
$[if $[IS_OSX],find_root_dir_assist.mm] \
|
||||||
@ -76,7 +59,7 @@
|
|||||||
p3dWindowParams.h p3dWindowParams.I \
|
p3dWindowParams.h p3dWindowParams.I \
|
||||||
run_p3dpython.h
|
run_p3dpython.h
|
||||||
|
|
||||||
#define INCLUDED_SOURCES \
|
#define COREAPI_INCLUDED_SOURCES \
|
||||||
p3d_plugin.cxx \
|
p3d_plugin.cxx \
|
||||||
p3dAuthSession.cxx \
|
p3dAuthSession.cxx \
|
||||||
p3dBoolObject.cxx \
|
p3dBoolObject.cxx \
|
||||||
@ -110,6 +93,25 @@
|
|||||||
p3dX11SplashWindow.cxx \
|
p3dX11SplashWindow.cxx \
|
||||||
p3dWindowParams.cxx
|
p3dWindowParams.cxx
|
||||||
|
|
||||||
|
#begin lib_target
|
||||||
|
|
||||||
|
//
|
||||||
|
// p3d_plugin.dll, the main entry point to the Core API.
|
||||||
|
//
|
||||||
|
|
||||||
|
#define BUILD_TARGET $[and $[HAVE_P3D_PLUGIN],$[HAVE_TINYXML],$[HAVE_OPENSSL],$[HAVE_ZLIB],$[HAVE_JPEG],$[HAVE_PNG]]
|
||||||
|
#define USE_PACKAGES tinyxml openssl zlib jpeg png x11
|
||||||
|
#define TARGET p3d_plugin
|
||||||
|
#define LIB_PREFIX
|
||||||
|
#define BUILDING_DLL BUILDING_P3D_PLUGIN
|
||||||
|
|
||||||
|
#define OTHER_LIBS \
|
||||||
|
$[if $[OSX_PLATFORM],subprocbuffer]
|
||||||
|
|
||||||
|
#define COMBINED_SOURCES p3d_plugin_composite1.cxx
|
||||||
|
#define SOURCES $[COREAPI_SOURCES]
|
||||||
|
#define INCLUDED_SOURCES $[COREAPI_INCLUDED_SOURCES]
|
||||||
|
|
||||||
#define INSTALL_HEADERS \
|
#define INSTALL_HEADERS \
|
||||||
p3d_plugin.h
|
p3d_plugin.h
|
||||||
|
|
||||||
@ -117,6 +119,28 @@
|
|||||||
|
|
||||||
#end lib_target
|
#end lib_target
|
||||||
|
|
||||||
|
#begin static_lib_target
|
||||||
|
|
||||||
|
//
|
||||||
|
// libp3d_plugin_static.lib, the Core API as a static library (for p3dembed).
|
||||||
|
//
|
||||||
|
|
||||||
|
#define BUILD_TARGET $[and $[HAVE_P3D_PLUGIN],$[HAVE_TINYXML],$[HAVE_OPENSSL],$[HAVE_ZLIB],$[HAVE_JPEG],$[HAVE_PNG]]
|
||||||
|
#define USE_PACKAGES tinyxml openssl zlib jpeg png x11
|
||||||
|
#define TARGET p3d_plugin_static
|
||||||
|
#define BUILDING_DLL BUILDING_P3D_PLUGIN
|
||||||
|
|
||||||
|
#define OTHER_LIBS \
|
||||||
|
$[if $[OSX_PLATFORM],subprocbuffer]
|
||||||
|
|
||||||
|
#define COMBINED_SOURCES p3d_plugin_composite1.cxx
|
||||||
|
#define SOURCES $[COREAPI_SOURCES]
|
||||||
|
#define INCLUDED_SOURCES $[COREAPI_INCLUDED_SOURCES]
|
||||||
|
|
||||||
|
#define WIN_SYS_LIBS user32.lib gdi32.lib shell32.lib comctl32.lib msimg32.lib ole32.lib
|
||||||
|
|
||||||
|
#end static_lib_target
|
||||||
|
|
||||||
#begin bin_target
|
#begin bin_target
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -34,45 +34,45 @@ static const string dll_ext = ".so";
|
|||||||
|
|
||||||
static const string default_plugin_filename = "p3d_plugin";
|
static const string default_plugin_filename = "p3d_plugin";
|
||||||
|
|
||||||
P3D_initialize_func *P3D_initialize;
|
P3D_initialize_func *P3D_initialize_ptr;
|
||||||
P3D_finalize_func *P3D_finalize;
|
P3D_finalize_func *P3D_finalize_ptr;
|
||||||
P3D_set_plugin_version_func *P3D_set_plugin_version;
|
P3D_set_plugin_version_func *P3D_set_plugin_version_ptr;
|
||||||
P3D_set_super_mirror_func *P3D_set_super_mirror;
|
P3D_set_super_mirror_func *P3D_set_super_mirror_ptr;
|
||||||
P3D_new_instance_func *P3D_new_instance;
|
P3D_new_instance_func *P3D_new_instance_ptr;
|
||||||
P3D_instance_start_func *P3D_instance_start;
|
P3D_instance_start_func *P3D_instance_start_ptr;
|
||||||
P3D_instance_start_stream_func *P3D_instance_start_stream;
|
P3D_instance_start_stream_func *P3D_instance_start_stream_ptr;
|
||||||
P3D_instance_finish_func *P3D_instance_finish;
|
P3D_instance_finish_func *P3D_instance_finish_ptr;
|
||||||
P3D_instance_setup_window_func *P3D_instance_setup_window;
|
P3D_instance_setup_window_func *P3D_instance_setup_window_ptr;
|
||||||
|
|
||||||
P3D_object_get_type_func *P3D_object_get_type;
|
P3D_object_get_type_func *P3D_object_get_type_ptr;
|
||||||
P3D_object_get_bool_func *P3D_object_get_bool;
|
P3D_object_get_bool_func *P3D_object_get_bool_ptr;
|
||||||
P3D_object_get_int_func *P3D_object_get_int;
|
P3D_object_get_int_func *P3D_object_get_int_ptr;
|
||||||
P3D_object_get_float_func *P3D_object_get_float;
|
P3D_object_get_float_func *P3D_object_get_float_ptr;
|
||||||
P3D_object_get_string_func *P3D_object_get_string;
|
P3D_object_get_string_func *P3D_object_get_string_ptr;
|
||||||
P3D_object_get_repr_func *P3D_object_get_repr;
|
P3D_object_get_repr_func *P3D_object_get_repr_ptr;
|
||||||
P3D_object_get_property_func *P3D_object_get_property;
|
P3D_object_get_property_func *P3D_object_get_property_ptr;
|
||||||
P3D_object_set_property_func *P3D_object_set_property;
|
P3D_object_set_property_func *P3D_object_set_property_ptr;
|
||||||
P3D_object_has_method_func *P3D_object_has_method;
|
P3D_object_has_method_func *P3D_object_has_method_ptr;
|
||||||
P3D_object_call_func *P3D_object_call;
|
P3D_object_call_func *P3D_object_call_ptr;
|
||||||
P3D_object_eval_func *P3D_object_eval;
|
P3D_object_eval_func *P3D_object_eval_ptr;
|
||||||
P3D_object_incref_func *P3D_object_incref;
|
P3D_object_incref_func *P3D_object_incref_ptr;
|
||||||
P3D_object_decref_func *P3D_object_decref;
|
P3D_object_decref_func *P3D_object_decref_ptr;
|
||||||
|
|
||||||
P3D_make_class_definition_func *P3D_make_class_definition;
|
P3D_make_class_definition_func *P3D_make_class_definition_ptr;
|
||||||
P3D_new_undefined_object_func *P3D_new_undefined_object;
|
P3D_new_undefined_object_func *P3D_new_undefined_object_ptr;
|
||||||
P3D_new_none_object_func *P3D_new_none_object;
|
P3D_new_none_object_func *P3D_new_none_object_ptr;
|
||||||
P3D_new_bool_object_func *P3D_new_bool_object;
|
P3D_new_bool_object_func *P3D_new_bool_object_ptr;
|
||||||
P3D_new_int_object_func *P3D_new_int_object;
|
P3D_new_int_object_func *P3D_new_int_object_ptr;
|
||||||
P3D_new_float_object_func *P3D_new_float_object;
|
P3D_new_float_object_func *P3D_new_float_object_ptr;
|
||||||
P3D_new_string_object_func *P3D_new_string_object;
|
P3D_new_string_object_func *P3D_new_string_object_ptr;
|
||||||
P3D_instance_get_panda_script_object_func *P3D_instance_get_panda_script_object;
|
P3D_instance_get_panda_script_object_func *P3D_instance_get_panda_script_object_ptr;
|
||||||
P3D_instance_set_browser_script_object_func *P3D_instance_set_browser_script_object;
|
P3D_instance_set_browser_script_object_func *P3D_instance_set_browser_script_object_ptr;
|
||||||
|
|
||||||
P3D_instance_get_request_func *P3D_instance_get_request;
|
P3D_instance_get_request_func *P3D_instance_get_request_ptr;
|
||||||
P3D_check_request_func *P3D_check_request;
|
P3D_check_request_func *P3D_check_request_ptr;
|
||||||
P3D_request_finish_func *P3D_request_finish;
|
P3D_request_finish_func *P3D_request_finish_ptr;
|
||||||
P3D_instance_feed_url_stream_func *P3D_instance_feed_url_stream;
|
P3D_instance_feed_url_stream_func *P3D_instance_feed_url_stream_ptr;
|
||||||
P3D_instance_handle_event_func *P3D_instance_handle_event;
|
P3D_instance_handle_event_func *P3D_instance_handle_event_ptr;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
static HMODULE module = NULL;
|
static HMODULE module = NULL;
|
||||||
@ -81,6 +81,7 @@ static void *module = NULL;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static bool plugin_loaded = false;
|
static bool plugin_loaded = false;
|
||||||
|
static bool dso_needs_unload = false;
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
@ -122,8 +123,14 @@ static void unload_dso();
|
|||||||
// Function: load_plugin
|
// Function: load_plugin
|
||||||
// Description: Loads the plugin and assigns all of the function
|
// Description: Loads the plugin and assigns all of the function
|
||||||
// pointers. Returns true on success, false on failure.
|
// pointers. Returns true on success, false on failure.
|
||||||
// If the filename is empty, it is searched along the
|
// If load_plugin() has already been called
|
||||||
// path.
|
// successfully, this returns true immediately, without
|
||||||
|
// parsing any parameters.
|
||||||
|
//
|
||||||
|
// If p3d_plugin_filename is empty, the module is
|
||||||
|
// assumed to be already loaded (or statically linked
|
||||||
|
// in), and the symbols are located within the current
|
||||||
|
// address space.
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
bool
|
bool
|
||||||
load_plugin(const string &p3d_plugin_filename,
|
load_plugin(const string &p3d_plugin_filename,
|
||||||
@ -131,33 +138,39 @@ load_plugin(const string &p3d_plugin_filename,
|
|||||||
bool verify_contents, const string &platform,
|
bool verify_contents, const string &platform,
|
||||||
const string &log_directory, const string &log_basename,
|
const string &log_directory, const string &log_basename,
|
||||||
bool trusted_environment, bool console_environment,
|
bool trusted_environment, bool console_environment,
|
||||||
ostream &logfile) {
|
const string &root_dir, ostream &logfile) {
|
||||||
string filename = p3d_plugin_filename;
|
|
||||||
if (filename.empty()) {
|
|
||||||
// Look for the plugin along the path.
|
|
||||||
filename = get_plugin_basename();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plugin_loaded) {
|
if (plugin_loaded) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
string filename = p3d_plugin_filename;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
assert(module == NULL);
|
assert(module == NULL);
|
||||||
|
|
||||||
// On Windows, the filename passed to LoadLibrary() must have an
|
|
||||||
// extension, or a default ".DLL" will be implicitly added. If the
|
|
||||||
// file actually has no extension, we must add "." to avoid this.
|
|
||||||
|
|
||||||
// Check whether the filename has an extension.
|
if (filename.empty()) {
|
||||||
size_t extension_dot = find_extension_dot(filename);
|
// If no filename is supplied, look within our existing address space.
|
||||||
if (extension_dot == string::npos) {
|
module = GetModuleHandle(NULL);
|
||||||
// No extension.
|
dso_needs_unload = false;
|
||||||
filename += ".";
|
|
||||||
|
} else {
|
||||||
|
// If a filename is supplied, attempt to load it as a dynamic library.
|
||||||
|
|
||||||
|
// On Windows, the filename passed to LoadLibrary() must have an
|
||||||
|
// extension, or a default ".DLL" will be implicitly added. If the
|
||||||
|
// file actually has no extension, we must add "." to avoid this.
|
||||||
|
|
||||||
|
// Check whether the filename has an extension.
|
||||||
|
size_t extension_dot = find_extension_dot(filename);
|
||||||
|
if (extension_dot == string::npos) {
|
||||||
|
// No extension.
|
||||||
|
filename += ".";
|
||||||
|
}
|
||||||
|
|
||||||
|
SetErrorMode(0);
|
||||||
|
module = LoadLibrary(filename.c_str());
|
||||||
|
dso_needs_unload = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetErrorMode(0);
|
|
||||||
module = LoadLibrary(filename.c_str());
|
|
||||||
if (module == NULL) {
|
if (module == NULL) {
|
||||||
// Couldn't load the DLL.
|
// Couldn't load the DLL.
|
||||||
logfile
|
logfile
|
||||||
@ -171,7 +184,11 @@ load_plugin(const string &p3d_plugin_filename,
|
|||||||
#else // _WIN32
|
#else // _WIN32
|
||||||
// Posix case.
|
// Posix case.
|
||||||
assert(module == NULL);
|
assert(module == NULL);
|
||||||
module = dlopen(filename.c_str(), RTLD_LAZY | RTLD_LOCAL);
|
if (filename.empty()) {
|
||||||
|
module = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL);
|
||||||
|
} else {
|
||||||
|
module = dlopen(filename.c_str(), RTLD_LAZY | RTLD_LOCAL);
|
||||||
|
}
|
||||||
if (module == NULL) {
|
if (module == NULL) {
|
||||||
// Couldn't load the .so.
|
// Couldn't load the .so.
|
||||||
const char *message = dlerror();
|
const char *message = dlerror();
|
||||||
@ -182,135 +199,136 @@ load_plugin(const string &p3d_plugin_filename,
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
dso_needs_unload = true;
|
||||||
|
|
||||||
#define get_func dlsym
|
#define get_func dlsym
|
||||||
|
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
// Now get all of the function pointers.
|
// Now get all of the function pointers.
|
||||||
P3D_initialize = (P3D_initialize_func *)get_func(module, "P3D_initialize");
|
P3D_initialize_ptr = (P3D_initialize_func *)get_func(module, "P3D_initialize");
|
||||||
P3D_finalize = (P3D_finalize_func *)get_func(module, "P3D_finalize");
|
P3D_finalize_ptr = (P3D_finalize_func *)get_func(module, "P3D_finalize");
|
||||||
P3D_set_plugin_version = (P3D_set_plugin_version_func *)get_func(module, "P3D_set_plugin_version");
|
P3D_set_plugin_version_ptr = (P3D_set_plugin_version_func *)get_func(module, "P3D_set_plugin_version");
|
||||||
P3D_set_super_mirror = (P3D_set_super_mirror_func *)get_func(module, "P3D_set_super_mirror");
|
P3D_set_super_mirror_ptr = (P3D_set_super_mirror_func *)get_func(module, "P3D_set_super_mirror");
|
||||||
P3D_new_instance = (P3D_new_instance_func *)get_func(module, "P3D_new_instance");
|
P3D_new_instance_ptr = (P3D_new_instance_func *)get_func(module, "P3D_new_instance");
|
||||||
P3D_instance_start = (P3D_instance_start_func *)get_func(module, "P3D_instance_start");
|
P3D_instance_start_ptr = (P3D_instance_start_func *)get_func(module, "P3D_instance_start");
|
||||||
P3D_instance_start_stream = (P3D_instance_start_stream_func *)get_func(module, "P3D_instance_start_stream");
|
P3D_instance_start_stream_ptr = (P3D_instance_start_stream_func *)get_func(module, "P3D_instance_start_stream");
|
||||||
P3D_instance_finish = (P3D_instance_finish_func *)get_func(module, "P3D_instance_finish");
|
P3D_instance_finish_ptr = (P3D_instance_finish_func *)get_func(module, "P3D_instance_finish");
|
||||||
P3D_instance_setup_window = (P3D_instance_setup_window_func *)get_func(module, "P3D_instance_setup_window");
|
P3D_instance_setup_window_ptr = (P3D_instance_setup_window_func *)get_func(module, "P3D_instance_setup_window");
|
||||||
|
|
||||||
P3D_object_get_type = (P3D_object_get_type_func *)get_func(module, "P3D_object_get_type");
|
P3D_object_get_type_ptr = (P3D_object_get_type_func *)get_func(module, "P3D_object_get_type");
|
||||||
P3D_object_get_bool = (P3D_object_get_bool_func *)get_func(module, "P3D_object_get_bool");
|
P3D_object_get_bool_ptr = (P3D_object_get_bool_func *)get_func(module, "P3D_object_get_bool");
|
||||||
P3D_object_get_int = (P3D_object_get_int_func *)get_func(module, "P3D_object_get_int");
|
P3D_object_get_int_ptr = (P3D_object_get_int_func *)get_func(module, "P3D_object_get_int");
|
||||||
P3D_object_get_float = (P3D_object_get_float_func *)get_func(module, "P3D_object_get_float");
|
P3D_object_get_float_ptr = (P3D_object_get_float_func *)get_func(module, "P3D_object_get_float");
|
||||||
P3D_object_get_string = (P3D_object_get_string_func *)get_func(module, "P3D_object_get_string");
|
P3D_object_get_string_ptr = (P3D_object_get_string_func *)get_func(module, "P3D_object_get_string");
|
||||||
P3D_object_get_repr = (P3D_object_get_repr_func *)get_func(module, "P3D_object_get_repr");
|
P3D_object_get_repr_ptr = (P3D_object_get_repr_func *)get_func(module, "P3D_object_get_repr");
|
||||||
P3D_object_get_property = (P3D_object_get_property_func *)get_func(module, "P3D_object_get_property");
|
P3D_object_get_property_ptr = (P3D_object_get_property_func *)get_func(module, "P3D_object_get_property");
|
||||||
P3D_object_set_property = (P3D_object_set_property_func *)get_func(module, "P3D_object_set_property");
|
P3D_object_set_property_ptr = (P3D_object_set_property_func *)get_func(module, "P3D_object_set_property");
|
||||||
P3D_object_has_method = (P3D_object_has_method_func *)get_func(module, "P3D_object_has_method");
|
P3D_object_has_method_ptr = (P3D_object_has_method_func *)get_func(module, "P3D_object_has_method");
|
||||||
P3D_object_call = (P3D_object_call_func *)get_func(module, "P3D_object_call");
|
P3D_object_call_ptr = (P3D_object_call_func *)get_func(module, "P3D_object_call");
|
||||||
P3D_object_eval = (P3D_object_eval_func *)get_func(module, "P3D_object_eval");
|
P3D_object_eval_ptr = (P3D_object_eval_func *)get_func(module, "P3D_object_eval");
|
||||||
P3D_object_incref = (P3D_object_incref_func *)get_func(module, "P3D_object_incref");
|
P3D_object_incref_ptr = (P3D_object_incref_func *)get_func(module, "P3D_object_incref");
|
||||||
P3D_object_decref = (P3D_object_decref_func *)get_func(module, "P3D_object_decref");
|
P3D_object_decref_ptr = (P3D_object_decref_func *)get_func(module, "P3D_object_decref");
|
||||||
P3D_make_class_definition = (P3D_make_class_definition_func *)get_func(module, "P3D_make_class_definition");
|
P3D_make_class_definition_ptr = (P3D_make_class_definition_func *)get_func(module, "P3D_make_class_definition");
|
||||||
P3D_new_undefined_object = (P3D_new_undefined_object_func *)get_func(module, "P3D_new_undefined_object");
|
P3D_new_undefined_object_ptr = (P3D_new_undefined_object_func *)get_func(module, "P3D_new_undefined_object");
|
||||||
P3D_new_none_object = (P3D_new_none_object_func *)get_func(module, "P3D_new_none_object");
|
P3D_new_none_object_ptr = (P3D_new_none_object_func *)get_func(module, "P3D_new_none_object");
|
||||||
P3D_new_bool_object = (P3D_new_bool_object_func *)get_func(module, "P3D_new_bool_object");
|
P3D_new_bool_object_ptr = (P3D_new_bool_object_func *)get_func(module, "P3D_new_bool_object");
|
||||||
P3D_new_int_object = (P3D_new_int_object_func *)get_func(module, "P3D_new_int_object");
|
P3D_new_int_object_ptr = (P3D_new_int_object_func *)get_func(module, "P3D_new_int_object");
|
||||||
P3D_new_float_object = (P3D_new_float_object_func *)get_func(module, "P3D_new_float_object");
|
P3D_new_float_object_ptr = (P3D_new_float_object_func *)get_func(module, "P3D_new_float_object");
|
||||||
P3D_new_string_object = (P3D_new_string_object_func *)get_func(module, "P3D_new_string_object");
|
P3D_new_string_object_ptr = (P3D_new_string_object_func *)get_func(module, "P3D_new_string_object");
|
||||||
P3D_instance_get_panda_script_object = (P3D_instance_get_panda_script_object_func *)get_func(module, "P3D_instance_get_panda_script_object");
|
P3D_instance_get_panda_script_object_ptr = (P3D_instance_get_panda_script_object_func *)get_func(module, "P3D_instance_get_panda_script_object");
|
||||||
P3D_instance_set_browser_script_object = (P3D_instance_set_browser_script_object_func *)get_func(module, "P3D_instance_set_browser_script_object");
|
P3D_instance_set_browser_script_object_ptr = (P3D_instance_set_browser_script_object_func *)get_func(module, "P3D_instance_set_browser_script_object");
|
||||||
|
|
||||||
P3D_instance_get_request = (P3D_instance_get_request_func *)get_func(module, "P3D_instance_get_request");
|
P3D_instance_get_request_ptr = (P3D_instance_get_request_func *)get_func(module, "P3D_instance_get_request");
|
||||||
P3D_check_request = (P3D_check_request_func *)get_func(module, "P3D_check_request");
|
P3D_check_request_ptr = (P3D_check_request_func *)get_func(module, "P3D_check_request");
|
||||||
P3D_request_finish = (P3D_request_finish_func *)get_func(module, "P3D_request_finish");
|
P3D_request_finish_ptr = (P3D_request_finish_func *)get_func(module, "P3D_request_finish");
|
||||||
P3D_instance_feed_url_stream = (P3D_instance_feed_url_stream_func *)get_func(module, "P3D_instance_feed_url_stream");
|
P3D_instance_feed_url_stream_ptr = (P3D_instance_feed_url_stream_func *)get_func(module, "P3D_instance_feed_url_stream");
|
||||||
P3D_instance_handle_event = (P3D_instance_handle_event_func *)get_func(module, "P3D_instance_handle_event");
|
P3D_instance_handle_event_ptr = (P3D_instance_handle_event_func *)get_func(module, "P3D_instance_handle_event");
|
||||||
|
|
||||||
#undef get_func
|
#undef get_func
|
||||||
|
|
||||||
// Ensure that all of the function pointers have been found.
|
// Ensure that all of the function pointers have been found.
|
||||||
if (P3D_initialize == NULL ||
|
if (P3D_initialize_ptr == NULL ||
|
||||||
P3D_finalize == NULL ||
|
P3D_finalize_ptr == NULL ||
|
||||||
P3D_set_plugin_version == NULL ||
|
P3D_set_plugin_version_ptr == NULL ||
|
||||||
P3D_set_super_mirror == NULL ||
|
P3D_set_super_mirror_ptr == NULL ||
|
||||||
P3D_new_instance == NULL ||
|
P3D_new_instance_ptr == NULL ||
|
||||||
P3D_instance_start == NULL ||
|
P3D_instance_start_ptr == NULL ||
|
||||||
P3D_instance_start_stream == NULL ||
|
P3D_instance_start_stream_ptr == NULL ||
|
||||||
P3D_instance_finish == NULL ||
|
P3D_instance_finish_ptr == NULL ||
|
||||||
P3D_instance_setup_window == NULL ||
|
P3D_instance_setup_window_ptr == NULL ||
|
||||||
|
|
||||||
P3D_object_get_type == NULL ||
|
P3D_object_get_type_ptr == NULL ||
|
||||||
P3D_object_get_bool == NULL ||
|
P3D_object_get_bool_ptr == NULL ||
|
||||||
P3D_object_get_int == NULL ||
|
P3D_object_get_int_ptr == NULL ||
|
||||||
P3D_object_get_float == NULL ||
|
P3D_object_get_float_ptr == NULL ||
|
||||||
P3D_object_get_string == NULL ||
|
P3D_object_get_string_ptr == NULL ||
|
||||||
P3D_object_get_repr == NULL ||
|
P3D_object_get_repr_ptr == NULL ||
|
||||||
P3D_object_get_property == NULL ||
|
P3D_object_get_property_ptr == NULL ||
|
||||||
P3D_object_set_property == NULL ||
|
P3D_object_set_property_ptr == NULL ||
|
||||||
P3D_object_has_method == NULL ||
|
P3D_object_has_method_ptr == NULL ||
|
||||||
P3D_object_call == NULL ||
|
P3D_object_call_ptr == NULL ||
|
||||||
P3D_object_eval == NULL ||
|
P3D_object_eval_ptr == NULL ||
|
||||||
P3D_object_incref == NULL ||
|
P3D_object_incref_ptr == NULL ||
|
||||||
P3D_object_decref == NULL ||
|
P3D_object_decref_ptr == NULL ||
|
||||||
|
|
||||||
P3D_make_class_definition == NULL ||
|
P3D_make_class_definition_ptr == NULL ||
|
||||||
P3D_new_undefined_object == NULL ||
|
P3D_new_undefined_object_ptr == NULL ||
|
||||||
P3D_new_none_object == NULL ||
|
P3D_new_none_object_ptr == NULL ||
|
||||||
P3D_new_bool_object == NULL ||
|
P3D_new_bool_object_ptr == NULL ||
|
||||||
P3D_new_int_object == NULL ||
|
P3D_new_int_object_ptr == NULL ||
|
||||||
P3D_new_float_object == NULL ||
|
P3D_new_float_object_ptr == NULL ||
|
||||||
P3D_new_string_object == NULL ||
|
P3D_new_string_object_ptr == NULL ||
|
||||||
P3D_instance_get_panda_script_object == NULL ||
|
P3D_instance_get_panda_script_object_ptr == NULL ||
|
||||||
P3D_instance_set_browser_script_object == NULL ||
|
P3D_instance_set_browser_script_object_ptr == NULL ||
|
||||||
|
|
||||||
P3D_instance_get_request == NULL ||
|
P3D_instance_get_request_ptr == NULL ||
|
||||||
P3D_check_request == NULL ||
|
P3D_check_request_ptr == NULL ||
|
||||||
P3D_request_finish == NULL ||
|
P3D_request_finish_ptr == NULL ||
|
||||||
P3D_instance_feed_url_stream == NULL ||
|
P3D_instance_feed_url_stream_ptr == NULL ||
|
||||||
P3D_instance_handle_event == NULL) {
|
P3D_instance_handle_event_ptr == NULL) {
|
||||||
|
|
||||||
logfile
|
logfile
|
||||||
<< "Some function pointers not found:"
|
<< "Some function pointers not found:"
|
||||||
<< "\nP3D_initialize = " << P3D_initialize
|
<< "\nP3D_initialize_ptr = " << P3D_initialize_ptr
|
||||||
<< "\nP3D_finalize = " << P3D_finalize
|
<< "\nP3D_finalize_ptr = " << P3D_finalize_ptr
|
||||||
<< "\nP3D_set_plugin_version = " << P3D_set_plugin_version
|
<< "\nP3D_set_plugin_version_ptr = " << P3D_set_plugin_version_ptr
|
||||||
<< "\nP3D_set_super_mirror = " << P3D_set_super_mirror
|
<< "\nP3D_set_super_mirror_ptr = " << P3D_set_super_mirror_ptr
|
||||||
<< "\nP3D_new_instance = " << P3D_new_instance
|
<< "\nP3D_new_instance_ptr = " << P3D_new_instance_ptr
|
||||||
<< "\nP3D_instance_start = " << P3D_instance_start
|
<< "\nP3D_instance_start_ptr = " << P3D_instance_start_ptr
|
||||||
<< "\nP3D_instance_start_stream = " << P3D_instance_start_stream
|
<< "\nP3D_instance_start_stream_ptr = " << P3D_instance_start_stream_ptr
|
||||||
<< "\nP3D_instance_finish = " << P3D_instance_finish
|
<< "\nP3D_instance_finish_ptr = " << P3D_instance_finish_ptr
|
||||||
<< "\nP3D_instance_setup_window = " << P3D_instance_setup_window
|
<< "\nP3D_instance_setup_window_ptr = " << P3D_instance_setup_window_ptr
|
||||||
|
|
||||||
<< "\nP3D_object_get_type = " << P3D_object_get_type
|
|
||||||
<< "\nP3D_object_get_bool = " << P3D_object_get_bool
|
|
||||||
<< "\nP3D_object_get_int = " << P3D_object_get_int
|
|
||||||
<< "\nP3D_object_get_float = " << P3D_object_get_float
|
|
||||||
<< "\nP3D_object_get_string = " << P3D_object_get_string
|
|
||||||
<< "\nP3D_object_get_repr = " << P3D_object_get_repr
|
|
||||||
<< "\nP3D_object_get_property = " << P3D_object_get_property
|
|
||||||
<< "\nP3D_object_set_property = " << P3D_object_set_property
|
|
||||||
<< "\nP3D_object_has_method = " << P3D_object_has_method
|
|
||||||
<< "\nP3D_object_call = " << P3D_object_call
|
|
||||||
<< "\nP3D_object_eval = " << P3D_object_eval
|
|
||||||
<< "\nP3D_object_incref = " << P3D_object_incref
|
|
||||||
<< "\nP3D_object_decref = " << P3D_object_decref
|
|
||||||
|
|
||||||
<< "\nP3D_make_class_definition = " << P3D_make_class_definition
|
<< "\nP3D_object_get_type_ptr = " << P3D_object_get_type_ptr
|
||||||
<< "\nP3D_new_undefined_object = " << P3D_new_undefined_object
|
<< "\nP3D_object_get_bool_ptr = " << P3D_object_get_bool_ptr
|
||||||
<< "\nP3D_new_none_object = " << P3D_new_none_object
|
<< "\nP3D_object_get_int_ptr = " << P3D_object_get_int_ptr
|
||||||
<< "\nP3D_new_bool_object = " << P3D_new_bool_object
|
<< "\nP3D_object_get_float_ptr = " << P3D_object_get_float_ptr
|
||||||
<< "\nP3D_new_int_object = " << P3D_new_int_object
|
<< "\nP3D_object_get_string_ptr = " << P3D_object_get_string_ptr
|
||||||
<< "\nP3D_new_float_object = " << P3D_new_float_object
|
<< "\nP3D_object_get_repr_ptr = " << P3D_object_get_repr_ptr
|
||||||
<< "\nP3D_new_string_object = " << P3D_new_string_object
|
<< "\nP3D_object_get_property_ptr = " << P3D_object_get_property_ptr
|
||||||
<< "\nP3D_instance_get_panda_script_object = " << P3D_instance_get_panda_script_object
|
<< "\nP3D_object_set_property_ptr = " << P3D_object_set_property_ptr
|
||||||
<< "\nP3D_instance_set_browser_script_object = " << P3D_instance_set_browser_script_object
|
<< "\nP3D_object_has_method_ptr = " << P3D_object_has_method_ptr
|
||||||
|
<< "\nP3D_object_call_ptr = " << P3D_object_call_ptr
|
||||||
<< "\nP3D_instance_get_request = " << P3D_instance_get_request
|
<< "\nP3D_object_eval_ptr = " << P3D_object_eval_ptr
|
||||||
<< "\nP3D_check_request = " << P3D_check_request
|
<< "\nP3D_object_incref_ptr = " << P3D_object_incref_ptr
|
||||||
<< "\nP3D_request_finish = " << P3D_request_finish
|
<< "\nP3D_object_decref_ptr = " << P3D_object_decref_ptr
|
||||||
<< "\nP3D_instance_feed_url_stream = " << P3D_instance_feed_url_stream
|
|
||||||
<< "\nP3D_instance_handle_event = " << P3D_instance_handle_event
|
<< "\nP3D_make_class_definition_ptr = " << P3D_make_class_definition_ptr
|
||||||
|
<< "\nP3D_new_undefined_object_ptr = " << P3D_new_undefined_object_ptr
|
||||||
|
<< "\nP3D_new_none_object_ptr = " << P3D_new_none_object_ptr
|
||||||
|
<< "\nP3D_new_bool_object_ptr = " << P3D_new_bool_object_ptr
|
||||||
|
<< "\nP3D_new_int_object_ptr = " << P3D_new_int_object_ptr
|
||||||
|
<< "\nP3D_new_float_object_ptr = " << P3D_new_float_object_ptr
|
||||||
|
<< "\nP3D_new_string_object_ptr = " << P3D_new_string_object_ptr
|
||||||
|
<< "\nP3D_instance_get_panda_script_object_ptr = " << P3D_instance_get_panda_script_object_ptr
|
||||||
|
<< "\nP3D_instance_set_browser_script_object_ptr = " << P3D_instance_set_browser_script_object_ptr
|
||||||
|
|
||||||
|
<< "\nP3D_instance_get_request_ptr = " << P3D_instance_get_request_ptr
|
||||||
|
<< "\nP3D_check_request_ptr = " << P3D_check_request_ptr
|
||||||
|
<< "\nP3D_request_finish_ptr = " << P3D_request_finish_ptr
|
||||||
|
<< "\nP3D_instance_feed_url_stream_ptr = " << P3D_instance_feed_url_stream_ptr
|
||||||
|
<< "\nP3D_instance_handle_event_ptr = " << P3D_instance_handle_event_ptr
|
||||||
<< "\n";
|
<< "\n";
|
||||||
unload_dso();
|
unload_dso();
|
||||||
return false;
|
return false;
|
||||||
@ -319,10 +337,11 @@ load_plugin(const string &p3d_plugin_filename,
|
|||||||
// Successfully loaded.
|
// Successfully loaded.
|
||||||
plugin_loaded = true;
|
plugin_loaded = true;
|
||||||
|
|
||||||
if (!P3D_initialize(P3D_API_VERSION, contents_filename.c_str(),
|
if (!P3D_initialize_ptr(P3D_API_VERSION, contents_filename.c_str(),
|
||||||
host_url.c_str(), verify_contents, platform.c_str(),
|
host_url.c_str(), verify_contents, platform.c_str(),
|
||||||
log_directory.c_str(), log_basename.c_str(),
|
log_directory.c_str(), log_basename.c_str(),
|
||||||
trusted_environment, console_environment, NULL)) {
|
trusted_environment, console_environment,
|
||||||
|
root_dir.c_str())) {
|
||||||
// Oops, failure to initialize.
|
// Oops, failure to initialize.
|
||||||
logfile
|
logfile
|
||||||
<< "Failed to initialize plugin (passed API version "
|
<< "Failed to initialize plugin (passed API version "
|
||||||
@ -345,7 +364,7 @@ unload_plugin() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
P3D_finalize();
|
P3D_finalize_ptr();
|
||||||
unload_dso();
|
unload_dso();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -361,55 +380,55 @@ unload_plugin() {
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
static void
|
static void
|
||||||
unload_dso() {
|
unload_dso() {
|
||||||
|
if (dso_needs_unload) {
|
||||||
|
assert(module != NULL);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
assert(module != NULL);
|
FreeLibrary(module);
|
||||||
FreeLibrary(module);
|
|
||||||
module = NULL;
|
|
||||||
#else
|
#else
|
||||||
assert(module != NULL);
|
dlclose(module);
|
||||||
dlclose(module);
|
|
||||||
module = NULL;
|
|
||||||
#endif
|
#endif
|
||||||
|
module = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
P3D_initialize = NULL;
|
P3D_initialize_ptr = NULL;
|
||||||
P3D_finalize = NULL;
|
P3D_finalize_ptr = NULL;
|
||||||
P3D_set_plugin_version = NULL;
|
P3D_set_plugin_version_ptr = NULL;
|
||||||
P3D_set_super_mirror = NULL;
|
P3D_set_super_mirror_ptr = NULL;
|
||||||
P3D_new_instance = NULL;
|
P3D_new_instance_ptr = NULL;
|
||||||
P3D_instance_start = NULL;
|
P3D_instance_start_ptr = NULL;
|
||||||
P3D_instance_start_stream = NULL;
|
P3D_instance_start_stream_ptr = NULL;
|
||||||
P3D_instance_finish = NULL;
|
P3D_instance_finish_ptr = NULL;
|
||||||
P3D_instance_setup_window = NULL;
|
P3D_instance_setup_window_ptr = NULL;
|
||||||
|
|
||||||
P3D_object_get_type = NULL;
|
P3D_object_get_type_ptr = NULL;
|
||||||
P3D_object_get_bool = NULL;
|
P3D_object_get_bool_ptr = NULL;
|
||||||
P3D_object_get_int = NULL;
|
P3D_object_get_int_ptr = NULL;
|
||||||
P3D_object_get_float = NULL;
|
P3D_object_get_float_ptr = NULL;
|
||||||
P3D_object_get_string = NULL;
|
P3D_object_get_string_ptr = NULL;
|
||||||
P3D_object_get_repr = NULL;
|
P3D_object_get_repr_ptr = NULL;
|
||||||
P3D_object_get_property = NULL;
|
P3D_object_get_property_ptr = NULL;
|
||||||
P3D_object_set_property = NULL;
|
P3D_object_set_property_ptr = NULL;
|
||||||
P3D_object_has_method = NULL;
|
P3D_object_has_method_ptr = NULL;
|
||||||
P3D_object_call = NULL;
|
P3D_object_call_ptr = NULL;
|
||||||
P3D_object_eval = NULL;
|
P3D_object_eval_ptr = NULL;
|
||||||
P3D_object_incref = NULL;
|
P3D_object_incref_ptr = NULL;
|
||||||
P3D_object_decref = NULL;
|
P3D_object_decref_ptr = NULL;
|
||||||
|
|
||||||
P3D_make_class_definition = NULL;
|
P3D_make_class_definition_ptr = NULL;
|
||||||
P3D_new_undefined_object = NULL;
|
P3D_new_undefined_object_ptr = NULL;
|
||||||
P3D_new_none_object = NULL;
|
P3D_new_none_object_ptr = NULL;
|
||||||
P3D_new_bool_object = NULL;
|
P3D_new_bool_object_ptr = NULL;
|
||||||
P3D_new_int_object = NULL;
|
P3D_new_int_object_ptr = NULL;
|
||||||
P3D_new_float_object = NULL;
|
P3D_new_float_object_ptr = NULL;
|
||||||
P3D_new_string_object = NULL;
|
P3D_new_string_object_ptr = NULL;
|
||||||
P3D_instance_get_panda_script_object = NULL;
|
P3D_instance_get_panda_script_object_ptr = NULL;
|
||||||
P3D_instance_set_browser_script_object = NULL;
|
P3D_instance_set_browser_script_object_ptr = NULL;
|
||||||
|
|
||||||
P3D_instance_get_request = NULL;
|
P3D_instance_get_request_ptr = NULL;
|
||||||
P3D_check_request = NULL;
|
P3D_check_request_ptr = NULL;
|
||||||
P3D_request_finish = NULL;
|
P3D_request_finish_ptr = NULL;
|
||||||
P3D_instance_feed_url_stream = NULL;
|
P3D_instance_feed_url_stream_ptr = NULL;
|
||||||
P3D_instance_handle_event = NULL;
|
P3D_instance_handle_event_ptr = NULL;
|
||||||
|
|
||||||
plugin_loaded = false;
|
plugin_loaded = false;
|
||||||
}
|
}
|
||||||
|
@ -20,45 +20,45 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
extern P3D_initialize_func *P3D_initialize;
|
extern P3D_initialize_func *P3D_initialize_ptr;
|
||||||
extern P3D_finalize_func *P3D_finalize;
|
extern P3D_finalize_func *P3D_finalize_ptr;
|
||||||
extern P3D_set_plugin_version_func *P3D_set_plugin_version;
|
extern P3D_set_plugin_version_func *P3D_set_plugin_version_ptr;
|
||||||
extern P3D_set_super_mirror_func *P3D_set_super_mirror;
|
extern P3D_set_super_mirror_func *P3D_set_super_mirror_ptr;
|
||||||
extern P3D_new_instance_func *P3D_new_instance;
|
extern P3D_new_instance_func *P3D_new_instance_ptr;
|
||||||
extern P3D_instance_start_func *P3D_instance_start;
|
extern P3D_instance_start_func *P3D_instance_start_ptr;
|
||||||
extern P3D_instance_start_stream_func *P3D_instance_start_stream;
|
extern P3D_instance_start_stream_func *P3D_instance_start_stream_ptr;
|
||||||
extern P3D_instance_finish_func *P3D_instance_finish;
|
extern P3D_instance_finish_func *P3D_instance_finish_ptr;
|
||||||
extern P3D_instance_setup_window_func *P3D_instance_setup_window;
|
extern P3D_instance_setup_window_func *P3D_instance_setup_window_ptr;
|
||||||
|
|
||||||
extern P3D_object_get_type_func *P3D_object_get_type;
|
extern P3D_object_get_type_func *P3D_object_get_type_ptr;
|
||||||
extern P3D_object_get_bool_func *P3D_object_get_bool;
|
extern P3D_object_get_bool_func *P3D_object_get_bool_ptr;
|
||||||
extern P3D_object_get_int_func *P3D_object_get_int;
|
extern P3D_object_get_int_func *P3D_object_get_int_ptr;
|
||||||
extern P3D_object_get_float_func *P3D_object_get_float;
|
extern P3D_object_get_float_func *P3D_object_get_float_ptr;
|
||||||
extern P3D_object_get_string_func *P3D_object_get_string;
|
extern P3D_object_get_string_func *P3D_object_get_string_ptr;
|
||||||
extern P3D_object_get_repr_func *P3D_object_get_repr;
|
extern P3D_object_get_repr_func *P3D_object_get_repr_ptr;
|
||||||
extern P3D_object_get_property_func *P3D_object_get_property;
|
extern P3D_object_get_property_func *P3D_object_get_property_ptr;
|
||||||
extern P3D_object_set_property_func *P3D_object_set_property;
|
extern P3D_object_set_property_func *P3D_object_set_property_ptr;
|
||||||
extern P3D_object_has_method_func *P3D_object_has_method;
|
extern P3D_object_has_method_func *P3D_object_has_method_ptr;
|
||||||
extern P3D_object_call_func *P3D_object_call;
|
extern P3D_object_call_func *P3D_object_call_ptr;
|
||||||
extern P3D_object_eval_func *P3D_object_eval;
|
extern P3D_object_eval_func *P3D_object_eval_ptr;
|
||||||
extern P3D_object_incref_func *P3D_object_incref;
|
extern P3D_object_incref_func *P3D_object_incref_ptr;
|
||||||
extern P3D_object_decref_func *P3D_object_decref;
|
extern P3D_object_decref_func *P3D_object_decref_ptr;
|
||||||
|
|
||||||
extern P3D_make_class_definition_func *P3D_make_class_definition;
|
extern P3D_make_class_definition_func *P3D_make_class_definition_ptr;
|
||||||
extern P3D_new_undefined_object_func *P3D_new_undefined_object;
|
extern P3D_new_undefined_object_func *P3D_new_undefined_object_ptr;
|
||||||
extern P3D_new_none_object_func *P3D_new_none_object;
|
extern P3D_new_none_object_func *P3D_new_none_object_ptr;
|
||||||
extern P3D_new_bool_object_func *P3D_new_bool_object;
|
extern P3D_new_bool_object_func *P3D_new_bool_object_ptr;
|
||||||
extern P3D_new_int_object_func *P3D_new_int_object;
|
extern P3D_new_int_object_func *P3D_new_int_object_ptr;
|
||||||
extern P3D_new_float_object_func *P3D_new_float_object;
|
extern P3D_new_float_object_func *P3D_new_float_object_ptr;
|
||||||
extern P3D_new_string_object_func *P3D_new_string_object;
|
extern P3D_new_string_object_func *P3D_new_string_object_ptr;
|
||||||
extern P3D_instance_get_panda_script_object_func *P3D_instance_get_panda_script_object;
|
extern P3D_instance_get_panda_script_object_func *P3D_instance_get_panda_script_object_ptr;
|
||||||
extern P3D_instance_set_browser_script_object_func *P3D_instance_set_browser_script_object;
|
extern P3D_instance_set_browser_script_object_func *P3D_instance_set_browser_script_object_ptr;
|
||||||
|
|
||||||
extern P3D_instance_get_request_func *P3D_instance_get_request;
|
extern P3D_instance_get_request_func *P3D_instance_get_request_ptr;
|
||||||
extern P3D_check_request_func *P3D_check_request;
|
extern P3D_check_request_func *P3D_check_request_ptr;
|
||||||
extern P3D_request_finish_func *P3D_request_finish;
|
extern P3D_request_finish_func *P3D_request_finish_ptr;
|
||||||
extern P3D_instance_feed_url_stream_func *P3D_instance_feed_url_stream;
|
extern P3D_instance_feed_url_stream_func *P3D_instance_feed_url_stream_ptr;
|
||||||
extern P3D_instance_handle_event_func *P3D_instance_handle_event;
|
extern P3D_instance_handle_event_func *P3D_instance_handle_event_ptr;
|
||||||
|
|
||||||
string get_plugin_basename();
|
string get_plugin_basename();
|
||||||
bool
|
bool
|
||||||
@ -67,7 +67,7 @@ load_plugin(const string &p3d_plugin_filename,
|
|||||||
bool verify_contents, const string &platform,
|
bool verify_contents, const string &platform,
|
||||||
const string &log_directory, const string &log_basename,
|
const string &log_directory, const string &log_basename,
|
||||||
bool trusted_environment, bool console_environment,
|
bool trusted_environment, bool console_environment,
|
||||||
ostream &logfile);
|
const string &root_dir, ostream &logfile);
|
||||||
void unload_plugin();
|
void unload_plugin();
|
||||||
bool is_plugin_loaded();
|
bool is_plugin_loaded();
|
||||||
|
|
||||||
|
@ -445,8 +445,8 @@ make_window() {
|
|||||||
int y = _wparams.get_win_y();
|
int y = _wparams.get_win_y();
|
||||||
if (x == -1) x = CW_USEDEFAULT;
|
if (x == -1) x = CW_USEDEFAULT;
|
||||||
if (y == -1) y = CW_USEDEFAULT;
|
if (y == -1) y = CW_USEDEFAULT;
|
||||||
if (x == -2) x = (int)(0.5 * (GetSystemMetrics(SM_CXBORDER) - width));
|
if (x == -2) x = (int)(0.5 * (GetSystemMetrics(SM_CXSCREEN) - width));
|
||||||
if (y == -2) y = (int)(0.5 * (GetSystemMetrics(SM_CYBORDER) - height));
|
if (y == -2) y = (int)(0.5 * (GetSystemMetrics(SM_CYSCREEN) - height));
|
||||||
|
|
||||||
if (_wparams.get_window_type() == P3D_WT_embedded) {
|
if (_wparams.get_window_type() == P3D_WT_embedded) {
|
||||||
// Create an embedded window.
|
// Create an embedded window.
|
||||||
|
@ -16,11 +16,11 @@
|
|||||||
#define P3D_PLUGIN_COMMON
|
#define P3D_PLUGIN_COMMON
|
||||||
|
|
||||||
// This header file is included by all C++ files in this directory
|
// This header file is included by all C++ files in this directory
|
||||||
// that contribute to p3d_plugin; provides some common symbol
|
// that contribute to p3d_plugin; it provides some common symbol
|
||||||
// declarations.
|
// declarations.
|
||||||
|
|
||||||
#define P3D_FUNCTION_PROTOTYPES
|
#define P3D_FUNCTION_PROTOTYPES
|
||||||
#define BUILDING_P3D_PLUGIN
|
//#define BUILDING_P3D_PLUGIN
|
||||||
#define TIXML_USE_STL
|
#define TIXML_USE_STL
|
||||||
|
|
||||||
// It's a good idea to pick up this header file, even though we don't
|
// It's a good idea to pick up this header file, even though we don't
|
||||||
|
@ -195,7 +195,7 @@ P3D_class_definition* PPBrowserObject::get_class_definition()
|
|||||||
{
|
{
|
||||||
// Create a default class_definition object, and fill in the
|
// Create a default class_definition object, and fill in the
|
||||||
// appropriate pointers.
|
// appropriate pointers.
|
||||||
_browser_object_class = P3D_make_class_definition();
|
_browser_object_class = P3D_make_class_definition_ptr();
|
||||||
_browser_object_class->_finish = &object_finish;
|
_browser_object_class->_finish = &object_finish;
|
||||||
|
|
||||||
_browser_object_class->_get_repr = &object_get_repr;
|
_browser_object_class->_get_repr = &object_get_repr;
|
||||||
|
@ -38,7 +38,7 @@ bool PPDownloadRequest::DataNotify( size_t expectedDataSize, const void* data, s
|
|||||||
{
|
{
|
||||||
if ( m_p3dRequest )
|
if ( m_p3dRequest )
|
||||||
{
|
{
|
||||||
ret = P3D_instance_feed_url_stream( m_p3dRequest->_instance,
|
ret = P3D_instance_feed_url_stream_ptr( m_p3dRequest->_instance,
|
||||||
m_p3dRequest->_request._get_url._unique_id,
|
m_p3dRequest->_request._get_url._unique_id,
|
||||||
P3D_RC_in_progress,
|
P3D_RC_in_progress,
|
||||||
0,
|
0,
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
|
|
||||||
static int s_instanceCount = 0;
|
static int s_instanceCount = 0;
|
||||||
|
|
||||||
void P3D_NofificationSync(P3D_instance *instance)
|
void P3D_NotificationSync(P3D_instance *instance)
|
||||||
{
|
{
|
||||||
static bool handleRequestOnUIThread = true;
|
static bool handleRequestOnUIThread = true;
|
||||||
if ( instance )
|
if ( instance )
|
||||||
@ -91,7 +91,7 @@ PPInstance::~PPInstance( )
|
|||||||
{
|
{
|
||||||
if ( m_p3dInstance )
|
if ( m_p3dInstance )
|
||||||
{
|
{
|
||||||
P3D_instance_finish( m_p3dInstance );
|
P3D_instance_finish_ptr( m_p3dInstance );
|
||||||
m_p3dInstance = NULL;
|
m_p3dInstance = NULL;
|
||||||
}
|
}
|
||||||
if ( m_p3dObject )
|
if ( m_p3dObject )
|
||||||
@ -449,7 +449,8 @@ int PPInstance::LoadPlugin( const std::string& dllFilename )
|
|||||||
#endif // P3D_PLUGIN_P3D_PLUGIN
|
#endif // P3D_PLUGIN_P3D_PLUGIN
|
||||||
|
|
||||||
nout << "Attempting to load core API from " << pathname << "\n";
|
nout << "Attempting to load core API from " << pathname << "\n";
|
||||||
if (!load_plugin(pathname, "", "", true, "", "", "", false, false, nout)) {
|
if (!load_plugin(pathname, "", "", true, "", "", "", false, false,
|
||||||
|
m_rootDir, nout)) {
|
||||||
nout << "Unable to launch core API in " << pathname << "\n";
|
nout << "Unable to launch core API in " << pathname << "\n";
|
||||||
error = 1;
|
error = 1;
|
||||||
} else {
|
} else {
|
||||||
@ -458,7 +459,7 @@ int PPInstance::LoadPlugin( const std::string& dllFilename )
|
|||||||
#else
|
#else
|
||||||
static const bool official = false;
|
static const bool official = false;
|
||||||
#endif
|
#endif
|
||||||
P3D_set_plugin_version(P3D_PLUGIN_MAJOR_VERSION, P3D_PLUGIN_MINOR_VERSION,
|
P3D_set_plugin_version_ptr(P3D_PLUGIN_MAJOR_VERSION, P3D_PLUGIN_MINOR_VERSION,
|
||||||
P3D_PLUGIN_SEQUENCE_VERSION, official,
|
P3D_PLUGIN_SEQUENCE_VERSION, official,
|
||||||
PANDA_DISTRIBUTOR,
|
PANDA_DISTRIBUTOR,
|
||||||
PANDA_PACKAGE_HOST_URL, _core_api_dll.get_timestamp());
|
PANDA_PACKAGE_HOST_URL, _core_api_dll.get_timestamp());
|
||||||
@ -530,7 +531,7 @@ int PPInstance::Start( const std::string& p3dFilename )
|
|||||||
p3dTokens[i]._value = strdup( m_parentCtrl.m_parameters[ i ].second );
|
p3dTokens[i]._value = strdup( m_parentCtrl.m_parameters[ i ].second );
|
||||||
}
|
}
|
||||||
nout << "Creating new P3D instance object \n";
|
nout << "Creating new P3D instance object \n";
|
||||||
m_p3dInstance = P3D_new_instance( &P3D_NofificationSync, p3dTokens, m_parentCtrl.m_parameters.size(), 0, NULL, (void*)&m_parentCtrl );
|
m_p3dInstance = P3D_new_instance_ptr( &P3D_NotificationSync, p3dTokens, m_parentCtrl.m_parameters.size(), 0, NULL, (void*)&m_parentCtrl );
|
||||||
|
|
||||||
for ( UINT j = 0; j < m_parentCtrl.m_parameters.size(); j++ )
|
for ( UINT j = 0; j < m_parentCtrl.m_parameters.size(); j++ )
|
||||||
{
|
{
|
||||||
@ -546,17 +547,17 @@ int PPInstance::Start( const std::string& p3dFilename )
|
|||||||
}
|
}
|
||||||
CComPtr<IDispatchEx> pDispatch;
|
CComPtr<IDispatchEx> pDispatch;
|
||||||
PPBrowserObject *pobj = new PPBrowserObject( &m_parentCtrl, pDispatch );
|
PPBrowserObject *pobj = new PPBrowserObject( &m_parentCtrl, pDispatch );
|
||||||
P3D_instance_set_browser_script_object( m_p3dInstance, pobj );
|
P3D_instance_set_browser_script_object_ptr( m_p3dInstance, pobj );
|
||||||
P3D_OBJECT_DECREF( pobj );
|
P3D_OBJECT_DECREF( pobj );
|
||||||
|
|
||||||
m_p3dObject = P3D_instance_get_panda_script_object( m_p3dInstance );
|
m_p3dObject = P3D_instance_get_panda_script_object_ptr( m_p3dInstance );
|
||||||
P3D_OBJECT_INCREF( m_p3dObject );
|
P3D_OBJECT_INCREF( m_p3dObject );
|
||||||
|
|
||||||
P3D_instance_setup_window( m_p3dInstance, P3D_WT_embedded, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, &parent_window );
|
P3D_instance_setup_window_ptr( m_p3dInstance, P3D_WT_embedded, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, &parent_window );
|
||||||
|
|
||||||
nout << "Starting new P3D instance " << p3dFilename << "\n";
|
nout << "Starting new P3D instance " << p3dFilename << "\n";
|
||||||
|
|
||||||
if ( !P3D_instance_start( m_p3dInstance, false, p3dFilename.c_str(), 0 ) )
|
if ( !P3D_instance_start_ptr( m_p3dInstance, false, p3dFilename.c_str(), 0 ) )
|
||||||
{
|
{
|
||||||
nout << "Error starting P3D instance: " << GetLastError() << "\n";
|
nout << "Error starting P3D instance: " << GetLastError() << "\n";
|
||||||
return 1;
|
return 1;
|
||||||
@ -591,10 +592,10 @@ std::string PPInstance::GetP3DFilename( )
|
|||||||
|
|
||||||
void PPInstance::HandleRequestLoop()
|
void PPInstance::HandleRequestLoop()
|
||||||
{
|
{
|
||||||
P3D_instance *p3d_inst = P3D_check_request(0.0);
|
P3D_instance *p3d_inst = P3D_check_request_ptr(0.0);
|
||||||
while ( p3d_inst != NULL )
|
while ( p3d_inst != NULL )
|
||||||
{
|
{
|
||||||
P3D_request *request = P3D_instance_get_request(p3d_inst);
|
P3D_request *request = P3D_instance_get_request_ptr(p3d_inst);
|
||||||
if ( request != NULL )
|
if ( request != NULL )
|
||||||
{
|
{
|
||||||
CP3DActiveXCtrl* parent = ( CP3DActiveXCtrl* )(p3d_inst->_user_data);
|
CP3DActiveXCtrl* parent = ( CP3DActiveXCtrl* )(p3d_inst->_user_data);
|
||||||
@ -607,7 +608,7 @@ void PPInstance::HandleRequestLoop()
|
|||||||
nout << "Error handling P3D request. Instance's user data is not a Control \n";
|
nout << "Error handling P3D request. Instance's user data is not a Control \n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p3d_inst = P3D_check_request(0.0);
|
p3d_inst = P3D_check_request_ptr(0.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -639,7 +640,7 @@ void PPInstance::HandleRequestGetUrl( void* data )
|
|||||||
result_code = P3D_RC_generic_error;
|
result_code = P3D_RC_generic_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
P3D_instance_feed_url_stream(
|
P3D_instance_feed_url_stream_ptr(
|
||||||
request->_instance,
|
request->_instance,
|
||||||
request->_request._get_url._unique_id,
|
request->_request._get_url._unique_id,
|
||||||
result_code,
|
result_code,
|
||||||
@ -648,7 +649,7 @@ void PPInstance::HandleRequestGetUrl( void* data )
|
|||||||
(const void*)NULL,
|
(const void*)NULL,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
P3D_request_finish( request, true );
|
P3D_request_finish_ptr( request, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
void PPInstance::HandleRequest( P3D_request *request )
|
void PPInstance::HandleRequest( P3D_request *request )
|
||||||
@ -663,7 +664,7 @@ void PPInstance::HandleRequest( P3D_request *request )
|
|||||||
{
|
{
|
||||||
case P3D_RT_stop:
|
case P3D_RT_stop:
|
||||||
{
|
{
|
||||||
P3D_instance_finish( request->_instance );
|
P3D_instance_finish_ptr( request->_instance );
|
||||||
handled = true;
|
handled = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -701,7 +702,7 @@ void PPInstance::HandleRequest( P3D_request *request )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
P3D_request_finish( request, handled );
|
P3D_request_finish_ptr( request, handled );
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "PPDownloadCallback.h"
|
#include "PPDownloadCallback.h"
|
||||||
#include "PPLogger.h"
|
#include "PPLogger.h"
|
||||||
#include "fileSpec.h"
|
#include "fileSpec.h"
|
||||||
|
#include "load_plugin.h"
|
||||||
|
|
||||||
#define WM_PY_LAUNCHED (WM_USER + 1)
|
#define WM_PY_LAUNCHED (WM_USER + 1)
|
||||||
#define WM_PROGRESS (WM_USER + 2)
|
#define WM_PROGRESS (WM_USER + 2)
|
||||||
@ -30,15 +31,6 @@
|
|||||||
|
|
||||||
class CP3DActiveXCtrl;
|
class CP3DActiveXCtrl;
|
||||||
|
|
||||||
extern P3D_instance_feed_url_stream_func *P3D_instance_feed_url_stream;
|
|
||||||
extern P3D_make_class_definition_func *P3D_make_class_definition;
|
|
||||||
extern P3D_new_undefined_object_func *P3D_new_undefined_object;
|
|
||||||
extern P3D_new_none_object_func *P3D_new_none_object;
|
|
||||||
extern P3D_new_bool_object_func *P3D_new_bool_object;
|
|
||||||
extern P3D_new_int_object_func *P3D_new_int_object;
|
|
||||||
extern P3D_new_float_object_func *P3D_new_float_object;
|
|
||||||
extern P3D_new_string_object_func *P3D_new_string_object;
|
|
||||||
|
|
||||||
class PPInstance
|
class PPInstance
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -406,50 +406,50 @@ P3D_object* PPInterface::variant_to_p3dobj(COleVariant* variant)
|
|||||||
{
|
{
|
||||||
if ( !variant )
|
if ( !variant )
|
||||||
{
|
{
|
||||||
return P3D_new_none_object();
|
return P3D_new_none_object_ptr();
|
||||||
}
|
}
|
||||||
switch( variant->vt )
|
switch( variant->vt )
|
||||||
{
|
{
|
||||||
case VT_VOID:
|
case VT_VOID:
|
||||||
{
|
{
|
||||||
return P3D_new_undefined_object();
|
return P3D_new_undefined_object_ptr();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VT_EMPTY:
|
case VT_EMPTY:
|
||||||
{
|
{
|
||||||
// return P3D_new_none_object();
|
// return P3D_new_none_object_ptr();
|
||||||
// A.T. Panda really expect undefined object here
|
// A.T. Panda really expect undefined object here
|
||||||
return P3D_new_undefined_object();
|
return P3D_new_undefined_object_ptr();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VT_BOOL:
|
case VT_BOOL:
|
||||||
{
|
{
|
||||||
return P3D_new_bool_object( variant->bVal );
|
return P3D_new_bool_object_ptr( variant->bVal );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VT_I2:
|
case VT_I2:
|
||||||
{
|
{
|
||||||
return P3D_new_int_object( variant->iVal );
|
return P3D_new_int_object_ptr( variant->iVal );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VT_I4:
|
case VT_I4:
|
||||||
{
|
{
|
||||||
return P3D_new_int_object( variant->lVal );
|
return P3D_new_int_object_ptr( variant->lVal );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VT_I8:
|
case VT_I8:
|
||||||
{
|
{
|
||||||
return P3D_new_int_object( variant->llVal );
|
return P3D_new_int_object_ptr( variant->llVal );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VT_R4:
|
case VT_R4:
|
||||||
{
|
{
|
||||||
return P3D_new_float_object( variant->fltVal );
|
return P3D_new_float_object_ptr( variant->fltVal );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VT_R8:
|
case VT_R8:
|
||||||
{
|
{
|
||||||
return P3D_new_float_object( variant->dblVal );
|
return P3D_new_float_object_ptr( variant->dblVal );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VT_BSTR:
|
case VT_BSTR:
|
||||||
@ -463,7 +463,7 @@ P3D_object* PPInterface::variant_to_p3dobj(COleVariant* variant)
|
|||||||
WideCharToMultiByte(CP_UTF8, 0, bstr, blen,
|
WideCharToMultiByte(CP_UTF8, 0, bstr, blen,
|
||||||
sbuffer, slen, NULL, NULL);
|
sbuffer, slen, NULL, NULL);
|
||||||
|
|
||||||
P3D_object *object = P3D_new_string_object(sbuffer, slen);
|
P3D_object *object = P3D_new_string_object_ptr(sbuffer, slen);
|
||||||
delete[] sbuffer;
|
delete[] sbuffer;
|
||||||
return object;
|
return object;
|
||||||
break;
|
break;
|
||||||
@ -488,7 +488,7 @@ P3D_object* PPInterface::variant_to_p3dobj(COleVariant* variant)
|
|||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
return P3D_new_undefined_object();
|
return P3D_new_undefined_object_ptr();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -268,7 +268,7 @@ get_class_definition() {
|
|||||||
if (_browser_object_class == NULL) {
|
if (_browser_object_class == NULL) {
|
||||||
// Create a default class_definition object, and fill in the
|
// Create a default class_definition object, and fill in the
|
||||||
// appropriate pointers.
|
// appropriate pointers.
|
||||||
_browser_object_class = P3D_make_class_definition();
|
_browser_object_class = P3D_make_class_definition_ptr();
|
||||||
_browser_object_class->_finish = &object_finish;
|
_browser_object_class->_finish = &object_finish;
|
||||||
|
|
||||||
_browser_object_class->_get_repr = &object_get_repr;
|
_browser_object_class->_get_repr = &object_get_repr;
|
||||||
|
@ -122,7 +122,7 @@ PPInstance::
|
|||||||
#endif // __APPLE__
|
#endif // __APPLE__
|
||||||
|
|
||||||
if (_p3d_inst != NULL) {
|
if (_p3d_inst != NULL) {
|
||||||
P3D_instance_finish(_p3d_inst);
|
P3D_instance_finish_ptr(_p3d_inst);
|
||||||
_p3d_inst = NULL;
|
_p3d_inst = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -274,7 +274,7 @@ new_stream(NPMIMEType type, NPStream *stream, bool seekable, uint16_t *stype) {
|
|||||||
// If we already have an instance by the time we get this
|
// If we already have an instance by the time we get this
|
||||||
// stream, start sending the data to the instance (instead of
|
// stream, start sending the data to the instance (instead of
|
||||||
// having to mess around with a temporary file).
|
// having to mess around with a temporary file).
|
||||||
_p3d_instance_id = P3D_instance_start_stream(_p3d_inst, _instance_url.c_str());
|
_p3d_instance_id = P3D_instance_start_stream_ptr(_p3d_inst, _instance_url.c_str());
|
||||||
nout << "p3d instance to stream " << _p3d_instance_id << "\n";
|
nout << "p3d instance to stream " << _p3d_instance_id << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -387,7 +387,7 @@ write_stream(NPStream *stream, int offset, int len, void *buffer) {
|
|||||||
PPDownloadRequest *req = (PPDownloadRequest *)(stream->notifyData);
|
PPDownloadRequest *req = (PPDownloadRequest *)(stream->notifyData);
|
||||||
switch (req->_rtype) {
|
switch (req->_rtype) {
|
||||||
case PPDownloadRequest::RT_user:
|
case PPDownloadRequest::RT_user:
|
||||||
P3D_instance_feed_url_stream(_p3d_inst, req->_user_id,
|
P3D_instance_feed_url_stream_ptr(_p3d_inst, req->_user_id,
|
||||||
P3D_RC_in_progress, 0,
|
P3D_RC_in_progress, 0,
|
||||||
stream->end, buffer, len);
|
stream->end, buffer, len);
|
||||||
return len;
|
return len;
|
||||||
@ -425,7 +425,7 @@ write_stream(NPStream *stream, int offset, int len, void *buffer) {
|
|||||||
assert(!_opened_p3d_temp_file);
|
assert(!_opened_p3d_temp_file);
|
||||||
req->_rtype = PPDownloadRequest::RT_user;
|
req->_rtype = PPDownloadRequest::RT_user;
|
||||||
req->_user_id = _p3d_instance_id;
|
req->_user_id = _p3d_instance_id;
|
||||||
P3D_instance_feed_url_stream(_p3d_inst, req->_user_id,
|
P3D_instance_feed_url_stream_ptr(_p3d_inst, req->_user_id,
|
||||||
P3D_RC_in_progress, 0,
|
P3D_RC_in_progress, 0,
|
||||||
stream->end, buffer, len);
|
stream->end, buffer, len);
|
||||||
return len;
|
return len;
|
||||||
@ -475,7 +475,7 @@ destroy_stream(NPStream *stream, NPReason reason) {
|
|||||||
case PPDownloadRequest::RT_user:
|
case PPDownloadRequest::RT_user:
|
||||||
{
|
{
|
||||||
assert(!req->_notified_done);
|
assert(!req->_notified_done);
|
||||||
P3D_instance_feed_url_stream(_p3d_inst, req->_user_id,
|
P3D_instance_feed_url_stream_ptr(_p3d_inst, req->_user_id,
|
||||||
result_code, 0, stream->end, NULL, 0);
|
result_code, 0, stream->end, NULL, 0);
|
||||||
req->_notified_done = true;
|
req->_notified_done = true;
|
||||||
}
|
}
|
||||||
@ -494,7 +494,7 @@ destroy_stream(NPStream *stream, NPReason reason) {
|
|||||||
} else {
|
} else {
|
||||||
// The instance has (only just) been created. Tell it we've
|
// The instance has (only just) been created. Tell it we've
|
||||||
// sent it all the data it will get.
|
// sent it all the data it will get.
|
||||||
P3D_instance_feed_url_stream(_p3d_inst, _p3d_instance_id,
|
P3D_instance_feed_url_stream_ptr(_p3d_inst, _p3d_instance_id,
|
||||||
result_code, 0, stream->end, NULL, 0);
|
result_code, 0, stream->end, NULL, 0);
|
||||||
}
|
}
|
||||||
assert(!req->_notified_done);
|
assert(!req->_notified_done);
|
||||||
@ -545,7 +545,7 @@ url_notify(const char *url, NPReason reason, void *notifyData) {
|
|||||||
nout << "Failure starting stream\n";
|
nout << "Failure starting stream\n";
|
||||||
assert(reason != NPRES_DONE);
|
assert(reason != NPRES_DONE);
|
||||||
|
|
||||||
P3D_instance_feed_url_stream(_p3d_inst, req->_user_id,
|
P3D_instance_feed_url_stream_ptr(_p3d_inst, req->_user_id,
|
||||||
P3D_RC_generic_error, 0, 0, NULL, 0);
|
P3D_RC_generic_error, 0, 0, NULL, 0);
|
||||||
req->_notified_done = true;
|
req->_notified_done = true;
|
||||||
}
|
}
|
||||||
@ -680,7 +680,7 @@ handle_request(P3D_request *request) {
|
|||||||
switch (request->_request_type) {
|
switch (request->_request_type) {
|
||||||
case P3D_RT_stop:
|
case P3D_RT_stop:
|
||||||
if (_p3d_inst != NULL) {
|
if (_p3d_inst != NULL) {
|
||||||
P3D_instance_finish(_p3d_inst);
|
P3D_instance_finish_ptr(_p3d_inst);
|
||||||
_p3d_inst = NULL;
|
_p3d_inst = NULL;
|
||||||
}
|
}
|
||||||
cleanup_window();
|
cleanup_window();
|
||||||
@ -723,7 +723,7 @@ handle_request(P3D_request *request) {
|
|||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
|
|
||||||
P3D_request_finish(request, handled);
|
P3D_request_finish_ptr(request, handled);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
@ -783,7 +783,7 @@ handle_event(void *event) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (P3D_instance_handle_event(_p3d_inst, &edata)) {
|
if (P3D_instance_handle_event_ptr(_p3d_inst, &edata)) {
|
||||||
retval = true;
|
retval = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -807,7 +807,7 @@ get_panda_script_object() {
|
|||||||
P3D_object *main = NULL;
|
P3D_object *main = NULL;
|
||||||
|
|
||||||
if (_p3d_inst != NULL) {
|
if (_p3d_inst != NULL) {
|
||||||
main = P3D_instance_get_panda_script_object(_p3d_inst);
|
main = P3D_instance_get_panda_script_object_ptr(_p3d_inst);
|
||||||
}
|
}
|
||||||
nout << "get_panda_script_object, main = " << main << "\n";
|
nout << "get_panda_script_object, main = " << main << "\n";
|
||||||
|
|
||||||
@ -876,19 +876,19 @@ p3dobj_to_variant(NPVariant *result, P3D_object *object) {
|
|||||||
P3D_object *PPInstance::
|
P3D_object *PPInstance::
|
||||||
variant_to_p3dobj(const NPVariant *variant) {
|
variant_to_p3dobj(const NPVariant *variant) {
|
||||||
if (NPVARIANT_IS_VOID(*variant)) {
|
if (NPVARIANT_IS_VOID(*variant)) {
|
||||||
return P3D_new_undefined_object();
|
return P3D_new_undefined_object_ptr();
|
||||||
} else if (NPVARIANT_IS_NULL(*variant)) {
|
} else if (NPVARIANT_IS_NULL(*variant)) {
|
||||||
return P3D_new_none_object();
|
return P3D_new_none_object_ptr();
|
||||||
} else if (NPVARIANT_IS_BOOLEAN(*variant)) {
|
} else if (NPVARIANT_IS_BOOLEAN(*variant)) {
|
||||||
return P3D_new_bool_object(NPVARIANT_TO_BOOLEAN(*variant));
|
return P3D_new_bool_object_ptr(NPVARIANT_TO_BOOLEAN(*variant));
|
||||||
} else if (NPVARIANT_IS_INT32(*variant)) {
|
} else if (NPVARIANT_IS_INT32(*variant)) {
|
||||||
return P3D_new_int_object(NPVARIANT_TO_INT32(*variant));
|
return P3D_new_int_object_ptr(NPVARIANT_TO_INT32(*variant));
|
||||||
} else if (NPVARIANT_IS_DOUBLE(*variant)) {
|
} else if (NPVARIANT_IS_DOUBLE(*variant)) {
|
||||||
return P3D_new_float_object(NPVARIANT_TO_DOUBLE(*variant));
|
return P3D_new_float_object_ptr(NPVARIANT_TO_DOUBLE(*variant));
|
||||||
} else if (NPVARIANT_IS_STRING(*variant)) {
|
} else if (NPVARIANT_IS_STRING(*variant)) {
|
||||||
NPString str = NPVARIANT_TO_STRING(*variant);
|
NPString str = NPVARIANT_TO_STRING(*variant);
|
||||||
const UC_NPString &uc_str = *(UC_NPString *)(&str);
|
const UC_NPString &uc_str = *(UC_NPString *)(&str);
|
||||||
return P3D_new_string_object(uc_str.UTF8Characters, uc_str.UTF8Length);
|
return P3D_new_string_object_ptr(uc_str.UTF8Characters, uc_str.UTF8Length);
|
||||||
} else if (NPVARIANT_IS_OBJECT(*variant)) {
|
} else if (NPVARIANT_IS_OBJECT(*variant)) {
|
||||||
NPObject *object = NPVARIANT_TO_OBJECT(*variant);
|
NPObject *object = NPVARIANT_TO_OBJECT(*variant);
|
||||||
if (object->_class == &PPPandaObject::_object_class) {
|
if (object->_class == &PPPandaObject::_object_class) {
|
||||||
@ -903,7 +903,7 @@ variant_to_p3dobj(const NPVariant *variant) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Hmm, none of the above?
|
// Hmm, none of the above?
|
||||||
return P3D_new_none_object();
|
return P3D_new_none_object_ptr();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
@ -1311,7 +1311,7 @@ send_p3d_temp_file_data() {
|
|||||||
size_t total = 0;
|
size_t total = 0;
|
||||||
size_t count = in.gcount();
|
size_t count = in.gcount();
|
||||||
while (count != 0) {
|
while (count != 0) {
|
||||||
P3D_instance_feed_url_stream(_p3d_inst, _p3d_instance_id,
|
P3D_instance_feed_url_stream_ptr(_p3d_inst, _p3d_instance_id,
|
||||||
P3D_RC_in_progress, 0,
|
P3D_RC_in_progress, 0,
|
||||||
_p3d_temp_file_total_size, buffer, count);
|
_p3d_temp_file_total_size, buffer, count);
|
||||||
total += count;
|
total += count;
|
||||||
@ -1328,7 +1328,7 @@ send_p3d_temp_file_data() {
|
|||||||
|
|
||||||
if (_finished_p3d_temp_file) {
|
if (_finished_p3d_temp_file) {
|
||||||
// If we'd already finished the stream earlier, tell the plugin.
|
// If we'd already finished the stream earlier, tell the plugin.
|
||||||
P3D_instance_feed_url_stream(_p3d_inst, _p3d_instance_id,
|
P3D_instance_feed_url_stream_ptr(_p3d_inst, _p3d_instance_id,
|
||||||
P3D_RC_done, 0, _p3d_temp_file_total_size,
|
P3D_RC_done, 0, _p3d_temp_file_total_size,
|
||||||
NULL, 0);
|
NULL, 0);
|
||||||
}
|
}
|
||||||
@ -1469,7 +1469,8 @@ do_load_plugin() {
|
|||||||
#endif // P3D_PLUGIN_P3D_PLUGIN
|
#endif // P3D_PLUGIN_P3D_PLUGIN
|
||||||
|
|
||||||
nout << "Attempting to load core API from " << pathname << "\n";
|
nout << "Attempting to load core API from " << pathname << "\n";
|
||||||
if (!load_plugin(pathname, "", "", true, "", "", "", false, false, nout)) {
|
if (!load_plugin(pathname, "", "", true, "", "", "", false, false,
|
||||||
|
_root_dir, nout)) {
|
||||||
nout << "Unable to launch core API in " << pathname << "\n";
|
nout << "Unable to launch core API in " << pathname << "\n";
|
||||||
set_failed();
|
set_failed();
|
||||||
return;
|
return;
|
||||||
@ -1480,7 +1481,7 @@ do_load_plugin() {
|
|||||||
#else
|
#else
|
||||||
static const bool official = false;
|
static const bool official = false;
|
||||||
#endif
|
#endif
|
||||||
P3D_set_plugin_version(P3D_PLUGIN_MAJOR_VERSION, P3D_PLUGIN_MINOR_VERSION,
|
P3D_set_plugin_version_ptr(P3D_PLUGIN_MAJOR_VERSION, P3D_PLUGIN_MINOR_VERSION,
|
||||||
P3D_PLUGIN_SEQUENCE_VERSION, official,
|
P3D_PLUGIN_SEQUENCE_VERSION, official,
|
||||||
PANDA_DISTRIBUTOR,
|
PANDA_DISTRIBUTOR,
|
||||||
PANDA_PACKAGE_HOST_URL, _core_api_dll.get_timestamp());
|
PANDA_PACKAGE_HOST_URL, _core_api_dll.get_timestamp());
|
||||||
@ -1511,7 +1512,7 @@ create_instance() {
|
|||||||
tokens = &_tokens[0];
|
tokens = &_tokens[0];
|
||||||
}
|
}
|
||||||
_started = true;
|
_started = true;
|
||||||
_p3d_inst = P3D_new_instance(request_ready, tokens, _tokens.size(),
|
_p3d_inst = P3D_new_instance_ptr(request_ready, tokens, _tokens.size(),
|
||||||
0, NULL, this);
|
0, NULL, this);
|
||||||
if (_p3d_inst == NULL) {
|
if (_p3d_inst == NULL) {
|
||||||
set_failed();
|
set_failed();
|
||||||
@ -1524,7 +1525,7 @@ create_instance() {
|
|||||||
if (browser->getvalue(_npp_instance, NPNVWindowNPObject,
|
if (browser->getvalue(_npp_instance, NPNVWindowNPObject,
|
||||||
&window_object) == NPERR_NO_ERROR) {
|
&window_object) == NPERR_NO_ERROR) {
|
||||||
PPBrowserObject *pobj = new PPBrowserObject(this, window_object);
|
PPBrowserObject *pobj = new PPBrowserObject(this, window_object);
|
||||||
P3D_instance_set_browser_script_object(_p3d_inst, pobj);
|
P3D_instance_set_browser_script_object_ptr(_p3d_inst, pobj);
|
||||||
browser->releaseobject(window_object);
|
browser->releaseobject(window_object);
|
||||||
} else {
|
} else {
|
||||||
nout << "Couldn't get window_object\n";
|
nout << "Couldn't get window_object\n";
|
||||||
@ -1533,14 +1534,14 @@ create_instance() {
|
|||||||
if (_script_object != NULL) {
|
if (_script_object != NULL) {
|
||||||
// Now that we have a true instance, initialize our
|
// Now that we have a true instance, initialize our
|
||||||
// script_object with the proper P3D_object pointer.
|
// script_object with the proper P3D_object pointer.
|
||||||
P3D_object *main = P3D_instance_get_panda_script_object(_p3d_inst);
|
P3D_object *main = P3D_instance_get_panda_script_object_ptr(_p3d_inst);
|
||||||
nout << "new instance, setting main = " << main << "\n";
|
nout << "new instance, setting main = " << main << "\n";
|
||||||
_script_object->set_main(main);
|
_script_object->set_main(main);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_got_instance_url) {
|
if (_got_instance_url) {
|
||||||
// Create the user_id for streaming the p3d data into the instance.
|
// Create the user_id for streaming the p3d data into the instance.
|
||||||
_p3d_instance_id = P3D_instance_start_stream(_p3d_inst, _instance_url.c_str());
|
_p3d_instance_id = P3D_instance_start_stream_ptr(_p3d_inst, _instance_url.c_str());
|
||||||
nout << "p3d instance to stream " << _p3d_instance_id << "\n";
|
nout << "p3d instance to stream " << _p3d_instance_id << "\n";
|
||||||
|
|
||||||
// If we have already started to receive any instance data, send it
|
// If we have already started to receive any instance data, send it
|
||||||
@ -1659,7 +1660,7 @@ send_window() {
|
|||||||
window_type = P3D_WT_hidden;
|
window_type = P3D_WT_hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
P3D_instance_setup_window
|
P3D_instance_setup_window_ptr
|
||||||
(_p3d_inst, window_type,
|
(_p3d_inst, window_type,
|
||||||
x, y, _window.width, _window.height,
|
x, y, _window.width, _window.height,
|
||||||
&parent_window);
|
&parent_window);
|
||||||
@ -1770,7 +1771,7 @@ set_failed() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (_p3d_inst != NULL) {
|
if (_p3d_inst != NULL) {
|
||||||
P3D_instance_finish(_p3d_inst);
|
P3D_instance_finish_ptr(_p3d_inst);
|
||||||
_p3d_inst = NULL;
|
_p3d_inst = NULL;
|
||||||
}
|
}
|
||||||
cleanup_window();
|
cleanup_window();
|
||||||
@ -1790,9 +1791,9 @@ handle_request_loop() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
P3D_instance *p3d_inst = P3D_check_request(0.0);
|
P3D_instance *p3d_inst = P3D_check_request_ptr(0.0);
|
||||||
while (p3d_inst != (P3D_instance *)NULL) {
|
while (p3d_inst != (P3D_instance *)NULL) {
|
||||||
P3D_request *request = P3D_instance_get_request(p3d_inst);
|
P3D_request *request = P3D_instance_get_request_ptr(p3d_inst);
|
||||||
if (request != (P3D_request *)NULL) {
|
if (request != (P3D_request *)NULL) {
|
||||||
PPInstance *inst = (PPInstance *)(p3d_inst->_user_data);
|
PPInstance *inst = (PPInstance *)(p3d_inst->_user_data);
|
||||||
assert(inst != NULL);
|
assert(inst != NULL);
|
||||||
@ -1803,7 +1804,7 @@ handle_request_loop() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p3d_inst = P3D_check_request(0.0);
|
p3d_inst = P3D_check_request_ptr(0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Also check to see if we have any file_data objects that have
|
// Also check to see if we have any file_data objects that have
|
||||||
@ -2098,7 +2099,7 @@ thread_run() {
|
|||||||
size_t count = _file.gcount();
|
size_t count = _file.gcount();
|
||||||
while (count != 0) {
|
while (count != 0) {
|
||||||
_total_count += count;
|
_total_count += count;
|
||||||
bool download_ok = P3D_instance_feed_url_stream
|
bool download_ok = P3D_instance_feed_url_stream_ptr
|
||||||
(_p3d_inst, _user_id, P3D_RC_in_progress,
|
(_p3d_inst, _user_id, P3D_RC_in_progress,
|
||||||
0, _file_size, (const unsigned char *)buffer, count);
|
0, _file_size, (const unsigned char *)buffer, count);
|
||||||
|
|
||||||
@ -2138,7 +2139,7 @@ thread_run() {
|
|||||||
result = P3D_RC_generic_error;
|
result = P3D_RC_generic_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
P3D_instance_feed_url_stream
|
P3D_instance_feed_url_stream_ptr
|
||||||
(_p3d_inst, _user_id, result, 0, _total_count, NULL, 0);
|
(_p3d_inst, _user_id, result, 0, _total_count, NULL, 0);
|
||||||
|
|
||||||
// All done.
|
// All done.
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#define OSX_SYS_FRAMEWORKS Foundation AppKit Carbon
|
#define OSX_SYS_FRAMEWORKS Foundation AppKit Carbon
|
||||||
|
|
||||||
#define SOURCES \
|
#define SOURCES \
|
||||||
|
panda3dBase.cxx panda3dBase.h panda3dBase.I \
|
||||||
panda3d.cxx panda3d.h panda3d.I \
|
panda3d.cxx panda3d.h panda3d.I \
|
||||||
panda3dMain.cxx
|
panda3dMain.cxx
|
||||||
|
|
||||||
@ -46,6 +47,7 @@
|
|||||||
#define OSX_SYS_FRAMEWORKS Foundation AppKit Carbon
|
#define OSX_SYS_FRAMEWORKS Foundation AppKit Carbon
|
||||||
|
|
||||||
#define SOURCES \
|
#define SOURCES \
|
||||||
|
panda3dBase.cxx panda3dBase.h panda3dBase.I \
|
||||||
panda3d.cxx panda3d.h panda3d.I \
|
panda3d.cxx panda3d.h panda3d.I \
|
||||||
panda3dWinMain.cxx
|
panda3dWinMain.cxx
|
||||||
|
|
||||||
@ -74,9 +76,37 @@
|
|||||||
#define OSX_SYS_FRAMEWORKS Foundation AppKit Carbon
|
#define OSX_SYS_FRAMEWORKS Foundation AppKit Carbon
|
||||||
|
|
||||||
#define SOURCES \
|
#define SOURCES \
|
||||||
|
panda3dBase.cxx panda3dBase.h panda3dBase.I \
|
||||||
panda3d.cxx panda3d.h panda3d.I \
|
panda3d.cxx panda3d.h panda3d.I \
|
||||||
panda3dMac.cxx panda3dMac.h panda3dMac.I
|
panda3dMac.cxx panda3dMac.h panda3dMac.I
|
||||||
|
|
||||||
#end bin_target
|
#end bin_target
|
||||||
|
|
||||||
|
#begin bin_target
|
||||||
|
#define USE_PACKAGES openssl zlib
|
||||||
|
#define TARGET p3dembed
|
||||||
|
#define LOCAL_LIBS plugin_common p3d_plugin_static
|
||||||
|
|
||||||
|
// We need to define this, even though we are not creating a DLL,
|
||||||
|
// because we need the symbols to be "exported" so we can find them in
|
||||||
|
// our own address space.
|
||||||
|
#define EXTRA_CDEFS BUILDING_P3D_PLUGIN
|
||||||
|
|
||||||
|
#define OTHER_LIBS \
|
||||||
|
prc:c dtoolutil:c dtoolbase:c dtool:m \
|
||||||
|
interrogatedb:c dconfig:c dtoolconfig:m \
|
||||||
|
pandabase:c downloader:c express:c pandaexpress:m \
|
||||||
|
pystub
|
||||||
|
|
||||||
|
#define OSX_SYS_FRAMEWORKS Foundation AppKit Carbon
|
||||||
|
|
||||||
|
#define SOURCES \
|
||||||
|
panda3dBase.cxx panda3dBase.h panda3dBase.I \
|
||||||
|
p3dEmbed.cxx
|
||||||
|
|
||||||
|
#define WIN_RESOURCE_FILE panda3d.rc
|
||||||
|
#define WIN_SYS_LIBS user32.lib gdi32.lib shell32.lib comctl32.lib msimg32.lib ole32.lib
|
||||||
|
|
||||||
|
#end bin_target
|
||||||
|
|
||||||
#include $[THISDIRPREFIX]panda3d.rc.pp
|
#include $[THISDIRPREFIX]panda3d.rc.pp
|
||||||
|
@ -12,19 +12,160 @@
|
|||||||
//
|
//
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "p3d_plugin_composite1.cxx"
|
#define P3D_FUNCTION_PROTOTYPES
|
||||||
#include "panda3dBase.cxx"
|
|
||||||
|
#include "p3dEmbed.h"
|
||||||
|
#include "load_plugin.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
const unsigned long p3d_offset = 0xFF3D3D00;
|
unsigned long p3d_offset = 0xFF3D3D00;
|
||||||
#else
|
#else
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
const uint32_t p3d_offset = 0xFF3D3D00;
|
uint32_t p3d_offset = 0xFF3D3D00;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: P3DEmbed::Constructor
|
||||||
|
// Access: Public
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
P3DEmbed::
|
||||||
|
P3DEmbed(bool console_environment) : Panda3DBase(console_environment) {
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: P3DEmbed::run_embedded
|
||||||
|
// Access: Public
|
||||||
|
// Description: Runs with the data embedded in the current
|
||||||
|
// executable, at the specified offset.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
int P3DEmbed::
|
||||||
|
run_embedded(streampos read_offset, int argc, char *argv[]) {
|
||||||
|
// Make sure the splash window will be put in the center of the screen
|
||||||
|
_win_x = -2;
|
||||||
|
_win_y = -2;
|
||||||
|
|
||||||
|
// Read out some parameters from the binary
|
||||||
|
pifstream read;
|
||||||
|
Filename f = ExecutionEnvironment::get_binary_name();
|
||||||
|
f.make_absolute();
|
||||||
|
f.set_binary();
|
||||||
|
if (!f.open_read(read)) {
|
||||||
|
cerr << "Failed to read from stream. Maybe the binary is corrupt?\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
read.seekg(read_offset);
|
||||||
|
int curchr = read.get();
|
||||||
|
if (curchr == EOF) {
|
||||||
|
cerr << "Couldn't seek to " << read_offset << "\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
string curstr;
|
||||||
|
bool havenull = false;
|
||||||
|
P3D_token token;
|
||||||
|
token._keyword = NULL;
|
||||||
|
token._value = NULL;
|
||||||
|
string keyword;
|
||||||
|
string value;
|
||||||
|
string root_dir;
|
||||||
|
while (true) {
|
||||||
|
if (curchr == EOF) {
|
||||||
|
cerr << "Truncated stream\n";
|
||||||
|
return(1);
|
||||||
|
|
||||||
|
} else if (curchr == 0) {
|
||||||
|
// Two null bytes in a row means we've reached the end of the data.
|
||||||
|
if (havenull) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This means we haven't seen an '=' character yet.
|
||||||
|
if (keyword == "") {
|
||||||
|
if (curstr != "") {
|
||||||
|
cerr << "Ignoring token '" << curstr << "' without value\n";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
value.assign(curstr);
|
||||||
|
P3D_token token;
|
||||||
|
token._keyword = strdup(keyword.c_str());
|
||||||
|
token._value = strdup(value.c_str());
|
||||||
|
_tokens.push_back(token);
|
||||||
|
|
||||||
|
// Read out the tokens that may interest us
|
||||||
|
if (keyword == "width") {
|
||||||
|
_win_width = atoi(value.c_str());
|
||||||
|
} else if (keyword == "height") {
|
||||||
|
_win_height = atoi(value.c_str());
|
||||||
|
} else if (keyword == "root_dir") {
|
||||||
|
root_dir = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
curstr = "";
|
||||||
|
havenull = true;
|
||||||
|
} else if (curchr == '=') {
|
||||||
|
keyword.assign(curstr);
|
||||||
|
curstr = "";
|
||||||
|
havenull = false;
|
||||||
|
} else {
|
||||||
|
curstr += curchr;
|
||||||
|
havenull = false;
|
||||||
|
}
|
||||||
|
curchr = read.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the offset to the current read pointer.
|
||||||
|
// This is where the multifile really starts.
|
||||||
|
read_offset = read.tellg();
|
||||||
|
read.close();
|
||||||
|
|
||||||
|
// Make the root directory absolute
|
||||||
|
Filename root_dir_f(root_dir);
|
||||||
|
root_dir_f.make_absolute(f.get_dirname());
|
||||||
|
|
||||||
|
// Initialize the plugin. Since we are linked with the core API
|
||||||
|
// statically, we pass the empty string as the plugin filename, and
|
||||||
|
// pull the required symbols out of the local address space.
|
||||||
|
if (!load_plugin("", "",
|
||||||
|
_host_url, _verify_contents, _this_platform, _log_dirname,
|
||||||
|
_log_basename, true, _console_environment,
|
||||||
|
root_dir_f.to_os_specific(), cerr)) {
|
||||||
|
cerr << "Unable to launch core API\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a plugin instance and run the program
|
||||||
|
P3D_instance *inst = create_instance
|
||||||
|
(f, true, _win_x, _win_y, _win_width, _win_height,
|
||||||
|
argv, argc, read_offset);
|
||||||
|
_instances.insert(inst);
|
||||||
|
|
||||||
|
run_main_loop();
|
||||||
|
|
||||||
|
// Though it's not strictly necessary to call P3D_finalize() here
|
||||||
|
// (because unload_plugin() will call it), we have to do it anyway,
|
||||||
|
// to force the contents of libp3d_plugin_static.lib to be linked
|
||||||
|
// in. If we don't appear to make any calls to these functions,
|
||||||
|
// then the linker may decide to omit all of them.
|
||||||
|
P3D_finalize();
|
||||||
|
|
||||||
|
unload_plugin();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[]) {
|
main(int argc, char *argv[]) {
|
||||||
Panda3DBase program(true);
|
// Check to see if we've actually got an application embedded. If
|
||||||
|
// we do, p3d_offset will have been modified to contain a different
|
||||||
|
// value than the one we compiled in, above. We test against
|
||||||
|
// p3d_offset + 1, because any appearances of this exact number
|
||||||
|
// within the binary will be replaced (including this one).
|
||||||
|
if (p3d_offset + 1 == 0xFF3D3D01) {
|
||||||
|
cerr << "This program is not intended to be run directly.\nIt is used by pdeploy to construct an embedded Panda3D application.\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
P3DEmbed program(true);
|
||||||
return program.run_embedded(p3d_offset, argc, argv);
|
return program.run_embedded(p3d_offset, argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
#include "load_plugin.h"
|
#include "load_plugin.h"
|
||||||
#include "p3d_plugin_config.h"
|
#include "p3d_plugin_config.h"
|
||||||
|
|
||||||
#include "panda3dBase.cxx"
|
//#include "panda3dBase.cxx"
|
||||||
|
|
||||||
// We can include this header file to get the DTOOL_PLATFORM
|
// We can include this header file to get the DTOOL_PLATFORM
|
||||||
// definition, even though we don't link with dtool.
|
// definition, even though we don't link with dtool.
|
||||||
@ -317,7 +317,7 @@ post_arg_processing() {
|
|||||||
|
|
||||||
// Set up the "super mirror" URL, if specified.
|
// Set up the "super mirror" URL, if specified.
|
||||||
if (!_super_mirror_url.empty()) {
|
if (!_super_mirror_url.empty()) {
|
||||||
P3D_set_super_mirror(_super_mirror_url.c_str());
|
P3D_set_super_mirror_ptr(_super_mirror_url.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -673,8 +673,8 @@ get_core_api(const Filename &contents_filename, TiXmlElement *xpackage) {
|
|||||||
if (!load_plugin(pathname, contents_filename.to_os_specific(),
|
if (!load_plugin(pathname, contents_filename.to_os_specific(),
|
||||||
_host_url, _verify_contents, _this_platform, _log_dirname,
|
_host_url, _verify_contents, _this_platform, _log_dirname,
|
||||||
_log_basename, trusted_environment, _console_environment,
|
_log_basename, trusted_environment, _console_environment,
|
||||||
cerr)) {
|
_root_dir, cerr)) {
|
||||||
cerr << "Unable to launch core API in " << pathname << "\n" << flush;
|
cerr << "Unable to launch core API in " << pathname << "\n";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -684,10 +684,10 @@ get_core_api(const Filename &contents_filename, TiXmlElement *xpackage) {
|
|||||||
#else
|
#else
|
||||||
static const bool official = false;
|
static const bool official = false;
|
||||||
#endif
|
#endif
|
||||||
P3D_set_plugin_version(P3D_PLUGIN_MAJOR_VERSION, P3D_PLUGIN_MINOR_VERSION,
|
P3D_set_plugin_version_ptr(P3D_PLUGIN_MAJOR_VERSION, P3D_PLUGIN_MINOR_VERSION,
|
||||||
P3D_PLUGIN_SEQUENCE_VERSION, official,
|
P3D_PLUGIN_SEQUENCE_VERSION, official,
|
||||||
PANDA_DISTRIBUTOR,
|
PANDA_DISTRIBUTOR,
|
||||||
PANDA_PACKAGE_HOST_URL, _core_api_dll.get_timestamp());
|
PANDA_PACKAGE_HOST_URL, _core_api_dll.get_timestamp());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -31,13 +31,13 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
BLOCK "040904e4"
|
BLOCK "040904e4"
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "FileDescription", "Runs 3-D games and interactive applets\0"
|
VALUE "FileDescription", "Panda3D Game Engine Runtime $[P3D_PLUGIN_VERSION_STR]\0"
|
||||||
VALUE "FileVersion", "$[P3D_PLUGIN_DLL_DOT_VERSION]"
|
VALUE "FileVersion", "$[P3D_PLUGIN_DLL_DOT_VERSION]"
|
||||||
VALUE "LegalTrademarks", "\0"
|
VALUE "LegalTrademarks", "\0"
|
||||||
VALUE "MIMEType", "application/x-panda3d\0"
|
VALUE "MIMEType", "application/x-panda3d\0"
|
||||||
VALUE "FileExtents", "p3d\0"
|
VALUE "FileExtents", "p3d\0"
|
||||||
VALUE "FileOpenName", "Panda3D applet\0"
|
VALUE "FileOpenName", "Panda3D applet\0"
|
||||||
VALUE "ProductName", "Panda3D Game Engine Plug-in $[P3D_PLUGIN_VERSION_STR]\0"
|
VALUE "ProductName", "Panda3D Game Engine Runtime $[P3D_PLUGIN_VERSION_STR]\0"
|
||||||
VALUE "ProductVersion", "$[P3D_PLUGIN_DLL_DOT_VERSION]"
|
VALUE "ProductVersion", "$[P3D_PLUGIN_DLL_DOT_VERSION]"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#include "panda3dBase.h"
|
#include "panda3dBase.h"
|
||||||
#include "httpClient.h"
|
#include "httpClient.h"
|
||||||
#include "find_root_dir.h"
|
#include "find_root_dir.h"
|
||||||
#include "p3d_plugin_config.h"
|
#include "load_plugin.h"
|
||||||
#include "executionEnvironment.h"
|
#include "executionEnvironment.h"
|
||||||
|
|
||||||
// We can include this header file to get the DTOOL_PLATFORM
|
// We can include this header file to get the DTOOL_PLATFORM
|
||||||
@ -65,108 +65,6 @@ Panda3DBase(bool console_environment) {
|
|||||||
srand((unsigned int)time(NULL));
|
srand((unsigned int)time(NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Function: Panda3DBase::run_embedded
|
|
||||||
// Access: Public
|
|
||||||
// Description: Runs with the data embedded in the current
|
|
||||||
// executable, at the specified offset.
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
int Panda3DBase::
|
|
||||||
run_embedded(int read_offset, int argc, char *argv[]) {
|
|
||||||
// Make sure the splash window will be put in the center of the screen
|
|
||||||
_win_x = -2;
|
|
||||||
_win_y = -2;
|
|
||||||
|
|
||||||
// Read out some parameters from the binary
|
|
||||||
pifstream read;
|
|
||||||
Filename f = ExecutionEnvironment::get_binary_name();
|
|
||||||
f.make_absolute();
|
|
||||||
f.set_binary();
|
|
||||||
if (!f.open_read(read)) {
|
|
||||||
cerr << "Failed to read from stream. Maybe the binary is corrupt?\n";
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
read.seekg(read_offset);
|
|
||||||
char curchr = 1;
|
|
||||||
string curstr;
|
|
||||||
bool havenull = false;
|
|
||||||
P3D_token token;
|
|
||||||
token._keyword = NULL;
|
|
||||||
token._value = NULL;
|
|
||||||
string keyword;
|
|
||||||
string value;
|
|
||||||
string root_dir;
|
|
||||||
while (true) {
|
|
||||||
curchr = read.get();
|
|
||||||
if (curchr == 0) {
|
|
||||||
// Two null bytes in a row means we've reached the end of the data.
|
|
||||||
if (havenull) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This means we haven't seen an '=' character yet.
|
|
||||||
if (keyword == "") {
|
|
||||||
if (curstr != "") {
|
|
||||||
cerr << "Ignoring token '" << curstr << "' without value\n";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
value.assign(curstr);
|
|
||||||
P3D_token token;
|
|
||||||
token._keyword = keyword.c_str();
|
|
||||||
token._value = value.c_str();
|
|
||||||
_tokens.push_back(token);
|
|
||||||
|
|
||||||
// Read out the tokens that may interest us
|
|
||||||
if (keyword == "width") {
|
|
||||||
_win_width = atoi(value.c_str());
|
|
||||||
} else if (keyword == "height") {
|
|
||||||
_win_height = atoi(value.c_str());
|
|
||||||
} else if (keyword == "root_dir") {
|
|
||||||
root_dir = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
curstr = "";
|
|
||||||
havenull = true;
|
|
||||||
} else if (curchr == '=') {
|
|
||||||
keyword.assign(curstr);
|
|
||||||
curstr = "";
|
|
||||||
havenull = false;
|
|
||||||
} else {
|
|
||||||
curstr += curchr;
|
|
||||||
havenull = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Update the offset to the current read pointer.
|
|
||||||
// This is where the multifile really starts.
|
|
||||||
read_offset = read.tellg();
|
|
||||||
read.close();
|
|
||||||
|
|
||||||
// Make the root directory absolute
|
|
||||||
Filename root_dir_f (root_dir);
|
|
||||||
root_dir_f.make_absolute(f.get_dirname());
|
|
||||||
|
|
||||||
// Initialize the plugin
|
|
||||||
if (!P3D_initialize(P3D_API_VERSION, NULL,
|
|
||||||
_host_url.c_str(), _verify_contents, _this_platform.c_str(),
|
|
||||||
_log_dirname.c_str(), _log_basename.c_str(),
|
|
||||||
!_enable_security, _console_environment,
|
|
||||||
root_dir_f.c_str())) {
|
|
||||||
// Oops, failure to initialize.
|
|
||||||
cerr << "Failed to initialize plugin (wrong API version?)\n";
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a plugin instance and run the program
|
|
||||||
P3D_instance *inst = create_instance
|
|
||||||
(f, true, _win_x, _win_y, _win_width, _win_height,
|
|
||||||
argv, argc, read_offset);
|
|
||||||
_instances.insert(inst);
|
|
||||||
|
|
||||||
run_main_loop();
|
|
||||||
P3D_finalize();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: Panda3DBase::run_main_loop
|
// Function: Panda3DBase::run_main_loop
|
||||||
// Access: Public
|
// Access: Public
|
||||||
@ -192,13 +90,13 @@ run_main_loop() {
|
|||||||
DispatchMessage(&msg);
|
DispatchMessage(&msg);
|
||||||
|
|
||||||
// Check for new requests from the Panda3D plugin.
|
// Check for new requests from the Panda3D plugin.
|
||||||
P3D_instance *inst = P3D_check_request(wait_cycle);
|
P3D_instance *inst = P3D_check_request_ptr(wait_cycle);
|
||||||
while (inst != (P3D_instance *)NULL) {
|
while (inst != (P3D_instance *)NULL) {
|
||||||
P3D_request *request = P3D_instance_get_request(inst);
|
P3D_request *request = P3D_instance_get_request_ptr(inst);
|
||||||
if (request != (P3D_request *)NULL) {
|
if (request != (P3D_request *)NULL) {
|
||||||
handle_request(request);
|
handle_request(request);
|
||||||
}
|
}
|
||||||
inst = P3D_check_request(wait_cycle);
|
inst = P3D_check_request_ptr(wait_cycle);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!_url_getters.empty() &&
|
while (!_url_getters.empty() &&
|
||||||
@ -220,9 +118,9 @@ run_main_loop() {
|
|||||||
// Not an embedded window, so we don't have our own window to
|
// Not an embedded window, so we don't have our own window to
|
||||||
// generate Windows events. Instead, just wait for requests.
|
// generate Windows events. Instead, just wait for requests.
|
||||||
while (!time_to_exit()) {
|
while (!time_to_exit()) {
|
||||||
P3D_instance *inst = P3D_check_request(wait_cycle);
|
P3D_instance *inst = P3D_check_request_ptr(wait_cycle);
|
||||||
if (inst != (P3D_instance *)NULL) {
|
if (inst != (P3D_instance *)NULL) {
|
||||||
P3D_request *request = P3D_instance_get_request(inst);
|
P3D_request *request = P3D_instance_get_request_ptr(inst);
|
||||||
if (request != (P3D_request *)NULL) {
|
if (request != (P3D_request *)NULL) {
|
||||||
handle_request(request);
|
handle_request(request);
|
||||||
}
|
}
|
||||||
@ -337,7 +235,7 @@ handle_request(P3D_request *request) {
|
|||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
|
|
||||||
P3D_request_finish(request, handled);
|
P3D_request_finish_ptr(request, handled);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@ -477,18 +375,18 @@ create_instance(const string &p3d, bool start_instance,
|
|||||||
argv.push_back(args[i]);
|
argv.push_back(args[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
P3D_instance *inst = P3D_new_instance(NULL, tokens_p, num_tokens,
|
P3D_instance *inst = P3D_new_instance_ptr(NULL, tokens_p, num_tokens,
|
||||||
argv.size(), &argv[0], NULL);
|
argv.size(), &argv[0], NULL);
|
||||||
|
|
||||||
if (inst != NULL) {
|
if (inst != NULL) {
|
||||||
if (start_instance) {
|
if (start_instance) {
|
||||||
// We call start() first, to give the core API a chance to
|
// We call start() first, to give the core API a chance to
|
||||||
// notice the "hidden" attrib before we set the window
|
// notice the "hidden" attrib before we set the window
|
||||||
// parameters.
|
// parameters.
|
||||||
P3D_instance_start(inst, is_local, os_p3d_filename.c_str(), p3d_offset);
|
P3D_instance_start_ptr(inst, is_local, os_p3d_filename.c_str(), p3d_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
P3D_instance_setup_window
|
P3D_instance_setup_window_ptr
|
||||||
(inst, _window_type, win_x, win_y, win_width, win_height, &_parent_window);
|
(inst, _window_type, win_x, win_y, win_width, win_height, &_parent_window);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -503,7 +401,7 @@ create_instance(const string &p3d, bool start_instance,
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
void Panda3DBase::
|
void Panda3DBase::
|
||||||
delete_instance(P3D_instance *inst) {
|
delete_instance(P3D_instance *inst) {
|
||||||
P3D_instance_finish(inst);
|
P3D_instance_finish_ptr(inst);
|
||||||
_instances.erase(inst);
|
_instances.erase(inst);
|
||||||
|
|
||||||
// Make sure we also terminate any pending URLGetters associated
|
// Make sure we also terminate any pending URLGetters associated
|
||||||
@ -609,22 +507,22 @@ is_url(const string ¶m) {
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
void Panda3DBase::
|
void Panda3DBase::
|
||||||
report_downloading_package(P3D_instance *instance) {
|
report_downloading_package(P3D_instance *instance) {
|
||||||
P3D_object *obj = P3D_instance_get_panda_script_object(instance);
|
P3D_object *obj = P3D_instance_get_panda_script_object_ptr(instance);
|
||||||
|
|
||||||
P3D_object *display_name = P3D_object_get_property(obj, "downloadPackageDisplayName");
|
P3D_object *display_name = P3D_object_get_property_ptr(obj, "downloadPackageDisplayName");
|
||||||
if (display_name == NULL) {
|
if (display_name == NULL) {
|
||||||
cerr << "Installing package.\n";
|
cerr << "Installing package.\n";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int name_length = P3D_object_get_string(display_name, NULL, 0);
|
int name_length = P3D_object_get_string_ptr(display_name, NULL, 0);
|
||||||
char *name = new char[name_length + 1];
|
char *name = new char[name_length + 1];
|
||||||
P3D_object_get_string(display_name, name, name_length + 1);
|
P3D_object_get_string_ptr(display_name, name, name_length + 1);
|
||||||
|
|
||||||
cerr << "Installing " << name << "\n";
|
cerr << "Installing " << name << "\n";
|
||||||
|
|
||||||
delete[] name;
|
delete[] name;
|
||||||
P3D_object_decref(display_name);
|
P3D_object_decref_ptr(display_name);
|
||||||
_reporting_download = true;
|
_reporting_download = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -723,7 +621,7 @@ run() {
|
|||||||
if (_channel->run() || _rf.get_data_size() != 0) {
|
if (_channel->run() || _rf.get_data_size() != 0) {
|
||||||
if (_rf.get_data_size() != 0) {
|
if (_rf.get_data_size() != 0) {
|
||||||
// Got some new data.
|
// Got some new data.
|
||||||
bool download_ok = P3D_instance_feed_url_stream
|
bool download_ok = P3D_instance_feed_url_stream_ptr
|
||||||
(_instance, _unique_id, P3D_RC_in_progress,
|
(_instance, _unique_id, P3D_RC_in_progress,
|
||||||
_channel->get_status_code(),
|
_channel->get_status_code(),
|
||||||
_channel->get_file_size(),
|
_channel->get_file_size(),
|
||||||
@ -755,7 +653,7 @@ run() {
|
|||||||
cerr << "Error getting URL " << _url << "\n";
|
cerr << "Error getting URL " << _url << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
P3D_instance_feed_url_stream
|
P3D_instance_feed_url_stream_ptr
|
||||||
(_instance, _unique_id, status,
|
(_instance, _unique_id, status,
|
||||||
_channel->get_status_code(),
|
_channel->get_status_code(),
|
||||||
_bytes_sent, NULL, 0);
|
_bytes_sent, NULL, 0);
|
||||||
|
@ -40,7 +40,6 @@ class Panda3DBase {
|
|||||||
public:
|
public:
|
||||||
Panda3DBase(bool console_environment);
|
Panda3DBase(bool console_environment);
|
||||||
|
|
||||||
int run_embedded(int read_offset, int argc, char *argv[]);
|
|
||||||
void run_main_loop();
|
void run_main_loop();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user