Ver Fonte

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
AzaezelX há 6 anos atrás
pai
commit
afa52850c3

+ 0 - 7
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;

+ 1 - 1
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<CustomShaderBindingData> &shaderData, const U32 pass) {;} //-JR
+   virtual void setCustomShaderData(Vector<CustomShaderBindingData> &shaderData, const U32 pass) {;}
 
    virtual void setSceneInfo(SceneRenderState *, const SceneData& sgData, U32 pass);
 

+ 1 - 1
Engine/source/materials/processedShaderMaterial.cpp

@@ -132,7 +132,7 @@ void ShaderConstHandles::init( GFXShader *shader, Vector<CustomShaderFeatureData
 		   newSC.handleName = customFeatureData[f]->mAddedShaderConstants[i];
 
 		   mCustomHandles.push_back(newSC);
-}
+      }
    }
 }
 

+ 24 - 27
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);
-
-	// 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;
+   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. 
+
+   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*, (),,

+ 0 - 1
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)
 			{

+ 0 - 1
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)
 			{

+ 0 - 2
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.

+ 1 - 2
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;
       }
    }
-}
+}

+ 61 - 19
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), ("", "", ""), "")

+ 8 - 10
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<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

+ 14 - 2
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<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
 	   }
    }
    

+ 2 - 1
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")