Merge branch 'CustomShaderFeaturesPR' of https://github.com/Areloch/Torque3D into alpha40Macwork

# Conflicts:
#	Engine/source/materials/materialDefinition.cpp
#	Engine/source/materials/processedFFMaterial.h
#	Engine/source/materials/processedShaderMaterial.cpp
#	Engine/source/renderInstance/renderBinManager.cpp
#	Engine/source/renderInstance/renderGlowMgr.cpp
#	Engine/source/renderInstance/renderMeshMgr.cpp
#	Engine/source/renderInstance/renderPassManager.h
#	Engine/source/renderInstance/renderTranslucentMgr.cpp
#	Engine/source/shaderGen/customShaderFeature.cpp
#	Engine/source/shaderGen/customShaderFeature.h
This commit is contained in:
AzaezelX 2019-05-22 23:36:15 -05:00
commit afa52850c3
12 changed files with 110 additions and 72 deletions

View file

@ -21,8 +21,13 @@
//-----------------------------------------------------------------------------
#include "shadergen/CustomShaderFeature.h"
#ifdef TORQUE_D3D11
#include "shaderGen/HLSL/customFeatureHLSL.h"
#endif
#ifdef TORQUE_OPENGL
#include "shaderGen/GLSL/customFeatureGLSL.h"
#endif
#include "math/mathIO.h"
#include "scene/sceneRenderState.h"
@ -36,16 +41,10 @@
IMPLEMENT_CONOBJECT(CustomShaderFeatureData);
ConsoleDocClass(CustomShaderFeatureData,
"@brief An example scene object which renders using a callback.\n\n"
"This class implements a basic SceneObject that can exist in the world at a "
"3D position and render itself. Note that CustomShaderFeatureData handles its own "
"rendering by submitting itself as an ObjectRenderInst (see "
"renderInstance\renderPassmanager.h) along with a delegate for its render() "
"function. However, the preffered rendering method in the engine is to submit "
"a MeshRenderInst along with a Material, vertex buffer, primitive buffer, and "
"transform and allow the RenderMeshMgr handle the actual rendering. You can "
"see this implemented in RenderMeshExample.\n\n"
"See the C++ code for implementation details.\n\n"
"@brief A Shader Feature with custom definitions.\n\n"
"This class allows for the creation and implementation of a ShaderGen ShaderFeature "
"Implemented either engine side or script, and facilitates passing along of per-instance "
"ShaderData. "
"@ingroup Examples\n");
//-----------------------------------------------------------------------------
@ -53,6 +52,12 @@ ConsoleDocClass(CustomShaderFeatureData,
//-----------------------------------------------------------------------------
CustomShaderFeatureData::CustomShaderFeatureData()
{
#ifdef TORQUE_D3D11
mFeatureHLSL = nullptr;
#endif
#ifdef TORQUE_OPENGL
mFeatureGLSL = nullptr;
#endif
}
CustomShaderFeatureData::~CustomShaderFeatureData()
@ -73,16 +78,21 @@ bool CustomShaderFeatureData::onAdd()
if (!Parent::onAdd())
return false;
#ifdef TORQUE_D3D11
if (GFX->getAdapterType() == GFXAdapterType::Direct3D11)
{
mFeatureHLSL = new CustomFeatureHLSL();
mFeatureHLSL->mOwner = this;
}
else if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
#endif
#ifdef TORQUE_OPENGL
if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
{
mFeatureGLSL = new CustomFeatureGLSL();
mFeatureGLSL->mOwner = this;
}
#endif
return true;
}
@ -95,66 +105,98 @@ void CustomShaderFeatureData::onRemove()
//Shadergen setup functions
void CustomShaderFeatureData::addVariable(String name, String type, String defaultValue)
{
#ifdef TORQUE_D3D11
if (GFX->getAdapterType() == GFXAdapterType::Direct3D11)
mFeatureHLSL->addVariable(name, type, defaultValue);
else if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
#endif
#ifdef TORQUE_OPENGL
if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
mFeatureGLSL->addVariable(name, type, defaultValue);
#endif
}
void CustomShaderFeatureData::addUniform(String name, String type, String defaultValue, U32 arraySize)
{
#ifdef TORQUE_D3D11
if (GFX->getAdapterType() == GFXAdapterType::Direct3D11)
mFeatureHLSL->addUniform(name, type, defaultValue, arraySize);
else if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
#endif
#ifdef TORQUE_OPENGL
if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
mFeatureGLSL->addUniform(name, type, defaultValue, arraySize);
#endif
}
void CustomShaderFeatureData::addSampler(String name, String type, U32 arraySize)
{
#ifdef TORQUE_D3D11
if (GFX->getAdapterType() == GFXAdapterType::Direct3D11)
mFeatureHLSL->addSampler(name, type, arraySize);
else if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
#endif
#ifdef TORQUE_OPENGL
if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
mFeatureGLSL->addSampler(name, type, arraySize);
#endif
}
void CustomShaderFeatureData::addTexture(String name, String type, String samplerState, U32 arraySize)
{
#ifdef TORQUE_D3D11
if (GFX->getAdapterType() == GFXAdapterType::Direct3D11)
mFeatureHLSL->addTexture(name, type, samplerState, arraySize);
else if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
#endif
#ifdef TORQUE_OPENGL
if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
mFeatureGLSL->addTexture(name, type, samplerState, arraySize);
#endif
}
void CustomShaderFeatureData::addConnector(String name, String type, String elementName)
{
#ifdef TORQUE_D3D11
if (GFX->getAdapterType() == GFXAdapterType::Direct3D11)
mFeatureHLSL->addConnector(name, type, elementName);
else if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
#endif
#ifdef TORQUE_OPENGL
if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
mFeatureGLSL->addConnector(name, type, elementName);
#endif
}
void CustomShaderFeatureData::addVertTexCoord(String name)
{
#ifdef TORQUE_D3D11
if (GFX->getAdapterType() == GFXAdapterType::Direct3D11)
mFeatureHLSL->addVertTexCoord(name);
else if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
#endif
#ifdef TORQUE_OPENGL
if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
mFeatureGLSL->addVertTexCoord(name);
#endif
}
bool CustomShaderFeatureData::hasFeature(String name)
{
#ifdef TORQUE_D3D11
if (GFX->getAdapterType() == GFXAdapterType::Direct3D11)
return mFeatureHLSL->hasFeature(name);
else if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
#endif
#ifdef TORQUE_OPENGL
if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
return mFeatureGLSL->hasFeature(name);
#endif
}
void CustomShaderFeatureData::writeLine(String format, S32 argc, ConsoleValueRef* argv)
{
#ifdef TORQUE_D3D11
if (GFX->getAdapterType() == GFXAdapterType::Direct3D11)
mFeatureHLSL->writeLine(format, argc, argv);
else if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
#endif
#ifdef TORQUE_OPENGL
if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
mFeatureGLSL->writeLine(format, argc, argv);
#endif
}
DefineEngineMethod(CustomShaderFeatureData, addVariable, void, (String name, String type, String defaultValue), ("", "", ""), "")

