Browse Source

Merge branch 'release/1.10.x'

rdb 6 years ago
parent
commit
2e9395b766

+ 4 - 4
README.md

@@ -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-2/).
+[this page](https://www.panda3d.org/download/sdk-1-10-3/).
 If you are familiar with installing Python packages, you can use
 If you are familiar with installing Python packages, you can use
 the following comand:
 the following comand:
 
 
@@ -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.2/panda3d-1.10.2-tools-win64.zip
-https://www.panda3d.org/download/panda3d-1.10.2/panda3d-1.10.2-tools-win32.zip
+https://www.panda3d.org/download/panda3d-1.10.3/panda3d-1.10.3-tools-win64.zip
+https://www.panda3d.org/download/panda3d-1.10.3/panda3d-1.10.3-tools-win32.zip
 
 
 After acquiring these dependencies, you may simply build Panda3D from the
 After acquiring these dependencies, you may simply build Panda3D from the
 command prompt using the following command.  (Change `14.1` to `14` if you are
 command prompt using the following command.  (Change `14.1` to `14` if you are
@@ -135,7 +135,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.2/panda3d-1.10.2-tools-mac.tar.gz).
+compile Panda3D, which can be acquired from [here](https://www.panda3d.org/download/panda3d-1.10.3/panda3d-1.10.3-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:

+ 5 - 2
direct/src/filter/FilterManager.py

@@ -239,7 +239,7 @@ class FilterManager(DirectObject):
 
 
         return quad
         return quad
 
 
-    def renderQuadInto(self, name="filter-stage", mul=1, div=1, align=1, depthtex=None, colortex=None, auxtex0=None, auxtex1=None):
+    def renderQuadInto(self, name="filter-stage", mul=1, div=1, align=1, depthtex=None, colortex=None, auxtex0=None, auxtex1=None, fbprops=None):
 
 
         """ Creates an offscreen buffer for an intermediate
         """ Creates an offscreen buffer for an intermediate
         computation. Installs a quad into the buffer.  Returns
         computation. Installs a quad into the buffer.  Returns
@@ -253,7 +253,10 @@ class FilterManager(DirectObject):
 
 
         depthbits = bool(depthtex != None)
         depthbits = bool(depthtex != None)
 
 
-        buffer = self.createBuffer(name, winx, winy, texgroup, depthbits)
+        if fbprops is not None:
+            buffer = self.createBuffer(name, winx, winy, texgroup, depthbits, fbprops=fbprops)
+        else:
+            buffer = self.createBuffer(name, winx, winy, texgroup, depthbits)
 
 
         if (buffer == None):
         if (buffer == None):
             return None
             return None

+ 7 - 5
direct/src/showbase/ShowBase.py

@@ -1679,16 +1679,18 @@ class ShowBase(DirectObject.DirectObject):
         return self.mouseWatcherNode.getModifierButtons().isDown(
         return self.mouseWatcherNode.getModifierButtons().isDown(
             KeyboardButton.meta())
             KeyboardButton.meta())
 
 
-    def attachInputDevice(self, device, prefix=None, gui=False):
+    def attachInputDevice(self, device, prefix=None, watch=False):
         """
         """
         This function attaches an input device to the data graph, which will
         This function attaches an input device to the data graph, which will
         cause the device to be polled and generate events.  If a prefix is
         cause the device to be polled and generate events.  If a prefix is
         given and not None, it is used to prefix events generated by this
         given and not None, it is used to prefix events generated by this
         device, separated by a hyphen.
         device, separated by a hyphen.
 
 
-        The gui argument can be set to True (as of Panda3D 1.10.3) to set up
+        The watch argument can be set to True (as of Panda3D 1.10.3) to set up
         the default MouseWatcher to receive inputs from this device, allowing
         the default MouseWatcher to receive inputs from this device, allowing
-        it to control user interfaces.
+        it to be polled via mouseWatcherNode and control user interfaces.
+        Setting this to True will also make it generate unprefixed events,
+        regardless of the specified prefix.
 
 
         If you call this, you should consider calling detachInputDevice when
         If you call this, you should consider calling detachInputDevice when
         you are done with the device or when it is disconnected.
         you are done with the device or when it is disconnected.
@@ -1700,7 +1702,7 @@ class ShowBase(DirectObject.DirectObject):
         idn = self.dataRoot.attachNewNode(InputDeviceNode(device, device.name))
         idn = self.dataRoot.attachNewNode(InputDeviceNode(device, device.name))
 
 
         # Setup the button thrower to generate events for the device.
         # Setup the button thrower to generate events for the device.
-        if prefix is not None or not gui:
+        if prefix is not None or not watch:
             bt = idn.attachNewNode(ButtonThrower(device.name))
             bt = idn.attachNewNode(ButtonThrower(device.name))
             if prefix is not None:
             if prefix is not None:
                 bt.node().setPrefix(prefix + '-')
                 bt.node().setPrefix(prefix + '-')
@@ -1709,7 +1711,7 @@ class ShowBase(DirectObject.DirectObject):
         assert self.notify.debug("Attached input device {0} with prefix {1}".format(device, prefix))
         assert self.notify.debug("Attached input device {0} with prefix {1}".format(device, prefix))
         self.__inputDeviceNodes[device] = idn
         self.__inputDeviceNodes[device] = idn
 
 
-        if gui:
+        if watch:
             idn.node().addChild(self.mouseWatcherNode)
             idn.node().addChild(self.mouseWatcherNode)
 
 
     def detachInputDevice(self, device):
     def detachInputDevice(self, device):

+ 37 - 0
doc/ReleaseNotes

@@ -1,3 +1,40 @@
+------------------------  RELEASE 1.10.3  -----------------------
+
+This is another bugfix release that addresses a variety of issues
+in 1.10.2 and further improves the stability.
+
+* Fix crash when unplugging certain devices on macOS
+* Fix crash on macOS when using RIME input
+* Fix logging issues/crashes in apps deployed with Python 2.7
+* Fix issues when starting in fullscreen on Linux/X11
+* Fix mapping of several gamepads including Trust GXT 24
+* Fix Linux crash when no input devices are present
+* Unbreak support for matrix arrays in vertex data in OpenGL
+* Allow creating multisample FBO in OpenGL with non-MS host window
+* Support playing and looping compressed Ogg and WAV audio files
+* Fix generation of CollisionBox for transformed geometry in .egg
+* Fix Bullet rigid body transform not updating after reparenting
+* Fix sporadic color scales with lighting and custom GLSL shader
+* Prevent faulty shaders from shutting down GSG on some drivers
+* Allow None as either argument to OdeJoint.attach()
+* Fix BufferViewer when main window is not opened right away
+* Properly detect extension of pz/gz compressed video/audio files
+* Fix for invalid behavior of SparseArray methods to clear bits
+* FilterManager now allows overriding framebuffer properties
+* Fix detection of core-only OpenGL profile on some drivers
+* Add gl-forward-compatible config var for OpenGL context creation
+* Add paste-emit-keystrokes variable to disable Ctrl+V on Windows
+* Fix in-place |= operator on Panda types (such as SparseArray)
+* Fix rare FFmpeg "bad src image pointers" errors after seek
+* Fix uses of types.InstanceType in some obscure direct functions
+* Fix capsule-into-sphere collision test in degenerate case
+* KeyboardButton.ascii_key now also accepts a str character
+* Fix errors in various Tkinter DIRECT widgets
+* Expose save_egg_file/save_egg_data functions in Python API
+* Fix assertion error in BoundingBox.set_min_max
+* Fix typo in CollisionTraverser.respect_prev_transform property
+* Properly install Python bindings when building FreeBSD installer
+
 ------------------------  RELEASE 1.10.2  -----------------------
 ------------------------  RELEASE 1.10.2  -----------------------
 
 
 This release fixes several more bugs, including a few regressions
 This release fixes several more bugs, including a few regressions

+ 14 - 0
panda/src/bullet/bulletRigidBodyNode.cxx

@@ -359,6 +359,20 @@ do_transform_changed() {
   }
   }
 }
 }
 
 
+/**
+ *
+ */
+void BulletRigidBodyNode::
+parents_changed() {
+
+  if (_motion.sync_disabled()) return;
+
+  if (get_num_parents() > 0) {
+    LightMutexHolder holder(BulletWorld::get_global_lock());
+    do_transform_changed();
+  }
+}
+
 /**
 /**
  *
  *
  */
  */

+ 1 - 0
panda/src/bullet/bulletRigidBodyNode.h

@@ -112,6 +112,7 @@ public:
   void do_sync_b2p();
   void do_sync_b2p();
 
 
 protected:
 protected:
+  virtual void parents_changed();
   virtual void transform_changed();
   virtual void transform_changed();
 
 
 private:
 private:

+ 3 - 1
panda/src/ffmpeg/ffmpegVideoCursor.cxx

@@ -755,7 +755,9 @@ do_poll() {
       PT(FfmpegBuffer) frame = do_alloc_frame();
       PT(FfmpegBuffer) frame = do_alloc_frame();
       nassertr(frame != nullptr, false);
       nassertr(frame != nullptr, false);
       _lock.release();
       _lock.release();
-      advance_to_frame(seek_frame);
+      if (seek_frame != _begin_frame) {
+        advance_to_frame(seek_frame);
+      }
       if (_frame_ready) {
       if (_frame_ready) {
         export_frame(frame);
         export_frame(frame);
         _lock.acquire();
         _lock.acquire();