Browse Source

Merge branch 'release/1.10.x'

rdb 1 day ago
parent
commit
0e41b62743

+ 2 - 2
.github/workflows/ci.yml

@@ -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: |

+ 2 - 2
README.md

@@ -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

+ 15 - 4
direct/src/dist/commands.py

@@ -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_')

+ 1 - 0
direct/src/showbase/ShowBase.py

@@ -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

+ 28 - 0
doc/ReleaseNotes

@@ -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.

+ 12 - 0
makepanda/installer.nsi

@@ -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)

+ 1 - 1
panda/src/event/asyncFuture_ext.cxx

@@ -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);

+ 6 - 8
panda/src/event/pythonTask.cxx

@@ -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;
 

+ 6 - 1
panda/src/pgui/pgSliderBar.cxx

@@ -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();

+ 1 - 1
panda/src/x11display/x11GraphicsWindow.cxx

@@ -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";

+ 1 - 0
pandatool/src/deploy-stub/deploy-stub.c

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