Move all Python bindings out of core DLLs into the .pyd files.
This commit is contained in:
parent
4f27ed600f
commit
cbd70ad8af
|
|
@ -220,7 +220,7 @@ private:
|
|||
const DCPackerCatalog *_catalog;
|
||||
const DCPackerCatalog::LiveCatalog *_live_catalog;
|
||||
|
||||
class StackElement {
|
||||
class EXPCL_DIRECT StackElement {
|
||||
public:
|
||||
// As an optimization, we implement operator new and delete here
|
||||
// to minimize allocation overhead during push() and pop().
|
||||
|
|
|
|||
|
|
@ -162,6 +162,20 @@ call_function(ostream &out, int indent_level, bool convert_result,
|
|||
string defconstruct = builder.in_defconstruct(_cpptype->get_local_name(&parser));
|
||||
if (pexprs.empty() && !defconstruct.empty()) {
|
||||
return_expr = defconstruct;
|
||||
} else if (_extension) {
|
||||
// Extension constructors are a special case. We allocate memory, but
|
||||
// the actual construction is done by an __init__ method, similar to how
|
||||
// it works in Python.
|
||||
InterfaceMaker::indent(out, indent_level);
|
||||
_return_type->get_new_type()->output_instance(out, "result", &parser);
|
||||
out << " = (" << _cpptype->get_local_name(&parser)
|
||||
<< " *) " << _cpptype->get_local_name(&parser)
|
||||
<< "::operator new(sizeof(" << _cpptype->get_local_name(&parser) << "));\n";
|
||||
|
||||
InterfaceMaker::indent(out, indent_level)
|
||||
<< get_call_str("result", pexprs) << ";\n";
|
||||
|
||||
return_expr = "result";
|
||||
} else {
|
||||
return_expr = "new " + get_call_str(container, pexprs);
|
||||
}
|
||||
|
|
@ -330,7 +344,7 @@ make_wrapper_entry(FunctionIndex function_index) {
|
|||
// understands that if the destructor function is zero, it
|
||||
// should use the regular class destructor.
|
||||
|
||||
// nout << "Warning! Destructor for "
|
||||
// nout << "Warning! Destructor for "
|
||||
// << *_return_type->get_orig_type()
|
||||
// << " is unavailable.\n"
|
||||
// << " Cannot manage return value for:\n "
|
||||
|
|
@ -386,11 +400,13 @@ get_call_str(const string &container, const vector_string &pexprs) const {
|
|||
call << "Extension<" << _cpptype->get_local_name(&parser) << ">::";
|
||||
}
|
||||
|
||||
call << _cppfunc->get_local_name();
|
||||
call << "(";
|
||||
|
||||
if (_type == T_constructor) {
|
||||
// Constructor extensions are named __init__, by convention.
|
||||
call << "__init__";
|
||||
} else {
|
||||
call << _cppfunc->get_local_name();
|
||||
}
|
||||
} else {
|
||||
|
||||
if (_type == T_constructor) {
|
||||
// Constructors are called differently.
|
||||
call << _cpptype->get_local_name(&parser);
|
||||
|
|
@ -403,9 +419,8 @@ get_call_str(const string &container, const vector_string &pexprs) const {
|
|||
} else {
|
||||
call << _cppfunc->get_local_name(&parser);
|
||||
}
|
||||
|
||||
call << "(";
|
||||
}
|
||||
call << "(";
|
||||
|
||||
if (_flags & F_explicit_self) {
|
||||
// Pass on the PyObject * that we stripped off above.
|
||||
|
|
@ -639,7 +654,7 @@ setup_properties(const InterrogateFunction &ifunc, InterfaceMaker *interface_mak
|
|||
}
|
||||
|
||||
if (_has_this || _type == T_constructor) {
|
||||
if (_parameters.size() > first_param && _parameters[first_param]._name == "self" &&
|
||||
if (_parameters.size() > (size_t)first_param && _parameters[first_param]._name == "self" &&
|
||||
TypeManager::is_pointer_to_PyObject(_parameters[first_param]._remap->get_orig_type())) {
|
||||
// Here's a special case. If the first parameter of a nonstatic
|
||||
// method is a PyObject * called "self", then we will
|
||||
|
|
|
|||
|
|
@ -3121,7 +3121,7 @@ write_function_instance(ostream &out, InterfaceMaker::Object *obj,
|
|||
" wchar_t *" + param_name + "_str = (wchar_t *)alloca(sizeof(wchar_t) * " + param_name + "_len);"
|
||||
" PyUnicode_AsWideChar(" + param_name + ", " + param_name + "_str, " + param_name + "_len);";
|
||||
|
||||
pexpr_string = "basic_string<wchar_t>(" +
|
||||
pexpr_string = "std::wstring(" +
|
||||
param_name + "_str, " +
|
||||
param_name + "_len)";
|
||||
|
||||
|
|
@ -3140,7 +3140,7 @@ write_function_instance(ostream &out, InterfaceMaker::Object *obj,
|
|||
" wchar_t *" + param_name + "_str = (wchar_t *)alloca(sizeof(wchar_t) * " + param_name + "_len);"
|
||||
" PyUnicode_AsWideChar(" + param_name + ", " + param_name + "_str, " + param_name + "_len);";
|
||||
|
||||
pexpr_string = "&basic_string<wchar_t>(" +
|
||||
pexpr_string = "&std::wstring(" +
|
||||
param_name + "_str, " +
|
||||
param_name + "_len)";
|
||||
|
||||
|
|
@ -3169,11 +3169,11 @@ write_function_instance(ostream &out, InterfaceMaker::Object *obj,
|
|||
}
|
||||
|
||||
if (TypeManager::is_const_ptr_to_basic_string_char(orig_type)) {
|
||||
pexpr_string = "&basic_string<char>(" +
|
||||
pexpr_string = "&std::string(" +
|
||||
param_name + "_str, " +
|
||||
param_name + "_len)";
|
||||
} else {
|
||||
pexpr_string = "basic_string<char>(" +
|
||||
pexpr_string = "std::string(" +
|
||||
param_name + "_str, " +
|
||||
param_name + "_len)";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -214,6 +214,22 @@ do_command(const string &command, const string ¶ms) {
|
|||
} else if (command == "noinclude") {
|
||||
insert_param_list(_noinclude, params);
|
||||
|
||||
} else if (command == "forceinclude") {
|
||||
size_t nchars = params.size();
|
||||
if (nchars >= 2 && params[0] == '"' && params[nchars-1] == '"') {
|
||||
string incfile = params.substr(1, nchars - 2);
|
||||
_include_files[incfile] = '"';
|
||||
|
||||
} else if (nchars >= 2 && params[0] == '<' && params[nchars-1] == '>') {
|
||||
string incfile = params.substr(1, nchars - 2);
|
||||
_include_files[incfile] = '<';
|
||||
|
||||
} else {
|
||||
nout << "Ignoring invalid forceinclude " << params << "\n"
|
||||
"Expected to be in one of the following forms:\n"
|
||||
" forceinclude \"file.h\"\n"
|
||||
" forceinclude <file.h>\n";
|
||||
}
|
||||
} else {
|
||||
nout << "Ignoring " << command << " " << params << "\n";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -981,6 +981,9 @@ def CompileCxx(obj,src,opts):
|
|||
else:
|
||||
cmd += " -D_HAS_EXCEPTIONS=0"
|
||||
|
||||
if 'RTTI' not in opts:
|
||||
cmd += " /GR-"
|
||||
|
||||
if GetTargetArch() == 'x64':
|
||||
cmd += " /DWIN64_VC /DWIN64"
|
||||
|
||||
|
|
@ -1300,8 +1303,8 @@ def CompileIgate(woutd,wsrc,opts):
|
|||
if (opt=="ALWAYS") or (opt in opts):
|
||||
cmd += ' -D' + var + '=' + val
|
||||
|
||||
building = GetValueOption(opts, "BUILDING:")
|
||||
if (building): cmd += " -DBUILDING_"+building
|
||||
#building = GetValueOption(opts, "BUILDING:")
|
||||
#if (building): cmd += " -DBUILDING_"+building
|
||||
cmd += ' -module ' + module + ' -library ' + library
|
||||
for x in wsrc:
|
||||
if (x.startswith("/")):
|
||||
|
|
@ -2947,6 +2950,7 @@ TargetAdd('libp3dtoolconfig.dll', input='libp3dtool.dll')
|
|||
TargetAdd('libp3dtoolconfig.dll', opts=['ADVAPI', 'OPENSSL', 'WINGDI', 'WINUSER'])
|
||||
|
||||
if not PkgSkip("PYTHON"):
|
||||
OPTS=['DIR:dtool/metalibs/dtoolconfig']
|
||||
TargetAdd('dtoolconfig_pydtool.obj', opts=OPTS, input="pydtool.cxx")
|
||||
TargetAdd('dtoolconfig.pyd', input='dtoolconfig_pydtool.obj')
|
||||
TargetAdd('dtoolconfig.pyd', input='libp3dtoolconfig.dll')
|
||||
|
|
@ -3026,11 +3030,13 @@ TargetAdd('p3pandabase_pandabase.obj', opts=OPTS, input='pandabase.cxx')
|
|||
OPTS=['DIR:panda/src/express', 'BUILDING:PANDAEXPRESS', 'OPENSSL', 'ZLIB']
|
||||
TargetAdd('p3express_composite1.obj', opts=OPTS, input='p3express_composite1.cxx')
|
||||
TargetAdd('p3express_composite2.obj', opts=OPTS, input='p3express_composite2.cxx')
|
||||
TargetAdd('p3express_ext_composite.obj', opts=OPTS, input='p3express_ext_composite.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/express', 'OPENSSL', 'ZLIB']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/express', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3express.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3express.in', opts=['IMOD:panda3d.core', 'ILIB:libp3express', 'SRCDIR:panda/src/express'])
|
||||
TargetAdd('libp3express_igate.obj', input='libp3express.in', opts=["DEPENDENCYONLY"])
|
||||
TargetAdd('p3express_ext_composite.obj', opts=OPTS, input='p3express_ext_composite.cxx')
|
||||
|
||||
#
|
||||
# DIRECTORY: panda/src/downloader/
|
||||
|
|
@ -3039,6 +3045,8 @@ TargetAdd('libp3express_igate.obj', input='libp3express.in', opts=["DEPENDENCYON
|
|||
OPTS=['DIR:panda/src/downloader', 'BUILDING:PANDAEXPRESS', 'OPENSSL', 'ZLIB']
|
||||
TargetAdd('p3downloader_composite1.obj', opts=OPTS, input='p3downloader_composite1.cxx')
|
||||
TargetAdd('p3downloader_composite2.obj', opts=OPTS, input='p3downloader_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/downloader', 'OPENSSL', 'ZLIB']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/downloader', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3downloader.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3downloader.in', opts=['IMOD:panda3d.core', 'ILIB:libp3downloader', 'SRCDIR:panda/src/downloader'])
|
||||
|
|
@ -3053,11 +3061,8 @@ TargetAdd('pandaexpress_pandaexpress.obj', opts=OPTS, input='pandaexpress.cxx')
|
|||
TargetAdd('libpandaexpress.dll', input='pandaexpress_pandaexpress.obj')
|
||||
TargetAdd('libpandaexpress.dll', input='p3downloader_composite1.obj')
|
||||
TargetAdd('libpandaexpress.dll', input='p3downloader_composite2.obj')
|
||||
TargetAdd('libpandaexpress.dll', input='libp3downloader_igate.obj')
|
||||
TargetAdd('libpandaexpress.dll', input='p3express_composite1.obj')
|
||||
TargetAdd('libpandaexpress.dll', input='p3express_composite2.obj')
|
||||
TargetAdd('libpandaexpress.dll', input='p3express_ext_composite.obj')
|
||||
TargetAdd('libpandaexpress.dll', input='libp3express_igate.obj')
|
||||
TargetAdd('libpandaexpress.dll', input='p3pandabase_pandabase.obj')
|
||||
TargetAdd('libpandaexpress.dll', input=COMMON_DTOOL_LIBS)
|
||||
TargetAdd('libpandaexpress.dll', opts=['ADVAPI', 'WINSOCK2', 'OPENSSL', 'ZLIB', 'WINGDI', 'WINUSER'])
|
||||
|
|
@ -3071,6 +3076,8 @@ if (not RUNTIME):
|
|||
TargetAdd('p3pipeline_composite1.obj', opts=OPTS, input='p3pipeline_composite1.cxx')
|
||||
TargetAdd('p3pipeline_composite2.obj', opts=OPTS, input='p3pipeline_composite2.cxx')
|
||||
TargetAdd('p3pipeline_contextSwitch.obj', opts=OPTS, input='contextSwitch.c')
|
||||
|
||||
OPTS=['DIR:panda/src/pipeline']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/pipeline', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3pipeline.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3pipeline.in', opts=['IMOD:panda3d.core', 'ILIB:libp3pipeline', 'SRCDIR:panda/src/pipeline'])
|
||||
|
|
@ -3084,6 +3091,8 @@ if (not RUNTIME):
|
|||
OPTS=['DIR:panda/src/linmath', 'BUILDING:PANDA']
|
||||
TargetAdd('p3linmath_composite1.obj', opts=OPTS, input='p3linmath_composite1.cxx')
|
||||
TargetAdd('p3linmath_composite2.obj', opts=OPTS, input='p3linmath_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/linmath']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/linmath', ["*.h", "*_composite*.cxx"])
|
||||
for ifile in IGATEFILES[:]:
|
||||
if "_src." in ifile:
|
||||
|
|
@ -3103,12 +3112,15 @@ if (not RUNTIME):
|
|||
OPTS=['DIR:panda/src/putil', 'BUILDING:PANDA', 'ZLIB']
|
||||
TargetAdd('p3putil_composite1.obj', opts=OPTS, input='p3putil_composite1.cxx')
|
||||
TargetAdd('p3putil_composite2.obj', opts=OPTS, input='p3putil_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/putil', 'ZLIB']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/putil', ["*.h", "*_composite*.cxx"])
|
||||
IGATEFILES.remove("test_bam.h")
|
||||
TargetAdd('libp3putil.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3putil.in', opts=['IMOD:panda3d.core', 'ILIB:libp3putil', 'SRCDIR:panda/src/putil'])
|
||||
TargetAdd('libp3putil_igate.obj', input='libp3putil.in', opts=["DEPENDENCYONLY"])
|
||||
TargetAdd('p3putil_typedWritable_ext.obj', opts=OPTS, input='typedWritable_ext.cxx')
|
||||
TargetAdd('p3putil_pythonCallbackObject.obj', opts=OPTS, input='pythonCallbackObject.cxx')
|
||||
|
||||
#
|
||||
# DIRECTORY: panda/src/audio/
|
||||
|
|
@ -3117,6 +3129,8 @@ if (not RUNTIME):
|
|||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/audio', 'BUILDING:PANDA']
|
||||
TargetAdd('p3audio_composite1.obj', opts=OPTS, input='p3audio_composite1.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/audio']
|
||||
IGATEFILES=["audio.h"]
|
||||
TargetAdd('libp3audio.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3audio.in', opts=['IMOD:panda3d.core', 'ILIB:libp3audio', 'SRCDIR:panda/src/audio'])
|
||||
|
|
@ -3130,6 +3144,9 @@ if (not RUNTIME):
|
|||
OPTS=['DIR:panda/src/event', 'BUILDING:PANDA']
|
||||
TargetAdd('p3event_composite1.obj', opts=OPTS, input='p3event_composite1.cxx')
|
||||
TargetAdd('p3event_composite2.obj', opts=OPTS, input='p3event_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/event']
|
||||
TargetAdd('p3event_pythonTask.obj', opts=OPTS, input='pythonTask.cxx')
|
||||
IGATEFILES=GetDirectoryContents('panda/src/event', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3event.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3event.in', opts=['IMOD:panda3d.core', 'ILIB:libp3event', 'SRCDIR:panda/src/event'])
|
||||
|
|
@ -3143,6 +3160,8 @@ if (not RUNTIME):
|
|||
OPTS=['DIR:panda/src/mathutil', 'BUILDING:PANDA', 'FFTW']
|
||||
TargetAdd('p3mathutil_composite1.obj', opts=OPTS, input='p3mathutil_composite1.cxx')
|
||||
TargetAdd('p3mathutil_composite2.obj', opts=OPTS, input='p3mathutil_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/mathutil', 'FFTW']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/mathutil', ["*.h", "*_composite*.cxx"])
|
||||
for ifile in IGATEFILES[:]:
|
||||
if "_src." in ifile:
|
||||
|
|
@ -3158,6 +3177,8 @@ if (not RUNTIME):
|
|||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/gsgbase', 'BUILDING:PANDA']
|
||||
TargetAdd('p3gsgbase_composite1.obj', opts=OPTS, input='p3gsgbase_composite1.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/gsgbase']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/gsgbase', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3gsgbase.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3gsgbase.in', opts=['IMOD:panda3d.core', 'ILIB:libp3gsgbase', 'SRCDIR:panda/src/gsgbase'])
|
||||
|
|
@ -3171,6 +3192,8 @@ if (not RUNTIME):
|
|||
OPTS=['DIR:panda/src/pnmimage', 'BUILDING:PANDA', 'ZLIB']
|
||||
TargetAdd('p3pnmimage_composite1.obj', opts=OPTS, input='p3pnmimage_composite1.cxx')
|
||||
TargetAdd('p3pnmimage_composite2.obj', opts=OPTS, input='p3pnmimage_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/pnmimage', 'ZLIB']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/pnmimage', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3pnmimage.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3pnmimage.in', opts=['IMOD:panda3d.core', 'ILIB:libp3pnmimage', 'SRCDIR:panda/src/pnmimage'])
|
||||
|
|
@ -3184,6 +3207,8 @@ if (not RUNTIME):
|
|||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/nativenet', 'OPENSSL', 'BUILDING:PANDA']
|
||||
TargetAdd('p3nativenet_composite1.obj', opts=OPTS, input='p3nativenet_composite1.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/nativenet', 'OPENSSL']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/nativenet', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3nativenet.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3nativenet.in', opts=['IMOD:panda3d.core', 'ILIB:libp3nativenet', 'SRCDIR:panda/src/nativenet'])
|
||||
|
|
@ -3197,6 +3222,8 @@ if (not RUNTIME):
|
|||
OPTS=['DIR:panda/src/net', 'BUILDING:PANDA']
|
||||
TargetAdd('p3net_composite1.obj', opts=OPTS, input='p3net_composite1.cxx')
|
||||
TargetAdd('p3net_composite2.obj', opts=OPTS, input='p3net_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/net']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/net', ["*.h", "*_composite*.cxx"])
|
||||
IGATEFILES.remove("datagram_ui.h")
|
||||
TargetAdd('libp3net.in', opts=OPTS, input=IGATEFILES)
|
||||
|
|
@ -3211,6 +3238,8 @@ if (not RUNTIME):
|
|||
OPTS=['DIR:panda/src/pstatclient', 'BUILDING:PANDA']
|
||||
TargetAdd('p3pstatclient_composite1.obj', opts=OPTS, input='p3pstatclient_composite1.cxx')
|
||||
TargetAdd('p3pstatclient_composite2.obj', opts=OPTS, input='p3pstatclient_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/pstatclient']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/pstatclient', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3pstatclient.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3pstatclient.in', opts=['IMOD:panda3d.core', 'ILIB:libp3pstatclient', 'SRCDIR:panda/src/pstatclient'])
|
||||
|
|
@ -3221,9 +3250,11 @@ if (not RUNTIME):
|
|||
#
|
||||
|
||||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/gobj', 'BUILDING:PANDA', 'NVIDIACG', 'ZLIB', 'SQUISH', "BIGOBJ"]
|
||||
OPTS=['DIR:panda/src/gobj', 'BUILDING:PANDA', 'NVIDIACG', 'ZLIB', 'SQUISH']
|
||||
TargetAdd('p3gobj_composite1.obj', opts=OPTS, input='p3gobj_composite1.cxx')
|
||||
TargetAdd('p3gobj_composite2.obj', opts=OPTS, input='p3gobj_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/gobj', 'NVIDIACG', 'ZLIB', 'SQUISH']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/gobj', ["*.h", "*_composite*.cxx"])
|
||||
if ("cgfx_states.h" in IGATEFILES): IGATEFILES.remove("cgfx_states.h")
|
||||
TargetAdd('libp3gobj.in', opts=OPTS, input=IGATEFILES)
|
||||
|
|
@ -3237,9 +3268,11 @@ if (not RUNTIME):
|
|||
#
|
||||
|
||||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/pgraphnodes', 'BUILDING:PANDA', "BIGOBJ"]
|
||||
OPTS=['DIR:panda/src/pgraphnodes', 'BUILDING:PANDA']
|
||||
TargetAdd('p3pgraphnodes_composite1.obj', opts=OPTS, input='p3pgraphnodes_composite1.cxx')
|
||||
TargetAdd('p3pgraphnodes_composite2.obj', opts=OPTS, input='p3pgraphnodes_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/pgraphnodes']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/pgraphnodes', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3pgraphnodes.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3pgraphnodes.in', opts=['IMOD:panda3d.core', 'ILIB:libp3pgraphnodes', 'SRCDIR:panda/src/pgraphnodes'])
|
||||
|
|
@ -3250,12 +3283,14 @@ if (not RUNTIME):
|
|||
#
|
||||
|
||||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/pgraph', 'BUILDING:PANDA','BIGOBJ']
|
||||
OPTS=['DIR:panda/src/pgraph', 'BUILDING:PANDA']
|
||||
TargetAdd('p3pgraph_nodePath.obj', opts=OPTS, input='nodePath.cxx')
|
||||
TargetAdd('p3pgraph_composite1.obj', opts=OPTS, input='p3pgraph_composite1.cxx')
|
||||
TargetAdd('p3pgraph_composite2.obj', opts=OPTS, input='p3pgraph_composite2.cxx')
|
||||
TargetAdd('p3pgraph_composite3.obj', opts=OPTS, input='p3pgraph_composite3.cxx')
|
||||
TargetAdd('p3pgraph_composite4.obj', opts=OPTS, input='p3pgraph_composite4.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/pgraph']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/pgraph', ["*.h", "nodePath.cxx", "*_composite*.cxx"])
|
||||
TargetAdd('libp3pgraph.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3pgraph.in', opts=['IMOD:panda3d.core', 'ILIB:libp3pgraph', 'SRCDIR:panda/src/pgraph'])
|
||||
|
|
@ -3267,9 +3302,11 @@ if (not RUNTIME):
|
|||
#
|
||||
|
||||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/cull', 'BUILDING:PANDA', 'BIGOBJ']
|
||||
OPTS=['DIR:panda/src/cull', 'BUILDING:PANDA']
|
||||
TargetAdd('p3cull_composite1.obj', opts=OPTS, input='p3cull_composite1.cxx')
|
||||
TargetAdd('p3cull_composite2.obj', opts=OPTS, input='p3cull_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/cull']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/cull', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3cull.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3cull.in', opts=['IMOD:panda3d.core', 'ILIB:libp3cull', 'SRCDIR:panda/src/cull'])
|
||||
|
|
@ -3280,9 +3317,11 @@ if (not RUNTIME):
|
|||
#
|
||||
|
||||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/chan', 'BUILDING:PANDA', 'BIGOBJ']
|
||||
OPTS=['DIR:panda/src/chan', 'BUILDING:PANDA']
|
||||
TargetAdd('p3chan_composite1.obj', opts=OPTS, input='p3chan_composite1.cxx')
|
||||
TargetAdd('p3chan_composite2.obj', opts=OPTS, input='p3chan_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/chan']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/chan', ["*.h", "*_composite*.cxx"])
|
||||
IGATEFILES.remove('movingPart.h')
|
||||
IGATEFILES.remove('animChannelFixed.h')
|
||||
|
|
@ -3295,9 +3334,11 @@ if (not RUNTIME):
|
|||
#
|
||||
|
||||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/char', 'BUILDING:PANDA', 'BIGOBJ']
|
||||
OPTS=['DIR:panda/src/char', 'BUILDING:PANDA']
|
||||
TargetAdd('p3char_composite1.obj', opts=OPTS, input='p3char_composite1.cxx')
|
||||
TargetAdd('p3char_composite2.obj', opts=OPTS, input='p3char_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/char']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/char', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3char.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3char.in', opts=['IMOD:panda3d.core', 'ILIB:libp3char', 'SRCDIR:panda/src/char'])
|
||||
|
|
@ -3311,6 +3352,8 @@ if (not RUNTIME):
|
|||
OPTS=['DIR:panda/src/dgraph', 'BUILDING:PANDA']
|
||||
TargetAdd('p3dgraph_composite1.obj', opts=OPTS, input='p3dgraph_composite1.cxx')
|
||||
TargetAdd('p3dgraph_composite2.obj', opts=OPTS, input='p3dgraph_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/dgraph']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/dgraph', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3dgraph.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3dgraph.in', opts=['IMOD:panda3d.core', 'ILIB:libp3dgraph', 'SRCDIR:panda/src/dgraph'])
|
||||
|
|
@ -3321,9 +3364,11 @@ if (not RUNTIME):
|
|||
#
|
||||
|
||||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/display', 'BUILDING:PANDA', 'BIGOBJ']
|
||||
OPTS=['DIR:panda/src/display', 'BUILDING:PANDA']
|
||||
TargetAdd('p3display_composite1.obj', opts=OPTS, input='p3display_composite1.cxx')
|
||||
TargetAdd('p3display_composite2.obj', opts=OPTS, input='p3display_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/display']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/display', ["*.h", "*_composite*.cxx"])
|
||||
IGATEFILES.remove("renderBuffer.h")
|
||||
TargetAdd('libp3display.in', opts=OPTS, input=IGATEFILES)
|
||||
|
|
@ -3331,6 +3376,7 @@ if (not RUNTIME):
|
|||
TargetAdd('libp3display_igate.obj', input='libp3display.in', opts=["DEPENDENCYONLY"])
|
||||
TargetAdd('p3display_graphicsStateGuardian_ext.obj', opts=OPTS, input='graphicsStateGuardian_ext.cxx')
|
||||
TargetAdd('p3display_graphicsWindow_ext.obj', opts=OPTS, input='graphicsWindow_ext.cxx')
|
||||
TargetAdd('p3display_pythonGraphicsWindowProc.obj', opts=OPTS, input='pythonGraphicsWindowProc.cxx')
|
||||
|
||||
if RTDIST and GetTarget() == 'darwin':
|
||||
OPTS=['DIR:panda/src/display']
|
||||
|
|
@ -3342,9 +3388,11 @@ if (not RUNTIME):
|
|||
#
|
||||
|
||||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/device', 'BUILDING:PANDA', 'BIGOBJ']
|
||||
OPTS=['DIR:panda/src/device', 'BUILDING:PANDA']
|
||||
TargetAdd('p3device_composite1.obj', opts=OPTS, input='p3device_composite1.cxx')
|
||||
TargetAdd('p3device_composite2.obj', opts=OPTS, input='p3device_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/device']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/device', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3device.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3device.in', opts=['IMOD:panda3d.core', 'ILIB:libp3device', 'SRCDIR:panda/src/device'])
|
||||
|
|
@ -3357,6 +3405,8 @@ if (not RUNTIME):
|
|||
if (PkgSkip("FREETYPE")==0 and not RUNTIME):
|
||||
OPTS=['DIR:panda/src/pnmtext', 'BUILDING:PANDA', 'FREETYPE']
|
||||
TargetAdd('p3pnmtext_composite1.obj', opts=OPTS, input='p3pnmtext_composite1.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/pnmtext', 'FREETYPE']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/pnmtext', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3pnmtext.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3pnmtext.in', opts=['IMOD:panda3d.core', 'ILIB:libp3pnmtext', 'SRCDIR:panda/src/pnmtext'])
|
||||
|
|
@ -3367,9 +3417,11 @@ if (PkgSkip("FREETYPE")==0 and not RUNTIME):
|
|||
#
|
||||
|
||||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/text', 'BUILDING:PANDA', 'ZLIB', 'FREETYPE', 'BIGOBJ']
|
||||
OPTS=['DIR:panda/src/text', 'BUILDING:PANDA', 'ZLIB', 'FREETYPE']
|
||||
TargetAdd('p3text_composite1.obj', opts=OPTS, input='p3text_composite1.cxx')
|
||||
TargetAdd('p3text_composite2.obj', opts=OPTS, input='p3text_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/text', 'ZLIB', 'FREETYPE']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/text', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3text.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3text.in', opts=['IMOD:panda3d.core', 'ILIB:libp3text', 'SRCDIR:panda/src/text'])
|
||||
|
|
@ -3382,6 +3434,8 @@ if (not RUNTIME):
|
|||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/movies', 'BUILDING:PANDA', 'VORBIS']
|
||||
TargetAdd('p3movies_composite1.obj', opts=OPTS, input='p3movies_composite1.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/movies', 'VORBIS']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/movies', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3movies.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3movies.in', opts=['IMOD:panda3d.core', 'ILIB:libp3movies', 'SRCDIR:panda/src/movies'])
|
||||
|
|
@ -3392,10 +3446,12 @@ if (not RUNTIME):
|
|||
#
|
||||
|
||||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/grutil', 'BUILDING:PANDA', 'BIGOBJ']
|
||||
OPTS=['DIR:panda/src/grutil', 'BUILDING:PANDA']
|
||||
TargetAdd('p3grutil_multitexReducer.obj', opts=OPTS, input='multitexReducer.cxx')
|
||||
TargetAdd('p3grutil_composite1.obj', opts=OPTS, input='p3grutil_composite1.cxx')
|
||||
TargetAdd('p3grutil_composite2.obj', opts=OPTS, input='p3grutil_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/grutil']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/grutil', ["*.h", "*_composite*.cxx"])
|
||||
if 'convexHull.h' in IGATEFILES: IGATEFILES.remove('convexHull.h')
|
||||
TargetAdd('libp3grutil.in', opts=OPTS, input=IGATEFILES)
|
||||
|
|
@ -3407,9 +3463,11 @@ if (not RUNTIME):
|
|||
#
|
||||
|
||||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/tform', 'BUILDING:PANDA', 'BIGOBJ']
|
||||
OPTS=['DIR:panda/src/tform', 'BUILDING:PANDA']
|
||||
TargetAdd('p3tform_composite1.obj', opts=OPTS, input='p3tform_composite1.cxx')
|
||||
TargetAdd('p3tform_composite2.obj', opts=OPTS, input='p3tform_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/tform']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/tform', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3tform.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3tform.in', opts=['IMOD:panda3d.core', 'ILIB:libp3tform', 'SRCDIR:panda/src/tform'])
|
||||
|
|
@ -3420,9 +3478,11 @@ if (not RUNTIME):
|
|||
#
|
||||
|
||||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/collide', 'BUILDING:PANDA', 'BIGOBJ']
|
||||
OPTS=['DIR:panda/src/collide', 'BUILDING:PANDA']
|
||||
TargetAdd('p3collide_composite1.obj', opts=OPTS, input='p3collide_composite1.cxx')
|
||||
TargetAdd('p3collide_composite2.obj', opts=OPTS, input='p3collide_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/collide']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/collide', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3collide.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3collide.in', opts=['IMOD:panda3d.core', 'ILIB:libp3collide', 'SRCDIR:panda/src/collide'])
|
||||
|
|
@ -3433,9 +3493,11 @@ if (not RUNTIME):
|
|||
#
|
||||
|
||||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/parametrics', 'BUILDING:PANDA', 'BIGOBJ']
|
||||
OPTS=['DIR:panda/src/parametrics', 'BUILDING:PANDA']
|
||||
TargetAdd('p3parametrics_composite1.obj', opts=OPTS, input='p3parametrics_composite1.cxx')
|
||||
TargetAdd('p3parametrics_composite2.obj', opts=OPTS, input='p3parametrics_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/parametrics']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/parametrics', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3parametrics.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3parametrics.in', opts=['IMOD:panda3d.core', 'ILIB:libp3parametrics', 'SRCDIR:panda/src/parametrics'])
|
||||
|
|
@ -3446,9 +3508,11 @@ if (not RUNTIME):
|
|||
#
|
||||
|
||||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/pgui', 'BUILDING:PANDA', 'BIGOBJ']
|
||||
OPTS=['DIR:panda/src/pgui', 'BUILDING:PANDA']
|
||||
TargetAdd('p3pgui_composite1.obj', opts=OPTS, input='p3pgui_composite1.cxx')
|
||||
TargetAdd('p3pgui_composite2.obj', opts=OPTS, input='p3pgui_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/pgui']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/pgui', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3pgui.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3pgui.in', opts=['IMOD:panda3d.core', 'ILIB:libp3pgui', 'SRCDIR:panda/src/pgui'])
|
||||
|
|
@ -3471,6 +3535,8 @@ if (not RUNTIME):
|
|||
OPTS=['DIR:panda/src/recorder', 'BUILDING:PANDA']
|
||||
TargetAdd('p3recorder_composite1.obj', opts=OPTS, input='p3recorder_composite1.cxx')
|
||||
TargetAdd('p3recorder_composite2.obj', opts=OPTS, input='p3recorder_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/recorder']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/recorder', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3recorder.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3recorder.in', opts=['IMOD:panda3d.core', 'ILIB:libp3recorder', 'SRCDIR:panda/src/recorder'])
|
||||
|
|
@ -3490,6 +3556,8 @@ if (RUNTIME or RTDIST):
|
|||
if (not RUNTIME):
|
||||
OPTS=['DIR:panda/src/dxml', 'BUILDING:PANDA', 'TINYXML']
|
||||
TargetAdd('p3dxml_composite1.obj', opts=OPTS, input='p3dxml_composite1.cxx')
|
||||
|
||||
OPTS=['DIR:panda/src/dxml', 'TINYXML']
|
||||
IGATEFILES=GetDirectoryContents('panda/src/dxml', ["*.h", "p3dxml_composite1.cxx"])
|
||||
TargetAdd('libp3dxml.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3dxml.in', opts=['IMOD:panda3d.core', 'ILIB:libp3dxml', 'SRCDIR:panda/src/dxml'])
|
||||
|
|
@ -3509,108 +3577,71 @@ if (not RUNTIME):
|
|||
TargetAdd('libpanda.dll', input='panda_panda.obj')
|
||||
TargetAdd('libpanda.dll', input='p3recorder_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3recorder_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3recorder_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pgraphnodes_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pgraphnodes_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3pgraphnodes_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pgraph_nodePath.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pgraph_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pgraph_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pgraph_composite3.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pgraph_composite4.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3pgraph_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3cull_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3cull_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='p3movies_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3movies_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3grutil_multitexReducer.obj')
|
||||
TargetAdd('libpanda.dll', input='p3grutil_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3grutil_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3grutil_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3chan_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3chan_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3chan_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pstatclient_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pstatclient_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3pstatclient_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3char_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3char_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3char_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3collide_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3collide_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3collide_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3device_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3device_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3device_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3dgraph_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3dgraph_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3dgraph_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3display_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3display_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3display_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pipeline_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pipeline_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pipeline_contextSwitch.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3pipeline_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3event_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3event_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3event_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3gobj_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3gobj_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3gobj_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3gsgbase_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3gsgbase_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3linmath_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3linmath_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3linmath_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3mathutil_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3mathutil_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3mathutil_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3parametrics_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3parametrics_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3parametrics_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pnmimagetypes_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pnmimagetypes_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pnmimage_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pnmimage_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3pnmimage_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3text_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3text_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3text_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3tform_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3tform_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3tform_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3putil_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3putil_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3putil_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3audio_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3audio_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pgui_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pgui_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3pgui_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3net_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='p3net_composite2.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3net_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3nativenet_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3nativenet_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pandabase_pandabase.obj')
|
||||
TargetAdd('libpanda.dll', input='libpandaexpress.dll')
|
||||
TargetAdd('libpanda.dll', input='p3dxml_composite1.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3dxml_igate.obj')
|
||||
TargetAdd('libpanda.dll', input='libp3dtoolconfig.dll')
|
||||
TargetAdd('libpanda.dll', input='libp3dtool.dll')
|
||||
|
||||
TargetAdd('libpanda.dll', input='p3putil_typedWritable_ext.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pnmimage_pfmFile_ext.obj')
|
||||
TargetAdd('libpanda.dll', input='p3gobj_geomVertexArrayData_ext.obj')
|
||||
TargetAdd('libpanda.dll', input='p3gobj_internalName_ext.obj')
|
||||
TargetAdd('libpanda.dll', input='p3pgraph_ext_composite.obj')
|
||||
TargetAdd('libpanda.dll', input='p3display_graphicsStateGuardian_ext.obj')
|
||||
TargetAdd('libpanda.dll', input='p3display_graphicsWindow_ext.obj')
|
||||
|
||||
if PkgSkip("FREETYPE")==0:
|
||||
TargetAdd('libpanda.dll', input="p3pnmtext_composite1.obj")
|
||||
TargetAdd('libpanda.dll', input="libp3pnmtext_igate.obj")
|
||||
|
||||
TargetAdd('libpanda.dll', dep='dtool_have_freetype.dat')
|
||||
TargetAdd('libpanda.dll', opts=OPTS)
|
||||
|
|
@ -3653,9 +3684,57 @@ if (not RUNTIME):
|
|||
|
||||
TargetAdd('core_module.obj', opts=['IMOD:panda3d.core', 'ILIB:core'])
|
||||
|
||||
OPTS=['WINSOCK2']
|
||||
TargetAdd('core.pyd', input='libp3downloader_igate.obj')
|
||||
TargetAdd('core.pyd', input='p3express_ext_composite.obj')
|
||||
TargetAdd('core.pyd', input='libp3express_igate.obj')
|
||||
|
||||
TargetAdd('core.pyd', input='libp3recorder_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3pgraphnodes_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3pgraph_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3movies_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3grutil_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3chan_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3pstatclient_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3char_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3collide_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3device_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3dgraph_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3display_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3pipeline_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3event_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3gobj_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3gsgbase_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3linmath_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3mathutil_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3parametrics_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3pnmimage_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3text_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3tform_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3putil_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3audio_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3pgui_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3net_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3nativenet_igate.obj')
|
||||
TargetAdd('core.pyd', input='libp3dxml_igate.obj')
|
||||
|
||||
if PkgSkip("FREETYPE")==0:
|
||||
TargetAdd('core.pyd', input="libp3pnmtext_igate.obj")
|
||||
|
||||
TargetAdd('core.pyd', input='p3putil_typedWritable_ext.obj')
|
||||
TargetAdd('core.pyd', input='p3putil_pythonCallbackObject.obj')
|
||||
TargetAdd('core.pyd', input='p3pnmimage_pfmFile_ext.obj')
|
||||
TargetAdd('core.pyd', input='p3event_pythonTask.obj')
|
||||
TargetAdd('core.pyd', input='p3gobj_geomVertexArrayData_ext.obj')
|
||||
TargetAdd('core.pyd', input='p3gobj_internalName_ext.obj')
|
||||
TargetAdd('core.pyd', input='p3pgraph_ext_composite.obj')
|
||||
TargetAdd('core.pyd', input='p3display_graphicsStateGuardian_ext.obj')
|
||||
TargetAdd('core.pyd', input='p3display_graphicsWindow_ext.obj')
|
||||
TargetAdd('core.pyd', input='p3display_pythonGraphicsWindowProc.obj')
|
||||
|
||||
TargetAdd('core.pyd', input='core_module.obj')
|
||||
TargetAdd('core.pyd', input=COMMON_PANDA_LIBS)
|
||||
TargetAdd('core.pyd', opts=['PYTHON'])
|
||||
TargetAdd('core.pyd', opts=OPTS)
|
||||
|
||||
#
|
||||
# DIRECTORY: panda/src/vision/
|
||||
|
|
@ -4536,6 +4615,8 @@ if (PkgSkip("DIRECT")==0):
|
|||
TargetAdd('p3dcparser_dcLexer.obj', opts=OPTS, input='dcLexer.lxx')
|
||||
TargetAdd('p3dcparser_composite1.obj', opts=OPTS, input='p3dcparser_composite1.cxx')
|
||||
TargetAdd('p3dcparser_composite2.obj', opts=OPTS, input='p3dcparser_composite2.cxx')
|
||||
|
||||
OPTS=['DIR:direct/src/dcparser', 'WITHINPANDA']
|
||||
IGATEFILES=GetDirectoryContents('direct/src/dcparser', ["*.h", "*_composite*.cxx"])
|
||||
if "dcParser.h" in IGATEFILES: IGATEFILES.remove("dcParser.h")
|
||||
if "dcmsgtypes.h" in IGATEFILES: IGATEFILES.remove('dcmsgtypes.h')
|
||||
|
|
@ -4550,6 +4631,8 @@ if (PkgSkip("DIRECT")==0):
|
|||
if (PkgSkip("DIRECT")==0):
|
||||
OPTS=['DIR:direct/src/deadrec', 'BUILDING:DIRECT']
|
||||
TargetAdd('p3deadrec_composite1.obj', opts=OPTS, input='p3deadrec_composite1.cxx')
|
||||
|
||||
OPTS=['DIR:direct/src/deadrec']
|
||||
IGATEFILES=GetDirectoryContents('direct/src/deadrec', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3deadrec.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3deadrec.in', opts=['IMOD:panda3d.direct', 'ILIB:libp3deadrec', 'SRCDIR:direct/src/deadrec'])
|
||||
|
|
@ -4564,6 +4647,8 @@ if (PkgSkip("DIRECT")==0):
|
|||
TargetAdd('p3distributed_config_distributed.obj', opts=OPTS, input='config_distributed.cxx')
|
||||
TargetAdd('p3distributed_cConnectionRepository.obj', opts=OPTS, input='cConnectionRepository.cxx')
|
||||
TargetAdd('p3distributed_cDistributedSmoothNodeBase.obj', opts=OPTS, input='cDistributedSmoothNodeBase.cxx')
|
||||
|
||||
OPTS=['DIR:direct/src/distributed', 'WITHINPANDA', 'OPENSSL']
|
||||
IGATEFILES=GetDirectoryContents('direct/src/distributed', ["*.h", "*.cxx"])
|
||||
TargetAdd('libp3distributed.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3distributed.in', opts=['IMOD:panda3d.direct', 'ILIB:libp3distributed', 'SRCDIR:direct/src/distributed'])
|
||||
|
|
@ -4576,6 +4661,8 @@ if (PkgSkip("DIRECT")==0):
|
|||
if (PkgSkip("DIRECT")==0):
|
||||
OPTS=['DIR:direct/src/interval', 'BUILDING:DIRECT']
|
||||
TargetAdd('p3interval_composite1.obj', opts=OPTS, input='p3interval_composite1.cxx')
|
||||
|
||||
OPTS=['DIR:direct/src/interval']
|
||||
IGATEFILES=GetDirectoryContents('direct/src/interval', ["*.h", "*_composite*.cxx"])
|
||||
TargetAdd('libp3interval.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3interval.in', opts=['IMOD:panda3d.direct', 'ILIB:libp3interval', 'SRCDIR:direct/src/interval'])
|
||||
|
|
@ -4590,6 +4677,8 @@ if (PkgSkip("DIRECT")==0):
|
|||
TargetAdd('p3showbase_showBase.obj', opts=OPTS, input='showBase.cxx')
|
||||
if GetTarget() == 'darwin':
|
||||
TargetAdd('p3showbase_showBase_assist.obj', opts=OPTS, input='showBase_assist.mm')
|
||||
|
||||
OPTS=['DIR:direct/src/showbase']
|
||||
IGATEFILES=GetDirectoryContents('direct/src/showbase', ["*.h", "showBase.cxx"])
|
||||
TargetAdd('libp3showbase.in', opts=OPTS, input=IGATEFILES)
|
||||
TargetAdd('libp3showbase.in', opts=['IMOD:panda3d.direct', 'ILIB:libp3showbase', 'SRCDIR:direct/src/showbase'])
|
||||
|
|
@ -4609,19 +4698,14 @@ if (PkgSkip("DIRECT")==0):
|
|||
TargetAdd('libp3direct.dll', input='p3dcparser_composite2.obj')
|
||||
TargetAdd('libp3direct.dll', input='p3dcparser_dcParser.obj')
|
||||
TargetAdd('libp3direct.dll', input='p3dcparser_dcLexer.obj')
|
||||
TargetAdd('libp3direct.dll', input='libp3dcparser_igate.obj')
|
||||
TargetAdd('libp3direct.dll', input='p3showbase_showBase.obj')
|
||||
if GetTarget() == 'darwin':
|
||||
TargetAdd('libp3direct.dll', input='p3showbase_showBase_assist.obj')
|
||||
TargetAdd('libp3direct.dll', input='libp3showbase_igate.obj')
|
||||
TargetAdd('libp3direct.dll', input='p3deadrec_composite1.obj')
|
||||
TargetAdd('libp3direct.dll', input='libp3deadrec_igate.obj')
|
||||
TargetAdd('libp3direct.dll', input='p3interval_composite1.obj')
|
||||
TargetAdd('libp3direct.dll', input='libp3interval_igate.obj')
|
||||
TargetAdd('libp3direct.dll', input='p3distributed_config_distributed.obj')
|
||||
TargetAdd('libp3direct.dll', input='p3distributed_cConnectionRepository.obj')
|
||||
TargetAdd('libp3direct.dll', input='p3distributed_cDistributedSmoothNodeBase.obj')
|
||||
TargetAdd('libp3direct.dll', input='libp3distributed_igate.obj')
|
||||
TargetAdd('libp3direct.dll', input=COMMON_PANDA_LIBS)
|
||||
TargetAdd('libp3direct.dll', opts=['ADVAPI', 'OPENSSL', 'WINUSER', 'WINGDI'])
|
||||
|
||||
|
|
@ -4634,6 +4718,12 @@ if (PkgSkip("DIRECT")==0):
|
|||
TargetAdd('direct_module.obj', opts=OPTS)
|
||||
TargetAdd('direct_module.obj', opts=['IMOD:panda3d.direct', 'ILIB:direct'])
|
||||
|
||||
TargetAdd('direct.pyd', input='libp3dcparser_igate.obj')
|
||||
TargetAdd('direct.pyd', input='libp3showbase_igate.obj')
|
||||
TargetAdd('direct.pyd', input='libp3deadrec_igate.obj')
|
||||
TargetAdd('direct.pyd', input='libp3interval_igate.obj')
|
||||
TargetAdd('direct.pyd', input='libp3distributed_igate.obj')
|
||||
|
||||
TargetAdd('direct.pyd', input='direct_module.obj')
|
||||
TargetAdd('direct.pyd', input='libp3direct.dll')
|
||||
TargetAdd('direct.pyd', input='core.pyd')
|
||||
|
|
@ -5255,9 +5345,8 @@ if (PkgSkip("PANDATOOL")==0):
|
|||
|
||||
if (PkgSkip("PANDATOOL")==0):
|
||||
OPTS=['DIR:pandatool/src/flt', 'ZLIB']
|
||||
TargetAdd('p3flt_fltVectorRecord.obj', opts=OPTS, input='fltVectorRecord.cxx')
|
||||
TargetAdd('p3flt_composite1.obj', opts=OPTS, input='p3flt_composite1.cxx')
|
||||
TargetAdd('libp3flt.lib', input=['p3flt_fltVectorRecord.obj', 'p3flt_composite1.obj'])
|
||||
TargetAdd('libp3flt.lib', input=['p3flt_composite1.obj'])
|
||||
|
||||
#
|
||||
# DIRECTORY: pandatool/src/fltegg/
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
standardMunger.I standardMunger.h \
|
||||
config_display.h \
|
||||
$[if $[HAVE_PYTHON], pythonGraphicsWindowProc.h] \
|
||||
$[if $[HAVE_PYTHON], pythonGraphicsWindowProc.cxx] \
|
||||
callbackGraphicsWindow.I callbackGraphicsWindow.h \
|
||||
drawableRegion.I drawableRegion.h \
|
||||
displayRegion.I displayRegion.h \
|
||||
|
|
@ -54,7 +55,6 @@
|
|||
#define INCLUDED_SOURCES \
|
||||
standardMunger.cxx \
|
||||
config_display.cxx \
|
||||
$[if $[HAVE_PYTHON], pythonGraphicsWindowProc.cxx] \
|
||||
callbackGraphicsWindow.cxx \
|
||||
drawableRegion.cxx \
|
||||
displayRegion.cxx \
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ protected:
|
|||
PUBLISHED:
|
||||
virtual ~CallbackGraphicsWindow();
|
||||
|
||||
class WindowCallbackData : public CallbackData {
|
||||
class EXPCL_PANDA_DISPLAY WindowCallbackData : public CallbackData {
|
||||
public:
|
||||
INLINE WindowCallbackData(CallbackGraphicsWindow *window);
|
||||
|
||||
|
|
@ -68,8 +68,7 @@ PUBLISHED:
|
|||
static TypeHandle _type_handle;
|
||||
};
|
||||
|
||||
|
||||
class EventsCallbackData : public WindowCallbackData {
|
||||
class EXPCL_PANDA_DISPLAY EventsCallbackData : public WindowCallbackData {
|
||||
public:
|
||||
INLINE EventsCallbackData(CallbackGraphicsWindow *window);
|
||||
|
||||
|
|
@ -94,7 +93,7 @@ PUBLISHED:
|
|||
static TypeHandle _type_handle;
|
||||
};
|
||||
|
||||
class PropertiesCallbackData : public WindowCallbackData {
|
||||
class EXPCL_PANDA_DISPLAY PropertiesCallbackData : public WindowCallbackData {
|
||||
public:
|
||||
INLINE PropertiesCallbackData(CallbackGraphicsWindow *window, WindowProperties &properties);
|
||||
|
||||
|
|
@ -131,7 +130,7 @@ PUBLISHED:
|
|||
RCT_end_flip,
|
||||
};
|
||||
|
||||
class RenderCallbackData : public WindowCallbackData {
|
||||
class EXPCL_PANDA_DISPLAY RenderCallbackData : public WindowCallbackData {
|
||||
public:
|
||||
INLINE RenderCallbackData(CallbackGraphicsWindow *window, RenderCallbackType callback_type, FrameMode frame_mode);
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
#ifdef HAVE_PYTHON
|
||||
|
||||
#ifndef CPPPARSER
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_Texture;
|
||||
extern struct Dtool_PyTypedObject Dtool_Texture;
|
||||
#endif
|
||||
|
||||
static bool traverse_callback(TextureContext *tc, void *data) {
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ class GraphicsWindow;
|
|||
// Description : Defines an interface for storing platform-specific
|
||||
// window processor methods.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
class GraphicsWindowProc{
|
||||
class EXPCL_PANDA_DISPLAY GraphicsWindowProc {
|
||||
public:
|
||||
GraphicsWindowProc();
|
||||
#if defined(__WIN32__) || defined(_WIN32)
|
||||
|
|
|
|||
|
|
@ -4,9 +4,6 @@
|
|||
#include "graphicsWindow.cxx"
|
||||
#include "graphicsWindowProc.cxx"
|
||||
#include "graphicsWindowProcCallbackData.cxx"
|
||||
#ifdef HAVE_PYTHON
|
||||
#include "pythonGraphicsWindowProc.cxx"
|
||||
#endif
|
||||
#include "graphicsWindowInputDevice.cxx"
|
||||
#include "lru.cxx"
|
||||
#include "nativeWindowHandle.cxx"
|
||||
|
|
|
|||
|
|
@ -35,12 +35,8 @@ class URLSpec;
|
|||
// authorization requests in the past, which can
|
||||
// possibly be re-used for future requests to the same
|
||||
// server.
|
||||
//
|
||||
// This class does not need to be exported from the DLL
|
||||
// because it has no public interface; it is simply a
|
||||
// helper class for HTTPChannel.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
class HTTPAuthorization : public ReferenceCount {
|
||||
class EXPCL_PANDAEXPRESS HTTPAuthorization : public ReferenceCount {
|
||||
public:
|
||||
typedef pmap<string, string> Tokens;
|
||||
typedef pmap<string, Tokens> AuthenticationSchemes;
|
||||
|
|
|
|||
|
|
@ -36,10 +36,10 @@ extern EXPCL_PANDA void init_libdxml();
|
|||
class TiXmlDocument;
|
||||
class TiXmlNode;
|
||||
BEGIN_PUBLISH
|
||||
TiXmlDocument *read_xml_stream(istream &in);
|
||||
void write_xml_stream(ostream &out, TiXmlDocument *doc);
|
||||
void print_xml(TiXmlNode *xnode);
|
||||
void print_xml_to_file(const Filename &filename, TiXmlNode *xnode);
|
||||
EXPCL_PANDA TiXmlDocument *read_xml_stream(istream &in);
|
||||
EXPCL_PANDA void write_xml_stream(ostream &out, TiXmlDocument *doc);
|
||||
EXPCL_PANDA void print_xml(TiXmlNode *xnode);
|
||||
EXPCL_PANDA void print_xml_to_file(const Filename &filename, TiXmlNode *xnode);
|
||||
END_PUBLISH
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ const int TIXML_PATCH_VERSION = 1;
|
|||
/* Internal structure for tracking location of items
|
||||
in the XML file.
|
||||
*/
|
||||
struct TiXmlCursor
|
||||
struct EXPCL_PANDA TiXmlCursor
|
||||
{
|
||||
TiXmlCursor() { Clear(); }
|
||||
void Clear() { row = col = -1; }
|
||||
|
|
@ -125,7 +125,7 @@ struct TiXmlCursor
|
|||
|
||||
@sa TiXmlNode::Accept()
|
||||
*/
|
||||
class TiXmlVisitor
|
||||
class EXPCL_PANDA TiXmlVisitor
|
||||
{
|
||||
public:
|
||||
virtual ~TiXmlVisitor() {}
|
||||
|
|
@ -191,7 +191,7 @@ const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN;
|
|||
A Decleration contains: Attributes (not on tree)
|
||||
@endverbatim
|
||||
*/
|
||||
class TiXmlBase
|
||||
class EXPCL_PANDA TiXmlBase
|
||||
{
|
||||
friend class TiXmlNode;
|
||||
friend class TiXmlElement;
|
||||
|
|
@ -420,7 +420,7 @@ private:
|
|||
in a document, or stand on its own. The type of a TiXmlNode
|
||||
can be queried, and it can be cast to its more defined type.
|
||||
*/
|
||||
class TiXmlNode : public TiXmlBase
|
||||
class EXPCL_PANDA TiXmlNode : public TiXmlBase
|
||||
{
|
||||
friend class TiXmlDocument;
|
||||
friend class TiXmlElement;
|
||||
|
|
@ -776,7 +776,7 @@ private:
|
|||
part of the tinyXML document object model. There are other
|
||||
suggested ways to look at this problem.
|
||||
*/
|
||||
class TiXmlAttribute : public TiXmlBase
|
||||
class EXPCL_PANDA TiXmlAttribute : public TiXmlBase
|
||||
{
|
||||
friend class TiXmlAttributeSet;
|
||||
|
||||
|
|
@ -900,7 +900,7 @@ private:
|
|||
- I like circular lists
|
||||
- it demonstrates some independence from the (typical) doubly linked list.
|
||||
*/
|
||||
class TiXmlAttributeSet
|
||||
class EXPCL_PANDA TiXmlAttributeSet
|
||||
{
|
||||
public:
|
||||
TiXmlAttributeSet();
|
||||
|
|
@ -937,7 +937,7 @@ private:
|
|||
and can contain other elements, text, comments, and unknowns.
|
||||
Elements also contain an arbitrary number of attributes.
|
||||
*/
|
||||
class TiXmlElement : public TiXmlNode
|
||||
class EXPCL_PANDA TiXmlElement : public TiXmlNode
|
||||
{
|
||||
public:
|
||||
/// Construct an element.
|
||||
|
|
@ -1152,7 +1152,7 @@ private:
|
|||
|
||||
/** An XML comment.
|
||||
*/
|
||||
class TiXmlComment : public TiXmlNode
|
||||
class EXPCL_PANDA TiXmlComment : public TiXmlNode
|
||||
{
|
||||
public:
|
||||
/// Constructs an empty comment.
|
||||
|
|
@ -1202,7 +1202,7 @@ private:
|
|||
you generally want to leave it alone, but you can change the output mode with
|
||||
SetCDATA() and query it with CDATA().
|
||||
*/
|
||||
class TiXmlText : public TiXmlNode
|
||||
class EXPCL_PANDA TiXmlText : public TiXmlNode
|
||||
{
|
||||
friend class TiXmlElement;
|
||||
public:
|
||||
|
|
@ -1275,7 +1275,7 @@ private:
|
|||
handled as special cases, not generic attributes, simply
|
||||
because there can only be at most 3 and they are always the same.
|
||||
*/
|
||||
class TiXmlDeclaration : public TiXmlNode
|
||||
class EXPCL_PANDA TiXmlDeclaration : public TiXmlNode
|
||||
{
|
||||
public:
|
||||
/// Construct an empty declaration.
|
||||
|
|
@ -1344,7 +1344,7 @@ private:
|
|||
|
||||
DTD tags get thrown into TiXmlUnknowns.
|
||||
*/
|
||||
class TiXmlUnknown : public TiXmlNode
|
||||
class EXPCL_PANDA TiXmlUnknown : public TiXmlNode
|
||||
{
|
||||
public:
|
||||
TiXmlUnknown() : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) {}
|
||||
|
|
@ -1383,7 +1383,7 @@ private:
|
|||
XML pieces. It can be saved, loaded, and printed to the screen.
|
||||
The 'value' of a document node is the xml file name.
|
||||
*/
|
||||
class TiXmlDocument : public TiXmlNode
|
||||
class EXPCL_PANDA TiXmlDocument : public TiXmlNode
|
||||
{
|
||||
public:
|
||||
/// Create an empty document, that has no name.
|
||||
|
|
@ -1628,7 +1628,7 @@ private:
|
|||
}
|
||||
@endverbatim
|
||||
*/
|
||||
class TiXmlHandle
|
||||
class EXPCL_PANDA TiXmlHandle
|
||||
{
|
||||
public:
|
||||
/// Create a handle from any node (at any depth of the tree.) This can be a null pointer.
|
||||
|
|
@ -1727,7 +1727,7 @@ private:
|
|||
fprintf( stdout, "%s", printer.CStr() );
|
||||
@endverbatim
|
||||
*/
|
||||
class TiXmlPrinter : public TiXmlVisitor
|
||||
class EXPCL_PANDA TiXmlPrinter : public TiXmlVisitor
|
||||
{
|
||||
public:
|
||||
TiXmlPrinter() : depth( 0 ), simpleTextPrint( false ),
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
#ifdef HAVE_PYTHON
|
||||
|
||||
#ifndef CPPPARSER
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_EggNode;
|
||||
extern struct Dtool_PyTypedObject Dtool_EggNode;
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -37,7 +37,7 @@ get_children() const {
|
|||
}
|
||||
|
||||
// Fill in the list.
|
||||
int i = 0;
|
||||
size_t i = 0;
|
||||
for (it = _this->begin(); it != _this->end() && i < len; ++it) {
|
||||
EggNode *node = *it;
|
||||
node->ref();
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
genericAsyncTask.h genericAsyncTask.I \
|
||||
pointerEvent.I pointerEvent.h \
|
||||
pointerEventList.I pointerEventList.h \
|
||||
pythonTask.h pythonTask.I \
|
||||
pythonTask.h pythonTask.I pythonTask.cxx \
|
||||
event.I event.h eventHandler.h eventHandler.I \
|
||||
eventParameter.I eventParameter.h \
|
||||
eventQueue.I eventQueue.h eventReceiver.h \
|
||||
|
|
@ -38,7 +38,6 @@
|
|||
genericAsyncTask.cxx \
|
||||
pointerEvent.cxx \
|
||||
pointerEventList.cxx \
|
||||
pythonTask.cxx \
|
||||
config_event.cxx event.cxx eventHandler.cxx \
|
||||
eventParameter.cxx eventQueue.cxx eventReceiver.cxx \
|
||||
pt_Event.cxx
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@
|
|||
#include "eventParameter.h"
|
||||
#include "genericAsyncTask.h"
|
||||
#include "pointerEventList.h"
|
||||
#include "pythonTask.h"
|
||||
|
||||
#include "dconfig.h"
|
||||
|
||||
|
|
@ -45,9 +44,6 @@ ConfigureFn(config_event) {
|
|||
EventStoreInt::init_type("EventStoreInt");
|
||||
EventStoreDouble::init_type("EventStoreDouble");
|
||||
GenericAsyncTask::init_type();
|
||||
#ifdef HAVE_PYTHON
|
||||
PythonTask::init_type();
|
||||
#endif
|
||||
|
||||
ButtonEventList::register_with_read_factory();
|
||||
EventStoreInt::register_with_read_factory();
|
||||
|
|
|
|||
|
|
@ -9,4 +9,3 @@
|
|||
#include "genericAsyncTask.cxx"
|
||||
#include "pointerEvent.cxx"
|
||||
#include "pointerEventList.cxx"
|
||||
#include "pythonTask.cxx"
|
||||
|
|
|
|||
|
|
@ -17,12 +17,17 @@
|
|||
#include "config_event.h"
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
#include "py_panda.h"
|
||||
#include "py_panda.h"
|
||||
|
||||
TypeHandle PythonTask::_type_handle;
|
||||
|
||||
Configure(config_pythonTask);
|
||||
ConfigureFn(config_pythonTask) {
|
||||
PythonTask::init_type();
|
||||
}
|
||||
|
||||
#ifndef CPPPARSER
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_TypedReferenceCount;
|
||||
extern struct Dtool_PyTypedObject Dtool_TypedReferenceCount;
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
// Description : This class exists to allow association of a Python
|
||||
// function with the AsyncTaskManager.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
class EXPCL_PANDA_PIPELINE PythonTask : public AsyncTask {
|
||||
class PythonTask : public AsyncTask {
|
||||
PUBLISHED:
|
||||
PythonTask(PyObject *function = Py_None, const string &name = string());
|
||||
virtual ~PythonTask();
|
||||
|
|
|
|||
|
|
@ -534,51 +534,3 @@ get_last_byte_pos() const {
|
|||
return max(_index_start + (streampos)_index_length,
|
||||
_data_start + (streampos)_data_length) - (streampos)1;
|
||||
}
|
||||
|
||||
#ifdef HAVE_OPENSSL
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Multifile::CertRecord::Constructor
|
||||
// Access: Public
|
||||
// Description: Ownership of the X509 object is passed into the
|
||||
// CertRecord; it will be freed when the CertRecord
|
||||
// destructs.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE Multifile::CertRecord::
|
||||
CertRecord(X509 *cert) :
|
||||
_cert(cert)
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Multifile::CertRecord::Copy Constructor
|
||||
// Access: Public
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE Multifile::CertRecord::
|
||||
CertRecord(const Multifile::CertRecord ©) :
|
||||
_cert(X509_dup(copy._cert))
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Multifile::CertRecord::Destructor
|
||||
// Access: Public
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE Multifile::CertRecord::
|
||||
~CertRecord() {
|
||||
X509_free(_cert);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Multifile::CertRecord::Copy Assignment
|
||||
// Access: Public
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void Multifile::CertRecord::
|
||||
operator = (const Multifile::CertRecord &other) {
|
||||
X509_free(_cert);
|
||||
_cert = X509_dup(other._cert);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -604,6 +604,53 @@ update_subfile(const string &subfile_name, const Filename &filename,
|
|||
return name;
|
||||
}
|
||||
|
||||
#ifdef HAVE_OPENSSL
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Multifile::CertRecord::Constructor
|
||||
// Access: Public
|
||||
// Description: Ownership of the X509 object is passed into the
|
||||
// CertRecord; it will be freed when the CertRecord
|
||||
// destructs.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
Multifile::CertRecord::
|
||||
CertRecord(X509 *cert) :
|
||||
_cert(cert)
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Multifile::CertRecord::Copy Constructor
|
||||
// Access: Public
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
Multifile::CertRecord::
|
||||
CertRecord(const Multifile::CertRecord ©) :
|
||||
_cert(X509_dup(copy._cert))
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Multifile::CertRecord::Destructor
|
||||
// Access: Public
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
Multifile::CertRecord::
|
||||
~CertRecord() {
|
||||
X509_free(_cert);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Multifile::CertRecord::Copy Assignment
|
||||
// Access: Public
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void Multifile::CertRecord::
|
||||
operator = (const Multifile::CertRecord &other) {
|
||||
X509_free(_cert);
|
||||
_cert = X509_dup(other._cert);
|
||||
}
|
||||
#endif // HAVE_OPENSSL
|
||||
|
||||
#ifdef HAVE_OPENSSL
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Multifile::add_signature
|
||||
|
|
|
|||
|
|
@ -84,12 +84,12 @@ PUBLISHED:
|
|||
int compression_level);
|
||||
|
||||
#ifdef HAVE_OPENSSL
|
||||
class CertRecord {
|
||||
class EXPCL_PANDAEXPRESS CertRecord {
|
||||
public:
|
||||
INLINE CertRecord(X509 *cert);
|
||||
INLINE CertRecord(const CertRecord ©);
|
||||
INLINE ~CertRecord();
|
||||
INLINE void operator = (const CertRecord &other);
|
||||
CertRecord(X509 *cert);
|
||||
CertRecord(const CertRecord ©);
|
||||
~CertRecord();
|
||||
void operator = (const CertRecord &other);
|
||||
X509 *_cert;
|
||||
};
|
||||
typedef pvector<CertRecord> CertChain;
|
||||
|
|
|
|||
|
|
@ -23,8 +23,9 @@
|
|||
|
||||
BEGIN_PUBLISH
|
||||
|
||||
string password_hash(const string &password, const string &salt,
|
||||
int iters, int keylen);
|
||||
EXPCL_PANDAEXPRESS string password_hash(const string &password,
|
||||
const string &salt,
|
||||
int iters, int keylen);
|
||||
|
||||
END_PUBLISH
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ PointerToArray(TypeHandle type_handle) :
|
|||
// Description: Return an empty array of size n
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE PointerToArray<Element>
|
||||
INLINE PointerToArray<Element>
|
||||
PointerToArray<Element>::empty_array(size_type n, TypeHandle type_handle) {
|
||||
PointerToArray<Element> temp(type_handle);
|
||||
temp.reassign(new ReferenceCountedVector<Element>(type_handle));
|
||||
|
|
@ -77,129 +77,6 @@ PointerToArray(const PointerToArray<Element> ©) :
|
|||
{
|
||||
}
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: PointerToArray::Constructor
|
||||
// Access: Published
|
||||
// Description: This special constructor accepts a Python list of
|
||||
// elements, or a Python string (or a bytes object,
|
||||
// in Python 3), or any object that supports the
|
||||
// Python buffer protocol.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
PointerToArray<Element>::
|
||||
PointerToArray(PyObject *self, PyObject *source) :
|
||||
PointerToArrayBase<Element>((ReferenceCountedVector<Element> *)NULL),
|
||||
_type_handle(get_type_handle(Element))
|
||||
{
|
||||
// We have to pre-initialize self's "this" pointer when we receive
|
||||
// self in the constructor--the caller can't initialize this for us.
|
||||
((Dtool_PyInstDef *)self)->_ptr_to_object = this;
|
||||
|
||||
#if PY_VERSION_HEX >= 0x02060000
|
||||
if (PyObject_CheckBuffer(source)) {
|
||||
// User passed a buffer object.
|
||||
Py_buffer view;
|
||||
if (PyObject_GetBuffer(source, &view, PyBUF_CONTIG_RO) == -1) {
|
||||
PyErr_SetString(PyExc_TypeError, "PointerToArray constructor requires a contiguous buffer");
|
||||
return;
|
||||
}
|
||||
|
||||
if (view.itemsize != 1 && view.itemsize != sizeof(Element)) {
|
||||
PyErr_SetString(PyExc_TypeError, "buffer.itemsize does not match PointerToArray element size");
|
||||
return;
|
||||
}
|
||||
|
||||
int num_elements = view.len / sizeof(Element);
|
||||
insert(begin(), num_elements, Element());
|
||||
|
||||
if (view.len > 0) {
|
||||
memcpy(p(), view.buf, view.len);
|
||||
}
|
||||
|
||||
PyBuffer_Release(&view);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!PySequence_Check(source)) {
|
||||
// If passed with a non-sequence, this isn't the right constructor.
|
||||
PyErr_SetString(PyExc_TypeError, "PointerToArray constructor requires a sequence or buffer object");
|
||||
return;
|
||||
}
|
||||
|
||||
// If we were passed a Python string, then instead of storing it
|
||||
// character-at-a-time, just load the whole string as a data
|
||||
// buffer.
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
if (PyBytes_Check(source)) {
|
||||
int size = PyBytes_Size(source);
|
||||
if (size % sizeof(Element) != 0) {
|
||||
ostringstream stream;
|
||||
stream << "Buffer not a multiple of " << sizeof(Element) << " bytes";
|
||||
string str = stream.str();
|
||||
PyErr_SetString(PyExc_ValueError, str.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
int num_elements = size / sizeof(Element);
|
||||
insert(begin(), num_elements, Element());
|
||||
|
||||
// Hope there aren't any constructors or destructors involved
|
||||
// here.
|
||||
if (size != 0) {
|
||||
const char *data = PyBytes_AsString(source);
|
||||
memcpy(p(), data, size);
|
||||
}
|
||||
return;
|
||||
}
|
||||
#else
|
||||
if (PyString_CheckExact(source)) {
|
||||
int size = PyString_Size(source);
|
||||
if (size % sizeof(Element) != 0) {
|
||||
ostringstream stream;
|
||||
stream << "Buffer not a multiple of " << sizeof(Element) << " bytes";
|
||||
string str = stream.str();
|
||||
PyErr_SetString(PyExc_ValueError, str.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
int num_elements = size / sizeof(Element);
|
||||
insert(begin(), num_elements, Element());
|
||||
|
||||
// Hope there aren't any constructors or destructors involved
|
||||
// here.
|
||||
if (size != 0) {
|
||||
const char *data = PyString_AsString(source);
|
||||
memcpy(p(), data, size);
|
||||
}
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Now construct the internal list by copying the elements
|
||||
// one-at-a-time from Python.
|
||||
int size = PySequence_Size(source);
|
||||
for (int i = 0; i < size; ++i) {
|
||||
PyObject *item = PySequence_GetItem(source, i);
|
||||
if (item == NULL) {
|
||||
return;
|
||||
}
|
||||
PyObject *result = PyObject_CallMethod(self, (char *)"pushBack", (char *)"O", item);
|
||||
Py_DECREF(item);
|
||||
if (result == NULL) {
|
||||
// Unable to add item--probably it wasn't of the appropriate type.
|
||||
ostringstream stream;
|
||||
stream << "Element " << i << " in sequence passed to PointerToArray constructor could not be added";
|
||||
string str = stream.str();
|
||||
PyErr_SetString(PyExc_TypeError, str.c_str());
|
||||
return;
|
||||
}
|
||||
Py_DECREF(result);
|
||||
}
|
||||
}
|
||||
#endif // HAVE_PYTHON
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: PointerToArray::begin
|
||||
// Access: Public
|
||||
|
|
@ -593,31 +470,6 @@ set_element(size_type n, const Element &value) {
|
|||
(*this)[n] = value;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: PointerToArray::__getitem__
|
||||
// Access: Published
|
||||
// Description: Same as get_element(), this returns the nth element
|
||||
// of the array.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE const Element &PointerToArray<Element>::
|
||||
__getitem__(size_type n) const {
|
||||
return (*this)[n];
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: PointerToArray::__setitem__
|
||||
// Access: Published
|
||||
// Description: Same as set_element(), this replaces the nth element
|
||||
// of the array.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE void PointerToArray<Element>::
|
||||
__setitem__(size_type n, const Element &value) {
|
||||
nassertv(n < ((To *)(this->_void_ptr))->size());
|
||||
(*this)[n] = value;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: PointerToArray::get_data
|
||||
// Access: Published
|
||||
|
|
@ -884,23 +736,6 @@ ConstPointerToArray(const ConstPointerToArray<Element> ©) :
|
|||
{
|
||||
}
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ConstPointerToArray::Constructor
|
||||
// Access: Public
|
||||
// Description: This special constructor accepts a Python list of
|
||||
// elements, or a Python string (or a bytes object,
|
||||
// in Python 3).
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE ConstPointerToArray<Element>::
|
||||
ConstPointerToArray(PyObject *self, PyObject *source) :
|
||||
PointerToArrayBase<Element>(PointerToArray<Element>(self, source)),
|
||||
_type_handle(get_type_handle(Element))
|
||||
{
|
||||
}
|
||||
#endif // HAVE_PYTHON
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ConstPointerToArray::begin
|
||||
// Access: Public
|
||||
|
|
@ -1158,18 +993,6 @@ get_element(size_type n) const {
|
|||
return (*this)[n];
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ConstPointerToArray::__getitem__
|
||||
// Access: Published
|
||||
// Description: Same as get_element(), this returns the nth element
|
||||
// of the array.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE const Element &ConstPointerToArray<Element>::
|
||||
__getitem__(size_type n) const {
|
||||
return (*this)[n];
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ConstPointerToArray::get_data
|
||||
// Access: Published
|
||||
|
|
@ -1331,150 +1154,4 @@ clear() {
|
|||
((ConstPointerToArray<Element> *)this)->reassign((ReferenceCountedVector<Element> *)NULL);
|
||||
}
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
#if PY_VERSION_HEX >= 0x02060000
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: PointerToArray::__getbuffer__
|
||||
// Access: Published
|
||||
// Description: This is used to implement the buffer protocol, in
|
||||
// order to allow efficient access to the array data
|
||||
// through a Python multiview object.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE int PointerToArray<Element>::
|
||||
__getbuffer__(PyObject *self, Py_buffer *view, int flags) {
|
||||
|
||||
const char *format = get_format_code(Element);
|
||||
if (format == NULL) {
|
||||
// Not supported.
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (self != NULL) {
|
||||
Py_INCREF(self);
|
||||
}
|
||||
view->obj = self;
|
||||
view->buf = (void*) p();
|
||||
view->len = size() * sizeof(Element);
|
||||
view->readonly = 0;
|
||||
view->itemsize = sizeof(Element);
|
||||
view->format = NULL;
|
||||
if ((flags & PyBUF_FORMAT) == PyBUF_FORMAT) {
|
||||
view->format = (char*) format;
|
||||
}
|
||||
view->ndim = 1;
|
||||
view->shape = NULL;
|
||||
if ((flags & PyBUF_ND) == PyBUF_ND) {
|
||||
// This leaks, which sucks, but __releasebuffer__ doesn't give us
|
||||
// the same pointer, so we would need to store it elsewhere if we
|
||||
// wanted to delete it there. Eh, it's just an int, who cares.
|
||||
view->shape = new Py_ssize_t(size());
|
||||
}
|
||||
view->strides = NULL;
|
||||
if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES) {
|
||||
view->strides = &(view->itemsize);
|
||||
}
|
||||
view->suboffsets = NULL;
|
||||
|
||||
// Store a reference to ourselves on the Py_buffer object
|
||||
// as a reminder that we have increased our refcount.
|
||||
ref();
|
||||
view->internal = (void*) this;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: PointerToArray::__releasebuffer__
|
||||
// Access: Published
|
||||
// Description: Releases the buffer allocated by __getbuffer__.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE void PointerToArray<Element>::
|
||||
__releasebuffer__(PyObject *self, Py_buffer *view) const {
|
||||
// Note: PyBuffer_Release automatically decrements view->obj.
|
||||
|
||||
if (view->internal != NULL) {
|
||||
// Oh, right, let's not forget to unref this.
|
||||
((const PointerToArray<Element> *) view->internal)->unref();
|
||||
view->internal = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ConstPointerToArray::__getbuffer__
|
||||
// Access: Published
|
||||
// Description: This is used to implement the buffer protocol, in
|
||||
// order to allow efficient access to the array data
|
||||
// through a Python multiview object.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE int ConstPointerToArray<Element>::
|
||||
__getbuffer__(PyObject *self, Py_buffer *view, int flags) const {
|
||||
|
||||
if ((flags & PyBUF_WRITABLE) == PyBUF_WRITABLE) {
|
||||
PyErr_SetString(PyExc_BufferError,
|
||||
"Object is not writable.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
const char *format = get_format_code(Element);
|
||||
if (format == NULL) {
|
||||
// Not supported.
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (self != NULL) {
|
||||
Py_INCREF(self);
|
||||
}
|
||||
view->obj = self;
|
||||
view->buf = (void*) p();
|
||||
view->len = size() * sizeof(Element);
|
||||
view->readonly = 1;
|
||||
view->itemsize = sizeof(Element);
|
||||
view->format = NULL;
|
||||
if ((flags & PyBUF_FORMAT) == PyBUF_FORMAT) {
|
||||
view->format = (char*) format;
|
||||
}
|
||||
view->ndim = 1;
|
||||
view->shape = NULL;
|
||||
if ((flags & PyBUF_ND) == PyBUF_ND) {
|
||||
// This leaks, which sucks, but __releasebuffer__ doesn't give us
|
||||
// the same pointer, so we would need to store it elsewhere if we
|
||||
// wanted to delete it there. Eh, it's just an int, who cares.
|
||||
view->shape = new Py_ssize_t(size());
|
||||
}
|
||||
view->strides = NULL;
|
||||
if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES) {
|
||||
view->strides = &(view->itemsize);
|
||||
}
|
||||
view->suboffsets = NULL;
|
||||
|
||||
// Store a reference to ourselves on the Py_buffer object
|
||||
// as a reminder that we have increased our refcount.
|
||||
ref();
|
||||
view->internal = (void*) this;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ConstPointerToArray::__releasebuffer__
|
||||
// Access: Published
|
||||
// Description: Releases the buffer allocated by __getbuffer__.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE void ConstPointerToArray<Element>::
|
||||
__releasebuffer__(PyObject *self, Py_buffer *view) const {
|
||||
// Note: PyBuffer_Release automatically decrements obj->view.
|
||||
|
||||
if (view->internal != NULL) {
|
||||
// Oh, right, let's not forget to unref this.
|
||||
((const PointerToArray<Element> *) view->internal)->unref();
|
||||
view->internal = NULL;
|
||||
}
|
||||
}
|
||||
#endif // PY_VERSION_HEX
|
||||
#endif // HAVE_PYTHON
|
||||
|
||||
#endif // CPPPARSER
|
||||
|
|
|
|||
|
|
@ -67,9 +67,6 @@
|
|||
#include "pandabase.h"
|
||||
|
||||
#include "pointerToArrayBase.h"
|
||||
#ifdef HAVE_PYTHON
|
||||
#include "py_panda.h"
|
||||
#endif
|
||||
|
||||
#if (defined(WIN32_VC) || defined(WIN64_VC)) && !defined(__INTEL_COMPILER)
|
||||
// disable mysterious MSVC warning for static inline PTA::empty_array method
|
||||
|
|
@ -112,17 +109,15 @@ PUBLISHED:
|
|||
INLINE static PointerToArray<Element> empty_array(size_type n, TypeHandle type_handle = get_type_handle(Element));
|
||||
INLINE PointerToArray(const PointerToArray<Element> ©);
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
PointerToArray(PyObject *self, PyObject *source);
|
||||
#endif
|
||||
EXTENSION(PointerToArray(PyObject *self, PyObject *source));
|
||||
|
||||
INLINE size_type size() const;
|
||||
INLINE void push_back(const Element &x);
|
||||
INLINE void pop_back();
|
||||
INLINE const Element &get_element(size_type n) const;
|
||||
INLINE void set_element(size_type n, const Element &value);
|
||||
INLINE const Element &__getitem__(size_type n) const;
|
||||
INLINE void __setitem__(size_type n, const Element &value);
|
||||
EXTENSION(const Element &__getitem__(size_type n) const);
|
||||
EXTENSION(void __setitem__(size_type n, const Element &value));
|
||||
INLINE string get_data() const;
|
||||
INLINE void set_data(const string &data);
|
||||
INLINE string get_subdata(size_type n, size_type count) const;
|
||||
|
|
@ -132,8 +127,8 @@ PUBLISHED:
|
|||
|
||||
#ifdef HAVE_PYTHON
|
||||
#if PY_VERSION_HEX >= 0x02060000
|
||||
int __getbuffer__(PyObject *self, Py_buffer *view, int flags);
|
||||
void __releasebuffer__(PyObject *self, Py_buffer *view) const;
|
||||
EXTENSION(int __getbuffer__(PyObject *self, Py_buffer *view, int flags));
|
||||
EXTENSION(void __releasebuffer__(PyObject *self, Py_buffer *view) const);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
@ -156,10 +151,6 @@ public:
|
|||
INLINE PointerToArray(size_type n, const Element &value, TypeHandle type_handle = get_type_handle(Element));
|
||||
INLINE PointerToArray(const PointerToArray<Element> ©);
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
PointerToArray(PyObject *self, PyObject *source);
|
||||
#endif
|
||||
|
||||
public:
|
||||
// Duplicating the interface of vector. The following member
|
||||
// functions are all const, because they do not reassign the
|
||||
|
|
@ -213,8 +204,6 @@ public:
|
|||
// Methods to help out Python and other high-level languages.
|
||||
INLINE const Element &get_element(size_type n) const;
|
||||
INLINE void set_element(size_type n, const Element &value);
|
||||
INLINE const Element &__getitem__(size_type n) const;
|
||||
INLINE void __setitem__(size_type n, const Element &value);
|
||||
INLINE string get_data() const;
|
||||
INLINE void set_data(const string &data);
|
||||
INLINE string get_subdata(size_type n, size_type count) const;
|
||||
|
|
@ -237,13 +226,6 @@ public:
|
|||
INLINE void node_ref() const;
|
||||
INLINE bool node_unref() const;
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
#if PY_VERSION_HEX >= 0x02060000
|
||||
int __getbuffer__(PyObject *self, Py_buffer *view, int flags);
|
||||
void __releasebuffer__(PyObject *self, Py_buffer *view) const;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Reassignment is by pointer, not memberwise as with a vector.
|
||||
INLINE PointerToArray<Element> &
|
||||
operator = (ReferenceCountedVector<Element> *ptr);
|
||||
|
|
@ -283,14 +265,12 @@ PUBLISHED:
|
|||
INLINE ConstPointerToArray(const PointerToArray<Element> ©);
|
||||
INLINE ConstPointerToArray(const ConstPointerToArray<Element> ©);
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
INLINE ConstPointerToArray(PyObject *self, PyObject *source);
|
||||
#endif
|
||||
EXTENSION(ConstPointerToArray(PyObject *self, PyObject *source));
|
||||
|
||||
typedef TYPENAME pvector<Element>::size_type size_type;
|
||||
INLINE size_type size() const;
|
||||
INLINE const Element &get_element(size_type n) const;
|
||||
INLINE const Element &__getitem__(size_type n) const;
|
||||
EXTENSION(const Element &__getitem__(size_type n) const);
|
||||
INLINE string get_data() const;
|
||||
INLINE string get_subdata(size_type n, size_type count) const;
|
||||
INLINE int get_ref_count() const;
|
||||
|
|
@ -298,8 +278,8 @@ PUBLISHED:
|
|||
|
||||
#ifdef HAVE_PYTHON
|
||||
#if PY_VERSION_HEX >= 0x02060000
|
||||
int __getbuffer__(PyObject *self, Py_buffer *view, int flags) const;
|
||||
void __releasebuffer__(PyObject *self, Py_buffer *view) const;
|
||||
EXTENSION(int __getbuffer__(PyObject *self, Py_buffer *view, int flags) const);
|
||||
EXTENSION(void __releasebuffer__(PyObject *self, Py_buffer *view) const);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
@ -325,10 +305,6 @@ PUBLISHED:
|
|||
INLINE ConstPointerToArray(const PointerToArray<Element> ©);
|
||||
INLINE ConstPointerToArray(const ConstPointerToArray<Element> ©);
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
INLINE ConstPointerToArray(PyObject *self, PyObject *source);
|
||||
#endif
|
||||
|
||||
// Duplicating the interface of vector.
|
||||
|
||||
INLINE iterator begin() const;
|
||||
|
|
@ -361,7 +337,6 @@ PUBLISHED:
|
|||
|
||||
// Methods to help out Python and other high-level languages.
|
||||
INLINE const Element &get_element(size_type n) const;
|
||||
INLINE const Element &__getitem__(size_type n) const;
|
||||
INLINE string get_data() const;
|
||||
INLINE string get_subdata(size_type n, size_type count) const;
|
||||
|
||||
|
|
@ -373,13 +348,6 @@ PUBLISHED:
|
|||
INLINE void node_ref() const;
|
||||
INLINE bool node_unref() const;
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
#if PY_VERSION_HEX >= 0x02060000
|
||||
int __getbuffer__(PyObject *self, Py_buffer *view, int flags) const;
|
||||
void __releasebuffer__(PyObject *self, Py_buffer *view) const;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Reassignment is by pointer, not memberwise as with a vector.
|
||||
INLINE ConstPointerToArray<Element> &
|
||||
operator = (ReferenceCountedVector<Element> *ptr);
|
||||
|
|
@ -408,36 +376,6 @@ private:
|
|||
#define PTA(type) PointerToArray< type >
|
||||
#define CPTA(type) ConstPointerToArray< type >
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
// This macro is used to map a data type to a format code
|
||||
// as used in the Python 'struct' and 'array' modules.
|
||||
#define get_format_code(type) _get_format_code((const type *)0)
|
||||
#define define_format_code(code, type) template<> \
|
||||
INLINE const char *_get_format_code(const type *) { \
|
||||
return code; \
|
||||
}
|
||||
|
||||
template<class T>
|
||||
INLINE const char *_get_format_code(const T *) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
define_format_code("c", char);
|
||||
define_format_code("b", signed char);
|
||||
define_format_code("B", unsigned char);
|
||||
define_format_code("h", short);
|
||||
define_format_code("H", unsigned short);
|
||||
define_format_code("i", int);
|
||||
define_format_code("I", unsigned int);
|
||||
define_format_code("l", long);
|
||||
define_format_code("L", unsigned long);
|
||||
define_format_code("q", long long);
|
||||
define_format_code("Q", unsigned long long);
|
||||
define_format_code("f", float);
|
||||
define_format_code("d", double);
|
||||
|
||||
#endif // HAVE_PYTHON
|
||||
|
||||
#include "pointerToArray.I"
|
||||
|
||||
#endif // HAVE_POINTERTOARRAY_H
|
||||
|
|
|
|||
|
|
@ -0,0 +1,326 @@
|
|||
// Filename: pointerToArray_ext.I
|
||||
// Created by: rdb (08Feb15)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) Carnegie Mellon University. All rights reserved.
|
||||
//
|
||||
// All use of this software is subject to the terms of the revised BSD
|
||||
// license. You should have received a copy of this license along
|
||||
// with this source code in a file named "LICENSE."
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: PointerToArray::__init__
|
||||
// Access: Published
|
||||
// Description: This special constructor accepts a Python list of
|
||||
// elements, or a Python string (or a bytes object,
|
||||
// in Python 3), or any object that supports the
|
||||
// Python buffer protocol.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
void Extension<PointerToArray<Element> >::
|
||||
__init__(PyObject *self, PyObject *source) {
|
||||
// We have to pre-initialize self's "this" pointer when we receive
|
||||
// self in the constructor--the caller can't initialize this for us.
|
||||
new (this->_this) PointerToArray<Element>(get_type_handle(Element));
|
||||
((Dtool_PyInstDef *)self)->_ptr_to_object = this->_this;
|
||||
|
||||
#if PY_VERSION_HEX >= 0x02060000
|
||||
if (PyObject_CheckBuffer(source)) {
|
||||
// User passed a buffer object.
|
||||
Py_buffer view;
|
||||
if (PyObject_GetBuffer(source, &view, PyBUF_CONTIG_RO) == -1) {
|
||||
PyErr_SetString(PyExc_TypeError, "PointerToArray constructor requires a contiguous buffer");
|
||||
return;
|
||||
}
|
||||
|
||||
if (view.itemsize != 1 && view.itemsize != sizeof(Element)) {
|
||||
PyErr_SetString(PyExc_TypeError, "buffer.itemsize does not match PointerToArray element size");
|
||||
return;
|
||||
}
|
||||
|
||||
int num_elements = view.len / sizeof(Element);
|
||||
this->_this->insert(this->_this->begin(), num_elements, Element());
|
||||
|
||||
if (view.len > 0) {
|
||||
memcpy(this->_this->p(), view.buf, view.len);
|
||||
}
|
||||
|
||||
PyBuffer_Release(&view);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!PySequence_Check(source)) {
|
||||
// If passed with a non-sequence, this isn't the right constructor.
|
||||
PyErr_SetString(PyExc_TypeError, "PointerToArray constructor requires a sequence or buffer object");
|
||||
return;
|
||||
}
|
||||
|
||||
// If we were passed a Python string, then instead of storing it
|
||||
// character-at-a-time, just load the whole string as a data
|
||||
// buffer.
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
if (PyBytes_Check(source)) {
|
||||
int size = PyBytes_Size(source);
|
||||
if (size % sizeof(Element) != 0) {
|
||||
ostringstream stream;
|
||||
stream << "Buffer not a multiple of " << sizeof(Element) << " bytes";
|
||||
string str = stream.str();
|
||||
PyErr_SetString(PyExc_ValueError, str.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
int num_elements = size / sizeof(Element);
|
||||
this->_this->insert(this->_this->begin(), num_elements, Element());
|
||||
|
||||
// Hope there aren't any constructors or destructors involved
|
||||
// here.
|
||||
if (size != 0) {
|
||||
const char *data = PyBytes_AsString(source);
|
||||
memcpy(this->_this->p(), data, size);
|
||||
}
|
||||
return;
|
||||
}
|
||||
#else
|
||||
if (PyString_CheckExact(source)) {
|
||||
int size = PyString_Size(source);
|
||||
if (size % sizeof(Element) != 0) {
|
||||
ostringstream stream;
|
||||
stream << "Buffer not a multiple of " << sizeof(Element) << " bytes";
|
||||
string str = stream.str();
|
||||
PyErr_SetString(PyExc_ValueError, str.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
int num_elements = size / sizeof(Element);
|
||||
this->_this->insert(this->_this->begin(), num_elements, Element());
|
||||
|
||||
// Hope there aren't any constructors or destructors involved
|
||||
// here.
|
||||
if (size != 0) {
|
||||
const char *data = PyString_AsString(source);
|
||||
memcpy(this->_this->p(), data, size);
|
||||
}
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Now construct the internal list by copying the elements
|
||||
// one-at-a-time from Python.
|
||||
int size = PySequence_Size(source);
|
||||
for (int i = 0; i < size; ++i) {
|
||||
PyObject *item = PySequence_GetItem(source, i);
|
||||
if (item == NULL) {
|
||||
return;
|
||||
}
|
||||
PyObject *result = PyObject_CallMethod(self, (char *)"push_back", (char *)"O", item);
|
||||
Py_DECREF(item);
|
||||
if (result == NULL) {
|
||||
// Unable to add item--probably it wasn't of the appropriate type.
|
||||
ostringstream stream;
|
||||
stream << "Element " << i << " in sequence passed to PointerToArray constructor could not be added";
|
||||
string str = stream.str();
|
||||
PyErr_SetString(PyExc_TypeError, str.c_str());
|
||||
return;
|
||||
}
|
||||
Py_DECREF(result);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: PointerToArray::__getitem__
|
||||
// Access: Published
|
||||
// Description: Same as get_element(), this returns the nth element
|
||||
// of the array.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE const Element &Extension<PointerToArray<Element> >::
|
||||
__getitem__(size_t n) const {
|
||||
return this->_this->get_element(n);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: PointerToArray::__setitem__
|
||||
// Access: Published
|
||||
// Description: Same as set_element(), this replaces the nth element
|
||||
// of the array.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE void Extension<PointerToArray<Element> >::
|
||||
__setitem__(size_t n, const Element &value) {
|
||||
this->_this->set_element(n, value);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ConstPointerToArray::__init__
|
||||
// Access: Public
|
||||
// Description: This special constructor accepts a Python list of
|
||||
// elements, or a Python string (or a bytes object,
|
||||
// in Python 3).
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE void Extension<ConstPointerToArray<Element> >::
|
||||
__init__(PyObject *self, PyObject *source) {
|
||||
new (this->_this) ConstPointerToArray<Element>(get_type_handle(Element));
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ConstPointerToArray::__getitem__
|
||||
// Access: Published
|
||||
// Description: Same as get_element(), this returns the nth element
|
||||
// of the array.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE const Element &Extension<ConstPointerToArray<Element> >::
|
||||
__getitem__(size_t n) const {
|
||||
return (*this->_this)[n];
|
||||
}
|
||||
|
||||
#if PY_VERSION_HEX >= 0x02060000
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: PointerToArray::__getbuffer__
|
||||
// Access: Published
|
||||
// Description: This is used to implement the buffer protocol, in
|
||||
// order to allow efficient access to the array data
|
||||
// through a Python multiview object.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE int Extension<PointerToArray<Element> >::
|
||||
__getbuffer__(PyObject *self, Py_buffer *view, int flags) {
|
||||
|
||||
const char *format = get_format_code(Element);
|
||||
if (format == NULL) {
|
||||
// Not supported.
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (self != NULL) {
|
||||
Py_INCREF(self);
|
||||
}
|
||||
view->obj = self;
|
||||
view->buf = (void*) this->_this->p();
|
||||
view->len = this->_this->size() * sizeof(Element);
|
||||
view->readonly = 0;
|
||||
view->itemsize = sizeof(Element);
|
||||
view->format = NULL;
|
||||
if ((flags & PyBUF_FORMAT) == PyBUF_FORMAT) {
|
||||
view->format = (char*) format;
|
||||
}
|
||||
view->ndim = 1;
|
||||
view->shape = NULL;
|
||||
if ((flags & PyBUF_ND) == PyBUF_ND) {
|
||||
// This leaks, which sucks, but __releasebuffer__ doesn't give us
|
||||
// the same pointer, so we would need to store it elsewhere if we
|
||||
// wanted to delete it there. Eh, it's just an int, who cares.
|
||||
view->shape = new Py_ssize_t(this->_this->size());
|
||||
}
|
||||
view->strides = NULL;
|
||||
if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES) {
|
||||
view->strides = &(view->itemsize);
|
||||
}
|
||||
view->suboffsets = NULL;
|
||||
|
||||
// Store a reference to ourselves on the Py_buffer object
|
||||
// as a reminder that we have increased our refcount.
|
||||
this->_this->ref();
|
||||
view->internal = (void*) this->_this;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: PointerToArray::__releasebuffer__
|
||||
// Access: Published
|
||||
// Description: Releases the buffer allocated by __getbuffer__.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE void Extension<PointerToArray<Element> >::
|
||||
__releasebuffer__(PyObject *self, Py_buffer *view) const {
|
||||
// Note: PyBuffer_Release automatically decrements view->obj.
|
||||
|
||||
if (view->internal != NULL) {
|
||||
// Oh, right, let's not forget to unref this.
|
||||
((const PointerToArray<Element> *) view->internal)->unref();
|
||||
view->internal = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ConstPointerToArray::__getbuffer__
|
||||
// Access: Published
|
||||
// Description: This is used to implement the buffer protocol, in
|
||||
// order to allow efficient access to the array data
|
||||
// through a Python multiview object.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE int Extension<ConstPointerToArray<Element> >::
|
||||
__getbuffer__(PyObject *self, Py_buffer *view, int flags) const {
|
||||
|
||||
if ((flags & PyBUF_WRITABLE) == PyBUF_WRITABLE) {
|
||||
PyErr_SetString(PyExc_BufferError,
|
||||
"Object is not writable.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
const char *format = get_format_code(Element);
|
||||
if (format == NULL) {
|
||||
// Not supported.
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (self != NULL) {
|
||||
Py_INCREF(self);
|
||||
}
|
||||
view->obj = self;
|
||||
view->buf = (void*) this->_this->p();
|
||||
view->len = this->_this->size() * sizeof(Element);
|
||||
view->readonly = 1;
|
||||
view->itemsize = sizeof(Element);
|
||||
view->format = NULL;
|
||||
if ((flags & PyBUF_FORMAT) == PyBUF_FORMAT) {
|
||||
view->format = (char*) format;
|
||||
}
|
||||
view->ndim = 1;
|
||||
view->shape = NULL;
|
||||
if ((flags & PyBUF_ND) == PyBUF_ND) {
|
||||
// This leaks, which sucks, but __releasebuffer__ doesn't give us
|
||||
// the same pointer, so we would need to store it elsewhere if we
|
||||
// wanted to delete it there. Eh, it's just an int, who cares.
|
||||
view->shape = new Py_ssize_t(this->_this->size());
|
||||
}
|
||||
view->strides = NULL;
|
||||
if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES) {
|
||||
view->strides = &(view->itemsize);
|
||||
}
|
||||
view->suboffsets = NULL;
|
||||
|
||||
// Store a reference to ourselves on the Py_buffer object
|
||||
// as a reminder that we have increased our refcount.
|
||||
this->_this->ref();
|
||||
view->internal = (void*) this->_this;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ConstPointerToArray::__releasebuffer__
|
||||
// Access: Published
|
||||
// Description: Releases the buffer allocated by __getbuffer__.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
INLINE void Extension<ConstPointerToArray<Element> >::
|
||||
__releasebuffer__(PyObject *self, Py_buffer *view) const {
|
||||
// Note: PyBuffer_Release automatically decrements obj->view.
|
||||
|
||||
if (view->internal != NULL) {
|
||||
// Oh, right, let's not forget to unref this.
|
||||
((const PointerToArray<Element> *) view->internal)->unref();
|
||||
view->internal = NULL;
|
||||
}
|
||||
}
|
||||
#endif // PY_VERSION_HEX
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
// Filename: pointerToArray_ext.h
|
||||
// Created by: rdb (08Feb15)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) Carnegie Mellon University. All rights reserved.
|
||||
//
|
||||
// All use of this software is subject to the terms of the revised BSD
|
||||
// license. You should have received a copy of this license along
|
||||
// with this source code in a file named "LICENSE."
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef POINTERTOARRAY_EXT_H
|
||||
#define POINTERTOARRAY_EXT_H
|
||||
|
||||
#ifndef CPPPARSER
|
||||
|
||||
#include "extension.h"
|
||||
#include "py_panda.h"
|
||||
#include "pointerToArray.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Class : Extension<PointerToArray>
|
||||
// Description : This class defines the extension methods for
|
||||
// PointerToArray, which are called instead of
|
||||
// any C++ methods with the same prototype.
|
||||
//
|
||||
// This is a little bit awkward because of the nested
|
||||
// templating, but it does the job.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
class Extension<PointerToArray<Element> > : public ExtensionBase<PointerToArray<Element> > {
|
||||
public:
|
||||
INLINE void __init__(PyObject *self, PyObject *source);
|
||||
|
||||
INLINE const Element &__getitem__(size_t n) const;
|
||||
INLINE void __setitem__(size_t n, const Element &value);
|
||||
|
||||
#if PY_VERSION_HEX >= 0x02060000
|
||||
INLINE int __getbuffer__(PyObject *self, Py_buffer *view, int flags);
|
||||
INLINE void __releasebuffer__(PyObject *self, Py_buffer *view) const;
|
||||
#endif
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Class : Extension<ConstPointerToArray>
|
||||
// Description : This class defines the extension methods for
|
||||
// ConstPointerToArray, which are called instead of
|
||||
// any C++ methods with the same prototype.
|
||||
//
|
||||
// This is a little bit awkward because of the nested
|
||||
// templating, but it does the job.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
template<class Element>
|
||||
class Extension<ConstPointerToArray<Element> > : public ExtensionBase<ConstPointerToArray<Element> > {
|
||||
public:
|
||||
INLINE void __init__(PyObject *self, PyObject *source);
|
||||
|
||||
INLINE const Element &__getitem__(size_t n) const;
|
||||
|
||||
#if PY_VERSION_HEX >= 0x02060000
|
||||
INLINE int __getbuffer__(PyObject *self, Py_buffer *view, int flags) const;
|
||||
INLINE void __releasebuffer__(PyObject *self, Py_buffer *view) const;
|
||||
#endif
|
||||
};
|
||||
|
||||
// This macro is used to map a data type to a format code
|
||||
// as used in the Python 'struct' and 'array' modules.
|
||||
#define get_format_code(type) _get_format_code((const type *)0)
|
||||
#define define_format_code(code, type) template<> \
|
||||
INLINE const char *_get_format_code(const type *) { \
|
||||
return code; \
|
||||
}
|
||||
|
||||
template<class T>
|
||||
INLINE const char *_get_format_code(const T *) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
define_format_code("c", char);
|
||||
define_format_code("b", signed char);
|
||||
define_format_code("B", unsigned char);
|
||||
define_format_code("h", short);
|
||||
define_format_code("H", unsigned short);
|
||||
define_format_code("i", int);
|
||||
define_format_code("I", unsigned int);
|
||||
define_format_code("l", long);
|
||||
define_format_code("L", unsigned long);
|
||||
define_format_code("q", long long);
|
||||
define_format_code("Q", unsigned long long);
|
||||
define_format_code("f", float);
|
||||
define_format_code("d", double);
|
||||
|
||||
#include "pointerToArray_ext.I"
|
||||
|
||||
#endif // CPPPARSER
|
||||
|
||||
#endif // HAVE_POINTERTOARRAY_EXT_H
|
||||
|
|
@ -13,6 +13,7 @@
|
|||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "virtualFileSystem_ext.h"
|
||||
#include "vector_uchar.h"
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
|
||||
|
|
@ -30,7 +31,7 @@
|
|||
////////////////////////////////////////////////////////////////////
|
||||
PyObject *Extension<VirtualFileSystem>::
|
||||
read_file(const Filename &filename, bool auto_unwrap) const {
|
||||
pvector<unsigned char> pv;
|
||||
vector_uchar pv;
|
||||
bool okflag = _this->read_file(filename, pv, auto_unwrap);
|
||||
nassertr(okflag, NULL);
|
||||
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ private:
|
|||
typedef pdeque<VertexDataPage *> PendingPages;
|
||||
|
||||
class PageThreadManager;
|
||||
class PageThread : public Thread {
|
||||
class EXPCL_PANDA_GOBJ PageThread : public Thread {
|
||||
public:
|
||||
PageThread(PageThreadManager *manager, const string &name);
|
||||
|
||||
|
|
@ -132,7 +132,7 @@ private:
|
|||
};
|
||||
typedef pvector<PT(PageThread) > PageThreads;
|
||||
|
||||
class PageThreadManager : public ReferenceCount {
|
||||
class EXPCL_PANDA_GOBJ PageThreadManager : public ReferenceCount {
|
||||
public:
|
||||
PageThreadManager(int num_threads);
|
||||
void add_page(VertexDataPage *page, RamClass ram_class);
|
||||
|
|
@ -176,7 +176,7 @@ private:
|
|||
|
||||
// We build up a temporary linked list of these while deflating
|
||||
// (compressing) the vertex data in-memory.
|
||||
class DeflatePage {
|
||||
class EXPCL_PANDA_GOBJ DeflatePage {
|
||||
public:
|
||||
DeflatePage() {
|
||||
_used_size = 0;
|
||||
|
|
|
|||
|
|
@ -12,12 +12,6 @@
|
|||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef CPPPARSER
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint2);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint3);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint4);
|
||||
#endif
|
||||
|
||||
#ifdef FLOATTYPE_IS_INT
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
#define PY_FROM_FLOATTYPE PyLong_FromLong
|
||||
|
|
@ -47,6 +41,12 @@ python_repr(ostream &out, const string &class_name) const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
INLINE_LINMATH PyObject *Extension<FLOATNAME(LPoint2)>::
|
||||
__getattr__(const string &attr_name) const {
|
||||
#ifndef CPPPARSER
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint2);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint3);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint4);
|
||||
#endif
|
||||
|
||||
// Validate the attribute name.
|
||||
for (string::const_iterator it = attr_name.begin(); it < attr_name.end(); it++) {
|
||||
if (*it != 'x' && *it != 'y') {
|
||||
|
|
|
|||
|
|
@ -12,12 +12,6 @@
|
|||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef CPPPARSER
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint2);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint3);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint4);
|
||||
#endif
|
||||
|
||||
#ifdef FLOATTYPE_IS_INT
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
#define PY_FROM_FLOATTYPE PyLong_FromLong
|
||||
|
|
@ -48,6 +42,12 @@ python_repr(ostream &out, const string &class_name) const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
INLINE_LINMATH PyObject *Extension<FLOATNAME(LPoint3)>::
|
||||
__getattr__(const string &attr_name) const {
|
||||
#ifndef CPPPARSER
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint2);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint3);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint4);
|
||||
#endif
|
||||
|
||||
// Validate the attribute name.
|
||||
for (string::const_iterator it = attr_name.begin(); it < attr_name.end(); it++) {
|
||||
if (*it < 'x' || *it > 'z') {
|
||||
|
|
|
|||
|
|
@ -12,12 +12,6 @@
|
|||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef CPPPARSER
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint2);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint3);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint4);
|
||||
#endif
|
||||
|
||||
#ifdef FLOATTYPE_IS_INT
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
#define PY_FROM_FLOATTYPE PyLong_FromLong
|
||||
|
|
@ -49,6 +43,12 @@ python_repr(ostream &out, const string &class_name) const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
INLINE_LINMATH PyObject *Extension<FLOATNAME(LPoint4)>::
|
||||
__getattr__(const string &attr_name) const {
|
||||
#ifndef CPPPARSER
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint2);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint3);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LPoint4);
|
||||
#endif
|
||||
|
||||
// Validate the attribute name.
|
||||
for (string::const_iterator it = attr_name.begin(); it < attr_name.end(); it++) {
|
||||
if (*it < 'w' || *it > 'z') {
|
||||
|
|
|
|||
|
|
@ -12,13 +12,6 @@
|
|||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
#ifndef CPPPARSER
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase2);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase3);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase4);
|
||||
#endif
|
||||
|
||||
#ifdef FLOATTYPE_IS_INT
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
#define PYNUMBER_FLOATTYPE PyNumber_Long
|
||||
|
|
@ -97,6 +90,12 @@ __reduce__(PyObject *self) const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVecBase2)>::
|
||||
__getattr__(const string &attr_name) const {
|
||||
#ifndef CPPPARSER
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase2);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase3);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase4);
|
||||
#endif
|
||||
|
||||
// Validate the attribute name.
|
||||
for (string::const_iterator it = attr_name.begin(); it < attr_name.end(); it++) {
|
||||
if (*it != 'x' && *it != 'y') {
|
||||
|
|
|
|||
|
|
@ -12,13 +12,6 @@
|
|||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
#ifndef CPPPARSER
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase2);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase3);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase4);
|
||||
#endif
|
||||
|
||||
#ifdef FLOATTYPE_IS_INT
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
#define PYNUMBER_FLOATTYPE PyNumber_Long
|
||||
|
|
@ -98,6 +91,12 @@ __reduce__(PyObject *self) const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVecBase3)>::
|
||||
__getattr__(const string &attr_name) const {
|
||||
#ifndef CPPPARSER
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase2);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase3);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase4);
|
||||
#endif
|
||||
|
||||
// Validate the attribute name.
|
||||
for (string::const_iterator it = attr_name.begin(); it < attr_name.end(); it++) {
|
||||
if (*it < 'x' || *it > 'z') {
|
||||
|
|
|
|||
|
|
@ -12,13 +12,6 @@
|
|||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
#ifndef CPPPARSER
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase2);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase3);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase4);
|
||||
#endif
|
||||
|
||||
#ifdef FLOATTYPE_IS_INT
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
#define PYNUMBER_FLOATTYPE PyNumber_Long
|
||||
|
|
@ -99,6 +92,12 @@ __reduce__(PyObject *self) const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVecBase4)>::
|
||||
__getattr__(const string &attr_name) const {
|
||||
#ifndef CPPPARSER
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase2);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase3);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVecBase4);
|
||||
#endif
|
||||
|
||||
// Validate the attribute name.
|
||||
for (string::const_iterator it = attr_name.begin(); it < attr_name.end(); it++) {
|
||||
if (*it < 'w' || *it > 'z') {
|
||||
|
|
|
|||
|
|
@ -12,12 +12,6 @@
|
|||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef CPPPARSER
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector2);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector3);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector4);
|
||||
#endif
|
||||
|
||||
#ifdef FLOATTYPE_IS_INT
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
#define PY_FROM_FLOATTYPE PyLong_FromLong
|
||||
|
|
@ -47,6 +41,12 @@ python_repr(ostream &out, const string &class_name) const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVector2)>::
|
||||
__getattr__(const string &attr_name) const {
|
||||
#ifndef CPPPARSER
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector2);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector3);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector4);
|
||||
#endif
|
||||
|
||||
// Validate the attribute name.
|
||||
for (string::const_iterator it = attr_name.begin(); it < attr_name.end(); it++) {
|
||||
if (*it != 'x' && *it != 'y') {
|
||||
|
|
|
|||
|
|
@ -12,12 +12,6 @@
|
|||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef CPPPARSER
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector2);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector3);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector4);
|
||||
#endif
|
||||
|
||||
#ifdef FLOATTYPE_IS_INT
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
#define PY_FROM_FLOATTYPE PyLong_FromLong
|
||||
|
|
@ -48,6 +42,12 @@ python_repr(ostream &out, const string &class_name) const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVector3)>::
|
||||
__getattr__(const string &attr_name) const {
|
||||
#ifndef CPPPARSER
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector2);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector3);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector4);
|
||||
#endif
|
||||
|
||||
// Validate the attribute name.
|
||||
for (string::const_iterator it = attr_name.begin(); it < attr_name.end(); it++) {
|
||||
if (*it < 'x' || *it > 'z') {
|
||||
|
|
|
|||
|
|
@ -12,12 +12,6 @@
|
|||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef CPPPARSER
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector2);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector3);
|
||||
IMPORT_THIS struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector4);
|
||||
#endif
|
||||
|
||||
#ifdef FLOATTYPE_IS_INT
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
#define PY_FROM_FLOATTYPE PyLong_FromLong
|
||||
|
|
@ -49,6 +43,12 @@ python_repr(ostream &out, const string &class_name) const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
INLINE_LINMATH PyObject *Extension<FLOATNAME(LVector4)>::
|
||||
__getattr__(const string &attr_name) const {
|
||||
#ifndef CPPPARSER
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector2);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector3);
|
||||
extern struct Dtool_PyTypedObject FLOATNAME(Dtool_LVector4);
|
||||
#endif
|
||||
|
||||
// Validate the attribute name.
|
||||
for (string::const_iterator it = attr_name.begin(); it < attr_name.end(); it++) {
|
||||
if (*it < 'w' || *it > 'z') {
|
||||
|
|
|
|||
|
|
@ -66,3 +66,5 @@ forcetype PointerToBase<ReferenceCountedVector<LVecBase2i> >
|
|||
forcetype PointerToArrayBase<LVecBase2i>
|
||||
forcetype PTA_LVecBase2i
|
||||
forcetype CPTA_LVecBase2i
|
||||
|
||||
forceinclude "pointerToArray_ext.h"
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ PUBLISHED:
|
|||
|
||||
static string get_host_name();
|
||||
|
||||
class Interface {
|
||||
class EXPCL_PANDA_NET Interface {
|
||||
PUBLISHED:
|
||||
const string &get_name() const { return _name; }
|
||||
const string &get_mac_address() const { return _mac_address; }
|
||||
|
|
|
|||
|
|
@ -31,19 +31,19 @@
|
|||
#ifdef HAVE_PYTHON
|
||||
|
||||
#ifndef CPPPARSER
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeBoxGeom;
|
||||
//extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeConvexGeom;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeGeom;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeHashSpace;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeCappedCylinderGeom;
|
||||
//extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeHeightfieldGeom;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdePlaneGeom;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeQuadTreeSpace;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeRayGeom;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeSimpleSpace;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeSpace;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeSphereGeom;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeTriMeshGeom;
|
||||
extern Dtool_PyTypedObject Dtool_OdeBoxGeom;
|
||||
//extern Dtool_PyTypedObject Dtool_OdeConvexGeom;
|
||||
extern Dtool_PyTypedObject Dtool_OdeGeom;
|
||||
extern Dtool_PyTypedObject Dtool_OdeHashSpace;
|
||||
extern Dtool_PyTypedObject Dtool_OdeCappedCylinderGeom;
|
||||
//extern Dtool_PyTypedObject Dtool_OdeHeightfieldGeom;
|
||||
extern Dtool_PyTypedObject Dtool_OdePlaneGeom;
|
||||
extern Dtool_PyTypedObject Dtool_OdeQuadTreeSpace;
|
||||
extern Dtool_PyTypedObject Dtool_OdeRayGeom;
|
||||
extern Dtool_PyTypedObject Dtool_OdeSimpleSpace;
|
||||
extern Dtool_PyTypedObject Dtool_OdeSpace;
|
||||
extern Dtool_PyTypedObject Dtool_OdeSphereGeom;
|
||||
extern Dtool_PyTypedObject Dtool_OdeTriMeshGeom;
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -30,18 +30,18 @@
|
|||
#include "odePlane2dJoint.h"
|
||||
|
||||
#ifndef CPPPARSER
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeJoint;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeBallJoint;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeHingeJoint;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeSliderJoint;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeContactJoint;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeUniversalJoint;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeHinge2Joint;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeFixedJoint;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeNullJoint;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeAMotorJoint;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeLMotorJoint;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdePlane2dJoint;
|
||||
extern Dtool_PyTypedObject Dtool_OdeJoint;
|
||||
extern Dtool_PyTypedObject Dtool_OdeBallJoint;
|
||||
extern Dtool_PyTypedObject Dtool_OdeHingeJoint;
|
||||
extern Dtool_PyTypedObject Dtool_OdeSliderJoint;
|
||||
extern Dtool_PyTypedObject Dtool_OdeContactJoint;
|
||||
extern Dtool_PyTypedObject Dtool_OdeUniversalJoint;
|
||||
extern Dtool_PyTypedObject Dtool_OdeHinge2Joint;
|
||||
extern Dtool_PyTypedObject Dtool_OdeFixedJoint;
|
||||
extern Dtool_PyTypedObject Dtool_OdeNullJoint;
|
||||
extern Dtool_PyTypedObject Dtool_OdeAMotorJoint;
|
||||
extern Dtool_PyTypedObject Dtool_OdeLMotorJoint;
|
||||
extern Dtool_PyTypedObject Dtool_OdePlane2dJoint;
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -24,10 +24,10 @@
|
|||
#include "odeQuadTreeSpace.h"
|
||||
|
||||
#ifndef CPPPARSER
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeHashSpace;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeSimpleSpace;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeSpace;
|
||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_OdeQuadTreeSpace;
|
||||
extern Dtool_PyTypedObject Dtool_OdeHashSpace;
|
||||
extern Dtool_PyTypedObject Dtool_OdeSimpleSpace;
|
||||
extern Dtool_PyTypedObject Dtool_OdeSpace;
|
||||
extern Dtool_PyTypedObject Dtool_OdeQuadTreeSpace;
|
||||
#endif
|
||||
|
||||
PyObject *Extension<OdeSpace>::_python_callback = NULL;
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ class NurbsCurve;
|
|||
// Class : CurveFitter
|
||||
// Description :
|
||||
////////////////////////////////////////////////////////////////////
|
||||
class CurveFitter {
|
||||
class EXPCL_PANDA_GOBJ CurveFitter {
|
||||
PUBLISHED:
|
||||
CurveFitter();
|
||||
~CurveFitter();
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ END_PUBLISH //]
|
|||
// Description : A single CV of a Hermite curve. Hermite curve CV's
|
||||
// include an in and out tangent, as well as a position.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
class HermiteCurveCV {
|
||||
class EXPCL_PANDA_PARAMETRICS HermiteCurveCV {
|
||||
public:
|
||||
HermiteCurveCV();
|
||||
HermiteCurveCV(const HermiteCurveCV &c);
|
||||
|
|
@ -85,7 +85,7 @@ public:
|
|||
// list of the CV's that are used to define the curve
|
||||
// (since the CubicCurveseg class doesn't retain these).
|
||||
////////////////////////////////////////////////////////////////////
|
||||
class HermiteCurve : public PiecewiseCurve {
|
||||
class EXPCL_PANDA_PARAMETRICS HermiteCurve : public PiecewiseCurve {
|
||||
PUBLISHED:
|
||||
HermiteCurve();
|
||||
HermiteCurve(const ParametricCurve &pc);
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@
|
|||
nodePath.I nodePath.h nodePath.cxx \
|
||||
nodePath_ext.I nodePath_ext.h \
|
||||
nodePathCollection.I nodePathCollection.h \
|
||||
nodePathCollection_ext.I nodePathCollection_ext.h \
|
||||
nodePathCollection_ext.h \
|
||||
nodePathComponent.I nodePathComponent.h \
|
||||
occluderEffect.I occluderEffect.h \
|
||||
occluderNode.I occluderNode.h \
|
||||
|
|
@ -112,7 +112,7 @@
|
|||
weakNodePath.I weakNodePath.h \
|
||||
workingNodePath.I workingNodePath.h \
|
||||
nodePath_ext.h nodePath_ext.I \
|
||||
nodePathCollection_ext.h nodePathCollection_ext.I \
|
||||
nodePathCollection_ext.h \
|
||||
pandaNode_ext.h \
|
||||
renderState_ext.h \
|
||||
transformState_ext.h
|
||||
|
|
|
|||
|
|
@ -1,51 +0,0 @@
|
|||
// Filename: nodePathCollection_ext.I
|
||||
// Created by: rdb (09Dec13)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) Carnegie Mellon University. All rights reserved.
|
||||
//
|
||||
// All use of this software is subject to the terms of the revised BSD
|
||||
// license. You should have received a copy of this license along
|
||||
// with this source code in a file named "LICENSE."
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef CPPPARSER
|
||||
#ifdef STDFLOAT_DOUBLE
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_LPoint3d;
|
||||
#else
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_LPoint3f;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Extension<NodePathCollection>::get_tight_bounds
|
||||
// Access: Published
|
||||
// Description: Returns the tight bounds as a 2-tuple of LPoint3
|
||||
// objects. This is a convenience function for Python
|
||||
// users, among which the use of calc_tight_bounds
|
||||
// may be confusing.
|
||||
// Returns None if calc_tight_bounds returned false.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE PyObject *Extension<NodePathCollection>::
|
||||
get_tight_bounds() const {
|
||||
LPoint3 *min_point = new LPoint3;
|
||||
LPoint3 *max_point = new LPoint3;
|
||||
|
||||
if (_this->calc_tight_bounds(*min_point, *max_point)) {
|
||||
#ifdef STDFLOAT_DOUBLE
|
||||
PyObject *min_inst = DTool_CreatePyInstance((void*) min_point, Dtool_LPoint3d, true, false);
|
||||
PyObject *max_inst = DTool_CreatePyInstance((void*) max_point, Dtool_LPoint3d, true, false);
|
||||
#else
|
||||
PyObject *min_inst = DTool_CreatePyInstance((void*) min_point, Dtool_LPoint3f, true, false);
|
||||
PyObject *max_inst = DTool_CreatePyInstance((void*) max_point, Dtool_LPoint3f, true, false);
|
||||
#endif
|
||||
return Py_BuildValue("NN", min_inst, max_inst);
|
||||
|
||||
} else {
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
}
|
||||
|
|
@ -16,6 +16,14 @@
|
|||
|
||||
#ifdef HAVE_PYTHON
|
||||
|
||||
#ifndef CPPPARSER
|
||||
#ifdef STDFLOAT_DOUBLE
|
||||
extern struct Dtool_PyTypedObject Dtool_LPoint3d;
|
||||
#else
|
||||
extern struct Dtool_PyTypedObject Dtool_LPoint3f;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: NodePathCollection::__reduce__
|
||||
// Access: Published
|
||||
|
|
@ -45,4 +53,34 @@ __reduce__(PyObject *self) const {
|
|||
return result;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Extension<NodePathCollection>::get_tight_bounds
|
||||
// Access: Published
|
||||
// Description: Returns the tight bounds as a 2-tuple of LPoint3
|
||||
// objects. This is a convenience function for Python
|
||||
// users, among which the use of calc_tight_bounds
|
||||
// may be confusing.
|
||||
// Returns None if calc_tight_bounds returned false.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
PyObject *Extension<NodePathCollection>::
|
||||
get_tight_bounds() const {
|
||||
LPoint3 *min_point = new LPoint3;
|
||||
LPoint3 *max_point = new LPoint3;
|
||||
|
||||
if (_this->calc_tight_bounds(*min_point, *max_point)) {
|
||||
#ifdef STDFLOAT_DOUBLE
|
||||
PyObject *min_inst = DTool_CreatePyInstance((void*) min_point, Dtool_LPoint3d, true, false);
|
||||
PyObject *max_inst = DTool_CreatePyInstance((void*) max_point, Dtool_LPoint3d, true, false);
|
||||
#else
|
||||
PyObject *min_inst = DTool_CreatePyInstance((void*) min_point, Dtool_LPoint3f, true, false);
|
||||
PyObject *max_inst = DTool_CreatePyInstance((void*) max_point, Dtool_LPoint3f, true, false);
|
||||
#endif
|
||||
return Py_BuildValue("NN", min_inst, max_inst);
|
||||
|
||||
} else {
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -34,11 +34,9 @@ class Extension<NodePathCollection> : public ExtensionBase<NodePathCollection> {
|
|||
public:
|
||||
PyObject *__reduce__(PyObject *self) const;
|
||||
|
||||
INLINE PyObject *get_tight_bounds() const;
|
||||
PyObject *get_tight_bounds() const;
|
||||
};
|
||||
|
||||
#include "nodePathCollection_ext.I"
|
||||
|
||||
#endif // HAVE_PYTHON
|
||||
|
||||
#endif // NODEPATHCOLLECTION_EXT_H
|
||||
|
|
|
|||
|
|
@ -14,14 +14,6 @@
|
|||
|
||||
#include "pandaNode_ext.h"
|
||||
|
||||
#ifndef CPPPARSER
|
||||
#ifdef STDFLOAT_DOUBLE
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_LPoint3d;
|
||||
#else
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_LPoint3f;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Extension<NodePath>::get_python_tag_keys
|
||||
// Access: Published
|
||||
|
|
@ -167,33 +159,3 @@ INLINE bool Extension<NodePath>::
|
|||
has_net_python_tag(const string &key) const {
|
||||
return !find_net_python_tag(key).is_empty();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Extension<NodePath>::get_tight_bounds
|
||||
// Access: Published
|
||||
// Description: Returns the tight bounds as a 2-tuple of LPoint3
|
||||
// objects. This is a convenience function for Python
|
||||
// users, among which the use of calc_tight_bounds
|
||||
// may be confusing.
|
||||
// Returns None if calc_tight_bounds returned false.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE PyObject *Extension<NodePath>::
|
||||
get_tight_bounds() const {
|
||||
LPoint3 *min_point = new LPoint3;
|
||||
LPoint3 *max_point = new LPoint3;
|
||||
|
||||
if (_this->calc_tight_bounds(*min_point, *max_point)) {
|
||||
#ifdef STDFLOAT_DOUBLE
|
||||
PyObject *min_inst = DTool_CreatePyInstance((void*) min_point, Dtool_LPoint3d, true, false);
|
||||
PyObject *max_inst = DTool_CreatePyInstance((void*) max_point, Dtool_LPoint3d, true, false);
|
||||
#else
|
||||
PyObject *min_inst = DTool_CreatePyInstance((void*) min_point, Dtool_LPoint3f, true, false);
|
||||
PyObject *max_inst = DTool_CreatePyInstance((void*) max_point, Dtool_LPoint3f, true, false);
|
||||
#endif
|
||||
return Py_BuildValue("NN", min_inst, max_inst);
|
||||
|
||||
} else {
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,8 +18,13 @@
|
|||
#ifdef HAVE_PYTHON
|
||||
|
||||
#ifndef CPPPARSER
|
||||
extern EXPCL_PANDA_PUTIL Dtool_PyTypedObject Dtool_BamWriter;
|
||||
extern EXPCL_PANDA_PUTIL Dtool_PyTypedObject Dtool_BamReader;
|
||||
extern struct Dtool_PyTypedObject Dtool_BamWriter;
|
||||
extern struct Dtool_PyTypedObject Dtool_BamReader;
|
||||
#ifdef STDFLOAT_DOUBLE
|
||||
extern struct Dtool_PyTypedObject Dtool_LPoint3d;
|
||||
#else
|
||||
extern struct Dtool_PyTypedObject Dtool_LPoint3f;
|
||||
#endif
|
||||
#endif // CPPPARSER
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -53,7 +58,7 @@ __copy__() const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
PyObject *Extension<NodePath>::
|
||||
__deepcopy__(PyObject *self, PyObject *memo) const {
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_NodePath;
|
||||
extern struct Dtool_PyTypedObject Dtool_NodePath;
|
||||
|
||||
// Borrowed reference.
|
||||
PyObject *dupe = PyDict_GetItem(memo, self);
|
||||
|
|
@ -228,5 +233,34 @@ py_decode_NodePath_from_bam_stream_persist(PyObject *unpickler, const string &da
|
|||
return NodePath::decode_from_bam_stream(data, reader);
|
||||
}
|
||||
|
||||
#endif // HAVE_PYTHON
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Extension<NodePath>::get_tight_bounds
|
||||
// Access: Published
|
||||
// Description: Returns the tight bounds as a 2-tuple of LPoint3
|
||||
// objects. This is a convenience function for Python
|
||||
// users, among which the use of calc_tight_bounds
|
||||
// may be confusing.
|
||||
// Returns None if calc_tight_bounds returned false.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
PyObject *Extension<NodePath>::
|
||||
get_tight_bounds() const {
|
||||
LPoint3 *min_point = new LPoint3;
|
||||
LPoint3 *max_point = new LPoint3;
|
||||
|
||||
if (_this->calc_tight_bounds(*min_point, *max_point)) {
|
||||
#ifdef STDFLOAT_DOUBLE
|
||||
PyObject *min_inst = DTool_CreatePyInstance((void*) min_point, Dtool_LPoint3d, true, false);
|
||||
PyObject *max_inst = DTool_CreatePyInstance((void*) max_point, Dtool_LPoint3d, true, false);
|
||||
#else
|
||||
PyObject *min_inst = DTool_CreatePyInstance((void*) min_point, Dtool_LPoint3f, true, false);
|
||||
PyObject *max_inst = DTool_CreatePyInstance((void*) max_point, Dtool_LPoint3f, true, false);
|
||||
#endif
|
||||
return Py_BuildValue("NN", min_inst, max_inst);
|
||||
|
||||
} else {
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // HAVE_PYTHON
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ public:
|
|||
INLINE bool has_net_python_tag(const string &key) const;
|
||||
NodePath find_net_python_tag(const string &key) const;
|
||||
|
||||
INLINE PyObject *get_tight_bounds() const;
|
||||
PyObject *get_tight_bounds() const;
|
||||
};
|
||||
|
||||
BEGIN_PUBLISH
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ __copy__() const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
PyObject *Extension<PandaNode>::
|
||||
__deepcopy__(PyObject *self, PyObject *memo) const {
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_PandaNode;
|
||||
extern struct Dtool_PyTypedObject Dtool_PandaNode;
|
||||
|
||||
// Borrowed reference.
|
||||
PyObject *dupe = PyDict_GetItem(memo, self);
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
////////////////////////////////////////////////////////////////////
|
||||
PyObject *Extension<RenderState>::
|
||||
get_composition_cache() const {
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_RenderState;
|
||||
extern struct Dtool_PyTypedObject Dtool_RenderState;
|
||||
LightReMutexHolder holder(*RenderState::_states_lock);
|
||||
size_t cache_size = _this->_composition_cache.get_size();
|
||||
PyObject *list = PyList_New(cache_size);
|
||||
|
|
@ -90,7 +90,7 @@ get_composition_cache() const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
PyObject *Extension<RenderState>::
|
||||
get_invert_composition_cache() const {
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_RenderState;
|
||||
extern struct Dtool_PyTypedObject Dtool_RenderState;
|
||||
LightReMutexHolder holder(*RenderState::_states_lock);
|
||||
size_t cache_size = _this->_invert_composition_cache.get_size();
|
||||
PyObject *list = PyList_New(cache_size);
|
||||
|
|
@ -141,7 +141,7 @@ get_invert_composition_cache() const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
PyObject *Extension<RenderState>::
|
||||
get_states() {
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_RenderState;
|
||||
extern struct Dtool_PyTypedObject Dtool_RenderState;
|
||||
if (RenderState::_states == (RenderState::States *)NULL) {
|
||||
return PyList_New(0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
////////////////////////////////////////////////////////////////////
|
||||
PyObject *Extension<TransformState>::
|
||||
get_composition_cache() const {
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_TransformState;
|
||||
extern struct Dtool_PyTypedObject Dtool_TransformState;
|
||||
LightReMutexHolder holder(*_this->_states_lock);
|
||||
|
||||
size_t num_states = _this->_composition_cache.get_num_entries();
|
||||
|
|
@ -94,7 +94,7 @@ get_composition_cache() const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
PyObject *Extension<TransformState>::
|
||||
get_invert_composition_cache() const {
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_TransformState;
|
||||
extern struct Dtool_PyTypedObject Dtool_TransformState;
|
||||
LightReMutexHolder holder(*_this->_states_lock);
|
||||
|
||||
size_t num_states = _this->_invert_composition_cache.get_num_entries();
|
||||
|
|
@ -149,7 +149,7 @@ get_invert_composition_cache() const {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
PyObject *Extension<TransformState>::
|
||||
get_states() {
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_TransformState;
|
||||
extern struct Dtool_PyTypedObject Dtool_TransformState;
|
||||
if (TransformState::_states == (TransformState::States *)NULL) {
|
||||
return PyList_New(0);
|
||||
}
|
||||
|
|
@ -186,7 +186,7 @@ get_states() {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
PyObject *Extension<TransformState>::
|
||||
get_unused_states() {
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_TransformState;
|
||||
extern struct Dtool_PyTypedObject Dtool_TransformState;
|
||||
if (TransformState::_states == (TransformState::States *)NULL) {
|
||||
return PyList_New(0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,35 +86,35 @@ reset_register_allocator() {
|
|||
// Access: Protected
|
||||
// Description: Allocate a vreg.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE char *ShaderGenerator::
|
||||
const char *ShaderGenerator::
|
||||
alloc_vreg() {
|
||||
switch (_vtregs_used) {
|
||||
case 0: _vtregs_used += 1; return (char*)"TEXCOORD0";
|
||||
case 1: _vtregs_used += 1; return (char*)"TEXCOORD1";
|
||||
case 2: _vtregs_used += 1; return (char*)"TEXCOORD2";
|
||||
case 3: _vtregs_used += 1; return (char*)"TEXCOORD3";
|
||||
case 4: _vtregs_used += 1; return (char*)"TEXCOORD4";
|
||||
case 5: _vtregs_used += 1; return (char*)"TEXCOORD5";
|
||||
case 6: _vtregs_used += 1; return (char*)"TEXCOORD6";
|
||||
case 7: _vtregs_used += 1; return (char*)"TEXCOORD7";
|
||||
case 0: _vtregs_used += 1; return "TEXCOORD0";
|
||||
case 1: _vtregs_used += 1; return "TEXCOORD1";
|
||||
case 2: _vtregs_used += 1; return "TEXCOORD2";
|
||||
case 3: _vtregs_used += 1; return "TEXCOORD3";
|
||||
case 4: _vtregs_used += 1; return "TEXCOORD4";
|
||||
case 5: _vtregs_used += 1; return "TEXCOORD5";
|
||||
case 6: _vtregs_used += 1; return "TEXCOORD6";
|
||||
case 7: _vtregs_used += 1; return "TEXCOORD7";
|
||||
}
|
||||
switch (_vcregs_used) {
|
||||
case 0: _vcregs_used += 1; return (char*)"COLOR0";
|
||||
case 1: _vcregs_used += 1; return (char*)"COLOR1";
|
||||
case 0: _vcregs_used += 1; return "COLOR0";
|
||||
case 1: _vcregs_used += 1; return "COLOR1";
|
||||
}
|
||||
// These don't exist in arbvp1, though they're reportedly
|
||||
// supported by other profiles.
|
||||
switch (_vtregs_used) {
|
||||
case 8: _vtregs_used += 1; return (char*)"TEXCOORD8";
|
||||
case 9: _vtregs_used += 1; return (char*)"TEXCOORD9";
|
||||
case 10: _vtregs_used += 1; return (char*)"TEXCOORD10";
|
||||
case 11: _vtregs_used += 1; return (char*)"TEXCOORD11";
|
||||
case 12: _vtregs_used += 1; return (char*)"TEXCOORD12";
|
||||
case 13: _vtregs_used += 1; return (char*)"TEXCOORD13";
|
||||
case 14: _vtregs_used += 1; return (char*)"TEXCOORD14";
|
||||
case 15: _vtregs_used += 1; return (char*)"TEXCOORD15";
|
||||
case 8: _vtregs_used += 1; return "TEXCOORD8";
|
||||
case 9: _vtregs_used += 1; return "TEXCOORD9";
|
||||
case 10: _vtregs_used += 1; return "TEXCOORD10";
|
||||
case 11: _vtregs_used += 1; return "TEXCOORD11";
|
||||
case 12: _vtregs_used += 1; return "TEXCOORD12";
|
||||
case 13: _vtregs_used += 1; return "TEXCOORD13";
|
||||
case 14: _vtregs_used += 1; return "TEXCOORD14";
|
||||
case 15: _vtregs_used += 1; return "TEXCOORD15";
|
||||
}
|
||||
return (char*)"UNKNOWN";
|
||||
return "UNKNOWN";
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -122,37 +122,37 @@ alloc_vreg() {
|
|||
// Access: Protected
|
||||
// Description: Allocate a freg.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE char *ShaderGenerator::
|
||||
const char *ShaderGenerator::
|
||||
alloc_freg() {
|
||||
switch (_ftregs_used) {
|
||||
case 0: _ftregs_used += 1; return (char*)"TEXCOORD0";
|
||||
case 1: _ftregs_used += 1; return (char*)"TEXCOORD1";
|
||||
case 2: _ftregs_used += 1; return (char*)"TEXCOORD2";
|
||||
case 3: _ftregs_used += 1; return (char*)"TEXCOORD3";
|
||||
case 4: _ftregs_used += 1; return (char*)"TEXCOORD4";
|
||||
case 5: _ftregs_used += 1; return (char*)"TEXCOORD5";
|
||||
case 6: _ftregs_used += 1; return (char*)"TEXCOORD6";
|
||||
case 7: _ftregs_used += 1; return (char*)"TEXCOORD7";
|
||||
case 0: _ftregs_used += 1; return "TEXCOORD0";
|
||||
case 1: _ftregs_used += 1; return "TEXCOORD1";
|
||||
case 2: _ftregs_used += 1; return "TEXCOORD2";
|
||||
case 3: _ftregs_used += 1; return "TEXCOORD3";
|
||||
case 4: _ftregs_used += 1; return "TEXCOORD4";
|
||||
case 5: _ftregs_used += 1; return "TEXCOORD5";
|
||||
case 6: _ftregs_used += 1; return "TEXCOORD6";
|
||||
case 7: _ftregs_used += 1; return "TEXCOORD7";
|
||||
}
|
||||
// We really shouldn't rely on COLOR fregs,
|
||||
// since the clamping can have unexpected side-effects.
|
||||
//switch (_fcregs_used) {
|
||||
//case 0: _fcregs_used += 1; return (char*)"COLOR0";
|
||||
//case 1: _fcregs_used += 1; return (char*)"COLOR1";
|
||||
//case 0: _fcregs_used += 1; return "COLOR0";
|
||||
//case 1: _fcregs_used += 1; return "COLOR1";
|
||||
//}
|
||||
// These don't exist in arbvp1/arbfp1, though they're
|
||||
// reportedly supported by other profiles.
|
||||
switch (_ftregs_used) {
|
||||
case 8: _ftregs_used += 1; return (char*)"TEXCOORD8";
|
||||
case 9: _ftregs_used += 1; return (char*)"TEXCOORD9";
|
||||
case 10: _ftregs_used += 1; return (char*)"TEXCOORD10";
|
||||
case 11: _ftregs_used += 1; return (char*)"TEXCOORD11";
|
||||
case 12: _ftregs_used += 1; return (char*)"TEXCOORD12";
|
||||
case 13: _ftregs_used += 1; return (char*)"TEXCOORD13";
|
||||
case 14: _ftregs_used += 1; return (char*)"TEXCOORD14";
|
||||
case 15: _ftregs_used += 1; return (char*)"TEXCOORD15";
|
||||
case 8: _ftregs_used += 1; return "TEXCOORD8";
|
||||
case 9: _ftregs_used += 1; return "TEXCOORD9";
|
||||
case 10: _ftregs_used += 1; return "TEXCOORD10";
|
||||
case 11: _ftregs_used += 1; return "TEXCOORD11";
|
||||
case 12: _ftregs_used += 1; return "TEXCOORD12";
|
||||
case 13: _ftregs_used += 1; return "TEXCOORD13";
|
||||
case 14: _ftregs_used += 1; return "TEXCOORD14";
|
||||
case 15: _ftregs_used += 1; return "TEXCOORD15";
|
||||
}
|
||||
return (char*)"UNKNOWN";
|
||||
return "UNKNOWN";
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -624,18 +624,18 @@ synthesize_shader(const RenderState *rs) {
|
|||
|
||||
// These variables will hold the results of register allocation.
|
||||
|
||||
char *tangent_freg = 0;
|
||||
char *binormal_freg = 0;
|
||||
const char *tangent_freg = 0;
|
||||
const char *binormal_freg = 0;
|
||||
string tangent_input;
|
||||
string binormal_input;
|
||||
pmap<const InternalName *, char *> texcoord_fregs;
|
||||
pvector<char *> dlightcoord_fregs;
|
||||
pvector<char *> slightcoord_fregs;
|
||||
char *world_position_freg = 0;
|
||||
char *world_normal_freg = 0;
|
||||
char *eye_position_freg = 0;
|
||||
char *eye_normal_freg = 0;
|
||||
char *hpos_freg = 0;
|
||||
pmap<const InternalName *, const char *> texcoord_fregs;
|
||||
pvector<const char *> dlightcoord_fregs;
|
||||
pvector<const char *> slightcoord_fregs;
|
||||
const char *world_position_freg = 0;
|
||||
const char *world_normal_freg = 0;
|
||||
const char *eye_position_freg = 0;
|
||||
const char *eye_normal_freg = 0;
|
||||
const char *hpos_freg = 0;
|
||||
|
||||
if (_vertex_colors) {
|
||||
// Reserve COLOR0
|
||||
|
|
@ -662,7 +662,7 @@ synthesize_shader(const RenderState *rs) {
|
|||
const InternalName *texcoord_name = stage->get_texcoord_name();
|
||||
|
||||
if (texcoord_fregs.count(texcoord_name) == 0) {
|
||||
char *freg = alloc_freg();
|
||||
const char *freg = alloc_freg();
|
||||
string tcname = texcoord_name->join("_");
|
||||
texcoord_fregs[texcoord_name] = freg;
|
||||
|
||||
|
|
@ -774,7 +774,7 @@ synthesize_shader(const RenderState *rs) {
|
|||
text << "\t l_eye_normal.xyz = mul((float3x3)tpose_view_to_model, vtx_normal);\n";
|
||||
text << "\t l_eye_normal.w = 0;\n";
|
||||
}
|
||||
pmap<const InternalName *, char *>::const_iterator it;
|
||||
pmap<const InternalName *, const char *>::const_iterator it;
|
||||
for (it = texcoord_fregs.begin(); it != texcoord_fregs.end(); ++it) {
|
||||
// Pass through all texcoord inputs as-is.
|
||||
string tcname = it->first->join("_");
|
||||
|
|
|
|||
|
|
@ -85,8 +85,8 @@ protected:
|
|||
int _vtregs_used;
|
||||
int _ftregs_used;
|
||||
void reset_register_allocator();
|
||||
char *alloc_vreg();
|
||||
char *alloc_freg();
|
||||
const char *alloc_vreg();
|
||||
const char *alloc_freg();
|
||||
|
||||
// RenderState analysis information. Created by analyze_renderstate:
|
||||
|
||||
|
|
|
|||
|
|
@ -17,9 +17,9 @@
|
|||
#ifdef HAVE_PYTHON
|
||||
|
||||
#ifndef CPPPARSER
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_LPoint2f;
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_LPoint3f;
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_LPoint4f;
|
||||
extern struct Dtool_PyTypedObject Dtool_LPoint2f;
|
||||
extern struct Dtool_PyTypedObject Dtool_LPoint3f;
|
||||
extern struct Dtool_PyTypedObject Dtool_LPoint4f;
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ PUBLISHED:
|
|||
// Contains a single pixel specification used in compute_histogram()
|
||||
// and make_histogram(). Note that pixels are stored by integer
|
||||
// value, not by floating-point scaled value.
|
||||
class PixelSpec {
|
||||
class EXPCL_PANDA_PNMIMAGE PixelSpec {
|
||||
PUBLISHED:
|
||||
INLINE PixelSpec(xelval gray_value);
|
||||
INLINE PixelSpec(xelval gray_value, xelval alpha);
|
||||
|
|
@ -143,7 +143,7 @@ PUBLISHED:
|
|||
|
||||
// Associates a pixel specification with an appearance count, for
|
||||
// use in Histogram, below.
|
||||
class PixelSpecCount {
|
||||
class EXPCL_PANDA_PNMIMAGE PixelSpecCount {
|
||||
public:
|
||||
INLINE PixelSpecCount(const PixelSpec &pixel, int count);
|
||||
INLINE bool operator < (const PixelSpecCount &other) const;
|
||||
|
|
@ -157,7 +157,7 @@ PUBLISHED:
|
|||
typedef pvector<PixelSpec> Palette;
|
||||
|
||||
// Used to return a pixel histogram in PNMImage::get_histogram().
|
||||
class Histogram {
|
||||
class EXPCL_PANDA_PNMIMAGE Histogram {
|
||||
PUBLISHED:
|
||||
INLINE Histogram();
|
||||
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@
|
|||
pbitops.I pbitops.h \
|
||||
portalMask.h \
|
||||
pta_ushort.h \
|
||||
pythonCallbackObject.cxx \
|
||||
pythonCallbackObject.h pythonCallbackObject.I \
|
||||
simpleHashMap.I simpleHashMap.h \
|
||||
sparseArray.I sparseArray.h \
|
||||
|
|
@ -111,7 +112,6 @@
|
|||
paramValue.cxx \
|
||||
pbitops.cxx \
|
||||
pta_ushort.cxx \
|
||||
pythonCallbackObject.cxx \
|
||||
simpleHashMap.cxx \
|
||||
sparseArray.cxx \
|
||||
timedCycle.cxx typedWritable.cxx \
|
||||
|
|
|
|||
|
|
@ -159,8 +159,12 @@ INLINE ostream &operator << (ostream &out, const BitMask<WType, nbits> &bitmask)
|
|||
|
||||
// We need to define this temporary macro so we can pass a parameter
|
||||
// containing a comma through the macro.
|
||||
#define BITMASK16_DEF BitMask<PN_uint16, 16>
|
||||
#define BITMASK32_DEF BitMask<PN_uint32, 32>
|
||||
#define BITMASK64_DEF BitMask<PN_uint64, 64>
|
||||
EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_PUTIL, EXPTP_PANDA_PUTIL, BITMASK16_DEF);
|
||||
EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_PUTIL, EXPTP_PANDA_PUTIL, BITMASK32_DEF);
|
||||
EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_PUTIL, EXPTP_PANDA_PUTIL, BITMASK64_DEF);
|
||||
|
||||
typedef BitMask<PN_uint16, 16> BitMask16;
|
||||
typedef BitMask<PN_uint32, 32> BitMask32;
|
||||
|
|
|
|||
|
|
@ -14,3 +14,6 @@ forcetype PointerToBase<ReferenceCountedVector<ushort> >
|
|||
forcetype PointerToArrayBase<ushort>
|
||||
forcetype PTA_ushort
|
||||
forcetype CPTA_ushort
|
||||
|
||||
# This is so the extensions for PTA_ushort are made available.
|
||||
forceinclude "pointerToArray_ext.h"
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@
|
|||
#include "namable.h"
|
||||
#include "nodeCachedReferenceCount.h"
|
||||
#include "paramValue.h"
|
||||
#include "pythonCallbackObject.h"
|
||||
#include "referenceCount.h"
|
||||
#include "sparseArray.h"
|
||||
#include "typedObject.h"
|
||||
|
|
@ -216,9 +215,6 @@ init_libputil() {
|
|||
ParamVecBase4d::init_type("ParamVecBase4d");
|
||||
ParamVecBase4i::init_type("ParamVecBase4i");
|
||||
ParamWstring::init_type("ParamWstring");
|
||||
#ifdef HAVE_PYTHON
|
||||
PythonCallbackObject::init_type();
|
||||
#endif
|
||||
QuadBitMaskNative::init_type();
|
||||
ReferenceCount::init_type();
|
||||
SparseArray::init_type();
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ public:
|
|||
typedef BMType BitMaskType;
|
||||
typedef TYPENAME BMType::WordType WordType;
|
||||
#ifndef CPPPARSER // interrogate has a problem with these lines.
|
||||
enum {
|
||||
enum {
|
||||
half_bits = BitMaskType::num_bits,
|
||||
num_bits = BitMaskType::num_bits * 2,
|
||||
};
|
||||
|
|
@ -142,7 +142,10 @@ INLINE ostream &operator << (ostream &out, const DoubleBitMask<BMType> &doubleBi
|
|||
return out;
|
||||
}
|
||||
|
||||
EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_PUTIL, EXPTP_PANDA_PUTIL, DoubleBitMask<BitMaskNative>);
|
||||
typedef DoubleBitMask<BitMaskNative> DoubleBitMaskNative;
|
||||
|
||||
EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_PUTIL, EXPTP_PANDA_PUTIL, DoubleBitMask<DoubleBitMaskNative>);
|
||||
typedef DoubleBitMask<DoubleBitMaskNative> QuadBitMaskNative;
|
||||
|
||||
// Tell GCC that we'll take care of the instantiation explicitly here.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
#include "paramValue.cxx"
|
||||
#include "pbitops.cxx"
|
||||
#include "pta_ushort.cxx"
|
||||
#include "pythonCallbackObject.cxx"
|
||||
#include "simpleHashMap.cxx"
|
||||
#include "sparseArray.cxx"
|
||||
#include "timedCycle.cxx"
|
||||
|
|
|
|||
|
|
@ -15,15 +15,21 @@
|
|||
#include "pythonCallbackObject.h"
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
#include "py_panda.h"
|
||||
|
||||
#include "py_panda.h"
|
||||
#include "thread.h"
|
||||
#include "callbackData.h"
|
||||
#include "config_util.h"
|
||||
|
||||
TypeHandle PythonCallbackObject::_type_handle;
|
||||
|
||||
Configure(config_pythonCallbackObject);
|
||||
ConfigureFn(config_pythonCallbackObject) {
|
||||
PythonCallbackObject::init_type();
|
||||
}
|
||||
|
||||
#ifndef CPPPARSER
|
||||
IMPORT_THIS struct Dtool_PyTypedObject Dtool_TypedObject;
|
||||
extern struct Dtool_PyTypedObject Dtool_TypedObject;
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -126,13 +132,13 @@ do_python_callback(CallbackData *cbdata) {
|
|||
|
||||
// Wrap the cbdata up in a Python object, then put it in a tuple,
|
||||
// for the argument list.
|
||||
PyObject *pycbdata =
|
||||
PyObject *pycbdata =
|
||||
DTool_CreatePyInstanceTyped(cbdata, Dtool_TypedObject,
|
||||
false, false, cbdata->get_type_index());
|
||||
PyObject *args = Py_BuildValue("(O)", pycbdata);
|
||||
Py_DECREF(pycbdata);
|
||||
|
||||
PyObject *result =
|
||||
PyObject *result =
|
||||
Thread::get_current_thread()->call_python_func(_function, args);
|
||||
Py_DECREF(args);
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
// a callback to directly call an arbitarary Python
|
||||
// function. Powerful! But use with caution.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
class EXPCL_PANDA_PUTIL PythonCallbackObject : public CallbackObject {
|
||||
class PythonCallbackObject : public CallbackObject {
|
||||
PUBLISHED:
|
||||
PythonCallbackObject(PyObject *function = Py_None);
|
||||
virtual ~PythonCallbackObject();
|
||||
|
|
|
|||
|
|
@ -36,9 +36,9 @@ extern ConfigVariableInt text_texture_margin;
|
|||
extern ConfigVariableDouble text_poly_margin;
|
||||
extern ConfigVariableInt text_page_size;
|
||||
extern ConfigVariableBool text_small_caps;
|
||||
extern ConfigVariableDouble text_small_caps_scale;
|
||||
extern EXPCL_PANDA_TEXT ConfigVariableDouble text_small_caps_scale;
|
||||
extern ConfigVariableFilename text_default_font;
|
||||
extern ConfigVariableDouble text_tab_width;
|
||||
extern EXPCL_PANDA_TEXT ConfigVariableDouble text_tab_width;
|
||||
extern ConfigVariableInt text_push_properties_key;
|
||||
extern ConfigVariableInt text_pop_properties_key;
|
||||
extern ConfigVariableInt text_soft_hyphen_key;
|
||||
|
|
@ -48,7 +48,7 @@ extern wstring get_text_soft_hyphen_output();
|
|||
extern ConfigVariableDouble text_hyphen_ratio;
|
||||
extern wstring get_text_never_break_before();
|
||||
extern ConfigVariableInt text_max_never_break;
|
||||
extern ConfigVariableDouble text_default_underscore_height;
|
||||
extern EXPCL_PANDA_TEXT ConfigVariableDouble text_default_underscore_height;
|
||||
|
||||
extern ConfigVariableEnum<SamplerState::FilterType> text_minfilter;
|
||||
extern ConfigVariableEnum<SamplerState::FilterType> text_magfilter;
|
||||
|
|
|
|||
Loading…
Reference in New Issue