Added numTextureUnits parameter to the osg::State::resetVertexAttributeAlias(bool, unit) method, and set the default to 8.

git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14523 16af8721-9629-0410-8352-f15c8da7e697
This commit is contained in:
Robert Osfield 2014-11-24 14:01:05 +00:00
parent 671d8dc342
commit fce7137525
2 changed files with 14 additions and 11 deletions

View File

@ -256,7 +256,7 @@ class OSG_EXPORT State : public Referenced
typedef std::vector<VertexAttribAlias> VertexAttribAliasList; typedef std::vector<VertexAttribAlias> VertexAttribAliasList;
/** Reset the vertex attribute aliasing to osg's default. This method needs to be called before render anything unless you really know what you're doing !*/ /** Reset the vertex attribute aliasing to osg's default. This method needs to be called before render anything unless you really know what you're doing !*/
void resetVertexAttributeAlias(bool compactAliasing=true); void resetVertexAttributeAlias(bool compactAliasing=true, unsigned int numTextureUnits=8);
/** Set the vertex attribute aliasing for "vertex". This method needs to be called before render anything unless you really know what you're doing !*/ /** Set the vertex attribute aliasing for "vertex". This method needs to be called before render anything unless you really know what you're doing !*/
void setVertexAlias(const VertexAttribAlias& alias) { _vertexAlias = alias; } void setVertexAlias(const VertexAttribAlias& alias) { _vertexAlias = alias; }

View File

@ -827,18 +827,19 @@ Polytope State::getViewFrustum() const
} }
void State::resetVertexAttributeAlias(bool compactAliasing) void State::resetVertexAttributeAlias(bool compactAliasing, unsigned int numTextureUnits)
{ {
_texCoordAliasList.clear(); _texCoordAliasList.clear();
_attributeBindingList.clear(); _attributeBindingList.clear();
if (compactAliasing) if (compactAliasing)
{ {
setUpVertexAttribAlias(_vertexAlias,0, "gl_Vertex","osg_Vertex","attribute vec4 "); unsigned int slot = 0;
setUpVertexAttribAlias(_normalAlias, 1, "gl_Normal","osg_Normal","attribute vec3 "); setUpVertexAttribAlias(_vertexAlias, slot++, "gl_Vertex","osg_Vertex","attribute vec4 ");
setUpVertexAttribAlias(_colorAlias, 2, "gl_Color","osg_Color","attribute vec4 "); setUpVertexAttribAlias(_normalAlias, slot++, "gl_Normal","osg_Normal","attribute vec3 ");
setUpVertexAttribAlias(_colorAlias, slot++, "gl_Color","osg_Color","attribute vec4 ");
_texCoordAliasList.resize(5); _texCoordAliasList.resize(numTextureUnits);
for(unsigned int i=0; i<_texCoordAliasList.size(); i++) for(unsigned int i=0; i<_texCoordAliasList.size(); i++)
{ {
std::stringstream gl_MultiTexCoord; std::stringstream gl_MultiTexCoord;
@ -846,11 +847,11 @@ void State::resetVertexAttributeAlias(bool compactAliasing)
gl_MultiTexCoord<<"gl_MultiTexCoord"<<i; gl_MultiTexCoord<<"gl_MultiTexCoord"<<i;
osg_MultiTexCoord<<"osg_MultiTexCoord"<<i; osg_MultiTexCoord<<"osg_MultiTexCoord"<<i;
setUpVertexAttribAlias(_texCoordAliasList[i], 3+i, gl_MultiTexCoord.str(), osg_MultiTexCoord.str(), "attribute vec4 "); setUpVertexAttribAlias(_texCoordAliasList[i], slot++, gl_MultiTexCoord.str(), osg_MultiTexCoord.str(), "attribute vec4 ");
} }
setUpVertexAttribAlias(_secondaryColorAlias, 6, "gl_SecondaryColor","osg_SecondaryColor","attribute vec4 "); setUpVertexAttribAlias(_secondaryColorAlias, slot++, "gl_SecondaryColor","osg_SecondaryColor","attribute vec4 ");
setUpVertexAttribAlias(_fogCoordAlias, 7, "gl_FogCoord","osg_FogCoord","attribute float "); setUpVertexAttribAlias(_fogCoordAlias, slot++, "gl_FogCoord","osg_FogCoord","attribute float ");
} }
else else
@ -861,7 +862,8 @@ void State::resetVertexAttributeAlias(bool compactAliasing)
setUpVertexAttribAlias(_secondaryColorAlias, 4, "gl_SecondaryColor","osg_SecondaryColor","attribute vec4 "); setUpVertexAttribAlias(_secondaryColorAlias, 4, "gl_SecondaryColor","osg_SecondaryColor","attribute vec4 ");
setUpVertexAttribAlias(_fogCoordAlias, 5, "gl_FogCoord","osg_FogCoord","attribute float "); setUpVertexAttribAlias(_fogCoordAlias, 5, "gl_FogCoord","osg_FogCoord","attribute float ");
_texCoordAliasList.resize(8); unsigned int base = 8;
_texCoordAliasList.resize(numTextureUnits);
for(unsigned int i=0; i<_texCoordAliasList.size(); i++) for(unsigned int i=0; i<_texCoordAliasList.size(); i++)
{ {
std::stringstream gl_MultiTexCoord; std::stringstream gl_MultiTexCoord;
@ -869,7 +871,7 @@ void State::resetVertexAttributeAlias(bool compactAliasing)
gl_MultiTexCoord<<"gl_MultiTexCoord"<<i; gl_MultiTexCoord<<"gl_MultiTexCoord"<<i;
osg_MultiTexCoord<<"osg_MultiTexCoord"<<i; osg_MultiTexCoord<<"osg_MultiTexCoord"<<i;
setUpVertexAttribAlias(_texCoordAliasList[i], 8+i, gl_MultiTexCoord.str(), osg_MultiTexCoord.str(), "attribute vec4 "); setUpVertexAttribAlias(_texCoordAliasList[i], base+i, gl_MultiTexCoord.str(), osg_MultiTexCoord.str(), "attribute vec4 ");
} }
} }
} }
@ -1440,6 +1442,7 @@ void State::setUpVertexAttribAlias(VertexAttribAlias& alias, GLuint location, co
{ {
alias = VertexAttribAlias(location, glName, osgName, declaration); alias = VertexAttribAlias(location, glName, osgName, declaration);
_attributeBindingList[osgName] = location; _attributeBindingList[osgName] = location;
OSG_NOTICE<<"State::setUpVertexAttribAlias("<<location<<" "<<glName<<" "<<osgName<<")"<<std::endl;
} }
void State::applyProjectionMatrix(const osg::RefMatrix* matrix) void State::applyProjectionMatrix(const osg::RefMatrix* matrix)