mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-29 08:15:18 -04:00
Merge branch 'release/1.10.x'
This commit is contained in:
commit
cdc95acf81
@ -1905,7 +1905,7 @@ class main(wx.Frame):
|
|||||||
self.txaExtraLines.append(line)
|
self.txaExtraLines.append(line)
|
||||||
txafile.close()
|
txafile.close()
|
||||||
except:
|
except:
|
||||||
print "Error opening .txa file!"
|
print("Error opening .txa file!")
|
||||||
self.palettize_saveTxaTxt.SetValue(os.path.join(dirname + os.sep , filename))
|
self.palettize_saveTxaTxt.SetValue(os.path.join(dirname + os.sep , filename))
|
||||||
dlg.Destroy()
|
dlg.Destroy()
|
||||||
|
|
||||||
@ -2705,7 +2705,7 @@ class main(wx.Frame):
|
|||||||
selectedItemIndex = int(self.batchTree.GetItemText(selectedItemId).split()[0])-1
|
selectedItemIndex = int(self.batchTree.GetItemText(selectedItemId).split()[0])-1
|
||||||
batchItem = self.batchList[selectedItemIndex]
|
batchItem = self.batchList[selectedItemIndex]
|
||||||
|
|
||||||
print '\n'+self.BuildCommand(batchItem)
|
print('\n'+self.BuildCommand(batchItem))
|
||||||
|
|
||||||
if (batchItem['cmd'].count('maya2egg')):
|
if (batchItem['cmd'].count('maya2egg')):
|
||||||
# Display Maya2Egg Tool Panel
|
# Display Maya2Egg Tool Panel
|
||||||
@ -2840,7 +2840,7 @@ class main(wx.Frame):
|
|||||||
self.txaExtraLines.append(line)
|
self.txaExtraLines.append(line)
|
||||||
txafile.close()
|
txafile.close()
|
||||||
except:
|
except:
|
||||||
print "Error opening .txa file!"
|
print("Error opening .txa file!")
|
||||||
|
|
||||||
self.batchItemNameTxt.SetValue(batchItem['label'])
|
self.batchItemNameTxt.SetValue(batchItem['label'])
|
||||||
|
|
||||||
|
16
direct/src/dist/FreezeTool.py
vendored
16
direct/src/dist/FreezeTool.py
vendored
@ -90,6 +90,7 @@ defaultHiddenImports = {
|
|||||||
'scipy.special._ufuncs': ['scipy.special._ufuncs_cxx'],
|
'scipy.special._ufuncs': ['scipy.special._ufuncs_cxx'],
|
||||||
'scipy.stats._stats': ['scipy.special.cython_special'],
|
'scipy.stats._stats': ['scipy.special.cython_special'],
|
||||||
'setuptools.monkey': ['setuptools.msvc'],
|
'setuptools.monkey': ['setuptools.msvc'],
|
||||||
|
'shapely._geometry_helpers': ['shapely._geos'],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2583,6 +2584,21 @@ class PandaModuleFinder(modulefinder.ModuleFinder):
|
|||||||
else:
|
else:
|
||||||
code = fp.read()
|
code = fp.read()
|
||||||
|
|
||||||
|
# Strip out delvewheel patch (see GitHub issue #1492)
|
||||||
|
if isinstance(code, bytes):
|
||||||
|
# Don't look for \n at the end, it may also be \r\n
|
||||||
|
start_marker = b'# start delvewheel patch'
|
||||||
|
end_marker = b'# end delvewheel patch'
|
||||||
|
else:
|
||||||
|
start_marker = '# start delvewheel patch'
|
||||||
|
end_marker = '# end delvewheel patch'
|
||||||
|
|
||||||
|
start = code.find(start_marker)
|
||||||
|
while start >= 0:
|
||||||
|
end = code.find(end_marker, start) + len(end_marker)
|
||||||
|
code = code[:start] + code[end:]
|
||||||
|
start = code.find(start_marker)
|
||||||
|
|
||||||
code += b'\n' if isinstance(code, bytes) else '\n'
|
code += b'\n' if isinstance(code, bytes) else '\n'
|
||||||
co = compile(code, pathname, 'exec', optimize=self.optimize)
|
co = compile(code, pathname, 'exec', optimize=self.optimize)
|
||||||
elif type == imp.PY_COMPILED:
|
elif type == imp.PY_COMPILED:
|
||||||
|
15
direct/src/dist/commands.py
vendored
15
direct/src/dist/commands.py
vendored
@ -634,7 +634,20 @@ class build_apps(setuptools.Command):
|
|||||||
for index in self.pypi_extra_indexes:
|
for index in self.pypi_extra_indexes:
|
||||||
pip_args += ['--extra-index-url', index]
|
pip_args += ['--extra-index-url', index]
|
||||||
|
|
||||||
subprocess.check_call([sys.executable, '-m', 'pip'] + pip_args)
|
try:
|
||||||
|
subprocess.check_call([sys.executable, '-m', 'pip'] + pip_args)
|
||||||
|
except:
|
||||||
|
# Display a more helpful message for these common issues.
|
||||||
|
if platform.startswith('manylinux2010_') and sys.version_info >= (3, 11):
|
||||||
|
new_platform = platform.replace('manylinux2010_', 'manylinux2014_')
|
||||||
|
self.announce('This error likely occurs because {} is not a supported target as of Python 3.11.\nChange the target platform to {} instead.'.format(platform, new_platform), distutils.log.ERROR)
|
||||||
|
elif platform.startswith('manylinux1_') and sys.version_info >= (3, 10):
|
||||||
|
new_platform = platform.replace('manylinux1_', 'manylinux2014_')
|
||||||
|
self.announce('This error likely occurs because {} is not a supported target as of Python 3.10.\nChange the target platform to {} instead.'.format(platform, new_platform), distutils.log.ERROR)
|
||||||
|
elif platform.startswith('macosx_10_6_') and sys.version_info >= (3, 8):
|
||||||
|
new_platform = platform.replace('macosx_10_6_', 'macosx_10_9_')
|
||||||
|
self.announce('This error likely occurs because {} is not a supported target as of Python 3.8.\nChange the target platform to {} instead.'.format(platform, new_platform), distutils.log.ERROR)
|
||||||
|
raise
|
||||||
|
|
||||||
# Return a list of paths to the downloaded whls
|
# Return a list of paths to the downloaded whls
|
||||||
return [
|
return [
|
||||||
|
@ -1289,9 +1289,12 @@ to_os_long_name() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the filename exists on the disk, false otherwise. If the
|
* Returns true if the filename exists on the physical disk, false otherwise.
|
||||||
* type is indicated to be executable, this also tests that the file has
|
* If the type is indicated to be executable, this also tests that the file has
|
||||||
* execute permission.
|
* execute permission.
|
||||||
|
*
|
||||||
|
* @see VirtualFileSystem::exists() for checking whether the filename exists in
|
||||||
|
* the virtual file system.
|
||||||
*/
|
*/
|
||||||
bool Filename::
|
bool Filename::
|
||||||
exists() const {
|
exists() const {
|
||||||
@ -1320,8 +1323,11 @@ exists() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the filename exists and is the name of a regular file (i.e.
|
* Returns true if the filename exists on the physical disk and is the name of
|
||||||
* not a directory or device), false otherwise.
|
* a regular file (i.e. not a directory or device), false otherwise.
|
||||||
|
*
|
||||||
|
* @see VirtualFileSystem::is_regular_file() for checking whether the filename
|
||||||
|
* exists and is a regular file in the virtual file system.
|
||||||
*/
|
*/
|
||||||
bool Filename::
|
bool Filename::
|
||||||
is_regular_file() const {
|
is_regular_file() const {
|
||||||
@ -1350,8 +1356,8 @@ is_regular_file() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the filename exists and is either a directory or a regular
|
* Returns true if the filename exists on the physical disk and is either a
|
||||||
* file that can be written to, or false otherwise.
|
* directory or a regular file that can be written to, or false otherwise.
|
||||||
*/
|
*/
|
||||||
bool Filename::
|
bool Filename::
|
||||||
is_writable() const {
|
is_writable() const {
|
||||||
@ -1382,8 +1388,11 @@ is_writable() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the filename exists and is a directory name, false
|
* Returns true if the filename exists on the physical disk and is a directory
|
||||||
* otherwise.
|
* name, false otherwise.
|
||||||
|
*
|
||||||
|
* @see VirtualFileSystem::is_directory() for checking whether the filename
|
||||||
|
* exists as a directory in the virtual file system.
|
||||||
*/
|
*/
|
||||||
bool Filename::
|
bool Filename::
|
||||||
is_directory() const {
|
is_directory() const {
|
||||||
|
@ -36,6 +36,11 @@ class DSearchPath;
|
|||||||
* convention, and it knows how to perform basic OS-specific I/O, like testing
|
* convention, and it knows how to perform basic OS-specific I/O, like testing
|
||||||
* for file existence and searching a searchpath, as well as the best way to
|
* for file existence and searching a searchpath, as well as the best way to
|
||||||
* open an fstream for reading or writing.
|
* open an fstream for reading or writing.
|
||||||
|
*
|
||||||
|
* Note that the methods of Filename that interact with the filesystem (such
|
||||||
|
* as exists(), open_read(), etc.) directly interface with the operating system
|
||||||
|
* and are not aware of Panda's virtual file system. To interact with the VFS,
|
||||||
|
* use the methods on VirtualFileSystem instead.
|
||||||
*/
|
*/
|
||||||
class EXPCL_DTOOL_DTOOLUTIL Filename {
|
class EXPCL_DTOOL_DTOOLUTIL Filename {
|
||||||
PUBLISHED:
|
PUBLISHED:
|
||||||
|
@ -494,6 +494,10 @@ get_call_str(const string &container, const vector_string &pexprs) const {
|
|||||||
call << separator << "self";
|
call << separator << "self";
|
||||||
separator = ", ";
|
separator = ", ";
|
||||||
}
|
}
|
||||||
|
if (_flags & F_explicit_cls) {
|
||||||
|
call << separator << "cls";
|
||||||
|
separator = ", ";
|
||||||
|
}
|
||||||
|
|
||||||
size_t pn;
|
size_t pn;
|
||||||
size_t num_parameters = pexprs.size();
|
size_t num_parameters = pexprs.size();
|
||||||
@ -781,14 +785,20 @@ setup_properties(const InterrogateFunction &ifunc, InterfaceMaker *interface_mak
|
|||||||
first_param = 1;
|
first_param = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_parameters.size() > first_param && _parameters[first_param]._name == "self" &&
|
if (_parameters.size() > first_param &&
|
||||||
TypeManager::is_pointer_to_PyObject(_parameters[first_param]._remap->get_orig_type())) {
|
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
|
// Here's a special case. If the first parameter of a nonstatic method
|
||||||
// is a PyObject * called "self", then we will automatically fill it in
|
// is a PyObject * called "self", then we will automatically fill it in
|
||||||
// from the this pointer, and remove it from the generated parameter
|
// from the this pointer, and remove it from the generated parameter list.
|
||||||
// list.
|
// For static methods, we offer "cls" instead, containing the type object.
|
||||||
_parameters.erase(_parameters.begin() + first_param);
|
if (_parameters[first_param]._name == "self") {
|
||||||
_flags |= F_explicit_self;
|
_parameters.erase(_parameters.begin() + first_param);
|
||||||
|
_flags |= F_explicit_self;
|
||||||
|
}
|
||||||
|
else if (!_has_this && _parameters[first_param]._name == "cls") {
|
||||||
|
_parameters.erase(_parameters.begin() + first_param);
|
||||||
|
_flags |= F_explicit_cls;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_parameters.size() == first_param) {
|
if (_parameters.size() == first_param) {
|
||||||
|
@ -101,6 +101,7 @@ public:
|
|||||||
F_divide_integer = 0x2000,
|
F_divide_integer = 0x2000,
|
||||||
F_hash = 0x4000,
|
F_hash = 0x4000,
|
||||||
F_explicit_args = 0x8000,
|
F_explicit_args = 0x8000,
|
||||||
|
F_explicit_cls =0x10000,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::vector<Parameter> Parameters;
|
typedef std::vector<Parameter> Parameters;
|
||||||
|
@ -1706,7 +1706,11 @@ write_module_class(ostream &out, Object *obj) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!func->_has_this) {
|
if (!func->_has_this) {
|
||||||
flags += " | METH_STATIC";
|
if (func->_flags & FunctionRemap::F_explicit_cls) {
|
||||||
|
flags += " | METH_CLASS";
|
||||||
|
} else {
|
||||||
|
flags += " | METH_STATIC";
|
||||||
|
}
|
||||||
|
|
||||||
// Skip adding this entry if we also have a property with the same name.
|
// Skip adding this entry if we also have a property with the same name.
|
||||||
// In that case, we will use a Dtool_StaticProperty to disambiguate
|
// In that case, we will use a Dtool_StaticProperty to disambiguate
|
||||||
@ -3652,6 +3656,9 @@ write_function_for_top(ostream &out, InterfaceMaker::Object *obj, InterfaceMaker
|
|||||||
if (func->_has_this) {
|
if (func->_has_this) {
|
||||||
prototype += "self";
|
prototype += "self";
|
||||||
}
|
}
|
||||||
|
else if (func->_flags & FunctionRemap::F_explicit_cls) {
|
||||||
|
prototype += "cls";
|
||||||
|
}
|
||||||
|
|
||||||
switch (func->_args_type) {
|
switch (func->_args_type) {
|
||||||
case AT_keyword_args:
|
case AT_keyword_args:
|
||||||
|
@ -1150,8 +1150,9 @@ clear_pipe() {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Changes the x_size and y_size, then recalculates structures that depend on
|
* Changes the x_size and y_size, then recalculates structures that depend on
|
||||||
* size. The recalculation currently includes: - compute_pixels on all the
|
* size. The recalculation currently includes:
|
||||||
* graphics regions. - updating the texture card, if one is present.
|
* - compute_pixels on all the graphics regions.
|
||||||
|
* - updating the texture card, if one is present.
|
||||||
*/
|
*/
|
||||||
void GraphicsOutput::
|
void GraphicsOutput::
|
||||||
set_size_and_recalc(int x, int y) {
|
set_size_and_recalc(int x, int y) {
|
||||||
@ -1163,11 +1164,8 @@ set_size_and_recalc(int x, int y) {
|
|||||||
int fb_x_size = get_fb_x_size();
|
int fb_x_size = get_fb_x_size();
|
||||||
int fb_y_size = get_fb_y_size();
|
int fb_y_size = get_fb_y_size();
|
||||||
|
|
||||||
TotalDisplayRegions::iterator dri;
|
for (DisplayRegion *dr : _total_display_regions) {
|
||||||
for (dri = _total_display_regions.begin();
|
dr->compute_pixels_all_stages(fb_x_size, fb_y_size);
|
||||||
dri != _total_display_regions.end();
|
|
||||||
++dri) {
|
|
||||||
(*dri)->compute_pixels_all_stages(fb_x_size, fb_y_size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_texture_card != nullptr && _texture_card->get_num_geoms() > 0) {
|
if (_texture_card != nullptr && _texture_card->get_num_geoms() > 0) {
|
||||||
|
@ -38,9 +38,10 @@ eglGraphicsBuffer(GraphicsEngine *engine, GraphicsPipe *pipe,
|
|||||||
DCAST_INTO_V(egl_pipe, _pipe);
|
DCAST_INTO_V(egl_pipe, _pipe);
|
||||||
_pbuffer = EGL_NO_SURFACE;
|
_pbuffer = EGL_NO_SURFACE;
|
||||||
|
|
||||||
// Since the pbuffer never gets flipped, we get screenshots from the same
|
// EGL pbuffers only have a back buffer (see 2.2.2 in spec), and it is never
|
||||||
// buffer we draw into.
|
// flipped (eglSwapBuffers is a no-op).
|
||||||
_screenshot_buffer_type = _draw_buffer_type;
|
_draw_buffer_type = RenderBuffer::T_back;
|
||||||
|
_screenshot_buffer_type = RenderBuffer::T_back;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -119,6 +120,30 @@ end_frame(FrameMode mode, Thread *current_thread) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void eglGraphicsBuffer::
|
||||||
|
set_size(int x, int y) {
|
||||||
|
nassertv_always(_gsg != nullptr);
|
||||||
|
|
||||||
|
if (_size.get_x() != x || _size.get_y() != y) {
|
||||||
|
eglDestroySurface(_egl_display, _pbuffer);
|
||||||
|
|
||||||
|
int attrib_list[] = {
|
||||||
|
EGL_WIDTH, x,
|
||||||
|
EGL_HEIGHT, y,
|
||||||
|
EGL_NONE
|
||||||
|
};
|
||||||
|
|
||||||
|
eglGraphicsStateGuardian *eglgsg;
|
||||||
|
DCAST_INTO_V(eglgsg, _gsg);
|
||||||
|
_pbuffer = eglCreatePbufferSurface(eglgsg->_egl_display, eglgsg->_fbconfig, attrib_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
set_size_and_recalc(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Closes the buffer right now. Called from the window thread.
|
* Closes the buffer right now. Called from the window thread.
|
||||||
*/
|
*/
|
||||||
|
@ -36,6 +36,8 @@ public:
|
|||||||
virtual bool begin_frame(FrameMode mode, Thread *current_thread);
|
virtual bool begin_frame(FrameMode mode, Thread *current_thread);
|
||||||
virtual void end_frame(FrameMode mode, Thread *current_thread);
|
virtual void end_frame(FrameMode mode, Thread *current_thread);
|
||||||
|
|
||||||
|
virtual void set_size(int x, int y);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void close_buffer();
|
virtual void close_buffer();
|
||||||
virtual bool open_buffer();
|
virtual bool open_buffer();
|
||||||
|
@ -323,7 +323,6 @@ make_output(const std::string &name,
|
|||||||
if (retry == 2) {
|
if (retry == 2) {
|
||||||
if (((flags&BF_require_parasite)!=0)||
|
if (((flags&BF_require_parasite)!=0)||
|
||||||
((flags&BF_require_window)!=0)||
|
((flags&BF_require_window)!=0)||
|
||||||
((flags&BF_resizeable)!=0)||
|
|
||||||
((flags&BF_size_track_host)!=0)) {
|
((flags&BF_size_track_host)!=0)) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convenience function; returns true if the named file exists.
|
* Convenience function; returns true if the named file exists in the virtual
|
||||||
|
* file system hierarchy.
|
||||||
*/
|
*/
|
||||||
INLINE bool VirtualFileSystem::
|
INLINE bool VirtualFileSystem::
|
||||||
exists(const Filename &filename) const {
|
exists(const Filename &filename) const {
|
||||||
@ -20,8 +21,8 @@ exists(const Filename &filename) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convenience function; returns true if the named file exists and is a
|
* Convenience function; returns true if the named file exists as a directory in
|
||||||
* directory.
|
* the virtual file system hierarchy.
|
||||||
*/
|
*/
|
||||||
INLINE bool VirtualFileSystem::
|
INLINE bool VirtualFileSystem::
|
||||||
is_directory(const Filename &filename) const {
|
is_directory(const Filename &filename) const {
|
||||||
@ -30,8 +31,8 @@ is_directory(const Filename &filename) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convenience function; returns true if the named file exists and is a
|
* Convenience function; returns true if the named file exists as a regular file
|
||||||
* regular file.
|
* in the virtual file system hierarchy.
|
||||||
*/
|
*/
|
||||||
INLINE bool VirtualFileSystem::
|
INLINE bool VirtualFileSystem::
|
||||||
is_regular_file(const Filename &filename) const {
|
is_regular_file(const Filename &filename) const {
|
||||||
|
@ -17,8 +17,8 @@ import os
|
|||||||
from direct.dist import FreezeTool
|
from direct.dist import FreezeTool
|
||||||
|
|
||||||
def usage(code, msg = ''):
|
def usage(code, msg = ''):
|
||||||
print >> sys.stderr, __doc__
|
print(__doc__, file=sys.stderr)
|
||||||
print >> sys.stderr, msg
|
print(msg, file=sys.stderr)
|
||||||
sys.exit(code)
|
sys.exit(code)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
@ -30,7 +30,7 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
opts, args = getopt.getopt(sys.argv[1:], 'h')
|
opts, args = getopt.getopt(sys.argv[1:], 'h')
|
||||||
except getopt.error, msg:
|
except getopt.error as msg:
|
||||||
usage(1, msg)
|
usage(1, msg)
|
||||||
|
|
||||||
for opt, arg in opts:
|
for opt, arg in opts:
|
||||||
|
@ -34,7 +34,7 @@ command = 'env CODESIGN_ALLOCATE="/Developer/Platforms/iPhoneOS.platform/Develop
|
|||||||
'xcent' : xcent,
|
'xcent' : xcent,
|
||||||
}
|
}
|
||||||
|
|
||||||
print command
|
print(command)
|
||||||
result = os.system(command)
|
result = os.system(command)
|
||||||
if result != 0:
|
if result != 0:
|
||||||
raise StandardError
|
raise StandardError
|
||||||
|
@ -204,6 +204,8 @@ set(P3PGRAPH_SOURCES
|
|||||||
)
|
)
|
||||||
|
|
||||||
set(P3PGRAPH_IGATEEXT
|
set(P3PGRAPH_IGATEEXT
|
||||||
|
bamFile_ext.cxx
|
||||||
|
bamFile_ext.h
|
||||||
loaderFileTypeRegistry_ext.cxx
|
loaderFileTypeRegistry_ext.cxx
|
||||||
loaderFileTypeRegistry_ext.h
|
loaderFileTypeRegistry_ext.h
|
||||||
nodePathCollection_ext.cxx
|
nodePathCollection_ext.cxx
|
||||||
|
@ -74,7 +74,11 @@ PUBLISHED:
|
|||||||
BamReader *get_reader();
|
BamReader *get_reader();
|
||||||
BamWriter *get_writer();
|
BamWriter *get_writer();
|
||||||
|
|
||||||
|
public:
|
||||||
|
EXTENSION(PyObject *get_file_version() const);
|
||||||
|
|
||||||
PUBLISHED:
|
PUBLISHED:
|
||||||
|
MAKE_PROPERTY(file_version, get_file_version);
|
||||||
MAKE_PROPERTY(file_endian, get_file_endian);
|
MAKE_PROPERTY(file_endian, get_file_endian);
|
||||||
MAKE_PROPERTY(file_stdfloat_double, get_file_stdfloat_double);
|
MAKE_PROPERTY(file_stdfloat_double, get_file_stdfloat_double);
|
||||||
|
|
||||||
|
28
panda/src/pgraph/bamFile_ext.cxx
Normal file
28
panda/src/pgraph/bamFile_ext.cxx
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/**
|
||||||
|
* 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."
|
||||||
|
*
|
||||||
|
* @file bamFile_ext.cxx
|
||||||
|
* @author rdb
|
||||||
|
* @date 2023-05-03
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "bamFile_ext.h"
|
||||||
|
#include "bamWriter_ext.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_PYTHON
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the version number of the Bam file currently being written.
|
||||||
|
*/
|
||||||
|
PyObject *Extension<BamFile>::
|
||||||
|
get_file_version() const {
|
||||||
|
return Py_BuildValue("(ii)", _this->get_file_major_ver(),
|
||||||
|
_this->get_file_minor_ver());
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
37
panda/src/pgraph/bamFile_ext.h
Normal file
37
panda/src/pgraph/bamFile_ext.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/**
|
||||||
|
* 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."
|
||||||
|
*
|
||||||
|
* @file bamFile_ext.h
|
||||||
|
* @author rdb
|
||||||
|
* @date 2023-05-03
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BAMFILE_EXT_H
|
||||||
|
#define BAMFILE_EXT_H
|
||||||
|
|
||||||
|
#include "dtoolbase.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_PYTHON
|
||||||
|
|
||||||
|
#include "extension.h"
|
||||||
|
#include "bamFile.h"
|
||||||
|
#include "py_panda.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class defines the extension methods for BamFile, which are called
|
||||||
|
* instead of any C++ methods with the same prototype.
|
||||||
|
*/
|
||||||
|
template<>
|
||||||
|
class Extension<BamFile> : public ExtensionBase<BamFile> {
|
||||||
|
public:
|
||||||
|
PyObject *get_file_version() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // HAVE_PYTHON
|
||||||
|
|
||||||
|
#endif // BAMFILE_EXT_H
|
@ -1,3 +1,4 @@
|
|||||||
|
#include "bamFile_ext.cxx"
|
||||||
#include "loaderFileTypeRegistry_ext.cxx"
|
#include "loaderFileTypeRegistry_ext.cxx"
|
||||||
#include "nodePath_ext.cxx"
|
#include "nodePath_ext.cxx"
|
||||||
#include "nodePathCollection_ext.cxx"
|
#include "nodePathCollection_ext.cxx"
|
||||||
|
@ -125,6 +125,8 @@ set(P3PUTIL_SOURCES
|
|||||||
set(P3PUTIL_IGATEEXT
|
set(P3PUTIL_IGATEEXT
|
||||||
bamReader_ext.cxx
|
bamReader_ext.cxx
|
||||||
bamReader_ext.h
|
bamReader_ext.h
|
||||||
|
bamWriter_ext.cxx
|
||||||
|
bamWriter_ext.h
|
||||||
bitArray_ext.cxx
|
bitArray_ext.cxx
|
||||||
bitArray_ext.h
|
bitArray_ext.h
|
||||||
bitArray_ext.I
|
bitArray_ext.I
|
||||||
|
@ -315,7 +315,7 @@ read_object(TypedWritable *&ptr, ReferenceCount *&ref_ptr) {
|
|||||||
* time to call it.
|
* time to call it.
|
||||||
*
|
*
|
||||||
* This must be called at least once after reading a particular object via
|
* This must be called at least once after reading a particular object via
|
||||||
* get_object() in order to validate that object.
|
* read_object() in order to validate that object.
|
||||||
*
|
*
|
||||||
* The return value is true if all objects have been resolved, or false if
|
* The return value is true if all objects have been resolved, or false if
|
||||||
* some objects are still outstanding (in which case you will need to call
|
* some objects are still outstanding (in which case you will need to call
|
||||||
|
@ -87,9 +87,13 @@ PUBLISHED:
|
|||||||
INLINE TypedWritable *get_root_node() const;
|
INLINE TypedWritable *get_root_node() const;
|
||||||
INLINE void set_root_node(TypedWritable *root_node);
|
INLINE void set_root_node(TypedWritable *root_node);
|
||||||
|
|
||||||
|
public:
|
||||||
|
EXTENSION(PyObject *get_file_version() const);
|
||||||
|
|
||||||
PUBLISHED:
|
PUBLISHED:
|
||||||
MAKE_PROPERTY(target, get_target, set_target);
|
MAKE_PROPERTY(target, get_target, set_target);
|
||||||
MAKE_PROPERTY(filename, get_filename);
|
MAKE_PROPERTY(filename, get_filename);
|
||||||
|
MAKE_PROPERTY(file_version, get_file_version);
|
||||||
MAKE_PROPERTY(file_endian, get_file_endian);
|
MAKE_PROPERTY(file_endian, get_file_endian);
|
||||||
MAKE_PROPERTY(file_stdfloat_double, get_file_stdfloat_double);
|
MAKE_PROPERTY(file_stdfloat_double, get_file_stdfloat_double);
|
||||||
MAKE_PROPERTY(file_texture_mode, get_file_texture_mode);
|
MAKE_PROPERTY(file_texture_mode, get_file_texture_mode);
|
||||||
|
28
panda/src/putil/bamWriter_ext.cxx
Normal file
28
panda/src/putil/bamWriter_ext.cxx
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/**
|
||||||
|
* 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."
|
||||||
|
*
|
||||||
|
* @file bamWriter_ext.cxx
|
||||||
|
* @author rdb
|
||||||
|
* @date 2023-05-03
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "bamWriter_ext.h"
|
||||||
|
#include "config_putil.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_PYTHON
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the version number of the Bam file currently being written.
|
||||||
|
*/
|
||||||
|
PyObject *Extension<BamWriter>::
|
||||||
|
get_file_version() const {
|
||||||
|
return Py_BuildValue("(ii)", _this->get_file_major_ver(),
|
||||||
|
_this->get_file_minor_ver());
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
37
panda/src/putil/bamWriter_ext.h
Normal file
37
panda/src/putil/bamWriter_ext.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/**
|
||||||
|
* 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."
|
||||||
|
*
|
||||||
|
* @file bamWriter_ext.h
|
||||||
|
* @author rdb
|
||||||
|
* @date 2023-05-01
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BAMWRITER_EXT_H
|
||||||
|
#define BAMWRITER_EXT_H
|
||||||
|
|
||||||
|
#include "dtoolbase.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_PYTHON
|
||||||
|
|
||||||
|
#include "extension.h"
|
||||||
|
#include "bamWriter.h"
|
||||||
|
#include "py_panda.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class defines the extension methods for BamWriter, which are called
|
||||||
|
* instead of any C++ methods with the same prototype.
|
||||||
|
*/
|
||||||
|
template<>
|
||||||
|
class Extension<BamWriter> : public ExtensionBase<BamWriter> {
|
||||||
|
public:
|
||||||
|
PyObject *get_file_version() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // HAVE_PYTHON
|
||||||
|
|
||||||
|
#endif // BAMWRITER_EXT_H
|
@ -86,6 +86,22 @@ close() {
|
|||||||
_error = false;
|
_error = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes a sequence of bytes to the beginning of the datagram file. This may
|
||||||
|
* be called any number of times after the file has been opened and before the
|
||||||
|
* first datagram is written. It may not be called once the first datagram is
|
||||||
|
* written.
|
||||||
|
*/
|
||||||
|
bool DatagramOutputFile::
|
||||||
|
write_header(const vector_uchar &header) {
|
||||||
|
nassertr(_out != nullptr, false);
|
||||||
|
nassertr(!_wrote_first_datagram, false);
|
||||||
|
|
||||||
|
_out->write((const char *)&header[0], header.size());
|
||||||
|
thread_consider_yield();
|
||||||
|
return !_out->fail();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes a sequence of bytes to the beginning of the datagram file. This may
|
* Writes a sequence of bytes to the beginning of the datagram file. This may
|
||||||
* be called any number of times after the file has been opened and before the
|
* be called any number of times after the file has been opened and before the
|
||||||
|
@ -38,6 +38,7 @@ PUBLISHED:
|
|||||||
|
|
||||||
void close();
|
void close();
|
||||||
|
|
||||||
|
bool write_header(const vector_uchar &header);
|
||||||
bool write_header(const std::string &header);
|
bool write_header(const std::string &header);
|
||||||
virtual bool put_datagram(const Datagram &data);
|
virtual bool put_datagram(const Datagram &data);
|
||||||
virtual bool copy_datagram(SubfileInfo &result, const Filename &filename);
|
virtual bool copy_datagram(SubfileInfo &result, const Filename &filename);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "bamReader_ext.cxx"
|
#include "bamReader_ext.cxx"
|
||||||
|
#include "bamWriter_ext.cxx"
|
||||||
#include "bitArray_ext.cxx"
|
#include "bitArray_ext.cxx"
|
||||||
#include "paramPyObject.cxx"
|
#include "paramPyObject.cxx"
|
||||||
#include "pythonCallbackObject.cxx"
|
#include "pythonCallbackObject.cxx"
|
||||||
|
@ -11,7 +11,7 @@ SocketIP.InitNetworkDriver();
|
|||||||
|
|
||||||
addr = SocketAddress()
|
addr = SocketAddress()
|
||||||
addr.setHost("127.0.0.1",8080)
|
addr.setHost("127.0.0.1",8080)
|
||||||
print addr.getIpPort()
|
print(addr.getIpPort())
|
||||||
|
|
||||||
|
|
||||||
inbound = SocketTCPListen()
|
inbound = SocketTCPListen()
|
||||||
@ -23,16 +23,16 @@ while 1 == 1:
|
|||||||
source = SocketAddress()
|
source = SocketAddress()
|
||||||
if inbound.GetIncomingConnection(newsession,source) :
|
if inbound.GetIncomingConnection(newsession,source) :
|
||||||
#newsession.SetNonBlocking();
|
#newsession.SetNonBlocking();
|
||||||
print source.getIpPort()
|
print(source.getIpPort())
|
||||||
newsession.SendData("Hello From the Listener\n\r");
|
newsession.SendData("Hello From the Listener\n\r");
|
||||||
|
|
||||||
s = newsession.RecvData(10);
|
s = newsession.RecvData(10);
|
||||||
print s
|
print(s)
|
||||||
print newsession.GetLastError()
|
print(newsession.GetLastError())
|
||||||
if newsession.ErrorIsWouldBlocking(newsession.GetLastError()) :
|
if newsession.ErrorIsWouldBlocking(newsession.GetLastError()) :
|
||||||
print "Reading Would Block"
|
print("Reading Would Block")
|
||||||
else:
|
else:
|
||||||
print "Not A Blocking Error"
|
print("Not A Blocking Error")
|
||||||
|
|
||||||
newsession.SendData("GoodBy From the Listener\n\r");
|
newsession.SendData("GoodBy From the Listener\n\r");
|
||||||
newsession.Close();
|
newsession.Close();
|
||||||
|
@ -15,7 +15,7 @@ SocketIP.InitNetworkDriver();
|
|||||||
|
|
||||||
addr = SocketAddress()
|
addr = SocketAddress()
|
||||||
addr.setHost("127.0.0.1",6666)
|
addr.setHost("127.0.0.1",6666)
|
||||||
print addr.getIpPort()
|
print(addr.getIpPort())
|
||||||
|
|
||||||
MyConection = BufferedDatagramConnection(0,4096000,4096000,102400);
|
MyConection = BufferedDatagramConnection(0,4096000,4096000,102400);
|
||||||
#help(BufferedDatagramConnection)
|
#help(BufferedDatagramConnection)
|
||||||
@ -42,8 +42,8 @@ dg1.addUint16(54321)
|
|||||||
while 1==1:
|
while 1==1:
|
||||||
for x in range(200000):
|
for x in range(200000):
|
||||||
if not MyConection.SendMessage(dg1):
|
if not MyConection.SendMessage(dg1):
|
||||||
print "Error Sending Message"
|
print("Error Sending Message")
|
||||||
|
|
||||||
MyConection.Flush();
|
MyConection.Flush();
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
print "loop"
|
print("loop")
|
||||||
|
@ -15,7 +15,7 @@ SocketIP.InitNetworkDriver();
|
|||||||
|
|
||||||
addr = SocketAddress()
|
addr = SocketAddress()
|
||||||
addr.setHost("127.0.0.1",6666)
|
addr.setHost("127.0.0.1",6666)
|
||||||
print addr.getIpPort()
|
print(addr.getIpPort())
|
||||||
|
|
||||||
MyConection = BufferedDatagramConnection(0,4096000,4096000,102400);
|
MyConection = BufferedDatagramConnection(0,4096000,4096000,102400);
|
||||||
#help(BufferedDatagramConnection)
|
#help(BufferedDatagramConnection)
|
||||||
@ -47,4 +47,4 @@ while 1==1:
|
|||||||
|
|
||||||
MyConection.Flush();
|
MyConection.Flush();
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
print "loop"
|
print("loop")
|
||||||
|
@ -272,15 +272,34 @@ process_events() {
|
|||||||
*/
|
*/
|
||||||
void WinGraphicsWindow::
|
void WinGraphicsWindow::
|
||||||
set_properties_now(WindowProperties &properties) {
|
set_properties_now(WindowProperties &properties) {
|
||||||
if (properties.has_fullscreen() && !properties.get_fullscreen() &&
|
if (properties.has_fullscreen()) {
|
||||||
is_fullscreen()) {
|
if (!properties.get_fullscreen() && is_fullscreen()) {
|
||||||
if (do_windowed_switch()) {
|
if (do_windowed_switch()) {
|
||||||
_properties.set_fullscreen(false);
|
_properties.set_fullscreen(false);
|
||||||
properties.clear_fullscreen();
|
} else {
|
||||||
} else {
|
windisplay_cat.warning()
|
||||||
windisplay_cat.warning()
|
<< "Switching to windowed mode failed!\n";
|
||||||
<< "Switching to windowed mode failed!\n";
|
}
|
||||||
}
|
}
|
||||||
|
else if (properties.get_fullscreen() && !is_fullscreen()) {
|
||||||
|
int x_size;
|
||||||
|
int y_size;
|
||||||
|
if (properties.has_size()) {
|
||||||
|
x_size = properties.get_x_size();
|
||||||
|
y_size = properties.get_y_size();
|
||||||
|
} else {
|
||||||
|
x_size = _properties.get_x_size();
|
||||||
|
y_size = _properties.get_y_size();
|
||||||
|
}
|
||||||
|
if (do_fullscreen_switch(x_size, y_size)) {
|
||||||
|
_properties.set_fullscreen(true);
|
||||||
|
properties.clear_size();
|
||||||
|
} else {
|
||||||
|
windisplay_cat.warning()
|
||||||
|
<< "Switching to fullscreen mode failed!\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
properties.clear_fullscreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
GraphicsWindow::set_properties_now(properties);
|
GraphicsWindow::set_properties_now(properties);
|
||||||
@ -974,8 +993,8 @@ do_fullscreen_resize(int x_size, int y_size) {
|
|||||||
* Called in the set_properties_now function to switch to fullscreen.
|
* Called in the set_properties_now function to switch to fullscreen.
|
||||||
*/
|
*/
|
||||||
bool WinGraphicsWindow::
|
bool WinGraphicsWindow::
|
||||||
do_fullscreen_switch() {
|
do_fullscreen_switch(int x_size, int y_size) {
|
||||||
if (!do_fullscreen_enable()) {
|
if (!do_fullscreen_enable(x_size, y_size)) {
|
||||||
// Couldn't get fullscreen.
|
// Couldn't get fullscreen.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -985,17 +1004,21 @@ do_fullscreen_switch() {
|
|||||||
DWORD window_style = make_style(props);
|
DWORD window_style = make_style(props);
|
||||||
SetWindowLong(_hWnd, GWL_STYLE, window_style);
|
SetWindowLong(_hWnd, GWL_STYLE, window_style);
|
||||||
|
|
||||||
WINDOW_METRICS metrics;
|
SetWindowPos(_hWnd, HWND_NOTOPMOST, 0, 0, x_size, y_size,
|
||||||
bool has_origin;
|
|
||||||
if (!calculate_metrics(true, window_style, metrics, has_origin)){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
SetWindowPos(_hWnd, HWND_NOTOPMOST, 0, 0, metrics.width, metrics.height,
|
|
||||||
SWP_FRAMECHANGED | SWP_SHOWWINDOW);
|
SWP_FRAMECHANGED | SWP_SHOWWINDOW);
|
||||||
|
|
||||||
|
handle_reshape();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called in the set_properties_now function to switch to fullscreen.
|
||||||
|
*/
|
||||||
|
bool WinGraphicsWindow::
|
||||||
|
do_fullscreen_switch() {
|
||||||
|
return do_fullscreen_switch(_properties.get_x_size(), _properties.get_y_size());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called in the set_properties_now function to switch to windowed mode.
|
* Called in the set_properties_now function to switch to windowed mode.
|
||||||
*/
|
*/
|
||||||
@ -1248,8 +1271,8 @@ open_graphic_window() {
|
|||||||
// somehow, but I need the window's black background to cover up the desktop
|
// somehow, but I need the window's black background to cover up the desktop
|
||||||
// during the mode change.
|
// during the mode change.
|
||||||
|
|
||||||
if (fullscreen){
|
if (fullscreen) {
|
||||||
if (!do_fullscreen_enable()){
|
if (!do_fullscreen_enable()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1262,7 +1285,7 @@ open_graphic_window() {
|
|||||||
* Not to confuse with do_fullscreen_switch().
|
* Not to confuse with do_fullscreen_switch().
|
||||||
*/
|
*/
|
||||||
bool WinGraphicsWindow::
|
bool WinGraphicsWindow::
|
||||||
do_fullscreen_enable() {
|
do_fullscreen_enable(int x_size, int y_size) {
|
||||||
|
|
||||||
HWND hDesktopWindow = GetDesktopWindow();
|
HWND hDesktopWindow = GetDesktopWindow();
|
||||||
HDC scrnDC = GetDC(hDesktopWindow);
|
HDC scrnDC = GetDC(hDesktopWindow);
|
||||||
@ -1272,8 +1295,8 @@ do_fullscreen_enable() {
|
|||||||
// GetDeviceCaps(scrnDC, VERTRES);
|
// GetDeviceCaps(scrnDC, VERTRES);
|
||||||
ReleaseDC(hDesktopWindow, scrnDC);
|
ReleaseDC(hDesktopWindow, scrnDC);
|
||||||
|
|
||||||
DWORD dwWidth = _properties.get_x_size();
|
DWORD dwWidth = x_size;
|
||||||
DWORD dwHeight = _properties.get_y_size();
|
DWORD dwHeight = y_size;
|
||||||
DWORD dwFullScreenBitDepth = cur_bitdepth;
|
DWORD dwFullScreenBitDepth = cur_bitdepth;
|
||||||
|
|
||||||
DEVMODE dm;
|
DEVMODE dm;
|
||||||
@ -1301,12 +1324,16 @@ do_fullscreen_enable() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_fullscreen_display_mode = dm;
|
_fullscreen_display_mode = dm;
|
||||||
|
|
||||||
_properties.set_origin(0, 0);
|
|
||||||
_properties.set_size(dwWidth, dwHeight);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a low-level function that just puts Windows in fullscreen mode.
|
||||||
|
* Not to confuse with do_fullscreen_switch().
|
||||||
|
*/
|
||||||
|
bool WinGraphicsWindow::
|
||||||
|
do_fullscreen_enable() {
|
||||||
|
return do_fullscreen_enable(_properties.get_x_size(), _properties.get_y_size());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -109,8 +109,10 @@ protected:
|
|||||||
virtual void handle_reshape();
|
virtual void handle_reshape();
|
||||||
virtual bool do_fullscreen_resize(int x_size, int y_size);
|
virtual bool do_fullscreen_resize(int x_size, int y_size);
|
||||||
|
|
||||||
|
bool do_fullscreen_switch(int x_size, int y_size);
|
||||||
virtual bool do_fullscreen_switch();
|
virtual bool do_fullscreen_switch();
|
||||||
virtual bool do_windowed_switch();
|
virtual bool do_windowed_switch();
|
||||||
|
bool do_fullscreen_enable(int x_size, int y_size);
|
||||||
virtual bool do_fullscreen_enable();
|
virtual bool do_fullscreen_enable();
|
||||||
virtual bool do_fullscreen_disable();
|
virtual bool do_fullscreen_disable();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user