diff --git a/Engine/source/materials/materialDefinition.cpp b/Engine/source/materials/materialDefinition.cpp index 6d230e7c8..43f6e459d 100644 --- a/Engine/source/materials/materialDefinition.cpp +++ b/Engine/source/materials/materialDefinition.cpp @@ -543,11 +543,6 @@ bool Material::protectedSetCustomShaderFeatureUniforms(void *object, const char { Material *material = static_cast< Material* >(object); - //CustomShaderFeatureData* customFeature; - //if (!Sim::findObject(data, customFeature)) - // return false; - - //material->mCustomShaderFeatures.push_back(customFeature); if (index != NULL) { char featureName[256] = { 0 }; @@ -555,8 +550,6 @@ bool Material::protectedSetCustomShaderFeatureUniforms(void *object, const char dSscanf(index, "%s_%i", featureName, id); String uniformName = data; - - bool tmp = true; } return false; diff --git a/Engine/source/materials/processedFFMaterial.h b/Engine/source/materials/processedFFMaterial.h index 3ba72594c..9af49a29a 100644 --- a/Engine/source/materials/processedFFMaterial.h +++ b/Engine/source/materials/processedFFMaterial.h @@ -54,7 +54,7 @@ public: virtual void setTransforms(const MatrixSet &matrixSet, SceneRenderState *state, const U32 pass); virtual void setNodeTransforms(const MatrixF *address, const U32 numTransforms, const U32 pass) {;} - virtual void setCustomShaderData(Vector &shaderData, const U32 pass) {;} //-JR + virtual void setCustomShaderData(Vector &shaderData, const U32 pass) {;} virtual void setSceneInfo(SceneRenderState *, const SceneData& sgData, U32 pass); diff --git a/Engine/source/materials/processedShaderMaterial.cpp b/Engine/source/materials/processedShaderMaterial.cpp index 420fccba0..5c911be1e 100644 --- a/Engine/source/materials/processedShaderMaterial.cpp +++ b/Engine/source/materials/processedShaderMaterial.cpp @@ -132,7 +132,7 @@ void ShaderConstHandles::init( GFXShader *shader, VectormAddedShaderConstants[i]; mCustomHandles.push_back(newSC); -} + } } } diff --git a/Engine/source/renderInstance/renderBinManager.cpp b/Engine/source/renderInstance/renderBinManager.cpp index 6328ad0e4..a9f979679 100644 --- a/Engine/source/renderInstance/renderBinManager.cpp +++ b/Engine/source/renderInstance/renderBinManager.cpp @@ -153,33 +153,30 @@ S32 FN_CDECL RenderBinManager::cmpKeyFunc(const void* p1, const void* p2) void RenderBinManager::setupSGData(MeshRenderInst *ri, SceneData &data) { - PROFILE_SCOPE(RenderBinManager_setupSGData); + PROFILE_SCOPE( RenderBinManager_setupSGData ); - // NOTE: We do not reset or clear the scene state - // here as the caller has initialized non-RI members - // himself and we must preserve them. - // - // It also saves a bunch of CPU as this is called for - // every MeshRenderInst in every pass. + // NOTE: We do not reset or clear the scene state + // here as the caller has initialized non-RI members + // himself and we must preserve them. + // + // It also saves a bunch of CPU as this is called for + // every MeshRenderInst in every pass. - dMemcpy(data.lights, ri->lights, sizeof(data.lights)); - data.objTrans = ri->objectToWorld; - data.backBuffTex = ri->backBuffTex; - data.cubemap = ri->cubemap; - data.miscTex = ri->miscTex; - data.reflectTex = ri->reflectTex; - data.accuTex = ri->accuTex; - data.lightmap = ri->lightmap; - data.visibility = ri->visibility; - data.materialHint = ri->materialHint; - - data.customShaderData.clear(); - for (U32 i = 0; i < ri->mCustomShaderData.size(); i++) - { - data.customShaderData.push_back(&ri->mCustomShaderData[i]); - } - - bool bl = true; + dMemcpy( data.lights, ri->lights, sizeof( data.lights ) ); + data.objTrans = ri->objectToWorld; + data.backBuffTex = ri->backBuffTex; + data.cubemap = ri->cubemap; + data.miscTex = ri->miscTex; + data.reflectTex = ri->reflectTex; + data.accuTex = ri->accuTex; + data.lightmap = ri->lightmap; + data.visibility = ri->visibility; + data.materialHint = ri->materialHint; + data.customShaderData.clear(); + for (U32 i = 0; i < ri->mCustomShaderData.size(); i++) + { + data.customShaderData.push_back(&ri->mCustomShaderData[i]); + } } DefineEngineMethod( RenderBinManager, getBinType, const char*, (),, diff --git a/Engine/source/renderInstance/renderGlowMgr.cpp b/Engine/source/renderInstance/renderGlowMgr.cpp index dd2d2f29d..17ae78c60 100644 --- a/Engine/source/renderInstance/renderGlowMgr.cpp +++ b/Engine/source/renderInstance/renderGlowMgr.cpp @@ -251,7 +251,6 @@ void RenderGlowMgr::render( SceneRenderState *state ) glowMat->setNodeTransforms(passRI->mNodeTransforms, passRI->mNodeTransformCount); } - //-JR //push along any overriden fields that are instance-specific as well if (passRI->mCustomShaderData.size() > 0) { diff --git a/Engine/source/renderInstance/renderMeshMgr.cpp b/Engine/source/renderInstance/renderMeshMgr.cpp index adaee396f..ddf1e4508 100644 --- a/Engine/source/renderInstance/renderMeshMgr.cpp +++ b/Engine/source/renderInstance/renderMeshMgr.cpp @@ -182,7 +182,6 @@ void RenderMeshMgr::render(SceneRenderState * state) mat->setNodeTransforms(passRI->mNodeTransforms, passRI->mNodeTransformCount); } - //-JR //push along any overriden fields that are instance-specific as well if (passRI->mCustomShaderData.size() > 0) { diff --git a/Engine/source/renderInstance/renderPassManager.h b/Engine/source/renderInstance/renderPassManager.h index 8ee7d1a87..3eba9b6e8 100644 --- a/Engine/source/renderInstance/renderPassManager.h +++ b/Engine/source/renderInstance/renderPassManager.h @@ -57,8 +57,6 @@ class LightInfo; struct RenderInst; class MatrixSet; class GFXPrimitiveBufferHandle; -class CubemapData; - class CustomShaderBindingData; /// A RenderInstType hash value. diff --git a/Engine/source/renderInstance/renderTranslucentMgr.cpp b/Engine/source/renderInstance/renderTranslucentMgr.cpp index 3a8cded60..2e1d6879d 100644 --- a/Engine/source/renderInstance/renderTranslucentMgr.cpp +++ b/Engine/source/renderInstance/renderTranslucentMgr.cpp @@ -256,7 +256,6 @@ void RenderTranslucentMgr::render( SceneRenderState *state ) mat->setNodeTransforms(passRI->mNodeTransforms, passRI->mNodeTransformCount); } - //-JR //push along any overriden fields that are instance-specific as well if (passRI->mCustomShaderData.size() > 0) { @@ -344,4 +343,4 @@ void RenderTranslucentMgr::render( SceneRenderState *state ) j = ( j == matListEnd ) ? j+1 : matListEnd; } } -} \ No newline at end of file +} 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 139a947ea..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; @@ -71,16 +79,6 @@ public: bool hasFeature(String name); void writeLine(String format, S32 argc, ConsoleValueRef *argv); - - //shader generation - /*void CustomShaderFeatureData::processVert(Vector &componentList, - const MaterialFeatureData &fd); - void CustomShaderFeatureData::processPix(Vector &componentList, - const MaterialFeatureData &fd); - void CustomShaderFeatureData::setTexData(Material::StageData &stageDat, - const MaterialFeatureData &fd, - RenderPassData &passData, - U32 &texIndex);*/ }; #endif diff --git a/Engine/source/shaderGen/shaderGen.cpp b/Engine/source/shaderGen/shaderGen.cpp index 7d681e81b..282ead138 100644 --- a/Engine/source/shaderGen/shaderGen.cpp +++ b/Engine/source/shaderGen/shaderGen.cpp @@ -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 ¯os, 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 ¯os, 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 ¯os, bool macro mCustomFeaturesData[i]->mFeatureGLSL->reset(); mOutput->addStatement(new GenOp(" \r\n")); } +#endif } } @@ -365,6 +373,7 @@ void ShaderGen::_processPixFeatures( Vector ¯os, 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 ¯os, 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 ¯os, bool macros mCustomFeaturesData[i]->mFeatureGLSL->reset(); mOutput->addStatement(new GenOp(" \r\n")); } +#endif } } diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index 0f20c9a08..f2df947e2 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) @@ -314,7 +316,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")