Merge branch 'release/1.10.x'

This commit is contained in:
rdb 2019-10-05 21:13:42 +02:00
commit 114a7c0995
6 changed files with 47 additions and 27 deletions

View File

@ -9,6 +9,12 @@ from direct.directnotify import DirectNotifyGlobal
from direct.task.Task import Task
from .DirectFrame import *
from .DirectButton import *
import sys
if sys.version_info >= (3,0):
stringType = str
else:
stringType = basestring
class DirectScrolledListItem(DirectButton):
@ -61,7 +67,7 @@ class DirectScrolledList(DirectFrame):
# so we can modify it without mangling the user's list
if 'items' in kw:
for item in kw['items']:
if type(item) != type(''):
if not isinstance(item, stringType):
break
else:
# we get here if every item in 'items' is a string
@ -106,7 +112,7 @@ class DirectScrolledList(DirectFrame):
DirectFrame, (self,),
)
for item in self["items"]:
if item.__class__.__name__ != 'str':
if not isinstance(item, stringType):
item.reparentTo(self.itemFrame)
self.initialiseoptions(DirectScrolledList)
@ -124,7 +130,7 @@ class DirectScrolledList(DirectFrame):
else:
self.maxHeight = 0.0
for item in self["items"]:
if item.__class__.__name__ != 'str':
if not isinstance(item, stringType):
self.maxHeight = max(self.maxHeight, item.getHeight())
def setScrollSpeed(self):
@ -172,7 +178,7 @@ class DirectScrolledList(DirectFrame):
if len(self["items"]) == 0:
return 0
if type(self["items"][0]) == type(''):
if isinstance(self["items"][0], stringType):
self.notify.warning("getItemIndexForItemID: cant find itemID for non-class list items!")
return 0
@ -238,7 +244,7 @@ class DirectScrolledList(DirectFrame):
# Hide them all
for item in self["items"]:
if item.__class__.__name__ != 'str':
if not isinstance(item, stringType):
item.hide()
# Then show the ones in range, and stack their positions
@ -248,7 +254,7 @@ class DirectScrolledList(DirectFrame):
#print "stacking buttontext[", i,"]", self["items"][i]["text"]
# If the item is a 'str', then it has not been created (scrolled list is 'as needed')
# Therefore, use the the function given to make it or just make it a frame
if item.__class__.__name__ == 'str':
if isinstance(item, stringType):
if self['itemMakeFunction']:
# If there is a function to create the item
item = self['itemMakeFunction'](item, i, self['itemMakeExtraArgs'])
@ -280,7 +286,7 @@ class DirectScrolledList(DirectFrame):
# Therefore, use the the function given to make it or
# just make it a frame
#print "Making " + str(item)
if item.__class__.__name__ == 'str':
if isinstance(item, stringType):
if self['itemMakeFunction']:
# If there is a function to create the item
item = self['itemMakeFunction'](item, i, self['itemMakeExtraArgs'])
@ -345,16 +351,16 @@ class DirectScrolledList(DirectFrame):
Add this string and extraArg to the list
"""
assert self.notify.debugStateCall(self)
if type(item) != type(''):
if not isinstance(item, stringType):
# cant add attribs to non-classes (like strings & ints)
item.itemID = self.nextItemID
self.nextItemID += 1
self['items'].append(item)
if type(item) != type(''):
if not isinstance(item, stringType):
item.reparentTo(self.itemFrame)
if refresh:
self.refresh()
if type(item) != type(''):
if not isinstance(item, stringType):
return item.itemID # to pass to scrollToItemID
def removeItem(self, item, refresh=1):
@ -369,7 +375,7 @@ class DirectScrolledList(DirectFrame):
if hasattr(self, "currentSelected") and self.currentSelected is item:
del self.currentSelected
self["items"].remove(item)
if type(item) != type(''):
if not isinstance(item, stringType):
item.reparentTo(ShowBaseGlobal.hidden)
self.refresh()
return 1
@ -387,7 +393,7 @@ class DirectScrolledList(DirectFrame):
if (hasattr(item, 'destroy') and hasattr(item.destroy, '__call__')):
item.destroy()
self["items"].remove(item)
if type(item) != type(''):
if not isinstance(item, stringType):
item.reparentTo(ShowBaseGlobal.hidden)
self.refresh()
return 1
@ -409,7 +415,7 @@ class DirectScrolledList(DirectFrame):
if hasattr(self, "currentSelected") and self.currentSelected is item:
del self.currentSelected
self["items"].remove(item)
if type(item) != type(''):
if not isinstance(item, stringType):
#RAU possible leak here, let's try to do the right thing
#item.reparentTo(ShowBaseGlobal.hidden)
item.removeNode()
@ -434,7 +440,7 @@ class DirectScrolledList(DirectFrame):
if (hasattr(item, 'destroy') and hasattr(item.destroy, '__call__')):
item.destroy()
self["items"].remove(item)
if type(item) != type(''):
if not isinstance(item, stringType):
#RAU possible leak here, let's try to do the right thing
#item.reparentTo(ShowBaseGlobal.hidden)
item.removeNode()
@ -459,7 +465,7 @@ class DirectScrolledList(DirectFrame):
def getSelectedText(self):
assert self.notify.debugStateCall(self)
if self['items'][self.index].__class__.__name__ == 'str':
if isinstance(self['items'][self.index], stringType):
return self['items'][self.index]
else:
return self['items'][self.index]['text']

View File

@ -461,6 +461,11 @@ def MakeInstallerOSX(version, python_versions=[], **kwargs):
oscmd("mkdir -p %s" % (dir))
WriteFile("%s/Panda3D.pth" % (dir), "/Developer/Panda3D")
# Also place it somewhere the Homebrew version of Python can find it.
dir = "dstroot/pybindings%s/usr/local/lib/python%s/site-packages" % (pyver, pyver)
oscmd("mkdir -p %s" % (dir))
WriteFile("%s/Panda3D.pth" % (dir), "/Developer/Panda3D")
if not PkgSkip("FFMPEG"):
oscmd("mkdir -p dstroot/ffmpeg/Developer/Panda3D/lib")
oscmd("cp -R %s/lib/libp3ffmpeg.* dstroot/ffmpeg/Developer/Panda3D/lib/" % outputdir)

View File

@ -397,8 +397,9 @@ load_named_module(const string &name) {
<< "loading display module: " << dlname.to_os_specific() << std::endl;
void *handle = load_dso(get_plugin_path().get_value(), dlname);
if (handle == nullptr) {
std::string error = load_dso_error();
display_cat.warning()
<< "Unable to load: " << load_dso_error() << std::endl;
<< "Unable to load " << dlname.get_basename() << ": " << error << std::endl;
return TypeHandle::none();
}

View File

@ -131,6 +131,7 @@ CLP(CgShaderContext)(CLP(GraphicsStateGuardian) *glgsg, Shader *s) : ShaderConte
// glVertexPointer).
size_t nvarying = _shader->_var_spec.size();
_attributes.resize(nvarying);
_used_generic_attribs.clear();
for (size_t i = 0; i < nvarying; ++i) {
const Shader::ShaderVarSpec &bind = _shader->_var_spec[i];
@ -332,6 +333,9 @@ CLP(CgShaderContext)(CLP(GraphicsStateGuardian) *glgsg, Shader *s) : ShaderConte
#endif
_attributes[i] = loc;
if (loc >= 0) {
_used_generic_attribs.set_bit(loc);
}
}
_glgsg->report_my_gl_errors();
@ -857,8 +861,6 @@ update_shader_vertex_arrays(ShaderContext *prev, bool force) {
int start, stride, num_values;
size_t nvarying = _shader->_var_spec.size();
GLuint max_p = 0;
for (size_t i = 0; i < nvarying; ++i) {
const Shader::ShaderVarSpec &bind = _shader->_var_spec[i];
InternalName *name = bind._name;
@ -893,8 +895,6 @@ update_shader_vertex_arrays(ShaderContext *prev, bool force) {
// limited in the options we can set.
GLenum type = _glgsg->get_numeric_type(numeric_type);
if (p >= 0) {
max_p = std::max(max_p, (GLuint)p + 1);
_glgsg->enable_vertex_attrib_array(p);
if (numeric_type == GeomEnums::NT_packed_dabc) {
@ -1018,10 +1018,14 @@ update_shader_vertex_arrays(ShaderContext *prev, bool force) {
}
}
// Disable attribute arrays we don't use.
GLint highest_p = _glgsg->_enabled_vertex_attrib_arrays.get_highest_on_bit() + 1;
for (GLint p = max_p; p < highest_p; ++p) {
_glgsg->disable_vertex_attrib_array(p);
// Disable enabled attribute arrays that we don't use.
BitMask32 disable = _glgsg->_enabled_vertex_attrib_arrays & ~_used_generic_attribs;
if (!disable.is_zero()) {
for (GLuint p = (GLuint)disable.get_lowest_on_bit(); p <= (GLuint)disable.get_highest_on_bit(); ++p) {
if (disable.get_bit(p)) {
_glgsg->disable_vertex_attrib_array(p);
}
}
}
}

View File

@ -68,6 +68,7 @@ private:
GLuint _glsl_program;
pvector<GLint> _attributes;
BitMask32 _used_generic_attribs;
GLint _color_attrib_index;
CGparameter _transform_table_param;
CGparameter _slider_table_param;

View File

@ -123,9 +123,10 @@ load_audio_types() {
<< "loading audio type module: " << name << endl;
void *tmp = load_dso(get_plugin_path().get_value(), dlname);
if (tmp == nullptr) {
std::string error = load_dso_error();
movies_cat.warning()
<< "Unable to load " << dlname.to_os_specific()
<< ": " << load_dso_error() << endl;
<< ": " << error << endl;
} else if (movies_cat.is_debug()) {
movies_cat.debug()
<< "done loading audio type module: " << name << endl;
@ -252,9 +253,10 @@ load_video_types() {
<< "loading video type module: " << name << endl;
void *tmp = load_dso(get_plugin_path().get_value(), dlname);
if (tmp == nullptr) {
std::string error = load_dso_error();
movies_cat.warning()
<< "Unable to load " << dlname.to_os_specific()
<< ": " << load_dso_error() << endl;
<< ": " << error << endl;
} else if (movies_cat.is_debug()) {
movies_cat.debug()
<< "done loading video type module: " << name << endl;
@ -294,9 +296,10 @@ load_movie_library(const string &name) {
void *tmp = load_dso(get_plugin_path().get_value(), dlname);
if (tmp == nullptr) {
std::string error = load_dso_error();
movies_cat.warning()
<< "Unable to load " << dlname.to_os_specific()
<< ": " << load_dso_error() << endl;
<< ": " << error << endl;
} else if (movies_cat.is_debug()) {
movies_cat.debug()
<< "done loading video type module: " << name << endl;