mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-26 22:53:16 -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
|
||||
[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:
|
||||
|
27
direct/src/dist/FreezeTool.py
vendored
27
direct/src/dist/FreezeTool.py
vendored
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
@ -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";
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user