mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-29 16:25:42 +00:00
Merge branch 'SSR4' of https://github.com/Azaezel/Torque3D into Preview4_0
This commit is contained in:
commit
8403345de4
9 changed files with 61 additions and 2 deletions
|
|
@ -80,6 +80,9 @@ void ShaderConstHandles::init( GFXShader *shader, Vector<CustomShaderFeatureData
|
||||||
mCameraToWorldSC = shader->getShaderConstHandle(ShaderGenVars::cameraToWorld);
|
mCameraToWorldSC = shader->getShaderConstHandle(ShaderGenVars::cameraToWorld);
|
||||||
mWorldToObjSC = shader->getShaderConstHandle(ShaderGenVars::worldToObj);
|
mWorldToObjSC = shader->getShaderConstHandle(ShaderGenVars::worldToObj);
|
||||||
mViewToObjSC = shader->getShaderConstHandle(ShaderGenVars::viewToObj);
|
mViewToObjSC = shader->getShaderConstHandle(ShaderGenVars::viewToObj);
|
||||||
|
mInvCameraTransSC = shader->getShaderConstHandle(ShaderGenVars::invCameraTrans);
|
||||||
|
mCameraToScreenSC = shader->getShaderConstHandle(ShaderGenVars::cameraToScreen);
|
||||||
|
mScreenToCameraSC = shader->getShaderConstHandle(ShaderGenVars::screenToCamera);
|
||||||
mCubeTransSC = shader->getShaderConstHandle(ShaderGenVars::cubeTrans);
|
mCubeTransSC = shader->getShaderConstHandle(ShaderGenVars::cubeTrans);
|
||||||
mCubeMipsSC = shader->getShaderConstHandle(ShaderGenVars::cubeMips);
|
mCubeMipsSC = shader->getShaderConstHandle(ShaderGenVars::cubeMips);
|
||||||
mObjTransSC = shader->getShaderConstHandle(ShaderGenVars::objTrans);
|
mObjTransSC = shader->getShaderConstHandle(ShaderGenVars::objTrans);
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,10 @@ public:
|
||||||
GFXShaderConstHandle* mWorldToCameraSC;
|
GFXShaderConstHandle* mWorldToCameraSC;
|
||||||
GFXShaderConstHandle* mCameraToWorldSC;
|
GFXShaderConstHandle* mCameraToWorldSC;
|
||||||
GFXShaderConstHandle* mWorldToObjSC;
|
GFXShaderConstHandle* mWorldToObjSC;
|
||||||
GFXShaderConstHandle* mViewToObjSC;
|
GFXShaderConstHandle* mViewToObjSC;
|
||||||
|
GFXShaderConstHandle* mInvCameraTransSC;
|
||||||
|
GFXShaderConstHandle* mCameraToScreenSC;
|
||||||
|
GFXShaderConstHandle* mScreenToCameraSC;
|
||||||
GFXShaderConstHandle* mCubeTransSC;
|
GFXShaderConstHandle* mCubeTransSC;
|
||||||
GFXShaderConstHandle* mCubeMipsSC;
|
GFXShaderConstHandle* mCubeMipsSC;
|
||||||
GFXShaderConstHandle* mObjTransSC;
|
GFXShaderConstHandle* mObjTransSC;
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ class MatrixSet
|
||||||
ObjectToWorld = 0, // World
|
ObjectToWorld = 0, // World
|
||||||
WorldToCamera, // View
|
WorldToCamera, // View
|
||||||
CameraToScreen, // Projection
|
CameraToScreen, // Projection
|
||||||
|
ScreenToCamera, // Projection^-1
|
||||||
ObjectToScreen, // World * View * Proj
|
ObjectToScreen, // World * View * Proj
|
||||||
ObjectToCamera, // World * View
|
ObjectToCamera, // World * View
|
||||||
WorldToObject, // World^-1
|
WorldToObject, // World^-1
|
||||||
|
|
@ -63,6 +64,7 @@ class MatrixSet
|
||||||
MATRIX_SET_GET_VALUE(ObjectToWorld);
|
MATRIX_SET_GET_VALUE(ObjectToWorld);
|
||||||
MATRIX_SET_GET_VALUE(WorldToCamera);
|
MATRIX_SET_GET_VALUE(WorldToCamera);
|
||||||
MATRIX_SET_GET_VALUE(CameraToScreen);
|
MATRIX_SET_GET_VALUE(CameraToScreen);
|
||||||
|
MATRIX_SET_GET_VALUE(ScreenToCamera);
|
||||||
MATRIX_SET_GET_VALUE(ObjectToCamera);
|
MATRIX_SET_GET_VALUE(ObjectToCamera);
|
||||||
MATRIX_SET_GET_VALUE(WorldToObject);
|
MATRIX_SET_GET_VALUE(WorldToObject);
|
||||||
MATRIX_SET_GET_VALUE(CameraToWorld);
|
MATRIX_SET_GET_VALUE(CameraToWorld);
|
||||||
|
|
@ -82,6 +84,8 @@ class MatrixSet
|
||||||
|
|
||||||
MATRIX_SET_MULT_ASSIGN(WorldToScreen, ObjectToWorld, ObjectToScreen);
|
MATRIX_SET_MULT_ASSIGN(WorldToScreen, ObjectToWorld, ObjectToScreen);
|
||||||
|
|
||||||
|
MATRIX_SET_IS_INVERSE_OF(ScreenToCamera, CameraToScreen);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MatrixSet();
|
MatrixSet();
|
||||||
|
|
||||||
|
|
@ -89,6 +93,7 @@ public:
|
||||||
inline const MatrixF &getObjectToWorld() const { return mTransform[ObjectToWorld]; }
|
inline const MatrixF &getObjectToWorld() const { return mTransform[ObjectToWorld]; }
|
||||||
inline const MatrixF &getWorldToCamera() const { return mTransform[WorldToCamera]; }
|
inline const MatrixF &getWorldToCamera() const { return mTransform[WorldToCamera]; }
|
||||||
inline const MatrixF &getCameraToScreen() const { return mTransform[CameraToScreen]; }
|
inline const MatrixF &getCameraToScreen() const { return mTransform[CameraToScreen]; }
|
||||||
|
inline const MatrixF &getScreenToCamera() const { return mTransform[ScreenToCamera]; }
|
||||||
|
|
||||||
// Delegate driven, lazy-evaluation accessors
|
// Delegate driven, lazy-evaluation accessors
|
||||||
inline const MatrixF &getWorldToScreen() const { return mEvalDelegate[WorldToScreen](); }
|
inline const MatrixF &getWorldToScreen() const { return mEvalDelegate[WorldToScreen](); }
|
||||||
|
|
@ -131,6 +136,7 @@ public:
|
||||||
mTransform[CameraToScreen] = projection;
|
mTransform[CameraToScreen] = projection;
|
||||||
mEvalDelegate[ObjectToScreen].bind(this, &MatrixSet::MATRIX_SET_MULT_ASSIGN_FN(WorldToScreen, ObjectToWorld, ObjectToScreen));
|
mEvalDelegate[ObjectToScreen].bind(this, &MatrixSet::MATRIX_SET_MULT_ASSIGN_FN(WorldToScreen, ObjectToWorld, ObjectToScreen));
|
||||||
mEvalDelegate[WorldToScreen].bind(this, &MatrixSet::MATRIX_SET_MULT_ASSIGN_FN(CameraToScreen, WorldToCamera, WorldToScreen));
|
mEvalDelegate[WorldToScreen].bind(this, &MatrixSet::MATRIX_SET_MULT_ASSIGN_FN(CameraToScreen, WorldToCamera, WorldToScreen));
|
||||||
|
mEvalDelegate[ScreenToCamera].bind(this, &MatrixSet::MATRIX_SET_IS_INVERSE_OF_FN(ScreenToCamera, CameraToScreen));
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSceneView(const MatrixF &view)
|
void setSceneView(const MatrixF &view)
|
||||||
|
|
|
||||||
|
|
@ -494,7 +494,10 @@ PostEffect::PostEffect()
|
||||||
mAccumTimeSC( NULL ),
|
mAccumTimeSC( NULL ),
|
||||||
mDeltaTimeSC( NULL ),
|
mDeltaTimeSC( NULL ),
|
||||||
mInvCameraMatSC( NULL ),
|
mInvCameraMatSC( NULL ),
|
||||||
mMatCameraToWorldSC( NULL)
|
mMatCameraToWorldSC( NULL),
|
||||||
|
mInvCameraTransSC(NULL),
|
||||||
|
mMatCameraToScreenSC(NULL),
|
||||||
|
mMatScreenToCameraSC(NULL)
|
||||||
{
|
{
|
||||||
dMemset( mTexSRGB, 0, sizeof(bool) * NumTextures);
|
dMemset( mTexSRGB, 0, sizeof(bool) * NumTextures);
|
||||||
dMemset( mActiveTextures, 0, sizeof( GFXTextureObject* ) * NumTextures );
|
dMemset( mActiveTextures, 0, sizeof( GFXTextureObject* ) * NumTextures );
|
||||||
|
|
@ -804,6 +807,10 @@ void PostEffect::_setupConstants( const SceneRenderState *state )
|
||||||
mInvCameraMatSC = mShader->getShaderConstHandle( "$invCameraMat" );
|
mInvCameraMatSC = mShader->getShaderConstHandle( "$invCameraMat" );
|
||||||
|
|
||||||
mMatCameraToWorldSC = mShader->getShaderConstHandle("$cameraToWorld");
|
mMatCameraToWorldSC = mShader->getShaderConstHandle("$cameraToWorld");
|
||||||
|
|
||||||
|
mInvCameraTransSC = mShader->getShaderConstHandle("$invCameraTrans");
|
||||||
|
mMatCameraToScreenSC = mShader->getShaderConstHandle("$cameraToScreen");
|
||||||
|
mMatScreenToCameraSC = mShader->getShaderConstHandle("$screenToCamera");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up shader constants for source image size
|
// Set up shader constants for source image size
|
||||||
|
|
@ -945,6 +952,30 @@ void PostEffect::_setupConstants( const SceneRenderState *state )
|
||||||
mShaderConsts->set(mMatCameraToWorldSC, tempMat);
|
mShaderConsts->set(mMatCameraToWorldSC, tempMat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mInvCameraTransSC->isValid())
|
||||||
|
{
|
||||||
|
MatrixF mat = state->getCameraTransform();
|
||||||
|
mat.fullInverse();
|
||||||
|
mShaderConsts->set(mInvCameraTransSC, mat, mInvCameraTransSC->getType());
|
||||||
|
}
|
||||||
|
//Projection Matrix
|
||||||
|
if (mMatCameraToScreenSC->isValid())
|
||||||
|
{
|
||||||
|
|
||||||
|
MatrixF tempMat = thisFrame.cameraToScreen;
|
||||||
|
mShaderConsts->set(mMatCameraToScreenSC, tempMat, mMatCameraToScreenSC->getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Inverse Projection Matrix
|
||||||
|
if (mMatScreenToCameraSC->isValid())
|
||||||
|
{
|
||||||
|
|
||||||
|
MatrixF tempMat = thisFrame.cameraToScreen;
|
||||||
|
tempMat.fullInverse();
|
||||||
|
|
||||||
|
mShaderConsts->set(mMatScreenToCameraSC, tempMat, mMatScreenToCameraSC->getType());
|
||||||
|
}
|
||||||
mShaderConsts->setSafe( mAccumTimeSC, MATMGR->getTotalTime() );
|
mShaderConsts->setSafe( mAccumTimeSC, MATMGR->getTotalTime() );
|
||||||
mShaderConsts->setSafe( mDeltaTimeSC, MATMGR->getDeltaTime() );
|
mShaderConsts->setSafe( mDeltaTimeSC, MATMGR->getDeltaTime() );
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -155,6 +155,9 @@ protected:
|
||||||
GFXShaderConstHandle *mDeltaTimeSC;
|
GFXShaderConstHandle *mDeltaTimeSC;
|
||||||
GFXShaderConstHandle *mInvCameraMatSC;
|
GFXShaderConstHandle *mInvCameraMatSC;
|
||||||
GFXShaderConstHandle *mMatCameraToWorldSC;
|
GFXShaderConstHandle *mMatCameraToWorldSC;
|
||||||
|
GFXShaderConstHandle *mInvCameraTransSC;
|
||||||
|
GFXShaderConstHandle *mMatCameraToScreenSC;
|
||||||
|
GFXShaderConstHandle *mMatScreenToCameraSC;
|
||||||
|
|
||||||
bool mAllowReflectPass;
|
bool mAllowReflectPass;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,11 @@ const MatrixF& SceneRenderState::getProjectionMatrix() const
|
||||||
return getRenderPass()->getMatrixSet().getCameraToScreen();
|
return getRenderPass()->getMatrixSet().getCameraToScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const MatrixF& SceneRenderState::getInvProjectionMatrix() const
|
||||||
|
{
|
||||||
|
return getRenderPass()->getMatrixSet().getScreenToCamera();
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
void SceneRenderState::renderObjects( SceneObject** objects, U32 numObjects )
|
void SceneRenderState::renderObjects( SceneObject** objects, U32 numObjects )
|
||||||
|
|
|
||||||
|
|
@ -247,6 +247,8 @@ class SceneRenderState
|
||||||
|
|
||||||
/// Return the project transform matrix.
|
/// Return the project transform matrix.
|
||||||
const MatrixF& getProjectionMatrix() const;
|
const MatrixF& getProjectionMatrix() const;
|
||||||
|
/// Return the inverse project transform matrix.
|
||||||
|
const MatrixF& getInvProjectionMatrix() const;
|
||||||
|
|
||||||
/// Returns the actual camera position.
|
/// Returns the actual camera position.
|
||||||
/// @see getDiffuseCameraPosition
|
/// @see getDiffuseCameraPosition
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,9 @@ const String ShaderGenVars::worldToCamera("$worldToCamera");
|
||||||
const String ShaderGenVars::cameraToWorld("$cameraToWorld");
|
const String ShaderGenVars::cameraToWorld("$cameraToWorld");
|
||||||
const String ShaderGenVars::worldToObj("$worldToObj");
|
const String ShaderGenVars::worldToObj("$worldToObj");
|
||||||
const String ShaderGenVars::viewToObj("$viewToObj");
|
const String ShaderGenVars::viewToObj("$viewToObj");
|
||||||
|
const String ShaderGenVars::invCameraTrans("$invCameraTrans");
|
||||||
|
const String ShaderGenVars::cameraToScreen("$cameraToScreen");
|
||||||
|
const String ShaderGenVars::screenToCamera("$screenToCamera");
|
||||||
const String ShaderGenVars::cubeTrans("$cubeTrans");
|
const String ShaderGenVars::cubeTrans("$cubeTrans");
|
||||||
const String ShaderGenVars::cubeMips("$cubeMips");
|
const String ShaderGenVars::cubeMips("$cubeMips");
|
||||||
const String ShaderGenVars::objTrans("$objTrans");
|
const String ShaderGenVars::objTrans("$objTrans");
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,9 @@ struct ShaderGenVars
|
||||||
const static String cameraToWorld;
|
const static String cameraToWorld;
|
||||||
const static String worldToObj;
|
const static String worldToObj;
|
||||||
const static String viewToObj;
|
const static String viewToObj;
|
||||||
|
const static String invCameraTrans;
|
||||||
|
const static String cameraToScreen;
|
||||||
|
const static String screenToCamera;
|
||||||
const static String cubeTrans;
|
const static String cubeTrans;
|
||||||
const static String cubeMips;
|
const static String cubeMips;
|
||||||
const static String objTrans;
|
const static String objTrans;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue