Proper splitting of D3D and OpenGL sides of the CSF.

This commit is contained in:
Areloch 2019-05-22 21:44:07 -05:00
parent 529558f671
commit f9371bfc2e
3 changed files with 71 additions and 20 deletions

View file

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

View file

@ -27,16 +27,24 @@
#include "console/simObject.h" #include "console/simObject.h"
#endif #endif
#ifdef TORQUE_D3D11
class CustomFeatureHLSL; class CustomFeatureHLSL;
#endif
#ifdef TORQUE_OPENGL
class CustomFeatureGLSL; class CustomFeatureGLSL;
#endif
class CustomShaderFeatureData : public SimObject class CustomShaderFeatureData : public SimObject
{ {
typedef SimObject Parent; typedef SimObject Parent;
public: public:
#ifdef TORQUE_D3D11
CustomFeatureHLSL* mFeatureHLSL; CustomFeatureHLSL* mFeatureHLSL;
#endif
#ifdef TORQUE_OPENGL
CustomFeatureGLSL* mFeatureGLSL; CustomFeatureGLSL* mFeatureGLSL;
#endif
Vector<StringTableEntry> mAddedShaderConstants; Vector<StringTableEntry> mAddedShaderConstants;

View file

@ -149,6 +149,8 @@ endif()
if(WIN32) if(WIN32)
option(TORQUE_D3D11 "Allow Direct3D 11 render" ON) option(TORQUE_D3D11 "Allow Direct3D 11 render" ON)
addDef(TORQUE_D3D11)
endif() endif()
option(TORQUE_DEDICATED "Torque dedicated" OFF) option(TORQUE_DEDICATED "Torque dedicated" OFF)
@ -313,7 +315,6 @@ addPath("${srcDir}/scene")
addPath("${srcDir}/scene/culling") addPath("${srcDir}/scene/culling")
addPath("${srcDir}/scene/zones") addPath("${srcDir}/scene/zones")
addPath("${srcDir}/scene/mixin") addPath("${srcDir}/scene/mixin")
addPath("${srcDir}/shaderGen")
addPath("${srcDir}/terrain") addPath("${srcDir}/terrain")
addPath("${srcDir}/environment") addPath("${srcDir}/environment")
addPath("${srcDir}/forest") addPath("${srcDir}/forest")