Add a workaround for the 16 vertex attribute limit on nvidia gl

This commit is contained in:
James Urquhart 2016-08-06 14:39:40 +01:00
parent 6283a6b9da
commit ace01a313c
4 changed files with 11 additions and 19 deletions

View file

@ -455,14 +455,6 @@ bool GFXGLShader::_init()
glBindAttribLocation(mProgram, Torque::GL_VertexAttrib_Tangent, "vTangent");
glBindAttribLocation(mProgram, Torque::GL_VertexAttrib_TangentW, "vTangentW");
glBindAttribLocation(mProgram, Torque::GL_VertexAttrib_Binormal, "vBinormal");
glBindAttribLocation(mProgram, Torque::GL_VertexAttrib_BlendIndex0, "vBlendIndex0");
glBindAttribLocation(mProgram, Torque::GL_VertexAttrib_BlendIndex1, "vBlendIndex1");
glBindAttribLocation(mProgram, Torque::GL_VertexAttrib_BlendIndex2, "vBlendIndex2");
glBindAttribLocation(mProgram, Torque::GL_VertexAttrib_BlendIndex3, "vBlendIndex3");
glBindAttribLocation(mProgram, Torque::GL_VertexAttrib_BlendWeight0, "vBlendWeight0");
glBindAttribLocation(mProgram, Torque::GL_VertexAttrib_BlendWeight1, "vBlendWeight1");
glBindAttribLocation(mProgram, Torque::GL_VertexAttrib_BlendWeight2, "vBlendWeight2");
glBindAttribLocation(mProgram, Torque::GL_VertexAttrib_BlendWeight3, "vBlendWeight3");
glBindAttribLocation(mProgram, Torque::GL_VertexAttrib_TexCoord0, "vTexCoord0");
glBindAttribLocation(mProgram, Torque::GL_VertexAttrib_TexCoord1, "vTexCoord1");
glBindAttribLocation(mProgram, Torque::GL_VertexAttrib_TexCoord2, "vTexCoord2");

View file

@ -11,14 +11,6 @@ namespace Torque
GL_VertexAttrib_Tangent,
GL_VertexAttrib_TangentW,
GL_VertexAttrib_Binormal,
GL_VertexAttrib_BlendIndex0,
GL_VertexAttrib_BlendIndex1,
GL_VertexAttrib_BlendIndex2,
GL_VertexAttrib_BlendIndex3,
GL_VertexAttrib_BlendWeight0,
GL_VertexAttrib_BlendWeight1,
GL_VertexAttrib_BlendWeight2,
GL_VertexAttrib_BlendWeight3,
GL_VertexAttrib_TexCoord0,
GL_VertexAttrib_TexCoord1,
GL_VertexAttrib_TexCoord2,
@ -29,8 +21,11 @@ namespace Torque
GL_VertexAttrib_TexCoord7,
GL_VertexAttrib_TexCoord8,
GL_VertexAttrib_TexCoord9,
GL_VertexAttrib_COUNT,
GL_VertexAttrib_LAST = GL_VertexAttrib_TexCoord9,
GL_VertexAttrib_COUNT
GL_VertexAttrib_BlendWeight0 = GL_VertexAttrib_TexCoord6,
GL_VertexAttrib_BlendIndex0 = GL_VertexAttrib_TexCoord2,
};
}

View file

@ -105,6 +105,8 @@ void GFXGLVertexDecl::_initVerticesFormat(U32 stream)
if(element.getStreamIndex() != stream)
continue;
AssertFatal(!mFormat->hasBlendIndices() || !element.isSemantic(GFXSemantic::TEXCOORD) || (mFormat->hasBlendIndices() && element.isSemantic(GFXSemantic::TEXCOORD) && element.getSemanticIndex() < 2), "skinning with more than 2 used texcoords!");
vertexSize += element.getSizeInBytes();
}

View file

@ -26,6 +26,7 @@
#include "shaderGen/shaderComp.h"
#include "shaderGen/langElement.h"
#include "gfx/gfxDevice.h"
#include "gfx/gl/gfxGLVertexAttribLocation.h"
Var * AppVertConnectorGLSL::getElement( RegisterType type,
@ -107,7 +108,8 @@ Var * AppVertConnectorGLSL::getElement( RegisterType type,
newVar->constNum = mCurBlendIndicesElem;
mElementList.push_back(newVar);
char out[32];
dSprintf((char*)out, sizeof(out), "vBlendIndex%d", mCurBlendIndicesElem);
const U32 blendIndicesOffset = Torque::GL_VertexAttrib_BlendIndex0 - Torque::GL_VertexAttrib_TexCoord0;
dSprintf((char*)out, sizeof(out), "vTexCoord%d", blendIndicesOffset + mCurBlendIndicesElem);
mCurBlendIndicesElem += 1;
newVar->setConnectName(out);
return newVar;
@ -119,7 +121,8 @@ Var * AppVertConnectorGLSL::getElement( RegisterType type,
newVar->constNum = mCurBlendWeightsElem;
mElementList.push_back(newVar);
char out[32];
dSprintf((char*)out, sizeof(out), "vBlendWeight%d", mCurBlendWeightsElem);
const U32 blendWeightsOffset = Torque::GL_VertexAttrib_BlendWeight0 - Torque::GL_VertexAttrib_TexCoord0;
dSprintf((char*)out, sizeof(out), "vTexCoord%d", blendWeightsOffset + mCurBlendWeightsElem);
mCurBlendWeightsElem += 1;
newVar->setConnectName(out);
return newVar;