mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-03-06 05:50:31 +00:00
Initial implementation of Custom Shader Features.
This commit is contained in:
parent
5c1d764956
commit
0e2ef6a889
12 changed files with 595 additions and 9 deletions
|
|
@ -31,6 +31,7 @@
|
|||
#include "core/memVolume.h"
|
||||
#include "core/module.h"
|
||||
|
||||
#include "shaderGen/HLSL/customFeatureHLSL.h"
|
||||
|
||||
MODULE_BEGIN( ShaderGen )
|
||||
|
||||
|
|
@ -135,13 +136,16 @@ void ShaderGen::generateShader( const MaterialFeatureData &featureData,
|
|||
F32 *pixVersion,
|
||||
const GFXVertexFormat *vertexFormat,
|
||||
const char* cacheName,
|
||||
Vector<GFXShaderMacro> ¯os )
|
||||
Vector<GFXShaderMacro> ¯os,
|
||||
Vector<CustomShaderFeatureData*> &customFeatureData)
|
||||
{
|
||||
PROFILE_SCOPE( ShaderGen_GenerateShader );
|
||||
|
||||
mFeatureData = featureData;
|
||||
mVertexFormat = vertexFormat;
|
||||
|
||||
mCustomFeaturesData = customFeatureData;
|
||||
|
||||
_uninit();
|
||||
_init();
|
||||
|
||||
|
|
@ -320,6 +324,31 @@ void ShaderGen::_processPixFeatures( Vector<GFXShaderMacro> ¯os, bool macros
|
|||
mOutput->addStatement( new GenOp( " \r\n" ) );
|
||||
}
|
||||
}
|
||||
|
||||
//Handle if we have any custom features
|
||||
if (!mCustomFeaturesData.empty())
|
||||
{
|
||||
for (U32 i = 0; i < mCustomFeaturesData.size(); ++i)
|
||||
{
|
||||
mCustomFeaturesData[i]->mFeatureHLSL->processPix(mComponents, mFeatureData);
|
||||
|
||||
String line = String::ToString(" // %s\r\n", mCustomFeaturesData[i]->mFeatureHLSL->getName().c_str());
|
||||
mOutput->addStatement(new GenOp(line));
|
||||
|
||||
if (mCustomFeaturesData[i]->mFeatureHLSL->getOutput())
|
||||
mOutput->addStatement(mCustomFeaturesData[i]->mFeatureHLSL->getOutput());
|
||||
//ShaderFeatureHLSL feature = mCustomFeaturesData[i]->mHLSLFeature;
|
||||
//feature->setProcessIndex(index);
|
||||
|
||||
/*feature->processPixMacros(macros, mFeatureData);
|
||||
|
||||
feature->setInstancingFormat(&mInstancingFormat);
|
||||
feature->processPix(mComponents, mFeatureData);*/
|
||||
|
||||
mCustomFeaturesData[i]->mFeatureHLSL->reset();
|
||||
mOutput->addStatement(new GenOp(" \r\n"));
|
||||
}
|
||||
}
|
||||
|
||||
ShaderConnector *connect = dynamic_cast<ShaderConnector *>( mComponents[C_CONNECTOR] );
|
||||
connect->sortVars();
|
||||
|
|
@ -443,7 +472,7 @@ void ShaderGen::_printPixShader( Stream &stream )
|
|||
mPrinter->printPixelShaderCloser(stream);
|
||||
}
|
||||
|
||||
GFXShader* ShaderGen::getShader( const MaterialFeatureData &featureData, const GFXVertexFormat *vertexFormat, const Vector<GFXShaderMacro> *macros, const Vector<String> &samplers )
|
||||
GFXShader* ShaderGen::getShader( const MaterialFeatureData &featureData, Vector<CustomShaderFeatureData*> &customFeatureData, const GFXVertexFormat *vertexFormat, const Vector<GFXShaderMacro> *macros, const Vector<String> &samplers )
|
||||
{
|
||||
PROFILE_SCOPE( ShaderGen_GetShader );
|
||||
|
||||
|
|
@ -483,7 +512,7 @@ GFXShader* ShaderGen::getShader( const MaterialFeatureData &featureData, const G
|
|||
shaderMacros.push_back( GFXShaderMacro( "TORQUE_SHADERGEN" ) );
|
||||
if ( macros )
|
||||
shaderMacros.merge( *macros );
|
||||
generateShader( featureData, vertFile, pixFile, &pixVersion, vertexFormat, cacheKey, shaderMacros );
|
||||
generateShader( featureData, vertFile, pixFile, &pixVersion, vertexFormat, cacheKey, shaderMacros, customFeatureData );
|
||||
|
||||
GFXShader *shader = GFX->createShader();
|
||||
if (!shader->init(vertFile, pixFile, pixVersion, shaderMacros, samplers, &mInstancingFormat))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue