Browse Source

Merge branch 'release/1.10.x'

rdb 6 years ago
parent
commit
80bb5c09fe

+ 1 - 1
README.md

@@ -157,7 +157,7 @@ install the requisite packages using the system package manager.  To install
 the recommended set of dependencies, you can use this command:
 the recommended set of dependencies, you can use this command:
 
 
 ```bash
 ```bash
-pkg install pkgconf png jpeg-turbo tiff freetype2 eigen squish openal opusfile libvorbis libX11 libGL ode bullet assimp openexr
+pkg install pkgconf bison png jpeg-turbo tiff freetype2 harfbuzz eigen squish openal opusfile libvorbis libX11 mesa-libs ode bullet assimp openexr
 ```
 ```
 
 
 You will also need to choose which version of Python you want to use.
 You will also need to choose which version of Python you want to use.

+ 1 - 1
direct/src/actor/Actor.py

@@ -2507,7 +2507,7 @@ class Actor(DirectObject, NodePath):
         else:
         else:
             animNames = [animName]
             animNames = [animName]
         for animName in animNames:
         for animName in animNames:
-            if animName is 'nothing':
+            if animName == 'nothing':
                 continue
                 continue
             thisAnim = ''
             thisAnim = ''
             totalEffect = 0.
             totalEffect = 0.

+ 3 - 3
direct/src/directscripts/gendocs.py

@@ -56,9 +56,9 @@ import os, sys, parser, symbol, token, re
 #
 #
 ########################################################################
 ########################################################################
 
 
-SECHEADER = re.compile("^[A-Z][a-z]+\s*:")
-JUNKHEADER = re.compile("^((Function)|(Access))\s*:")
-IMPORTSTAR = re.compile("^from\s+([a-zA-Z0-9_.]+)\s+import\s+[*]\s*$")
+SECHEADER = re.compile("^[A-Z][a-z]+\\s*:")
+JUNKHEADER = re.compile("^((Function)|(Access))\\s*:")
+IMPORTSTAR = re.compile("^from\\s+([a-zA-Z0-9_.]+)\\s+import\\s+[*]\\s*$")
 IDENTIFIER = re.compile("[a-zA-Z0-9_]+")
 IDENTIFIER = re.compile("[a-zA-Z0-9_]+")
 FILEHEADER = re.compile(
 FILEHEADER = re.compile(
 r"""^// Filename: [a-zA-Z.]+
 r"""^// Filename: [a-zA-Z.]+

+ 5 - 5
direct/src/dist/FreezeTool.py

@@ -210,15 +210,15 @@ class CompilationEnvironment:
             if ('MAKEPANDA' in os.environ):
             if ('MAKEPANDA' in os.environ):
                 self.compileObjExe = 'cl /wd4996 /Fo%(basename)s.obj /nologo /c %(MD)s /Zi /O2 /Ob2 /EHsc /Zm300 /W3 /I"%(pythonIPath)s" %(filename)s'
                 self.compileObjExe = 'cl /wd4996 /Fo%(basename)s.obj /nologo /c %(MD)s /Zi /O2 /Ob2 /EHsc /Zm300 /W3 /I"%(pythonIPath)s" %(filename)s'
                 self.compileObjDll = self.compileObjExe
                 self.compileObjDll = self.compileObjExe
-                self.linkExe = 'link /nologo /MAP:NUL /FIXED:NO /OPT:REF /STACK:4194304 /INCREMENTAL:NO /LIBPATH:"%(python)s\libs"  /out:%(basename)s.exe %(basename)s.obj'
-                self.linkDll = 'link /nologo /DLL /MAP:NUL /FIXED:NO /OPT:REF /INCREMENTAL:NO /LIBPATH:"%(python)s\libs"  /out:%(basename)s%(dllext)s.pyd %(basename)s.obj'
+                self.linkExe = 'link /nologo /MAP:NUL /FIXED:NO /OPT:REF /STACK:4194304 /INCREMENTAL:NO /LIBPATH:"%(python)s\\libs"  /out:%(basename)s.exe %(basename)s.obj'
+                self.linkDll = 'link /nologo /DLL /MAP:NUL /FIXED:NO /OPT:REF /INCREMENTAL:NO /LIBPATH:"%(python)s\\libs"  /out:%(basename)s%(dllext)s.pyd %(basename)s.obj'
             else:
             else:
                 os.environ['PATH'] += ';' + self.MSVC + '\\bin' + self.suffix64 + ';' + self.MSVC + '\\Common7\\IDE;' + self.PSDK + '\\bin'
                 os.environ['PATH'] += ';' + self.MSVC + '\\bin' + self.suffix64 + ';' + self.MSVC + '\\Common7\\IDE;' + self.PSDK + '\\bin'
 
 
-                self.compileObjExe = 'cl /wd4996 /Fo%(basename)s.obj /nologo /c %(MD)s /Zi /O2 /Ob2 /EHsc /Zm300 /W3 /I"%(pythonIPath)s" /I"%(PSDK)s\include" /I"%(MSVC)s\include" %(filename)s'
+                self.compileObjExe = 'cl /wd4996 /Fo%(basename)s.obj /nologo /c %(MD)s /Zi /O2 /Ob2 /EHsc /Zm300 /W3 /I"%(pythonIPath)s" /I"%(PSDK)s\\include" /I"%(MSVC)s\\include" %(filename)s'
                 self.compileObjDll = self.compileObjExe
                 self.compileObjDll = self.compileObjExe
-                self.linkExe = 'link /nologo /MAP:NUL /FIXED:NO /OPT:REF /STACK:4194304 /INCREMENTAL:NO /LIBPATH:"%(PSDK)s\lib" /LIBPATH:"%(MSVC)s\\lib%(suffix64)s" /LIBPATH:"%(python)s\libs"  /out:%(basename)s.exe %(basename)s.obj'
-                self.linkDll = 'link /nologo /DLL /MAP:NUL /FIXED:NO /OPT:REF /INCREMENTAL:NO /LIBPATH:"%(PSDK)s\lib" /LIBPATH:"%(MSVC)s\\lib%(suffix64)s" /LIBPATH:"%(python)s\libs"  /out:%(basename)s%(dllext)s.pyd %(basename)s.obj'
+                self.linkExe = 'link /nologo /MAP:NUL /FIXED:NO /OPT:REF /STACK:4194304 /INCREMENTAL:NO /LIBPATH:"%(PSDK)s\\lib" /LIBPATH:"%(MSVC)s\\lib%(suffix64)s" /LIBPATH:"%(python)s\\libs"  /out:%(basename)s.exe %(basename)s.obj'
+                self.linkDll = 'link /nologo /DLL /MAP:NUL /FIXED:NO /OPT:REF /INCREMENTAL:NO /LIBPATH:"%(PSDK)s\\lib" /LIBPATH:"%(MSVC)s\\lib%(suffix64)s" /LIBPATH:"%(python)s\\libs"  /out:%(basename)s%(dllext)s.pyd %(basename)s.obj'
 
 
         elif self.platform.startswith('osx_'):
         elif self.platform.startswith('osx_'):
             # OSX
             # OSX

+ 35 - 38
direct/src/particles/ParticleEffect.py

@@ -163,44 +163,41 @@ class ParticleEffect(NodePath):
 
 
     def saveConfig(self, filename):
     def saveConfig(self, filename):
         filename = Filename(filename)
         filename = Filename(filename)
-        f = open(filename.toOsSpecific(), 'wb')
-        # Add a blank line
-        f.write('\n')
-
-        # Make sure we start with a clean slate
-        f.write('self.reset()\n')
-
-        pos = self.getPos()
-        hpr = self.getHpr()
-        scale = self.getScale()
-        f.write('self.setPos(%0.3f, %0.3f, %0.3f)\n' %
-                (pos[0], pos[1], pos[2]))
-        f.write('self.setHpr(%0.3f, %0.3f, %0.3f)\n' %
-                (hpr[0], hpr[1], hpr[2]))
-        f.write('self.setScale(%0.3f, %0.3f, %0.3f)\n' %
-                (scale[0], scale[1], scale[2]))
-
-        # Save all the particles to file
-        num = 0
-        for p in list(self.particlesDict.values()):
-            target = 'p%d' % num
-            num = num + 1
-            f.write(target + ' = Particles.Particles(\'%s\')\n' % p.getName())
-            p.printParams(f, target)
-            f.write('self.addParticles(%s)\n' % target)
-
-        # Save all the forces to file
-        num = 0
-        for fg in list(self.forceGroupDict.values()):
-            target = 'f%d' % num
-            num = num + 1
-            f.write(target + ' = ForceGroup.ForceGroup(\'%s\')\n' % \
-                                                fg.getName())
-            fg.printParams(f, target)
-            f.write('self.addForceGroup(%s)\n' % target)
-
-        # Close the file
-        f.close()
+        with open(filename.toOsSpecific(), 'w') as f:
+          # Add a blank line
+          f.write('\n')
+
+          # Make sure we start with a clean slate
+          f.write('self.reset()\n')
+
+          pos = self.getPos()
+          hpr = self.getHpr()
+          scale = self.getScale()
+          f.write('self.setPos(%0.3f, %0.3f, %0.3f)\n' %
+                  (pos[0], pos[1], pos[2]))
+          f.write('self.setHpr(%0.3f, %0.3f, %0.3f)\n' %
+                  (hpr[0], hpr[1], hpr[2]))
+          f.write('self.setScale(%0.3f, %0.3f, %0.3f)\n' %
+                  (scale[0], scale[1], scale[2]))
+
+          # Save all the particles to file
+          num = 0
+          for p in list(self.particlesDict.values()):
+              target = 'p%d' % num
+              num = num + 1
+              f.write(target + ' = Particles.Particles(\'%s\')\n' % p.getName())
+              p.printParams(f, target)
+              f.write('self.addParticles(%s)\n' % target)
+
+          # Save all the forces to file
+          num = 0
+          for fg in list(self.forceGroupDict.values()):
+              target = 'f%d' % num
+              num = num + 1
+              f.write(target + ' = ForceGroup.ForceGroup(\'%s\')\n' % \
+                                                  fg.getName())
+              fg.printParams(f, target)
+              f.write('self.addForceGroup(%s)\n' % target)
 
 
     def loadConfig(self, filename):
     def loadConfig(self, filename):
         data = vfs.readFile(filename, 1)
         data = vfs.readFile(filename, 1)

+ 1 - 1
direct/src/showbase/FindCtaPaths.py

@@ -21,7 +21,7 @@ def deCygwinify(path):
 
 
         dirs = path.split('/')
         dirs = path.split('/')
         if len(dirs) > 2 and len(dirs[1]) == 1:
         if len(dirs) > 2 and len(dirs[1]) == 1:
-            path = '%s:\%s' % (dirs[1], '\\'.join(dirs[2:]))
+            path = '%s:\\%s' % (dirs[1], '\\'.join(dirs[2:]))
 
 
         else:
         else:
             # Otherwise, prepend $PANDA_ROOT and flip the slashes.
             # Otherwise, prepend $PANDA_ROOT and flip the slashes.

+ 1 - 1
direct/src/showbase/PythonUtil.py

@@ -2513,7 +2513,7 @@ class AlphabetCounter:
         index = -1
         index = -1
         while True:
         while True:
             curChar = self._curCounter[index]
             curChar = self._curCounter[index]
-            if curChar is 'Z':
+            if curChar == 'Z':
                 nextChar = 'A'
                 nextChar = 'A'
                 carry = True
                 carry = True
             else:
             else:

+ 26 - 0
doc/ReleaseNotes

@@ -1,7 +1,33 @@
 ------------------------  RELEASE 1.10.1  -----------------------
 ------------------------  RELEASE 1.10.1  -----------------------
 
 
+This is a bugfix release intended to fix several issues in 1.10.0.
+
+* Fix crashes when gamepad is plugged in on 32-bit Windows
+* Fix deploy-ng error regarding 'exist_ok' on Python 2
+* Fix compatibility issues with upcoming Python 3.8
 * Fix regression with Audio3DManager.setSoundVelocityAuto()
 * Fix regression with Audio3DManager.setSoundVelocityAuto()
+* Fix issues when awaiting loader.loadModel in Python 3.7
 * Audio3DManager accepts tuple in setSoundVelocity/setListenerVelocity
 * Audio3DManager accepts tuple in setSoundVelocity/setListenerVelocity
+* Fix lighting being disabled when only an AmbientLight is active
+* Fix an error saving from Particle Panel in Python 3
+* Depth buffer now defaults to 24-bit on macOS (fixes flickering)
+* Fix no devices being detected on Windows with threading-model
+* Implement collision tests from Capsule and Box into InvSphere
+* Fix SpriteAnim error in particle system
+* Fix ShaderGenerator error when using too many shadowing lights
+* Fix interrogate crash in Python 3 with optional wstring args
+* Fix compilation errors for x86 Android platform
+* Fix permissions of directories created by installpanda
+* Improvements to API reference documentation
+* Fix incorrect features printed out when printing an InputDevice
+* Support cross-compiling for Android platforms in makepanda
+* Work around various bugs when compiling with OS X 10.7's libc++
+* Fix wrong error sometimes being reported when loading plug-in
+* Allow getting NodePath from CullTraverserData object
+* Add config options to Assimp loader for generating normals
+* Fix multisampling in floating-point framebuffers on OpenGL
+* Parse egg files with 4-component tangents (must be 1 or -1)
+* StencilAttrib.make() write_mask argument is now optional
 
 
 ------------------------  RELEASE 1.10.0  -----------------------
 ------------------------  RELEASE 1.10.0  -----------------------
 
 

+ 4 - 0
dtool/src/interrogatedb/py_wrappers.cxx

@@ -1091,7 +1091,11 @@ static PyObject *Dtool_GeneratorWrapper_iternext(PyObject *self) {
  */
  */
 static void
 static void
 Dtool_StaticProperty_dealloc(PyDescrObject *descr) {
 Dtool_StaticProperty_dealloc(PyDescrObject *descr) {
+#if PY_VERSION_HEX >= 0x03080000
+  PyObject_GC_UnTrack(descr);
+#else
   _PyObject_GC_UNTRACK(descr);
   _PyObject_GC_UNTRACK(descr);
+#endif
   Py_XDECREF(descr->d_type);
   Py_XDECREF(descr->d_type);
   Py_XDECREF(descr->d_name);
   Py_XDECREF(descr->d_name);
 //#if PY_MAJOR_VERSION >= 3
 //#if PY_MAJOR_VERSION >= 3

+ 1 - 1
makepanda/installpanda.py

@@ -62,7 +62,7 @@ def WriteMimeXMLFile(fname, info):
         fhandle.write("\t<mime-type type=\"%s\">\n" % (mime))
         fhandle.write("\t<mime-type type=\"%s\">\n" % (mime))
         fhandle.write("\t\t<comment xml:lang=\"en\">%s</comment>\n" % (desc))
         fhandle.write("\t\t<comment xml:lang=\"en\">%s</comment>\n" % (desc))
         fhandle.write("\t\t<glob pattern=\"*.%s\"/>\n" % (ext))
         fhandle.write("\t\t<glob pattern=\"*.%s\"/>\n" % (ext))
-        fhandle.write("\t</mime-type>\s")
+        fhandle.write("\t</mime-type>\n")
     fhandle.write("</mime-info>\n")
     fhandle.write("</mime-info>\n")
     fhandle.close()
     fhandle.close()
 
 

+ 9 - 9
makepanda/makechm.py

@@ -213,11 +213,11 @@ def makeCHM(outputfile, dirname, title, special = None):
     # Now, execute the command to compile the files.
     # Now, execute the command to compile the files.
     if "PROGRAMFILES" in os.environ and os.path.isdir("%s\\HTML Help Workshop" % os.environ["PROGRAMFILES"]):
     if "PROGRAMFILES" in os.environ and os.path.isdir("%s\\HTML Help Workshop" % os.environ["PROGRAMFILES"]):
         cmd = "\"%s\\HTML Help Workshop\\hhc.exe\" %s.hhp" % (os.environ["PROGRAMFILES"], base)
         cmd = "\"%s\\HTML Help Workshop\\hhc.exe\" %s.hhp" % (os.environ["PROGRAMFILES"], base)
-    elif os.path.isdir("C:\Program Files\HTML Help Workshop"):
+    elif os.path.isdir("C:\\Program Files\\HTML Help Workshop"):
         cmd = "\"C:\\Program Files\\HTML Help Workshop\\hhc.exe\" %s.hhp" % base
         cmd = "\"C:\\Program Files\\HTML Help Workshop\\hhc.exe\" %s.hhp" % base
     else:
     else:
         cmd = "hhc \"%s.hhp\"" % base
         cmd = "hhc \"%s.hhp\"" % base
-    print cmd
+    print(cmd)
     os.system(cmd)
     os.system(cmd)
     if not KEEPTEMP:
     if not KEEPTEMP:
         if os.path.isfile("%s.hhp" % base): os.remove("%s.hhp" % base)
         if os.path.isfile("%s.hhp" % base): os.remove("%s.hhp" % base)
@@ -225,7 +225,7 @@ def makeCHM(outputfile, dirname, title, special = None):
         if os.path.isfile("%s.hhk" % base): os.remove("%s.hhk" % base)
         if os.path.isfile("%s.hhk" % base): os.remove("%s.hhk" % base)
         if os.path.isfile("%s.chw" % base): os.remove("%s.chw" % base)
         if os.path.isfile("%s.chw" % base): os.remove("%s.chw" % base)
     if not os.path.isfile(base + ".chm"):
     if not os.path.isfile(base + ".chm"):
-        print "An error has occurred!"
+        print("An error has occurred!")
         if __name__ == "__main__":
         if __name__ == "__main__":
             exit(1)
             exit(1)
         else:
         else:
@@ -246,7 +246,7 @@ if __name__ == "__main__":
     VERSION = None
     VERSION = None
     try:
     try:
         f = file("built/include/pandaVersion.h","r")
         f = file("built/include/pandaVersion.h","r")
-        pattern = re.compile('^\s*[#]\s*define\s+PANDA_VERSION_STR\s+["]([0-9.]+)["]')
+        pattern = re.compile('^\\s*[#]\\s*define\\s+PANDA_VERSION_STR\\s+["]([0-9.]+)["]')
         for line in f:
         for line in f:
             match = pattern.match(line,0)
             match = pattern.match(line,0)
             if (match):
             if (match):
@@ -260,22 +260,22 @@ if __name__ == "__main__":
     # Now, make CHM's for both the manual and reference, if we have them.
     # Now, make CHM's for both the manual and reference, if we have them.
     for lang in ["python", "cxx"]:
     for lang in ["python", "cxx"]:
         if not os.path.isdir("manual-" + lang):
         if not os.path.isdir("manual-" + lang):
-            print "No directory named 'manual-%s' found" % lang
+            print("No directory named 'manual-%s' found" % lang)
         else:
         else:
-            print "Making CHM file for manual-%s..." % lang
+            print("Making CHM file for manual-%s..." % lang)
             if VERSION == None:
             if VERSION == None:
                 makeManualCHM("manual-%s.chm" % lang, "manual-" + lang, "Panda3D Manual")
                 makeManualCHM("manual-%s.chm" % lang, "manual-" + lang, "Panda3D Manual")
             else:
             else:
                 makeManualCHM("manual-%s-%s.chm" % (VERSION, lang), "manual-" + lang, "Panda3D %s Manual" % VERSION)
                 makeManualCHM("manual-%s-%s.chm" % (VERSION, lang), "manual-" + lang, "Panda3D %s Manual" % VERSION)
 
 
         if not os.path.isdir("reference-" + lang):
         if not os.path.isdir("reference-" + lang):
-            print "No directory named 'reference-%s' found" % lang
+            print("No directory named 'reference-%s' found" % lang)
         else:
         else:
-            print "Making CHM file for reference-%s..." % lang
+            print("Making CHM file for reference-%s..." % lang)
             if VERSION == None:
             if VERSION == None:
                 makeReferenceCHM("reference-%s.chm" % lang, "reference-" + lang, "Panda3D Reference")
                 makeReferenceCHM("reference-%s.chm" % lang, "reference-" + lang, "Panda3D Reference")
             else:
             else:
                 makeReferenceCHM("reference-%s-%s.chm" % (VERSION, lang), "reference-" + lang, "Panda3D %s Reference" % VERSION)
                 makeReferenceCHM("reference-%s-%s.chm" % (VERSION, lang), "reference-" + lang, "Panda3D %s Reference" % VERSION)
 
 
-    print "Done!"
+    print("Done!")
 
 

+ 8 - 8
makepanda/makepanda.py

@@ -1529,7 +1529,7 @@ def CompileIgate(woutd,wsrc,opts):
         # NOTE: this 1600 value is the version number for VC2010.
         # NOTE: this 1600 value is the version number for VC2010.
         cmd += ' -D_MSC_VER=1600 -D"__declspec(param)=" -D__cdecl -D_near -D_far -D__near -D__far -D__stdcall'
         cmd += ' -D_MSC_VER=1600 -D"__declspec(param)=" -D__cdecl -D_near -D_far -D__near -D__far -D__stdcall'
     if (COMPILER=="GCC"):
     if (COMPILER=="GCC"):
-        cmd += ' -D__attribute__\(x\)='
+        cmd += ' -D__attribute__\\(x\\)='
         target_arch = GetTargetArch()
         target_arch = GetTargetArch()
         if target_arch in ("x86_64", "amd64"):
         if target_arch in ("x86_64", "amd64"):
             cmd += ' -D_LP64'
             cmd += ' -D_LP64'
@@ -1634,9 +1634,9 @@ def CompileLib(lib, obj, opts):
                 cmd += " /MACHINE:" + GetTargetArch().upper()
                 cmd += " /MACHINE:" + GetTargetArch().upper()
             cmd += ' /OUT:' + BracketNameWithQuotes(lib)
             cmd += ' /OUT:' + BracketNameWithQuotes(lib)
             for x in obj: cmd += ' ' + BracketNameWithQuotes(x)
             for x in obj: cmd += ' ' + BracketNameWithQuotes(x)
-            cmd += ' /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\ipp\lib\ia32"'
-            cmd += ' /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\TBB\Lib\ia32\vc10"'
-            cmd += ' /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\compiler\lib\ia32"'
+            cmd += ' /LIBPATH:"C:\\Program Files (x86)\\Intel\\Composer XE 2011 SP1\\ipp\\lib\\ia32"'
+            cmd += ' /LIBPATH:"C:\\Program Files (x86)\\Intel\\Composer XE 2011 SP1\\TBB\\Lib\\ia32\\vc10"'
+            cmd += ' /LIBPATH:"C:\\Program Files (x86)\\Intel\\Composer XE 2011 SP1\\compiler\\lib\\ia32"'
             oscmd(cmd)
             oscmd(cmd)
 
 
     if (COMPILER=="GCC"):
     if (COMPILER=="GCC"):
@@ -1742,9 +1742,9 @@ def CompileLink(dll, obj, opts):
                 cmd += " /NOD:MFC90.LIB /NOD:MFC80.LIB /NOD:LIBCMT"
                 cmd += " /NOD:MFC90.LIB /NOD:MFC80.LIB /NOD:LIBCMT"
             cmd += " /NOD:LIBCI.LIB /DEBUG"
             cmd += " /NOD:LIBCI.LIB /DEBUG"
             cmd += " /nod:libc /nod:libcmtd /nod:atlthunk /nod:atls"
             cmd += " /nod:libc /nod:libcmtd /nod:atlthunk /nod:atls"
-            cmd += ' /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\ipp\lib\ia32"'
-            cmd += ' /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\TBB\Lib\ia32\vc10"'
-            cmd += ' /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\compiler\lib\ia32"'
+            cmd += ' /LIBPATH:"C:\\Program Files (x86)\\Intel\\Composer XE 2011 SP1\\ipp\\lib\\ia32"'
+            cmd += ' /LIBPATH:"C:\\Program Files (x86)\\Intel\\Composer XE 2011 SP1\\TBB\\Lib\\ia32\\vc10"'
+            cmd += ' /LIBPATH:"C:\\Program Files (x86)\\Intel\\Composer XE 2011 SP1\\compiler\\lib\\ia32"'
             if (GetOrigExt(dll) != ".exe"): cmd += " /DLL"
             if (GetOrigExt(dll) != ".exe"): cmd += " /DLL"
             optlevel = GetOptimizeOption(opts)
             optlevel = GetOptimizeOption(opts)
             if (optlevel==1): cmd += " /MAP /MAPINFO:EXPORTS /NOD:MSVCRT.LIB /NOD:MSVCPRT.LIB /NOD:MSVCIRT.LIB"
             if (optlevel==1): cmd += " /MAP /MAPINFO:EXPORTS /NOD:MSVCRT.LIB /NOD:MSVCPRT.LIB /NOD:MSVCIRT.LIB"
@@ -6542,7 +6542,7 @@ if PkgSkip("PYTHON") == 0:
 
 
     if GetTarget() == 'linux' or GetTarget() == 'freebsd':
     if GetTarget() == 'linux' or GetTarget() == 'freebsd':
         # Setup rpath so libs can be found in the same directory as the deployed game
         # Setup rpath so libs can be found in the same directory as the deployed game
-        LibName('DEPLOYSTUB', "-Wl,-rpath,\$ORIGIN")
+        LibName('DEPLOYSTUB', "-Wl,-rpath,\\$ORIGIN")
         LibName('DEPLOYSTUB', "-Wl,-z,origin")
         LibName('DEPLOYSTUB', "-Wl,-z,origin")
         LibName('DEPLOYSTUB', "-rdynamic")
         LibName('DEPLOYSTUB', "-rdynamic")
     PyTargetAdd('deploy-stub.exe', input='deploy-stub.obj')
     PyTargetAdd('deploy-stub.exe', input='deploy-stub.obj')

+ 10 - 1
panda/src/cocoadisplay/cocoaGraphicsStateGuardian.mm

@@ -248,8 +248,17 @@ choose_pixel_format(const FrameBufferProperties &properties,
   attribs.push_back(aux_buffers);
   attribs.push_back(aux_buffers);
   attribs.push_back(NSOpenGLPFAColorSize);
   attribs.push_back(NSOpenGLPFAColorSize);
   attribs.push_back(properties.get_color_bits());
   attribs.push_back(properties.get_color_bits());
+
+  // Set the depth buffer bits to 24 manually when 1 is requested.
+  // This prevents getting a depth buffer of only 16 bits when requesting 1.
   attribs.push_back(NSOpenGLPFADepthSize);
   attribs.push_back(NSOpenGLPFADepthSize);
-  attribs.push_back(properties.get_depth_bits());
+  if (properties.get_depth_bits() == 1) {
+    attribs.push_back(24);
+  }
+  else {
+    attribs.push_back(properties.get_depth_bits());
+  }
+
   attribs.push_back(NSOpenGLPFAStencilSize);
   attribs.push_back(NSOpenGLPFAStencilSize);
   attribs.push_back(properties.get_stencil_bits());
   attribs.push_back(properties.get_stencil_bits());
 
 

+ 3 - 4
panda/src/device/evdevInputDevice.cxx

@@ -84,6 +84,8 @@ static const struct DeviceMapping {
   {0x0f30, 0x0111, InputDevice::DeviceClass::gamepad, 0},
   {0x0f30, 0x0111, InputDevice::DeviceClass::gamepad, 0},
   // SPEED Link SL-6535-SBK-01
   // SPEED Link SL-6535-SBK-01
   {0x0079, 0x0006, InputDevice::DeviceClass::gamepad, 0},
   {0x0079, 0x0006, InputDevice::DeviceClass::gamepad, 0},
+  // 8bitdo N30 Pro Controller
+  {0x2dc8, 0x9001, InputDevice::DeviceClass::gamepad, QB_rstick_from_z},
   // 3Dconnexion Space Traveller 3D Mouse
   // 3Dconnexion Space Traveller 3D Mouse
   {0x046d, 0xc623, InputDevice::DeviceClass::spatial_mouse, 0},
   {0x046d, 0xc623, InputDevice::DeviceClass::spatial_mouse, 0},
   // 3Dconnexion Space Pilot 3D Mouse
   // 3Dconnexion Space Pilot 3D Mouse
@@ -521,10 +523,7 @@ init_device() {
           }
           }
           break;
           break;
         case ABS_THROTTLE:
         case ABS_THROTTLE:
-           if (_device_class == DeviceClass::gamepad) {
-            // Apparently needed for 8bitdo N30 Pro controller
-            axis = InputDevice::Axis::right_x;
-          } else if (quirks & QB_rudder_from_throttle) {
+          if (quirks & QB_rudder_from_throttle) {
             axis = InputDevice::Axis::rudder;
             axis = InputDevice::Axis::rudder;
           } else {
           } else {
             axis = InputDevice::Axis::throttle;
             axis = InputDevice::Axis::throttle;

+ 6 - 0
panda/src/display/graphicsStateGuardian.cxx

@@ -2823,6 +2823,12 @@ do_issue_light() {
     }
     }
 
 
   } else {
   } else {
+    // Don't forget to still enable lighting if we have only an ambient light.
+    if (!_lighting_enabled) {
+      enable_lighting(true);
+      _lighting_enabled = true;
+    }
+
     set_ambient_light(target_light->get_ambient_contribution());
     set_ambient_light(target_light->get_ambient_contribution());
   }
   }
 
 

File diff suppressed because it is too large
+ 445 - 537
panda/src/egg/parser.cxx.prebuilt


+ 116 - 110
panda/src/egg/parser.h.prebuilt

@@ -1,20 +1,19 @@
-/* A Bison parser, made by GNU Bison 2.4.2.  */
+/* A Bison parser, made by GNU Bison 3.2.2.  */
+
+/* Bison interface for Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
 
 
-/* Skeleton interface for Bison's Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software
-   Foundation, Inc.
-   
    This program is free software: you can redistribute it and/or modify
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
@@ -27,107 +26,118 @@
    special exception, which will cause the skeleton and the resulting
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
    License without this special exception.
-   
+
    This special exception was added by the Free Software Foundation in
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
    version 2.2 of Bison.  */
 
 
+/* Undocumented macros, especially those whose name start with YY_,
+   are private implementation details.  Do not rely on them.  */
 
 
-/* Tokens.  */
+#ifndef YY_EGGYY_BUILT_TMP_PARSER_YXX_H_INCLUDED
+# define YY_EGGYY_BUILT_TMP_PARSER_YXX_H_INCLUDED
+/* Debug traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int eggyydebug;
+#endif
+
+/* Token type.  */
 #ifndef YYTOKENTYPE
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
 # define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     EGG_NUMBER = 258,
-     EGG_ULONG = 259,
-     EGG_STRING = 260,
-     ANIMPRELOAD = 261,
-     BEZIERCURVE = 262,
-     BFACE = 263,
-     BILLBOARD = 264,
-     BILLBOARDCENTER = 265,
-     BINORMAL = 266,
-     BUNDLE = 267,
-     CLOSED = 268,
-     COLLIDE = 269,
-     COMMENT = 270,
-     COMPONENT = 271,
-     COORDSYSTEM = 272,
-     CV = 273,
-     DART = 274,
-     DNORMAL = 275,
-     DRGBA = 276,
-     DUV = 277,
-     DXYZ = 278,
-     DCS = 279,
-     DISTANCE = 280,
-     DTREF = 281,
-     DYNAMICVERTEXPOOL = 282,
-     EXTERNAL_FILE = 283,
-     GROUP = 284,
-     DEFAULTPOSE = 285,
-     JOINT = 286,
-     KNOTS = 287,
-     INCLUDE = 288,
-     INSTANCE = 289,
-     LINE = 290,
-     LOOP = 291,
-     MATERIAL = 292,
-     MATRIX3 = 293,
-     MATRIX4 = 294,
-     MODEL = 295,
-     MREF = 296,
-     NORMAL = 297,
-     NURBSCURVE = 298,
-     NURBSSURFACE = 299,
-     OBJECTTYPE = 300,
-     ORDER = 301,
-     OUTTANGENT = 302,
-     PATCH = 303,
-     POINTLIGHT = 304,
-     POLYGON = 305,
-     REF = 306,
-     RGBA = 307,
-     ROTATE = 308,
-     ROTX = 309,
-     ROTY = 310,
-     ROTZ = 311,
-     SANIM = 312,
-     SCALAR = 313,
-     SCALE = 314,
-     SEQUENCE = 315,
-     SHADING = 316,
-     SWITCH = 317,
-     SWITCHCONDITION = 318,
-     TABLE = 319,
-     TABLE_V = 320,
-     TAG = 321,
-     TANGENT = 322,
-     TEXLIST = 323,
-     TEXTURE = 324,
-     TLENGTHS = 325,
-     TRANSFORM = 326,
-     TRANSLATE = 327,
-     TREF = 328,
-     TRIANGLEFAN = 329,
-     TRIANGLESTRIP = 330,
-     TRIM = 331,
-     TXT = 332,
-     UKNOTS = 333,
-     UV = 334,
-     AUX = 335,
-     VKNOTS = 336,
-     VERTEX = 337,
-     VERTEXANIM = 338,
-     VERTEXPOOL = 339,
-     VERTEXREF = 340,
-     XFMANIM = 341,
-     XFMSANIM = 342,
-     START_EGG = 343,
-     START_GROUP_BODY = 344,
-     START_TEXTURE_BODY = 345,
-     START_PRIMITIVE_BODY = 346
-   };
+  enum yytokentype
+  {
+    EGG_NUMBER = 258,
+    EGG_ULONG = 259,
+    EGG_STRING = 260,
+    ANIMPRELOAD = 261,
+    BEZIERCURVE = 262,
+    BFACE = 263,
+    BILLBOARD = 264,
+    BILLBOARDCENTER = 265,
+    BINORMAL = 266,
+    BUNDLE = 267,
+    CLOSED = 268,
+    COLLIDE = 269,
+    COMMENT = 270,
+    COMPONENT = 271,
+    COORDSYSTEM = 272,
+    CV = 273,
+    DART = 274,
+    DNORMAL = 275,
+    DRGBA = 276,
+    DUV = 277,
+    DXYZ = 278,
+    DCS = 279,
+    DISTANCE = 280,
+    DTREF = 281,
+    DYNAMICVERTEXPOOL = 282,
+    EXTERNAL_FILE = 283,
+    GROUP = 284,
+    DEFAULTPOSE = 285,
+    JOINT = 286,
+    KNOTS = 287,
+    INCLUDE = 288,
+    INSTANCE = 289,
+    LINE = 290,
+    LOOP = 291,
+    MATERIAL = 292,
+    MATRIX3 = 293,
+    MATRIX4 = 294,
+    MODEL = 295,
+    MREF = 296,
+    NORMAL = 297,
+    NURBSCURVE = 298,
+    NURBSSURFACE = 299,
+    OBJECTTYPE = 300,
+    ORDER = 301,
+    OUTTANGENT = 302,
+    PATCH = 303,
+    POINTLIGHT = 304,
+    POLYGON = 305,
+    REF = 306,
+    RGBA = 307,
+    ROTATE = 308,
+    ROTX = 309,
+    ROTY = 310,
+    ROTZ = 311,
+    SANIM = 312,
+    SCALAR = 313,
+    SCALE = 314,
+    SEQUENCE = 315,
+    SHADING = 316,
+    SWITCH = 317,
+    SWITCHCONDITION = 318,
+    TABLE = 319,
+    TABLE_V = 320,
+    TAG = 321,
+    TANGENT = 322,
+    TEXLIST = 323,
+    TEXTURE = 324,
+    TLENGTHS = 325,
+    TRANSFORM = 326,
+    TRANSLATE = 327,
+    TREF = 328,
+    TRIANGLEFAN = 329,
+    TRIANGLESTRIP = 330,
+    TRIM = 331,
+    TXT = 332,
+    UKNOTS = 333,
+    UV = 334,
+    AUX = 335,
+    VKNOTS = 336,
+    VERTEX = 337,
+    VERTEXANIM = 338,
+    VERTEXPOOL = 339,
+    VERTEXREF = 340,
+    XFMANIM = 341,
+    XFMSANIM = 342,
+    START_EGG = 343,
+    START_GROUP_BODY = 344,
+    START_TEXTURE_BODY = 345,
+    START_PRIMITIVE_BODY = 346
+  };
 #endif
 #endif
 /* Tokens.  */
 /* Tokens.  */
 #define EGG_NUMBER 258
 #define EGG_NUMBER 258
@@ -220,15 +230,11 @@
 #define START_TEXTURE_BODY 345
 #define START_TEXTURE_BODY 345
 #define START_PRIMITIVE_BODY 346
 #define START_PRIMITIVE_BODY 346
 
 
+/* Value type.  */
 
 
 
 
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
 extern YYSTYPE eggyylval;
 extern YYSTYPE eggyylval;
 
 
+int eggyyparse (void);
 
 
+#endif /* !YY_EGGYY_BUILT_TMP_PARSER_YXX_H_INCLUDED  */

+ 1 - 1
panda/src/pgraph/stencilAttrib.h

@@ -88,7 +88,7 @@ PUBLISHED:
     StencilOperation front_stencil_pass_z_pass_operation,
     StencilOperation front_stencil_pass_z_pass_operation,
     unsigned int reference,
     unsigned int reference,
     unsigned int read_mask,
     unsigned int read_mask,
-    unsigned int write_mask);
+    unsigned int write_mask=~(unsigned int)0);
 
 
   static CPT(RenderAttrib) make_2_sided(
   static CPT(RenderAttrib) make_2_sided(
     bool front_enable,
     bool front_enable,

Some files were not shown because too many files changed in this diff