mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-13 03:33:48 +00:00
enum value listing
show the string value of masked enums in variable entries also sort the combo case of scrolling and rotating materials
This commit is contained in:
parent
346339904e
commit
64103a58aa
5 changed files with 141 additions and 137 deletions
|
|
@ -914,98 +914,81 @@ void ProcessedShaderMaterial::_setTextureTransforms(const U32 pass)
|
|||
PROFILE_SCOPE( ProcessedShaderMaterial_SetTextureTransforms );
|
||||
|
||||
ShaderConstHandles* handles = _getShaderConstHandles(pass);
|
||||
if (handles->mTexMatSC->isValid())
|
||||
{
|
||||
MatrixF texMat( true );
|
||||
if (!handles->mTexMatSC->isValid())
|
||||
return;
|
||||
|
||||
mMaterial->updateTimeBasedParams();
|
||||
F32 waveOffset = _getWaveOffset( pass ); // offset is between 0.0 and 1.0
|
||||
MatrixF texMat(true);
|
||||
mMaterial->updateTimeBasedParams();
|
||||
F32 waveOffset = _getWaveOffset(pass); // offset is between 0.0 and 1.0
|
||||
|
||||
// handle scroll anim type
|
||||
if( mMaterial->mAnimFlags[pass] & Material::Scroll )
|
||||
{
|
||||
if( mMaterial->mAnimFlags[pass] & Material::Wave )
|
||||
{
|
||||
Point3F scrollOffset;
|
||||
scrollOffset.x = mMaterial->mScrollDir[pass].x * waveOffset;
|
||||
scrollOffset.y = mMaterial->mScrollDir[pass].y * waveOffset;
|
||||
scrollOffset.z = 1.0;
|
||||
// --- Scroll Animation ---
|
||||
if (mMaterial->mAnimFlags[pass] & Material::Scroll)
|
||||
{
|
||||
Point3F offset = (mMaterial->mAnimFlags[pass] & Material::Wave)
|
||||
? Point3F(mMaterial->mScrollDir[pass].x * waveOffset,
|
||||
mMaterial->mScrollDir[pass].y * waveOffset, 0.0f)
|
||||
: Point3F(mMaterial->mScrollOffset[pass].x,
|
||||
mMaterial->mScrollOffset[pass].y, 0.0f);
|
||||
|
||||
texMat.setColumn( 3, scrollOffset );
|
||||
}
|
||||
else
|
||||
{
|
||||
Point3F offset( mMaterial->mScrollOffset[pass].x,
|
||||
mMaterial->mScrollOffset[pass].y,
|
||||
1.0 );
|
||||
|
||||
texMat.setColumn( 3, offset );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// handle rotation
|
||||
if( mMaterial->mAnimFlags[pass] & Material::Rotate )
|
||||
{
|
||||
if( mMaterial->mAnimFlags[pass] & Material::Wave )
|
||||
{
|
||||
F32 rotPos = waveOffset * M_2PI;
|
||||
texMat.set( EulerF( 0.0, 0.0, rotPos ) );
|
||||
texMat.setColumn( 3, Point3F( 0.5, 0.5, 0.0 ) );
|
||||
|
||||
MatrixF test( true );
|
||||
test.setColumn( 3, Point3F( mMaterial->mRotPivotOffset[pass].x,
|
||||
mMaterial->mRotPivotOffset[pass].y,
|
||||
0.0 ) );
|
||||
texMat.mul( test );
|
||||
}
|
||||
else
|
||||
{
|
||||
texMat.set( EulerF( 0.0, 0.0, mMaterial->mRotPos[pass] ) );
|
||||
|
||||
texMat.setColumn( 3, Point3F( 0.5, 0.5, 0.0 ) );
|
||||
|
||||
MatrixF test( true );
|
||||
test.setColumn( 3, Point3F( mMaterial->mRotPivotOffset[pass].x,
|
||||
mMaterial->mRotPivotOffset[pass].y,
|
||||
0.0 ) );
|
||||
texMat.mul( test );
|
||||
}
|
||||
}
|
||||
|
||||
// Handle scale + wave offset
|
||||
if( mMaterial->mAnimFlags[pass] & Material::Scale &&
|
||||
mMaterial->mAnimFlags[pass] & Material::Wave )
|
||||
{
|
||||
F32 wOffset = fabs( waveOffset );
|
||||
|
||||
texMat.setColumn( 3, Point3F( 0.5, 0.5, 0.0 ) );
|
||||
|
||||
MatrixF temp( true );
|
||||
temp.setRow( 0, Point3F( wOffset, 0.0, 0.0 ) );
|
||||
temp.setRow( 1, Point3F( 0.0, wOffset, 0.0 ) );
|
||||
temp.setRow( 2, Point3F( 0.0, 0.0, wOffset ) );
|
||||
temp.setColumn( 3, Point3F( -wOffset * 0.5, -wOffset * 0.5, 0.0 ) );
|
||||
texMat.mul( temp );
|
||||
}
|
||||
|
||||
// handle sequence
|
||||
if( mMaterial->mAnimFlags[pass] & Material::Sequence )
|
||||
{
|
||||
U32 frameNum = (U32)(MATMGR->getTotalTime() * mMaterial->mSeqFramePerSec[pass]);
|
||||
F32 offset = frameNum * mMaterial->mSeqSegSize[pass];
|
||||
|
||||
if ( mMaterial->mAnimFlags[pass] & Material::Scale )
|
||||
texMat.scale( Point3F( mMaterial->mSeqSegSize[pass], 1.0f, 1.0f ) );
|
||||
|
||||
Point3F texOffset = texMat.getPosition();
|
||||
texOffset.x += offset;
|
||||
texMat.setPosition( texOffset );
|
||||
}
|
||||
|
||||
GFXShaderConstBuffer* shaderConsts = _getShaderConstBuffer(pass);
|
||||
shaderConsts->setSafe(handles->mTexMatSC, texMat);
|
||||
MatrixF scrollMat(true);
|
||||
scrollMat.setColumn(3, offset);
|
||||
texMat.mul(scrollMat);
|
||||
}
|
||||
|
||||
// --- Rotation Animation ---
|
||||
if (mMaterial->mAnimFlags[pass] & Material::Rotate)
|
||||
{
|
||||
F32 rotationAngle = (mMaterial->mAnimFlags[pass] & Material::Wave)
|
||||
? waveOffset * M_2PI
|
||||
: mMaterial->mRotPos[pass];
|
||||
|
||||
MatrixF rotationMat(EulerF(0.0f, 0.0f, rotationAngle));
|
||||
|
||||
Point3F pivotPoint(
|
||||
mMaterial->mRotPivotOffset[pass].x,
|
||||
mMaterial->mRotPivotOffset[pass].y,
|
||||
0.0f);
|
||||
|
||||
MatrixF finalRotationMat(true);
|
||||
finalRotationMat.setColumn(3, pivotPoint);
|
||||
finalRotationMat.mul(rotationMat);
|
||||
finalRotationMat.setColumn(3, -pivotPoint);
|
||||
|
||||
// Apply final rotation matrix
|
||||
texMat.mul(finalRotationMat);
|
||||
}
|
||||
|
||||
// --- Scale Animation ---
|
||||
if ((mMaterial->mAnimFlags[pass] & Material::Scale) && (mMaterial->mAnimFlags[pass] & Material::Wave))
|
||||
{
|
||||
F32 scaleFactor = mFabs(waveOffset);
|
||||
|
||||
MatrixF scaleMat(true);
|
||||
scaleMat.setRow(0, Point3F(scaleFactor, 0.0f, 0.0f));
|
||||
scaleMat.setRow(1, Point3F(0.0f, scaleFactor, 0.0f));
|
||||
scaleMat.setRow(2, Point3F(0.0f, 0.0f, scaleFactor));
|
||||
|
||||
// Apply final scale matrix
|
||||
texMat.mul(scaleMat);
|
||||
}
|
||||
|
||||
// --- Sequence Animation ---
|
||||
if (mMaterial->mAnimFlags[pass] & Material::Sequence)
|
||||
{
|
||||
U32 frameNum = static_cast<U32>(MATMGR->getTotalTime() * mMaterial->mSeqFramePerSec[pass]);
|
||||
F32 offset = frameNum * mMaterial->mSeqSegSize[pass];
|
||||
|
||||
MatrixF sequenceMat(true);
|
||||
sequenceMat.setColumn(3, Point3F(offset, 0.0f, 0.0f));
|
||||
|
||||
if (mMaterial->mAnimFlags[pass] & Material::Scale)
|
||||
sequenceMat.scale(Point3F(mMaterial->mSeqSegSize[pass], 1.0f, 1.0f));
|
||||
|
||||
texMat.mul(sequenceMat);
|
||||
}
|
||||
|
||||
GFXShaderConstBuffer* shaderConsts = _getShaderConstBuffer(pass);
|
||||
shaderConsts->setSafe(handles->mTexMatSC, texMat);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue