Skip to content

Commit 6d927aa

Browse files
committed
Merge tag 'v1.10.1'
2 parents db8221a + 87e0ff2 commit 6d927aa

File tree

11 files changed

+96
-53
lines changed

11 files changed

+96
-53
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ depending on whether you are on a 32-bit or 64-bit system, or you can
6262
[click here](https://github.com/rdb/panda3d-thirdparty) for instructions on
6363
building them from source.
6464

65-
https://www.panda3d.org/download/panda3d-1.10.0/panda3d-1.10.0-tools-win64.zip
66-
https://www.panda3d.org/download/panda3d-1.10.0/panda3d-1.10.0-tools-win32.zip
65+
https://www.panda3d.org/download/panda3d-1.10.1/panda3d-1.10.1-tools-win64.zip
66+
https://www.panda3d.org/download/panda3d-1.10.1/panda3d-1.10.1-tools-win32.zip
6767

6868
After acquiring these dependencies, you may simply build Panda3D from the
6969
command prompt using the following command. (Change `14.1` to `14` if you are
@@ -133,7 +133,7 @@ macOS
133133
-----
134134

135135
On macOS, you will need to download a set of precompiled thirdparty packages in order to
136-
compile Panda3D, which can be acquired from [here](https://www.panda3d.org/download/panda3d-1.9.4/panda3d-1.9.4-tools-mac.tar.gz).
136+
compile Panda3D, which can be acquired from [here](https://www.panda3d.org/download/panda3d-1.10.1/panda3d-1.10.1-tools-mac.tar.gz).
137137

138138
After placing the thirdparty directory inside the panda3d source directory,
139139
you may build Panda3D using a command like the following:

direct/src/interval/cLerpNodePathInterval.I

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ set_end_hpr(const LQuaternion &quat) {
106106
* if either set_end_quat() or set_end_hpr() is also called. This parameter
107107
* is optional; if unspecified, the value will be taken from the node's actual
108108
* rotation at the time the lerp is performed.
109+
*
110+
* The given quaternion needs to be normalized.
109111
*/
110112
INLINE void CLerpNodePathInterval::
111113
set_start_quat(const LQuaternion &quat) {
@@ -143,6 +145,8 @@ set_end_quat(const LVecBase3 &hpr) {
143145
* This replaces a previous call to set_end_hpr(). If neither set_end_quat()
144146
* nor set_end_hpr() is called, the node's rotation will not be affected by
145147
* the lerp.
148+
*
149+
* The given quaternion needs to be normalized.
146150
*/
147151
INLINE void CLerpNodePathInterval::
148152
set_end_quat(const LQuaternion &quat) {

direct/src/interval/cLerpNodePathInterval.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,14 +174,14 @@ priv_step(double t) {
174174
setup_slerp();
175175

176176
} else if ((_flags & F_bake_in_start) != 0) {
177-
set_start_quat(transform->get_quat());
177+
set_start_quat(transform->get_norm_quat());
178178
setup_slerp();
179179

180180
} else {
181181
if (_prev_d == 1.0) {
182182
_start_quat = _end_quat;
183183
} else {
184-
LQuaternion prev_value = transform->get_quat();
184+
LQuaternion prev_value = transform->get_norm_quat();
185185
_start_quat = (prev_value - _prev_d * _end_quat) / (1.0 - _prev_d);
186186
}
187187
setup_slerp();

direct/src/showbase/EventManager.py

Lines changed: 36 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def __init__(self, eventQueue = None):
1919
Create a C++ event queue and handler
2020
"""
2121
# Make a notify category for this class (unless there already is one)
22-
if (EventManager.notify == None):
22+
if EventManager.notify is None:
2323
EventManager.notify = directNotify.newCategory("EventManager")
2424

2525
self.eventQueue = eventQueue
@@ -37,8 +37,10 @@ def doEvents(self):
3737
processFunc = self.processEventPstats
3838
else:
3939
processFunc = self.processEvent
40-
while (not self.eventQueue.isQueueEmpty()):
41-
processFunc(self.eventQueue.dequeueEvent())
40+
isEmptyFunc = self.eventQueue.isQueueEmpty
41+
dequeueFunc = self.eventQueue.dequeueEvent
42+
while not isEmptyFunc():
43+
processFunc(dequeueFunc())
4244

4345
def eventLoopTask(self, task):
4446
"""
@@ -78,13 +80,13 @@ def processEvent(self, event):
7880
# ******** Duplicate any changes in processEventPstats *********
7981
# **************************************************************
8082
# Get the event name
81-
eventName = event.getName()
83+
eventName = event.name
8284
if eventName:
8385
paramList = []
84-
for i in range(event.getNumParameters()):
85-
eventParameter = event.getParameter(i)
86+
for eventParameter in event.parameters:
8687
eventParameterData = self.parseEventParameter(eventParameter)
8788
paramList.append(eventParameterData)
89+
8890
# Do not print the new frame debug, it is too noisy!
8991
if (EventManager.notify.getDebug() and eventName != 'NewFrame'):
9092
EventManager.notify.debug('received C++ event named: ' + eventName +
@@ -94,13 +96,12 @@ def processEvent(self, event):
9496
# **************************************************************
9597
# Send the event, we used to send it with the event
9698
# name as a parameter, but now you can use extraArgs for that
97-
if paramList:
98-
messenger.send(eventName, paramList)
99-
else:
100-
messenger.send(eventName)
99+
messenger.send(eventName, paramList)
100+
101101
# Also send the event down into C++ land
102-
if self.eventHandler:
103-
self.eventHandler.dispatchEvent(event)
102+
handler = self.eventHandler
103+
if handler:
104+
handler.dispatchEvent(event)
104105

105106
else:
106107
# An unnamed event from C++ is probably a bad thing
@@ -115,13 +116,13 @@ def processEventPstats(self, event):
115116
# ******** Duplicate any changes in processEvent *********
116117
# ********************************************************
117118
# Get the event name
118-
eventName = event.getName()
119+
eventName = event.name
119120
if eventName:
120121
paramList = []
121-
for i in range(event.getNumParameters()):
122-
eventParameter = event.getParameter(i)
122+
for eventParameter in event.parameters:
123123
eventParameterData = self.parseEventParameter(eventParameter)
124124
paramList.append(eventParameterData)
125+
125126
# Do not print the new frame debug, it is too noisy!
126127
if (EventManager.notify.getDebug() and eventName != 'NewFrame'):
127128
EventManager.notify.debug('received C++ event named: ' + eventName +
@@ -131,45 +132,36 @@ def processEventPstats(self, event):
131132
# ********************************************************
132133
# ******** Duplicate any changes in processEvent *********
133134
# ********************************************************
134-
if self._wantPstats:
135-
name = eventName
136-
hyphen = name.find('-')
137-
if hyphen >= 0:
138-
name = name[0:hyphen]
139-
pstatCollector = PStatCollector('App:Show code:eventManager:' + name)
140-
pstatCollector.start()
141-
if self.eventHandler:
142-
cppPstatCollector = PStatCollector(
143-
'App:Show code:eventManager:' + name + ':C++')
144-
145-
if paramList:
146-
messenger.send(eventName, paramList)
147-
else:
148-
messenger.send(eventName)
149-
# Also send the event down into C++ land
135+
name = eventName
136+
hyphen = name.find('-')
137+
if hyphen >= 0:
138+
name = name[0:hyphen]
139+
pstatCollector = PStatCollector('App:Show code:eventManager:' + name)
140+
pstatCollector.start()
150141
if self.eventHandler:
151-
if self._wantPstats:
152-
cppPstatCollector.start()
153-
self.eventHandler.dispatchEvent(event)
154-
# ********************************************************
155-
# ******** Duplicate any changes in processEvent *********
156-
# ********************************************************
142+
cppPstatCollector = PStatCollector(
143+
'App:Show code:eventManager:' + name + ':C++')
157144

158-
if self._wantPstats:
159-
if self.eventHandler:
160-
cppPstatCollector.stop()
161-
pstatCollector.stop()
145+
messenger.send(eventName, paramList)
146+
147+
# Also send the event down into C++ land
148+
handler = self.eventHandler
149+
if handler:
150+
cppPstatCollector.start()
151+
handler.dispatchEvent(event)
152+
cppPstatCollector.stop()
153+
154+
pstatCollector.stop()
162155

163156
else:
164157
# An unnamed event from C++ is probably a bad thing
165158
EventManager.notify.warning('unnamed event in processEvent')
166159

167-
168160
def restart(self):
169-
if self.eventQueue == None:
161+
if self.eventQueue is None:
170162
self.eventQueue = EventQueue.getGlobalEventQueue()
171163

172-
if self.eventHandler == None:
164+
if self.eventHandler is None:
173165
if self.eventQueue == EventQueue.getGlobalEventQueue():
174166
# If we are using the global event queue, then we also
175167
# want to use the global event handler.

doc/ReleaseNotes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ This is a bugfix release intended to fix several issues in 1.10.0.
44

55
* Fix crashes when gamepad is plugged in on 32-bit Windows
66
* Fix deploy-ng error regarding 'exist_ok' on Python 2
7+
* Fix Linux install from pip not working with some mesa drivers
78
* Fix compatibility issues with upcoming Python 3.8
89
* Fix regression with Audio3DManager.setSoundVelocityAuto()
910
* Fix issues when awaiting loader.loadModel in Python 3.7
@@ -13,6 +14,7 @@ This is a bugfix release intended to fix several issues in 1.10.0.
1314
* Depth buffer now defaults to 24-bit on macOS (fixes flickering)
1415
* Fix no devices being detected on Windows with threading-model
1516
* Implement collision tests from Capsule and Box into InvSphere
17+
* Fix odd behavior and occasional crash in QuatInterval
1618
* Fix SpriteAnim error in particle system
1719
* Fix ShaderGenerator error when using too many shadowing lights
1820
* Fix interrogate crash in Python 3 with optional wstring args

makepanda/makewheel.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ def get_python_ext_module_dir():
104104

105105
# These are not mentioned in manylinux1 spec but should nonetheless always
106106
# be excluded.
107-
"linux-vdso.so.1", "linux-gate.so.1", "ld-linux.so.2",
107+
"linux-vdso.so.1", "linux-gate.so.1", "ld-linux.so.2", "libdrm.so.2",
108108
]
109109

110110
# Binaries to never scan for dependencies on non-Windows systems.
@@ -144,6 +144,32 @@ def get_python_ext_module_dir():
144144
"classifiers": GetMetadataValue('classifiers'),
145145
}
146146

147+
DESCRIPTION = """
148+
The Panda3D free 3D game engine
149+
===============================
150+
151+
Panda3D is a powerful 3D engine written in C++, with a complete set of Python
152+
bindings. Unlike other engines, these bindings are automatically generated,
153+
meaning that they are always up-to-date and complete: all functions of the
154+
engine can be controlled from Python. All major Panda3D applications have been
155+
written in Python, this is the intended way of using the engine.
156+
157+
Panda3D now supports automatic shader generation, which now means you can use
158+
normal maps, gloss maps, glow maps, HDR, cartoon shading, and the like without
159+
having to write any shaders.
160+
161+
Panda3D is a modern engine supporting advanced features such as shaders,
162+
stencil, and render-to-texture. Panda3D is unusual in that it emphasizes a
163+
short learning curve, rapid development, and extreme stability and robustness.
164+
Panda3D is free software that runs under Windows, Linux, or macOS.
165+
166+
The Panda3D team is very concerned with making the engine accessible to new
167+
users. We provide a detailed manual, a complete API reference, and a large
168+
collection of sample programs to help you get started. We have active forums,
169+
with many helpful users, and the developers are regularly online to answer
170+
questions.
171+
"""
172+
147173
PANDA3D_TOOLS_INIT = """import os, sys
148174
import panda3d
149175
@@ -544,6 +570,8 @@ def makewheel(version, output_dir, platform=None):
544570
"Platform: {0}\n".format(platform),
545571
] + ["Classifier: {0}\n".format(c) for c in METADATA['classifiers']])
546572

573+
metadata += '\n' + DESCRIPTION.strip() + '\n'
574+
547575
# Zip it up and name it the right thing
548576
whl = WheelFile('panda3d', version, platform)
549577
whl.lib_path = [libs_dir]

panda/src/pipeline/threadPosixImpl.cxx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ ThreadPosixImpl::
5858
void ThreadPosixImpl::
5959
setup_main_thread() {
6060
_status = S_running;
61+
_thread = pthread_self();
6162
}
6263

6364
/**
@@ -180,7 +181,7 @@ join() {
180181
std::string ThreadPosixImpl::
181182
get_unique_id() const {
182183
std::ostringstream strm;
183-
strm << getpid() << "." << _thread;
184+
strm << getpid() << "." << (uintptr_t)_thread;
184185

185186
return strm.str();
186187
}

pandatool/src/xfile/xFile.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ PT(XFile) XFile::_standard_templates;
3434
*
3535
*/
3636
XFile::
37-
XFile(bool keep_names) : XFileNode(this, "") {
37+
XFile(bool keep_names) : XFileNode(this) {
3838
_major_version = 3;
3939
_minor_version = 2;
4040
_format_type = FT_text;

pandatool/src/xfile/xFileNode.I

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,16 @@
1111
* @date 2004-10-03
1212
*/
1313

14+
/**
15+
*
16+
*/
17+
INLINE XFileNode::
18+
XFileNode(XFile *x_file) :
19+
Namable(),
20+
_x_file(x_file)
21+
{
22+
}
23+
1424
/**
1525
*
1626
*/

pandatool/src/xfile/xFileNode.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ class Filename;
3838
*/
3939
class XFileNode : public TypedObject, public Namable,
4040
virtual public ReferenceCount {
41+
protected:
42+
INLINE XFileNode(XFile *x_file);
43+
4144
public:
4245
XFileNode(XFile *x_file, const std::string &name);
4346
virtual ~XFileNode();

0 commit comments

Comments
 (0)