View file

@ -27,16 +27,24 @@
#include "console/simObject.h"
#endif
#ifdef TORQUE_D3D11
class CustomFeatureHLSL;
#endif
#ifdef TORQUE_OPENGL
class CustomFeatureGLSL;
#endif
class CustomShaderFeatureData : public SimObject
{
typedef SimObject Parent;
public:
#ifdef TORQUE_D3D11
CustomFeatureHLSL* mFeatureHLSL;
#endif
#ifdef TORQUE_OPENGL
CustomFeatureGLSL* mFeatureGLSL;
#endif
Vector<StringTableEntry> mAddedShaderConstants;
@ -71,16 +79,6 @@ public:
bool hasFeature(String name);
void writeLine(String format, S32 argc, ConsoleValueRef *argv);
//shader generation
/*void CustomShaderFeatureData::processVert(Vector<ShaderComponent*> &componentList,
const MaterialFeatureData &fd);
void CustomShaderFeatureData::processPix(Vector<ShaderComponent*> &componentList,
const MaterialFeatureData &fd);
void CustomShaderFeatureData::setTexData(Material::StageData &stageDat,
const MaterialFeatureData &fd,
RenderPassData &passData,
U32 &texIndex);*/
};
#endif

View file

@ -31,8 +31,12 @@
#include "core/memVolume.h"
#include "core/module.h"
#ifdef TORQUE_D3D11
#include "shaderGen/HLSL/customFeatureHLSL.h"
#endif
#ifdef TORQUE_OPENGL
#include "shaderGen/GLSL/customFeatureGLSL.h"
#endif
MODULE_BEGIN( ShaderGen )
@ -291,6 +295,7 @@ void ShaderGen::_processVertFeatures( Vector<GFXShaderMacro> &macros, bool macro
{
for (U32 i = 0; i < mCustomFeaturesData.size(); ++i)
{
#ifdef TORQUE_D3D11
if (GFX->getAdapterType() == GFXAdapterType::Direct3D11)
{
mCustomFeaturesData[i]->mFeatureHLSL->processVert(mComponents, mFeatureData);
@ -304,7 +309,9 @@ void ShaderGen::_processVertFeatures( Vector<GFXShaderMacro> &macros, bool macro
mCustomFeaturesData[i]->mFeatureHLSL->reset();
mOutput->addStatement(new GenOp(" \r\n"));
}
else if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
#endif
#ifdef TORQUE_OPENGL
if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
{
mCustomFeaturesData[i]->mFeatureGLSL->processVert(mComponents, mFeatureData);
@ -317,6 +324,7 @@ void ShaderGen::_processVertFeatures( Vector<GFXShaderMacro> &macros, bool macro
mCustomFeaturesData[i]->mFeatureGLSL->reset();
mOutput->addStatement(new GenOp(" \r\n"));
}
#endif
}
}
@ -365,6 +373,7 @@ void ShaderGen::_processPixFeatures( Vector<GFXShaderMacro> &macros, bool macros
{
for (U32 i = 0; i < mCustomFeaturesData.size(); ++i)
{
#ifdef TORQUE_D3D11
if (GFX->getAdapterType() == GFXAdapterType::Direct3D11)
{
mCustomFeaturesData[i]->mFeatureHLSL->processPix(mComponents, mFeatureData);
@ -378,7 +387,9 @@ void ShaderGen::_processPixFeatures( Vector<GFXShaderMacro> &macros, bool macros
mCustomFeaturesData[i]->mFeatureHLSL->reset();
mOutput->addStatement(new GenOp(" \r\n"));
}
else if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
#endif
#ifdef TORQUE_OPENGL
if (GFX->getAdapterType() == GFXAdapterType::OpenGL)
{
mCustomFeaturesData[i]->mFeatureGLSL->processPix(mComponents, mFeatureData);
@ -391,6 +402,7 @@ void ShaderGen::_processPixFeatures( Vector<GFXShaderMacro> &macros, bool macros
mCustomFeaturesData[i]->mFeatureGLSL->reset();
mOutput->addStatement(new GenOp(" \r\n"));
}
#endif
}
}