diff --git a/src/osg/PrimitiveSet.cpp b/src/osg/PrimitiveSet.cpp index 834d39d11..9bb9fb7be 100644 --- a/src/osg/PrimitiveSet.cpp +++ b/src/osg/PrimitiveSet.cpp @@ -31,7 +31,7 @@ unsigned int PrimitiveSet::getNumPrimitives() const case(TRIANGLE_FAN): case(QUAD_STRIP): case(PATCHES): - case(POLYGON): return 1; + case(POLYGON): return (getNumIndices()>0) ? 1 : 0; } return 0; } diff --git a/src/osgPlugins/lua/LuaScriptEngine.cpp b/src/osgPlugins/lua/LuaScriptEngine.cpp index 100ce67c0..6c8881dd5 100644 --- a/src/osgPlugins/lua/LuaScriptEngine.cpp +++ b/src/osgPlugins/lua/LuaScriptEngine.cpp @@ -595,8 +595,7 @@ int LuaScriptEngine::pushPropertyToStack(osg::Object* object, const std::string& GLenum value; if (_pi.getProperty(object, propertyName, value)) { - osgDB::ObjectWrapperManager* ow = osgDB::Registry::instance()->getObjectWrapperManager(); - std::string enumString = ow->getString("GL",value); + std::string enumString = lookUpGLenumString(value); lua_pushstring(_lua, enumString.c_str()); return 1; } @@ -812,6 +811,52 @@ int LuaScriptEngine::pushPropertyToStack(osg::Object* object, const std::string& return 0; } +std::string LuaScriptEngine::lookUpGLenumString(GLenum value) const +{ + osgDB::ObjectWrapperManager* ow = osgDB::Registry::instance()->getObjectWrapperManager(); + + { + const osgDB::IntLookup& lookup = ow->getLookupMap()["GL"]; + const osgDB::IntLookup::ValueToString& vts = lookup.getValueToString(); + osgDB::IntLookup::ValueToString::const_iterator itr = vts.find(value); + if (itr!=vts.end()) return itr->second; + } + + { + const osgDB::IntLookup& lookup = ow->getLookupMap()["PrimitiveType"]; + const osgDB::IntLookup::ValueToString& vts = lookup.getValueToString(); + osgDB::IntLookup::ValueToString::const_iterator itr = vts.find(value); + if (itr!=vts.end()) return itr->second; + } + + OSG_NOTICE<<"Warning: LuaScriptEngine did not find valid GL enum value for GLenum value: "<getObjectWrapperManager(); + + { + const osgDB::IntLookup& lookup = ow->getLookupMap()["GL"]; + const osgDB::IntLookup::StringToValue& stv = lookup.getStringToValue(); + osgDB::IntLookup::StringToValue::const_iterator itr = stv.find(str); + if (itr!=stv.end()) return itr->second; + } + + { + const osgDB::IntLookup& lookup = ow->getLookupMap()["PrimitiveType"]; + const osgDB::IntLookup::StringToValue& stv = lookup.getStringToValue(); + osgDB::IntLookup::StringToValue::const_iterator itr = stv.find(str); + if (itr!=stv.end()) return itr->second; + } + + OSG_NOTICE<<"Warning: LuaScriptEngine did not find valid GL enum value for string value: "<(lua_tonumber(_lua, -1))); + _pi.setProperty(object, propertyName, static_cast(lua_tonumber(_lua, -1))); return 0; } else if (lua_isstring(_lua, -1)) { const char* enumString = lua_tostring(_lua, -1); - osgDB::ObjectWrapperManager* ow = osgDB::Registry::instance()->getObjectWrapperManager(); + GLenum value = lookUpGLenumValue(enumString); //getValue("GL",enumString); + + OSG_NOTICE<<"Checking enumString="<addSerializer( new osgDB::PropByValSerializer< osg::PrimitiveSet, bool > ("supportsBufferObject", false, &osg::PrimitiveSet::supportsBufferObject, 0, osgDB::BaseSerializer::RW_BOOL )