mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-27 23:34:57 -04:00
Merge branch 'release/1.10.x'
This commit is contained in:
commit
79bd743957
@ -24,7 +24,7 @@ Installing Panda3D
|
|||||||
==================
|
==================
|
||||||
|
|
||||||
The latest Panda3D SDK can be downloaded from
|
The latest Panda3D SDK can be downloaded from
|
||||||
[this page](https://www.panda3d.org/download/sdk-1-10-11/).
|
[this page](https://www.panda3d.org/download/sdk-1-10-12/).
|
||||||
If you are familiar with installing Python packages, you can use
|
If you are familiar with installing Python packages, you can use
|
||||||
the following command:
|
the following command:
|
||||||
|
|
||||||
@ -64,8 +64,8 @@ depending on whether you are on a 32-bit or 64-bit system, or you can
|
|||||||
[click here](https://github.com/rdb/panda3d-thirdparty) for instructions on
|
[click here](https://github.com/rdb/panda3d-thirdparty) for instructions on
|
||||||
building them from source.
|
building them from source.
|
||||||
|
|
||||||
- https://www.panda3d.org/download/panda3d-1.10.11/panda3d-1.10.11-tools-win64.zip
|
- https://www.panda3d.org/download/panda3d-1.10.12/panda3d-1.10.12-tools-win64.zip
|
||||||
- https://www.panda3d.org/download/panda3d-1.10.11/panda3d-1.10.11-tools-win32.zip
|
- https://www.panda3d.org/download/panda3d-1.10.12/panda3d-1.10.12-tools-win32.zip
|
||||||
|
|
||||||
After acquiring these dependencies, you can build Panda3D from the command
|
After acquiring these dependencies, you can build Panda3D from the command
|
||||||
prompt using the following command. Change the `--msvc-version` option based
|
prompt using the following command. Change the `--msvc-version` option based
|
||||||
@ -136,7 +136,7 @@ macOS
|
|||||||
-----
|
-----
|
||||||
|
|
||||||
On macOS, you will need to download a set of precompiled thirdparty packages in order to
|
On macOS, you will need to download a set of precompiled thirdparty packages in order to
|
||||||
compile Panda3D, which can be acquired from [here](https://www.panda3d.org/download/panda3d-1.10.11/panda3d-1.10.11-tools-mac.tar.gz).
|
compile Panda3D, which can be acquired from [here](https://www.panda3d.org/download/panda3d-1.10.12/panda3d-1.10.12-tools-mac.tar.gz).
|
||||||
|
|
||||||
After placing the thirdparty directory inside the panda3d source directory,
|
After placing the thirdparty directory inside the panda3d source directory,
|
||||||
you may build Panda3D using a command like the following:
|
you may build Panda3D using a command like the following:
|
||||||
|
27
direct/src/dist/FreezeTool.py
vendored
27
direct/src/dist/FreezeTool.py
vendored
@ -81,6 +81,12 @@ defaultHiddenImports = {
|
|||||||
'pandas.compat': ['lzma', 'cmath'],
|
'pandas.compat': ['lzma', 'cmath'],
|
||||||
'pandas._libs.tslibs.conversion': ['pandas._libs.tslibs.base'],
|
'pandas._libs.tslibs.conversion': ['pandas._libs.tslibs.base'],
|
||||||
'plyer': ['plyer.platforms'],
|
'plyer': ['plyer.platforms'],
|
||||||
|
'scipy.linalg': ['scipy.linalg.cython_blas', 'scipy.linalg.cython_lapack'],
|
||||||
|
'scipy.sparse.csgraph': ['scipy.sparse.csgraph._validation'],
|
||||||
|
'scipy.spatial._qhull': ['scipy._lib.messagestream'],
|
||||||
|
'scipy.spatial.transform._rotation': ['scipy.spatial.transform._rotation_groups'],
|
||||||
|
'scipy.special._ufuncs': ['scipy.special._ufuncs_cxx'],
|
||||||
|
'scipy.stats._stats': ['scipy.special.cython_special'],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1189,22 +1195,31 @@ class Freezer:
|
|||||||
|
|
||||||
# Special case for sysconfig, which depends on a platform-specific
|
# Special case for sysconfig, which depends on a platform-specific
|
||||||
# sysconfigdata module on POSIX systems.
|
# sysconfigdata module on POSIX systems.
|
||||||
if 'sysconfig' in self.mf.modules:
|
missing = []
|
||||||
|
if 'sysconfig' in self.mf.modules and \
|
||||||
|
('linux' in self.platform or 'mac' in self.platform):
|
||||||
|
modname = '_sysconfigdata'
|
||||||
if sys.version_info >= (3, 6):
|
if sys.version_info >= (3, 6):
|
||||||
|
modname += '_'
|
||||||
|
if sys.version_info < (3, 8):
|
||||||
|
modname += 'm'
|
||||||
|
|
||||||
if 'linux' in self.platform:
|
if 'linux' in self.platform:
|
||||||
arch = self.platform.split('_', 1)[1]
|
arch = self.platform.split('_', 1)[1]
|
||||||
self.__loadModule(self.ModuleDef('_sysconfigdata__linux_' + arch + '-linux-gnu', implicit=True))
|
modname += '_linux_' + arch + '-linux-gnu'
|
||||||
elif 'mac' in self.platform:
|
elif 'mac' in self.platform:
|
||||||
self.__loadModule(self.ModuleDef('_sysconfigdata__darwin_darwin', implicit=True))
|
modname += '_darwin_darwin'
|
||||||
elif 'linux' in self.platform or 'mac' in self.platform:
|
|
||||||
self.__loadModule(self.ModuleDef('_sysconfigdata', implicit=True))
|
try:
|
||||||
|
self.__loadModule(self.ModuleDef(modname, implicit=True))
|
||||||
|
except:
|
||||||
|
missing.append(modname)
|
||||||
|
|
||||||
# Now, any new modules we found get added to the export list.
|
# Now, any new modules we found get added to the export list.
|
||||||
for origName in list(self.mf.modules.keys()):
|
for origName in list(self.mf.modules.keys()):
|
||||||
if origName not in origToNewName:
|
if origName not in origToNewName:
|
||||||
self.modules[origName] = self.ModuleDef(origName, implicit = True)
|
self.modules[origName] = self.ModuleDef(origName, implicit = True)
|
||||||
|
|
||||||
missing = []
|
|
||||||
for origName in self.mf.any_missing_maybe()[0]:
|
for origName in self.mf.any_missing_maybe()[0]:
|
||||||
if origName in startupModules:
|
if origName in startupModules:
|
||||||
continue
|
continue
|
||||||
|
@ -240,10 +240,10 @@ class BufferViewer(DirectObject):
|
|||||||
offsetx = (ringoffset[ring]*2.0) / float(sizex)
|
offsetx = (ringoffset[ring]*2.0) / float(sizex)
|
||||||
offsety = (ringoffset[ring]*2.0) / float(sizey)
|
offsety = (ringoffset[ring]*2.0) / float(sizey)
|
||||||
bright = ringbright[ring]
|
bright = ringbright[ring]
|
||||||
vwriter.addData3f(Vec3.rfu(-1 - offsetx, 0, -1 - offsety))
|
vwriter.addData3f(Vec3F.rfu(-1 - offsetx, 0, -1 - offsety))
|
||||||
vwriter.addData3f(Vec3.rfu( 1 + offsetx, 0, -1 - offsety))
|
vwriter.addData3f(Vec3F.rfu( 1 + offsetx, 0, -1 - offsety))
|
||||||
vwriter.addData3f(Vec3.rfu( 1 + offsetx, 0, 1 + offsety))
|
vwriter.addData3f(Vec3F.rfu( 1 + offsetx, 0, 1 + offsety))
|
||||||
vwriter.addData3f(Vec3.rfu(-1 - offsetx, 0, 1 + offsety))
|
vwriter.addData3f(Vec3F.rfu(-1 - offsetx, 0, 1 + offsety))
|
||||||
cwriter.addData3f(bright, bright, bright)
|
cwriter.addData3f(bright, bright, bright)
|
||||||
cwriter.addData3f(bright, bright, bright)
|
cwriter.addData3f(bright, bright, bright)
|
||||||
cwriter.addData3f(bright, bright, bright)
|
cwriter.addData3f(bright, bright, bright)
|
||||||
|
@ -1,3 +1,59 @@
|
|||||||
|
----------------------- RELEASE 1.10.12 -----------------------
|
||||||
|
|
||||||
|
Recommended maintenance release containing primarily bug fixes.
|
||||||
|
|
||||||
|
Windowing
|
||||||
|
* Windows: Fix origin not respected when switching to windowed mode
|
||||||
|
* macOS: Fix origin not being updated when resizing window
|
||||||
|
* macOS: Fix off-by-one errors with mouse cursor position
|
||||||
|
* macOS: Fix issues with confined mouse mode
|
||||||
|
* macOS: Fix events being suppressed when moving the mouse pointer
|
||||||
|
* macOS: Invert horizontal scroll, set `cocoa-invert-wheel-x true` to revert
|
||||||
|
|
||||||
|
Rendering
|
||||||
|
* Add `shadow-cube-map-filter` setting to enable cube map shadow filtering
|
||||||
|
* Support floating-point FBOs in OpenGL ES 2+
|
||||||
|
* Fix texture format selection in OpenGL with T_half_float component type
|
||||||
|
* Added `egl-device-index` config var to select EGL device
|
||||||
|
* Offscreen windows in tinydisplay renderer are now resizeable
|
||||||
|
* CommonFilters now supports alternative coordinate systems
|
||||||
|
* Fix BufferViewer frame when using a different coordinate system
|
||||||
|
|
||||||
|
Deployment
|
||||||
|
* Fix _bootlocale error in deployed application on Windows with Python 3.10
|
||||||
|
* Include _sysconfigdata module properly when using sysconfig module
|
||||||
|
* Fix building deploy-stub on platforms that use DT_RUNPATH instead of DT_RPATH
|
||||||
|
* `sys.flags.optimize` is now set to 2 in Python 3.2 and above
|
||||||
|
* Fix import errors when using scipy
|
||||||
|
|
||||||
|
Miscellaneous
|
||||||
|
* `Texture::get_ram_image_as()` fixed for 3D textures
|
||||||
|
* Fix PStats GPU timing not working with newer NVIDIA drivers
|
||||||
|
* Fix false negative in collision test when sphere is fully inside box
|
||||||
|
* Resolve segmentation fault when statically linking ffmpeg module
|
||||||
|
* Fix issue with failed mmap when using WebcamVideo on Linux
|
||||||
|
* macOS: Keyboard/mouse devices are no longer enumerated by default
|
||||||
|
* Fix repr of LPlane class
|
||||||
|
* Remove dependency on ShowBase in FilterManager
|
||||||
|
* Many new functions added to interrogatedb module to query additional info
|
||||||
|
* Interrogate no longer writes wrappers with rvalue references to interrogatedb
|
||||||
|
* PStats on Linux: Fix mouse motion detected outside strip chart graph area
|
||||||
|
* Fix assertion when reading bam file with Bullet convex hull shape
|
||||||
|
* Fix memory leak when specifying owner of a task
|
||||||
|
* Add additional helpful debug/spam prints to display code
|
||||||
|
|
||||||
|
Build
|
||||||
|
* Support building with Python 3.11
|
||||||
|
* Support building with OpenSSL 1.1.1 on Windows
|
||||||
|
* Support building with OpenEXR 3.0 or 3.1 on Windows
|
||||||
|
* Fix errors when compiling Panda headers with MinGW
|
||||||
|
* Allow compiling Panda headers on Windows without NOMINMAX set
|
||||||
|
* Fix wheel platform tag on manylinux aarch64
|
||||||
|
* Experimentally allow building with mimalloc on Windows
|
||||||
|
* Makepanda records cache timestamps as integers instead of floats
|
||||||
|
* Makepanda can now also build tinydisplay on Linux without X11
|
||||||
|
* Fix naming of built wheels when building for macOS 12
|
||||||
|
|
||||||
----------------------- RELEASE 1.10.11 -----------------------
|
----------------------- RELEASE 1.10.11 -----------------------
|
||||||
|
|
||||||
Maintenance release containing assorted bug fixes and minor improvements.
|
Maintenance release containing assorted bug fixes and minor improvements.
|
||||||
|
@ -137,15 +137,17 @@ move_pointer(int device, int x, int y) {
|
|||||||
if (device == 0) {
|
if (device == 0) {
|
||||||
CGPoint point;
|
CGPoint point;
|
||||||
if (_properties.get_fullscreen()) {
|
if (_properties.get_fullscreen()) {
|
||||||
point = CGPointMake(x, y + 1);
|
point = CGPointMake(x, y);
|
||||||
} else {
|
} else {
|
||||||
point = CGPointMake(x + _properties.get_x_origin(),
|
point = CGPointMake(x + _properties.get_x_origin(),
|
||||||
y + _properties.get_y_origin() + 1);
|
y + _properties.get_y_origin());
|
||||||
}
|
}
|
||||||
|
|
||||||
// I don't know what the difference between these two methods is. if
|
if (CGWarpMouseCursorPosition(point) == kCGErrorSuccess) {
|
||||||
// (CGWarpMouseCursorPosition(point) == kCGErrorSuccess) {
|
//After moving (or warping) the mouse position, CG starts an event
|
||||||
if (CGDisplayMoveCursorToPoint(_display, point) == kCGErrorSuccess) {
|
// suppression interval during which no more mouse events can occur
|
||||||
|
// This interval can be interupted by the following call :
|
||||||
|
CGAssociateMouseAndMouseCursorPosition(YES);
|
||||||
// Generate a mouse event.
|
// Generate a mouse event.
|
||||||
NSPoint pos = [_window mouseLocationOutsideOfEventStream];
|
NSPoint pos = [_window mouseLocationOutsideOfEventStream];
|
||||||
NSPoint loc = [_view convertPoint:pos fromView:nil];
|
NSPoint loc = [_view convertPoint:pos fromView:nil];
|
||||||
@ -1861,9 +1863,8 @@ handle_mouse_moved_event(bool in_window, double x, double y, bool absolute) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Strangely enough, in Cocoa, mouse Y coordinates are 1-based.
|
|
||||||
nx = x;
|
nx = x;
|
||||||
ny = y - 1;
|
ny = y;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// We received deltas, so add it to the current mouse position.
|
// We received deltas, so add it to the current mouse position.
|
||||||
@ -1880,13 +1881,17 @@ handle_mouse_moved_event(bool in_window, double x, double y, bool absolute) {
|
|||||||
ny = std::max(0., std::min((double) get_y_size() - 1, ny));
|
ny = std::max(0., std::min((double) get_y_size() - 1, ny));
|
||||||
|
|
||||||
if (_properties.get_fullscreen()) {
|
if (_properties.get_fullscreen()) {
|
||||||
point = CGPointMake(nx, ny + 1);
|
point = CGPointMake(nx, ny);
|
||||||
} else {
|
} else {
|
||||||
point = CGPointMake(nx + _properties.get_x_origin(),
|
point = CGPointMake(nx + _properties.get_x_origin(),
|
||||||
ny + _properties.get_y_origin() + 1);
|
ny + _properties.get_y_origin());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CGWarpMouseCursorPosition(point) == kCGErrorSuccess) {
|
if (CGWarpMouseCursorPosition(point) == kCGErrorSuccess) {
|
||||||
|
//After moving (or warping) the mouse position, CG starts an event
|
||||||
|
// suppression interval during which no more mouse events can occur
|
||||||
|
// This interval can be interupted by the following call :
|
||||||
|
CGAssociateMouseAndMouseCursorPosition(YES);
|
||||||
in_window = true;
|
in_window = true;
|
||||||
} else {
|
} else {
|
||||||
cocoadisplay_cat.warning() << "Failed to return mouse pointer to window\n";
|
cocoadisplay_cat.warning() << "Failed to return mouse pointer to window\n";
|
||||||
|
@ -121,9 +121,7 @@
|
|||||||
NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil];
|
NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil];
|
||||||
BOOL inside = [self mouse:loc inRect:[self bounds]];
|
BOOL inside = [self mouse:loc inRect:[self bounds]];
|
||||||
|
|
||||||
// the correlation between mouse deltas and location are "debounced"
|
if (_graphicsWindow->get_properties().get_mouse_mode() == WindowProperties::M_relative) {
|
||||||
// apparently, so send deltas for both relative and confined modes
|
|
||||||
if (_graphicsWindow->get_properties().get_mouse_mode() != WindowProperties::M_absolute) {
|
|
||||||
_graphicsWindow->handle_mouse_moved_event(inside, [event deltaX], [event deltaY], false);
|
_graphicsWindow->handle_mouse_moved_event(inside, [event deltaX], [event deltaY], false);
|
||||||
} else {
|
} else {
|
||||||
_graphicsWindow->handle_mouse_moved_event(inside, loc.x, loc.y, true);
|
_graphicsWindow->handle_mouse_moved_event(inside, loc.x, loc.y, true);
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
- (void) windowDidResize:(NSNotification *)notification {
|
- (void) windowDidResize:(NSNotification *)notification {
|
||||||
// Forcing a move event is unfortunately necessary because Cocoa does not
|
// Forcing a move event is unfortunately necessary because Cocoa does not
|
||||||
// call windowDidMove in case of window zooms.
|
// call windowDidMove in case of window zooms.
|
||||||
|
_graphicsWindow->handle_move_event();
|
||||||
_graphicsWindow->handle_resize_event();
|
_graphicsWindow->handle_resize_event();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,6 +208,7 @@ test_intersection_from_sphere(const CollisionEntry &entry) const {
|
|||||||
bool intersect;
|
bool intersect;
|
||||||
LPlane plane;
|
LPlane plane;
|
||||||
LVector3 normal;
|
LVector3 normal;
|
||||||
|
bool fully_inside = true;
|
||||||
|
|
||||||
for(ip = 0, intersect = false; ip < 6 && !intersect; ip++) {
|
for(ip = 0, intersect = false; ip < 6 && !intersect; ip++) {
|
||||||
plane = get_plane(ip);
|
plane = get_plane(ip);
|
||||||
@ -224,6 +225,7 @@ test_intersection_from_sphere(const CollisionEntry &entry) const {
|
|||||||
// moving in the same direction as the plane's normal.
|
// moving in the same direction as the plane's normal.
|
||||||
PN_stdfloat dot = delta.dot(plane.get_normal());
|
PN_stdfloat dot = delta.dot(plane.get_normal());
|
||||||
if (dot > 0.1f) {
|
if (dot > 0.1f) {
|
||||||
|
fully_inside = false;
|
||||||
continue; // no intersection
|
continue; // no intersection
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,13 +282,19 @@ test_intersection_from_sphere(const CollisionEntry &entry) const {
|
|||||||
if (!plane.intersects_line(dist, from_center, -(plane.get_normal()))) {
|
if (!plane.intersects_line(dist, from_center, -(plane.get_normal()))) {
|
||||||
// No intersection with plane? This means the plane's effective normal
|
// No intersection with plane? This means the plane's effective normal
|
||||||
// was within the plane itself. A useless polygon.
|
// was within the plane itself. A useless polygon.
|
||||||
|
fully_inside = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dist > from_radius || dist < -from_radius) {
|
if (dist > from_radius) {
|
||||||
// No intersection with the plane.
|
// Fully outside this plane, there can not be an intersection.
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
if (dist < -from_radius) {
|
||||||
|
// Fully inside this plane.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
fully_inside = false;
|
||||||
|
|
||||||
LPoint2 p = to_2d(from_center - dist * plane.get_normal(), ip);
|
LPoint2 p = to_2d(from_center - dist * plane.get_normal(), ip);
|
||||||
PN_stdfloat edge_dist = 0.0f;
|
PN_stdfloat edge_dist = 0.0f;
|
||||||
@ -342,8 +350,9 @@ test_intersection_from_sphere(const CollisionEntry &entry) const {
|
|||||||
}
|
}
|
||||||
intersect = true;
|
intersect = true;
|
||||||
}
|
}
|
||||||
if( !intersect )
|
if (!fully_inside && !intersect) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
if (collide_cat.is_debug()) {
|
if (collide_cat.is_debug()) {
|
||||||
collide_cat.debug()
|
collide_cat.debug()
|
||||||
|
@ -19,6 +19,7 @@ classifiers =
|
|||||||
Programming Language :: Python :: 3.8
|
Programming Language :: Python :: 3.8
|
||||||
Programming Language :: Python :: 3.9
|
Programming Language :: Python :: 3.9
|
||||||
Programming Language :: Python :: 3.10
|
Programming Language :: Python :: 3.10
|
||||||
|
Programming Language :: Python :: 3.11
|
||||||
Programming Language :: Python :: Implementation :: CPython
|
Programming Language :: Python :: Implementation :: CPython
|
||||||
Topic :: Games/Entertainment
|
Topic :: Games/Entertainment
|
||||||
Topic :: Multimedia
|
Topic :: Multimedia
|
||||||
|
Loading…
x
Reference in New Issue
Block a user