Implement Singlepass Terrain Render

This commit is contained in:
Lukas Aldershaab 2021-01-01 21:05:21 +01:00
parent 49a8c0ad36
commit 87dd7ffc4a
35 changed files with 1658 additions and 951 deletions

View file

@ -40,6 +40,7 @@
#endif
class GFXTextureArray;
class SceneRenderState;
struct SceneData;
class TerrainMaterial;
@ -58,8 +59,7 @@ protected:
public:
MaterialInfo()
:mat(NULL), layerId(0), detailTexConst(NULL), macroTexConst(NULL), normalTexConst(NULL),
ormTexConst(NULL), detailInfoVConst(NULL), detailInfoPConst(NULL), macroInfoVConst(NULL), macroInfoPConst(NULL)
:mat(NULL), layerId(0)
{
}
@ -69,95 +69,60 @@ protected:
TerrainMaterial *mat;
U32 layerId;
GFXShaderConstHandle *detailTexConst;
GFXTexHandle detailTex;
GFXShaderConstHandle *macroTexConst;
GFXTexHandle macroTex;
GFXShaderConstHandle *normalTexConst;
GFXTexHandle normalTex;
GFXShaderConstHandle *ormTexConst;
GFXTexHandle ormTex;
GFXShaderConstHandle *detailInfoVConst;
GFXShaderConstHandle *detailInfoPConst;
GFXShaderConstHandle *macroInfoVConst;
GFXShaderConstHandle *macroInfoPConst;
};
class Pass
{
public:
///
GFXShader *mShader;
Pass()
: shader( NULL ),
modelViewProjConst(NULL), worldViewOnly(NULL), viewToObj(NULL),
eyePosWorldConst(NULL), eyePosConst(NULL),
objTransConst(NULL), worldToObjConst(NULL), vEyeConst(NULL),
layerSizeConst(NULL), lightParamsConst(NULL), lightInfoBufferConst(NULL),
baseTexMapConst(NULL), layerTexConst(NULL),
lightMapTexConst(NULL),
squareSize(NULL), oneOverTerrainSize(NULL),
fogDataConst(NULL), fogColorConst(NULL)
{
}
GFXShaderConstBufferRef mConsts;
~Pass()
{
for ( U32 i=0; i < materials.size(); i++ )
delete materials[i];
}
GFXStateBlockRef mStateBlock;
GFXStateBlockRef mWireframeStateBlock;
GFXStateBlockRef mReflectionStateBlock;
Vector<MaterialInfo*> materials;
GFXShaderConstHandle *mModelViewProjConst;
GFXShaderConstHandle *mWorldViewOnlyConst;
GFXShaderConstHandle *mViewToObjConst;
///
GFXShader *shader;
GFXShaderConstHandle *mEyePosWorldConst;
GFXShaderConstHandle *mEyePosConst;
GFXShaderConstBufferRef consts;
GFXShaderConstHandle *mObjTransConst;
GFXShaderConstHandle *mWorldToObjConst;
GFXShaderConstHandle *mVEyeConst;
GFXStateBlockRef stateBlock;
GFXStateBlockRef wireframeStateBlock;
GFXStateBlockRef reflectionStateBlock;
GFXShaderConstHandle *mLayerSizeConst;
GFXShaderConstHandle *mLightParamsConst;
GFXShaderConstHandle *mLightInfoBufferConst;
GFXShaderConstHandle *modelViewProjConst;
GFXShaderConstHandle *worldViewOnly;
GFXShaderConstHandle *viewToObj;
GFXShaderConstHandle *mBaseTexMapConst;
GFXShaderConstHandle *mLayerTexConst;
GFXShaderConstHandle *eyePosWorldConst;
GFXShaderConstHandle *eyePosConst;
GFXShaderConstHandle *mLightMapTexConst;
GFXShaderConstHandle *objTransConst;
GFXShaderConstHandle *worldToObjConst;
GFXShaderConstHandle *vEyeConst;
GFXShaderConstHandle *mSquareSizeConst;
GFXShaderConstHandle *mOneOverTerrainSizeConst;
GFXShaderConstHandle *layerSizeConst;
GFXShaderConstHandle *lightParamsConst;
GFXShaderConstHandle *lightInfoBufferConst;
GFXShaderConstHandle* mDetailInfoVArrayConst;
GFXShaderConstHandle* mDetailInfoPArrayConst;
GFXShaderConstHandle* mMacroInfoVArrayConst;
GFXShaderConstHandle* mMacroInfoPArrayConst;
GFXShaderConstHandle *baseTexMapConst;
GFXShaderConstHandle *layerTexConst;
GFXShaderConstHandle *mFogDataConst;
GFXShaderConstHandle *mFogColorConst;
GFXShaderConstHandle *lightMapTexConst;
GFXShaderConstHandle *squareSize;
GFXShaderConstHandle *oneOverTerrainSize;
GFXShaderConstHandle *fogDataConst;
GFXShaderConstHandle *fogColorConst;
};
GFXShaderConstHandle *mDetailTexArrayConst;
GFXShaderConstHandle *mMacroTexArrayConst;
GFXShaderConstHandle *mNormalTexArrayConst;
GFXShaderConstHandle *mOrmTexArrayConst;
TerrainBlock *mTerrain;
U64 mMaterials;
Vector<Pass> mPasses;
U32 mCurrPass;
U64 mMaterials;
Vector<MaterialInfo*> mMaterialInfos;
static const Vector<String> mSamplerNames;
GFXTexHandle mBaseMapTexture;
@ -175,14 +140,11 @@ protected:
/// A vector of all terrain cell materials loaded in the system.
static Vector<TerrainCellMaterial*> smAllMaterials;
bool _createPass( Vector<MaterialInfo*> *materials,
Pass *pass,
bool firstPass,
bool deferredMat,
bool _initShader( bool deferredMat,
bool reflectMat,
bool baseOnly );
void _updateMaterialConsts( Pass *pass );
void _updateMaterialConsts();
public: