Merge branch 'release/1.10.x'

This commit is contained in:
rdb 2025-12-22 16:12:54 +01:00
commit 0e41b62743
11 changed files with 75 additions and 19 deletions

View File

@ -386,9 +386,9 @@ jobs:
shell: powershell
run: |
$wc = New-Object System.Net.WebClient
$wc.DownloadFile("https://www.panda3d.org/download/panda3d-1.10.15/panda3d-1.10.15-tools-win64.zip", "thirdparty-tools.zip")
$wc.DownloadFile("https://www.panda3d.org/download/panda3d-1.10.16/panda3d-1.10.16-tools-win64.zip", "thirdparty-tools.zip")
Expand-Archive -Path thirdparty-tools.zip
Move-Item -Path thirdparty-tools/panda3d-1.10.15/thirdparty -Destination .
Move-Item -Path thirdparty-tools/panda3d-1.10.16/thirdparty -Destination .
- name: Get thirdparty packages (macOS)
if: runner.os == 'macOS'
run: |

View File

@ -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.15/panda3d-1.10.15-tools-win64.zip
- https://www.panda3d.org/download/panda3d-1.10.15/panda3d-1.10.15-tools-win32.zip
- https://www.panda3d.org/download/panda3d-1.10.16/panda3d-1.10.16-tools-win64.zip
- https://www.panda3d.org/download/panda3d-1.10.16/panda3d-1.10.16-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

View File

@ -319,7 +319,10 @@ class build_apps(setuptools.Command):
'win_amd64',
]
if sys.version_info >= (3, 13):
if sys.version_info >= (3, 14):
# This version of Python is only available for 10.15+.
self.platforms[1] = 'macosx_10_15_x86_64'
elif sys.version_info >= (3, 13):
# This version of Python is only available for 10.13+.
self.platforms[1] = 'macosx_10_13_x86_64'
@ -707,8 +710,14 @@ class build_apps(setuptools.Command):
subprocess.check_call([sys.executable, '-m', 'pip'] + pip_args)
except:
# Display a more helpful message for these common issues.
if platform.startswith('macosx_10_9_') and sys.version_info >= (3, 13):
new_platform = platform.replace('macosx_10_9_', 'macosx_10_13_')
if platform.startswith('macosx_10_13_') and sys.version_info >= (3, 14):
new_platform = platform.replace('macosx_10_13_', 'macosx_10_15_')
self.announce('This error likely occurs because {} is not a supported target as of Python 3.14.\nChange the target platform to {} instead.'.format(platform, new_platform), distutils.log.ERROR)
elif platform.startswith('macosx_10_9_') and sys.version_info >= (3, 13):
if sys.version_info >= (3, 14):
new_platform = platform.replace('macosx_10_9_', 'macosx_10_15_')
else:
new_platform = platform.replace('macosx_10_9_', 'macosx_10_13_')
self.announce('This error likely occurs because {} is not a supported target as of Python 3.13.\nChange the target platform to {} instead.'.format(platform, new_platform), distutils.log.ERROR)
elif platform.startswith('manylinux2010_') and sys.version_info >= (3, 11):
new_platform = platform.replace('manylinux2010_', 'manylinux2014_')
@ -717,7 +726,9 @@ class build_apps(setuptools.Command):
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):
if sys.version_info >= (3, 13):
if sys.version_info >= (3, 14):
new_platform = platform.replace('macosx_10_6_', 'macosx_10_15_')
elif sys.version_info >= (3, 13):
new_platform = platform.replace('macosx_10_6_', 'macosx_10_13_')
else:
new_platform = platform.replace('macosx_10_6_', 'macosx_10_9_')

View File

@ -3517,6 +3517,7 @@ class ShowBase(DirectObject.DirectObject):
remove_camera_frustum = removeCameraFrustum
save_cube_map = saveCubeMap
save_sphere_map = saveSphereMap
user_exit = userExit
start_wx = startWx
start_tk = startTk
start_direct = startDirect

View File

@ -1,3 +1,31 @@
----------------------- RELEASE 1.10.16 -----------------------
This maintenance release fixes some minor defects and stability issues.
* OpenAL: Support non-default coordinate systems when playing 3D audio
* Tasks: Coroutine detect now also handles coroutine subclass to support Nuitka
* Tasks: Now properly handles generators without send()
* Windows: Fixes a hang when adjusting Z-order in some situations
* Fix SparseArray methods get_lowest_off_bit() and get_lowest_on_bit()
* Fix linecache error when distributing for newer Python versions
* Fix `await AsyncFuture.gather()` returning first item instead of tuple (#1738)
* Fix use-after-free in collision system with transform cache disabled (#1733)
* Egg: Add limited forward compatibility for metallic-roughness textures
* OpenGL: fix error blitting depth texture on macOS (#1719)
* OpenGL: fix SSBO support not being detected in certain situations
* GLSL: Add p3d_MetallicRoughnessTexture input mapped to M_metallic_roughness
* X11: Add config variable to enable detection of autorepeat key events (#1735)
* GUI: Fix bug with PGSliderBar dragging (#1722)
* Minor thread safety things for free-threaded Python builds
* Add forward compatibility for bam version 6.46
* Fixes a harmless buffer overflow in pdtoa
* Fix compilation issues with SDL version of tinydisplay (#1708)
* bam2egg: Fix issue when having more than two tags (#1725)
* Fix "Detected leak for ... which interrogate cannot delete." error (#1743)
* Fix PythonCallbackObject crash upon destruction in some cases
* PStats: Fix crash when receiving frames out of order
* PandaFramework::close_framework() now clears task manager of tasks
----------------------- RELEASE 1.10.15 -----------------------
This release adds support for Python 3.13, and fixes some significant bugs.

View File

@ -381,6 +381,7 @@ SectionGroup "Python modules" SecGroupPython
!insertmacro PyBindingSection 3.12-32 .cp312-win32.pyd
!insertmacro PyBindingSection 3.13-32 .cp313-win32.pyd
!insertmacro PyBindingSection 3.14-32 .cp314-win32.pyd
!insertmacro PyBindingSection 3.15-32 .cp315-win32.pyd
!else
!insertmacro PyBindingSection 3.5 .cp35-win_amd64.pyd
!insertmacro PyBindingSection 3.6 .cp36-win_amd64.pyd
@ -392,6 +393,7 @@ SectionGroup "Python modules" SecGroupPython
!insertmacro PyBindingSection 3.12 .cp312-win_amd64.pyd
!insertmacro PyBindingSection 3.13 .cp313-win_amd64.pyd
!insertmacro PyBindingSection 3.14 .cp314-win_amd64.pyd
!insertmacro PyBindingSection 3.15 .cp315-win_amd64.pyd
!endif
SectionGroupEnd
@ -504,6 +506,7 @@ Function .onInit
!insertmacro MaybeEnablePyBindingSection 3.12-32
!insertmacro MaybeEnablePyBindingSection 3.13-32
!insertmacro MaybeEnablePyBindingSection 3.14-32
!insertmacro MaybeEnablePyBindingSection 3.15-32
${EndIf}
!else
!insertmacro MaybeEnablePyBindingSection 3.5
@ -517,6 +520,7 @@ Function .onInit
!insertmacro MaybeEnablePyBindingSection 3.12
!insertmacro MaybeEnablePyBindingSection 3.13
!insertmacro MaybeEnablePyBindingSection 3.14
!insertmacro MaybeEnablePyBindingSection 3.15
${EndIf}
!endif
@ -546,6 +550,10 @@ Function .onInit
SectionSetFlags ${SecPyBindings3.14} ${SF_RO}
SectionSetInstTypes ${SecPyBindings3.14} 0
!endif
!ifdef SecPyBindings3.15
SectionSetFlags ${SecPyBindings3.15} ${SF_RO}
SectionSetInstTypes ${SecPyBindings3.15} 0
!endif
${EndUnless}
FunctionEnd
@ -851,6 +859,7 @@ Section Uninstall
!insertmacro RemovePythonPath 3.12-32
!insertmacro RemovePythonPath 3.13-32
!insertmacro RemovePythonPath 3.14-32
!insertmacro RemovePythonPath 3.15-32
!else
!insertmacro RemovePythonPath 3.5
!insertmacro RemovePythonPath 3.6
@ -862,6 +871,7 @@ Section Uninstall
!insertmacro RemovePythonPath 3.12
!insertmacro RemovePythonPath 3.13
!insertmacro RemovePythonPath 3.14
!insertmacro RemovePythonPath 3.15
!endif
SetDetailsPrint both
@ -934,6 +944,7 @@ SectionEnd
!insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.12-32} $(DESC_SecPyBindings3.12-32)
!insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.13-32} $(DESC_SecPyBindings3.13-32)
!insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.14-32} $(DESC_SecPyBindings3.14-32)
!insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.15-32} $(DESC_SecPyBindings3.15-32)
!else
!insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.5} $(DESC_SecPyBindings3.5)
!insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.6} $(DESC_SecPyBindings3.6)
@ -945,6 +956,7 @@ SectionEnd
!insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.12} $(DESC_SecPyBindings3.12)
!insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.13} $(DESC_SecPyBindings3.13)
!insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.14} $(DESC_SecPyBindings3.14)
!insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.15} $(DESC_SecPyBindings3.15)
!endif
!ifdef INCLUDE_PYVER
!insertmacro MUI_DESCRIPTION_TEXT ${SecPython} $(DESC_SecPython)

View File

@ -373,7 +373,7 @@ gather(PyObject *args) {
futures.push_back(fut);
continue;
}
} else if (PyCoro_CheckExact(item)) {
} else if (PyObject_TypeCheck(item, &PyCoro_Type)) {
// We allow passing in a coroutine instead of a future. This causes it
// to be scheduled as a task on the current task manager.
PT(AsyncTask) task = new PythonTask(item);

View File

@ -53,12 +53,10 @@ PythonTask(PyObject *func_or_coro, const std::string &name) :
if (func_or_coro == Py_None || PyCallable_Check(func_or_coro)) {
_function = Py_NewRef(func_or_coro);
}
else if (PyCoro_CheckExact(func_or_coro)) {
// We also allow passing in a coroutine, because why not.
_generator = Py_NewRef(func_or_coro);
}
else if (PyGen_CheckExact(func_or_coro)) {
// Something emulating a coroutine.
else if (PyCoro_CheckExact(func_or_coro) ||
PyGen_CheckExact(func_or_coro) ||
PyType_IsSubtype(Py_TYPE(func_or_coro), &PyCoro_Type)) {
// We also allow passing in a coroutine or something emulating it.
_generator = Py_NewRef(func_or_coro);
}
else {
@ -620,7 +618,7 @@ do_python_task() {
Py_DECREF(str);
Py_DECREF(str2);
}
if (PyCoro_CheckExact(result)) {
if (PyObject_TypeCheck(result, &PyCoro_Type)) {
// If a coroutine, am_await is possible but senseless, since we can
// just call send(None) on the coroutine itself.
_generator = result;
@ -747,7 +745,7 @@ do_python_task() {
}
} else if (result == Py_None) {
// Bare yield means to continue next frame.
// Bare yield from a coroutine means to continue next frame.
Py_DECREF(result);
return DS_cont;

View File

@ -693,6 +693,11 @@ advance_scroll() {
*/
void PGSliderBar::
advance_page() {
// Do not try to advance the page while dragging
if (_dragging) {
return;
}
// Is the mouse position left or right of the current thumb position?
LPoint3 mouse = mouse_to_local(_mouse_pos) - _thumb_start;
PN_stdfloat target_ratio = mouse.dot(_axis) / _range_x;
@ -705,7 +710,7 @@ advance_page() {
t = min(_ratio + _page_ratio - _scroll_ratio, target_ratio);
}
internal_set_ratio(t);
if (t == target_ratio) {
if (_ratio == target_ratio) {
// We made it; begin dragging from now on until the user releases the
// mouse.
begin_drag();

View File

@ -2755,7 +2755,7 @@ enable_detectable_auto_repeat() {
if (!x_detectable_auto_repeat) {
return;
}
Bool supported;
if (XkbSetDetectableAutoRepeat(_display, True, &supported)) {
x11display_cat.info() << "Detectable auto-repeat enabled.\n";

View File

@ -21,6 +21,7 @@
#include <stdio.h>
#include <stdint.h>
#include <fcntl.h>
#include <time.h>
#include <locale.h>