Merge branch 'development' into imageAsset_refactor_rev3

This commit is contained in:
marauder2k7 2025-03-24 20:07:06 +00:00 committed by GitHub
commit 0da0903599
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4189 changed files with 29881 additions and 635347 deletions

View file

@ -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);
}
//--------------------------------------------------------------------------