mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-12 19:31:41 +00:00
Hardware Skinning Support
- Supports GL, D3D9 & D3D11 - Extends vertex formats & shadergen to support blend indices and weights - Adds basic support for using 4x3 matrices for shader constants - Supports software fallback
This commit is contained in:
parent
507c239a87
commit
3496c549b5
72 changed files with 2533 additions and 1327 deletions
|
|
@ -44,6 +44,9 @@
|
|||
// We need to include customMaterialDefinition for ShaderConstHandles::init
|
||||
#include "materials/customMaterialDefinition.h"
|
||||
|
||||
|
||||
#include "ts/tsShape.h"
|
||||
|
||||
///
|
||||
/// ShaderConstHandles
|
||||
///
|
||||
|
|
@ -99,6 +102,9 @@ void ShaderConstHandles::init( GFXShader *shader, CustomMaterial* mat /*=NULL*/
|
|||
for (S32 i = 0; i < TEXTURE_STAGE_COUNT; ++i)
|
||||
mRTParamsSC[i] = shader->getShaderConstHandle( String::ToString( "$rtParams%d", i ) );
|
||||
|
||||
// MFT_HardwareSkinning
|
||||
mNodeTransforms = shader->getShaderConstHandle( "$nodeTransforms" );
|
||||
|
||||
// Clear any existing texture handles.
|
||||
dMemset( mTexHandlesSC, 0, sizeof( mTexHandlesSC ) );
|
||||
if(mat)
|
||||
|
|
@ -491,6 +497,12 @@ void ProcessedShaderMaterial::_determineFeatures( U32 stageNum,
|
|||
&fd );
|
||||
}
|
||||
|
||||
// Need to add the Hardware Skinning feature if its used
|
||||
if ( features.hasFeature( MFT_HardwareSkinning ) )
|
||||
{
|
||||
fd.features.addFeature( MFT_HardwareSkinning );
|
||||
}
|
||||
|
||||
// Now disable any features that were
|
||||
// not part of the input feature handle.
|
||||
fd.features.filter( features );
|
||||
|
|
@ -1217,6 +1229,20 @@ void ProcessedShaderMaterial::setTransforms(const MatrixSet &matrixSet, SceneRen
|
|||
shaderConsts->set( handles->m_vEyeSC, state->getVectorEye() );
|
||||
}
|
||||
|
||||
void ProcessedShaderMaterial::setNodeTransforms(const MatrixF *transforms, const U32 transformCount, const U32 pass)
|
||||
{
|
||||
PROFILE_SCOPE( ProcessedShaderMaterial_setNodeTransforms );
|
||||
|
||||
GFXShaderConstBuffer* shaderConsts = _getShaderConstBuffer(pass);
|
||||
ShaderConstHandles* handles = _getShaderConstHandles(pass);
|
||||
|
||||
if ( handles->mNodeTransforms->isValid() )
|
||||
{
|
||||
S32 realTransformCount = getMin( transformCount, TSShape::smMaxSkinBones );
|
||||
shaderConsts->set( handles->mNodeTransforms, transforms, realTransformCount, GFXSCT_Float4x3 );
|
||||
}
|
||||
}
|
||||
|
||||
void ProcessedShaderMaterial::setSceneInfo(SceneRenderState * state, const SceneData& sgData, U32 pass)
|
||||
{
|
||||
PROFILE_SCOPE( ProcessedShaderMaterial_setSceneInfo );
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue