diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a6236e261d..ed4959bf82 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -333,12 +333,12 @@ jobs: if: "!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[ci skip]')" strategy: matrix: - os: [ubuntu-16.04, windows-2016, macOS-latest] + os: [ubuntu-18.04, windows-2016, macOS-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v1 - name: Install dependencies (Ubuntu) - if: matrix.os == 'ubuntu-16.04' + if: matrix.os == 'ubuntu-18.04' run: | sudo apt-get update sudo apt-get install build-essential bison flex libfreetype6-dev libgl1-mesa-dev libjpeg-dev libode-dev libopenal-dev libpng-dev libssl-dev libvorbis-dev libx11-dev libxcursor-dev libxrandr-dev nvidia-cg-toolkit zlib1g-dev diff --git a/direct/src/interval/MetaInterval.py b/direct/src/interval/MetaInterval.py index 2986071ba4..f706c338aa 100644 --- a/direct/src/interval/MetaInterval.py +++ b/direct/src/interval/MetaInterval.py @@ -348,10 +348,14 @@ class MetaInterval(CMetaInterval): def getManager(self): return self.__manager + manager = property(getManager, setManager) + def setT(self, t): self.__updateIvals() CMetaInterval.setT(self, t) + t = property(CMetaInterval.getT, setT) + def start(self, startT = 0.0, endT = -1.0, playRate = 1.0): self.__updateIvals() self.setupPlay(startT, endT, playRate, 0) @@ -475,6 +479,8 @@ class MetaInterval(CMetaInterval): else: CMetaInterval.setPlayRate(self, playRate) + play_rate = property(CMetaInterval.getPlayRate, setPlayRate) + def __doPythonCallbacks(self): # This function invokes any Python-level Intervals that need # to be invoked at this point in time. It must be called @@ -549,6 +555,8 @@ class MetaInterval(CMetaInterval): self.__updateIvals() return CMetaInterval.getDuration(self) + duration = property(getDuration) + def __repr__(self, *args, **kw): # This function overrides from the parent level to force it to # update the interval list first, if necessary. diff --git a/direct/src/showbase/ShowBase.py b/direct/src/showbase/ShowBase.py index 53c30a3e9c..c7edea715e 100644 --- a/direct/src/showbase/ShowBase.py +++ b/direct/src/showbase/ShowBase.py @@ -725,7 +725,7 @@ class ShowBase(DirectObject.DirectObject): of :meth:`~panda3d.core.GraphicsWindow.setUnexposedDraw()`. :param callbackWindowDict: If not None, a - :class:`~panda3d.core.CallbackGraphicWindow` + :class:`~panda3d.core.CallbackGraphicsWindow` is created instead, which allows the caller to create the actual window with its own OpenGL context, and direct Panda's rendering diff --git a/makepanda/installer.nsi b/makepanda/installer.nsi index 672ae4d37e..bf4b2013be 100644 --- a/makepanda/installer.nsi +++ b/makepanda/installer.nsi @@ -374,6 +374,7 @@ SectionGroup "Python modules" SecGroupPython !insertmacro PyBindingSection 3.8-32 .cp38-win32.pyd !insertmacro PyBindingSection 3.9-32 .cp39-win32.pyd !insertmacro PyBindingSection 3.10-32 .cp310-win32.pyd + !insertmacro PyBindingSection 3.11-32 .cp311-win32.pyd !else !insertmacro PyBindingSection 3.5 .cp35-win_amd64.pyd !insertmacro PyBindingSection 3.6 .cp36-win_amd64.pyd @@ -381,6 +382,7 @@ SectionGroup "Python modules" SecGroupPython !insertmacro PyBindingSection 3.8 .cp38-win_amd64.pyd !insertmacro PyBindingSection 3.9 .cp39-win_amd64.pyd !insertmacro PyBindingSection 3.10 .cp310-win_amd64.pyd + !insertmacro PyBindingSection 3.11 .cp311-win_amd64.pyd !endif SectionGroupEnd @@ -489,6 +491,7 @@ Function .onInit ${If} ${AtLeastWin8} !insertmacro MaybeEnablePyBindingSection 3.9-32 !insertmacro MaybeEnablePyBindingSection 3.10-32 + !insertmacro MaybeEnablePyBindingSection 3.11-32 ${EndIf} !else !insertmacro MaybeEnablePyBindingSection 3.5 @@ -498,6 +501,7 @@ Function .onInit ${If} ${AtLeastWin8} !insertmacro MaybeEnablePyBindingSection 3.9 !insertmacro MaybeEnablePyBindingSection 3.10 + !insertmacro MaybeEnablePyBindingSection 3.11 ${EndIf} !endif @@ -511,6 +515,10 @@ Function .onInit SectionSetFlags ${SecPyBindings3.10} ${SF_RO} SectionSetInstTypes ${SecPyBindings3.10} 0 !endif + !ifdef SecPyBindings3.11 + SectionSetFlags ${SecPyBindings3.11} ${SF_RO} + SectionSetInstTypes ${SecPyBindings3.11} 0 + !endif ${EndUnless} FunctionEnd @@ -822,6 +830,7 @@ Section Uninstall !insertmacro RemovePythonPath 3.8-32 !insertmacro RemovePythonPath 3.9-32 !insertmacro RemovePythonPath 3.10-32 + !insertmacro RemovePythonPath 3.11-32 !else !insertmacro RemovePythonPath 3.5 !insertmacro RemovePythonPath 3.6 @@ -829,6 +838,7 @@ Section Uninstall !insertmacro RemovePythonPath 3.8 !insertmacro RemovePythonPath 3.9 !insertmacro RemovePythonPath 3.10 + !insertmacro RemovePythonPath 3.11 !endif SetDetailsPrint both @@ -897,6 +907,7 @@ SectionEnd !insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.8-32} $(DESC_SecPyBindings3.8-32) !insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.9-32} $(DESC_SecPyBindings3.9-32) !insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.10-32} $(DESC_SecPyBindings3.10-32) + !insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.11-32} $(DESC_SecPyBindings3.11-32) !else !insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.5} $(DESC_SecPyBindings3.5) !insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.6} $(DESC_SecPyBindings3.6) @@ -904,6 +915,7 @@ SectionEnd !insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.8} $(DESC_SecPyBindings3.8) !insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.9} $(DESC_SecPyBindings3.9) !insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.10} $(DESC_SecPyBindings3.10) + !insertmacro MUI_DESCRIPTION_TEXT ${SecPyBindings3.11} $(DESC_SecPyBindings3.11) !endif !ifdef INCLUDE_PYVER !insertmacro MUI_DESCRIPTION_TEXT ${SecPython} $(DESC_SecPython) diff --git a/panda/src/bullet/bulletDebugNode.I b/panda/src/bullet/bulletDebugNode.I index eae681aba5..e29863669f 100644 --- a/panda/src/bullet/bulletDebugNode.I +++ b/panda/src/bullet/bulletDebugNode.I @@ -20,7 +20,7 @@ INLINE BulletDebugNode:: } /** - * + * If true, displays collision shapes in wireframe mode. */ INLINE void BulletDebugNode:: show_wireframe(bool show) { @@ -39,7 +39,8 @@ get_show_wireframe() const { } /** - * + * If true, display limits defined for constraints, e.g. a pivot axis or maximum + * amplitude. */ INLINE void BulletDebugNode:: show_constraints(bool show) { @@ -58,7 +59,7 @@ get_show_constraints() const { } /** - * + * If true, displays axis aligned bounding boxes for objects. */ INLINE void BulletDebugNode:: show_bounding_boxes(bool show) { @@ -77,7 +78,7 @@ get_show_bounding_boxes() const { } /** - * + * If true, displays normal vectors for triangle mesh and heightfield faces. */ INLINE void BulletDebugNode:: show_normals(bool show) { @@ -92,4 +93,4 @@ INLINE bool BulletDebugNode:: get_show_normals() const { return _drawer._normals; -} \ No newline at end of file +} diff --git a/panda/src/bullet/bulletPersistentManifold.cxx b/panda/src/bullet/bulletPersistentManifold.cxx index 9876ff35ee..f5e96d0464 100644 --- a/panda/src/bullet/bulletPersistentManifold.cxx +++ b/panda/src/bullet/bulletPersistentManifold.cxx @@ -49,6 +49,8 @@ get_contact_processing_threshold() const { */ void BulletPersistentManifold:: clear_manifold() { + nassertv_always(_manifold != nullptr); + LightMutexHolder holder(BulletWorld::get_global_lock()); _manifold->clearManifold(); @@ -59,6 +61,8 @@ clear_manifold() { */ PandaNode *BulletPersistentManifold:: get_node0() { + nassertr_always(_manifold != nullptr, nullptr); + LightMutexHolder holder(BulletWorld::get_global_lock()); #if BT_BULLET_VERSION >= 281 @@ -75,6 +79,8 @@ get_node0() { */ PandaNode *BulletPersistentManifold:: get_node1() { + nassertr_always(_manifold != nullptr, nullptr); + LightMutexHolder holder(BulletWorld::get_global_lock()); #if BT_BULLET_VERSION >= 281 @@ -91,6 +97,8 @@ get_node1() { */ int BulletPersistentManifold:: get_num_manifold_points() const { + nassertr_always(_manifold != nullptr, 0); + LightMutexHolder holder(BulletWorld::get_global_lock()); return _manifold->getNumContacts(); @@ -107,3 +115,12 @@ get_manifold_point(int idx) const { return new BulletManifoldPoint(_manifold->getContactPoint(idx)); } + +/** + * + */ +BulletManifoldPoint BulletPersistentManifold:: +__get_manifold_point(int idx) const { + LightMutexHolder holder(BulletWorld::get_global_lock()); + return BulletManifoldPoint(_manifold->getContactPoint(idx)); +} diff --git a/panda/src/bullet/bulletPersistentManifold.h b/panda/src/bullet/bulletPersistentManifold.h index 0b994c6bac..06e9b47564 100644 --- a/panda/src/bullet/bulletPersistentManifold.h +++ b/panda/src/bullet/bulletPersistentManifold.h @@ -35,7 +35,8 @@ PUBLISHED: int get_num_manifold_points() const; BulletManifoldPoint *get_manifold_point(int idx) const; - MAKE_SEQ(get_manifold_points, get_num_manifold_points, get_manifold_point); + BulletManifoldPoint __get_manifold_point(int idx) const; + MAKE_SEQ(get_manifold_points, get_num_manifold_points, __get_manifold_point); PN_stdfloat get_contact_breaking_threshold() const; PN_stdfloat get_contact_processing_threshold() const; @@ -44,7 +45,7 @@ PUBLISHED: MAKE_PROPERTY(node0, get_node0); MAKE_PROPERTY(node1, get_node1); - MAKE_SEQ_PROPERTY(manifold_points, get_num_manifold_points, get_manifold_point); + MAKE_SEQ_PROPERTY(manifold_points, get_num_manifold_points, __get_manifold_point); MAKE_PROPERTY(contact_breaking_threshold, get_contact_breaking_threshold); MAKE_PROPERTY(contact_processing_threshold, get_contact_processing_threshold); diff --git a/panda/src/bullet/bulletWorld.cxx b/panda/src/bullet/bulletWorld.cxx index a76b0e8007..4874f86db3 100644 --- a/panda/src/bullet/bulletWorld.cxx +++ b/panda/src/bullet/bulletWorld.cxx @@ -1074,6 +1074,19 @@ get_manifold(int idx) const { return (ptr) ? new BulletPersistentManifold(ptr) : nullptr; } +/** + * + */ +BulletPersistentManifold BulletWorld:: +__get_manifold(int idx) const { + LightMutexHolder holder(get_global_lock()); + + nassertr(idx < _dispatcher->getNumManifolds(), BulletPersistentManifold(nullptr)); + + btPersistentManifold *ptr = _dispatcher->getManifoldByIndexInternal(idx); + return BulletPersistentManifold(ptr); +} + /** * */ diff --git a/panda/src/bullet/bulletWorld.h b/panda/src/bullet/bulletWorld.h index b655e0b349..669c8944d3 100644 --- a/panda/src/bullet/bulletWorld.h +++ b/panda/src/bullet/bulletWorld.h @@ -128,7 +128,8 @@ PUBLISHED: // Manifolds int get_num_manifolds() const; BulletPersistentManifold *get_manifold(int idx) const; - MAKE_SEQ(get_manifolds, get_num_manifolds, get_manifold); + BulletPersistentManifold __get_manifold(int idx) const; + MAKE_SEQ(get_manifolds, get_num_manifolds, __get_manifold); // Collision filtering void set_group_collision_flag(unsigned int group1, unsigned int group2, bool enable); @@ -168,7 +169,7 @@ PUBLISHED: MAKE_SEQ_PROPERTY(characters, get_num_characters, get_character); MAKE_SEQ_PROPERTY(vehicles, get_num_vehicles, get_vehicle); MAKE_SEQ_PROPERTY(constraints, get_num_constraints, get_constraint); - MAKE_SEQ_PROPERTY(manifolds, get_num_manifolds, get_manifold); + MAKE_SEQ_PROPERTY(manifolds, get_num_manifolds, __get_manifold); MAKE_PROPERTY(force_update_all_aabbs, get_force_update_all_aabbs, set_force_update_all_aabbs); diff --git a/panda/src/pgraph/planeNode.h b/panda/src/pgraph/planeNode.h index 2b58225abd..6debd7a217 100644 --- a/panda/src/pgraph/planeNode.h +++ b/panda/src/pgraph/planeNode.h @@ -65,6 +65,11 @@ PUBLISHED: INLINE void set_clip_effect(int clip_effect); INLINE int get_clip_effect() const; + MAKE_PROPERTY(plane, get_plane, set_plane); + MAKE_PROPERTY(viz_scale, get_viz_scale, set_viz_scale); + MAKE_PROPERTY(priority, get_priority, set_priority); + MAKE_PROPERTY(clip_effect, get_clip_effect, set_clip_effect); + public: INLINE static UpdateSeq get_sort_seq();