Merge branch 'release/1.10.x'

This commit is contained in:
rdb 2022-09-02 23:14:15 +02:00
commit 79bd743957
9 changed files with 114 additions and 29 deletions

View File

@ -24,7 +24,7 @@ Installing Panda3D
==================
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
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
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.11/panda3d-1.10.11-tools-win32.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.12/panda3d-1.10.12-tools-win32.zip
After acquiring these dependencies, you can build Panda3D from the command
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
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,
you may build Panda3D using a command like the following:

View File

@ -81,6 +81,12 @@ defaultHiddenImports = {
'pandas.compat': ['lzma', 'cmath'],
'pandas._libs.tslibs.conversion': ['pandas._libs.tslibs.base'],
'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
# 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):
modname += '_'
if sys.version_info < (3, 8):
modname += 'm'
if 'linux' in self.platform:
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:
self.__loadModule(self.ModuleDef('_sysconfigdata__darwin_darwin', implicit=True))
elif 'linux' in self.platform or 'mac' in self.platform:
self.__loadModule(self.ModuleDef('_sysconfigdata', implicit=True))
modname += '_darwin_darwin'
try:
self.__loadModule(self.ModuleDef(modname, implicit=True))
except:
missing.append(modname)
# Now, any new modules we found get added to the export list.
for origName in list(self.mf.modules.keys()):
if origName not in origToNewName:
self.modules[origName] = self.ModuleDef(origName, implicit = True)
missing = []
for origName in self.mf.any_missing_maybe()[0]:
if origName in startupModules:
continue

View File

@ -240,10 +240,10 @@ class BufferViewer(DirectObject):
offsetx = (ringoffset[ring]*2.0) / float(sizex)
offsety = (ringoffset[ring]*2.0) / float(sizey)
bright = ringbright[ring]
vwriter.addData3f(Vec3.rfu(-1 - offsetx, 0, -1 - offsety))
vwriter.addData3f(Vec3.rfu( 1 + offsetx, 0, -1 - offsety))
vwriter.addData3f(Vec3.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(Vec3F.rfu( 1 + offsetx, 0, -1 - offsety))
vwriter.addData3f(Vec3F.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)

View File

@ -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 -----------------------
Maintenance release containing assorted bug fixes and minor improvements.

View File

@ -137,15 +137,17 @@ move_pointer(int device, int x, int y) {
if (device == 0) {
CGPoint point;
if (_properties.get_fullscreen()) {
point = CGPointMake(x, y + 1);
point = CGPointMake(x, y);
} else {
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
// (CGWarpMouseCursorPosition(point) == kCGErrorSuccess) {
if (CGDisplayMoveCursorToPoint(_display, 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);
// Generate a mouse event.
NSPoint pos = [_window mouseLocationOutsideOfEventStream];
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;
ny = y - 1;
ny = y;
} else {
// 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));
if (_properties.get_fullscreen()) {
point = CGPointMake(nx, ny + 1);
point = CGPointMake(nx, ny);
} else {
point = CGPointMake(nx + _properties.get_x_origin(),
ny + _properties.get_y_origin() + 1);
ny + _properties.get_y_origin());
}
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;
} else {
cocoadisplay_cat.warning() << "Failed to return mouse pointer to window\n";

View File

@ -121,9 +121,7 @@
NSPoint loc = [self convertPoint:[event locationInWindow] fromView:nil];
BOOL inside = [self mouse:loc inRect:[self bounds]];
// the correlation between mouse deltas and location are "debounced"
// apparently, so send deltas for both relative and confined modes
if (_graphicsWindow->get_properties().get_mouse_mode() != WindowProperties::M_absolute) {
if (_graphicsWindow->get_properties().get_mouse_mode() == WindowProperties::M_relative) {
_graphicsWindow->handle_mouse_moved_event(inside, [event deltaX], [event deltaY], false);
} else {
_graphicsWindow->handle_mouse_moved_event(inside, loc.x, loc.y, true);

View File

@ -30,6 +30,7 @@
- (void) windowDidResize:(NSNotification *)notification {
// Forcing a move event is unfortunately necessary because Cocoa does not
// call windowDidMove in case of window zooms.
_graphicsWindow->handle_move_event();
_graphicsWindow->handle_resize_event();
}

View File

@ -208,6 +208,7 @@ test_intersection_from_sphere(const CollisionEntry &entry) const {
bool intersect;
LPlane plane;
LVector3 normal;
bool fully_inside = true;
for(ip = 0, intersect = false; ip < 6 && !intersect; 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.
PN_stdfloat dot = delta.dot(plane.get_normal());
if (dot > 0.1f) {
fully_inside = false;
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()))) {
// No intersection with plane? This means the plane's effective normal
// was within the plane itself. A useless polygon.
fully_inside = false;
continue;
}
if (dist > from_radius || dist < -from_radius) {
// No intersection with the plane.
if (dist > from_radius) {
// Fully outside this plane, there can not be an intersection.
return nullptr;
}
if (dist < -from_radius) {
// Fully inside this plane.
continue;
}
fully_inside = false;
LPoint2 p = to_2d(from_center - dist * plane.get_normal(), ip);
PN_stdfloat edge_dist = 0.0f;
@ -342,8 +350,9 @@ test_intersection_from_sphere(const CollisionEntry &entry) const {
}
intersect = true;
}
if( !intersect )
if (!fully_inside && !intersect) {
return nullptr;
}
if (collide_cat.is_debug()) {
collide_cat.debug()

View File

@ -19,6 +19,7 @@ classifiers =
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
Programming Language :: Python :: 3.11
Programming Language :: Python :: Implementation :: CPython
Topic :: Games/Entertainment
Topic :: Multimedia