diff --git a/Engine/source/shaderGen/customShaderFeature.cpp b/Engine/source/shaderGen/customShaderFeature.cpp index fc5cbf35a..33c40dd46 100644 --- a/Engine/source/shaderGen/customShaderFeature.cpp +++ b/Engine/source/shaderGen/customShaderFeature.cpp @@ -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), ("", "", ""), "") diff --git a/Engine/source/shaderGen/customShaderFeature.h b/Engine/source/shaderGen/customShaderFeature.h index 77bc50068..b6789f3e7 100644 --- a/Engine/source/shaderGen/customShaderFeature.h +++ b/Engine/source/shaderGen/customShaderFeature.h @@ -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 mAddedShaderConstants; diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index d827663f5..b57fb1f25 100644 --- a/Tools/CMake/torque3d.cmake +++ b/Tools/CMake/torque3d.cmake @@ -149,6 +149,8 @@ endif() if(WIN32) option(TORQUE_D3D11 "Allow Direct3D 11 render" ON) + + addDef(TORQUE_D3D11) endif() option(TORQUE_DEDICATED "Torque dedicated" OFF) @@ -313,7 +315,6 @@ addPath("${srcDir}/scene") addPath("${srcDir}/scene/culling") addPath("${srcDir}/scene/zones") addPath("${srcDir}/scene/mixin") -addPath("${srcDir}/shaderGen") addPath("${srcDir}/terrain") addPath("${srcDir}/environment") addPath("${srcDir}/forest")