From 5019478aad7080292997263a9b30b1e762dbf4d6 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 7 Oct 2017 14:36:58 -0500 Subject: [PATCH] begun adding uniform hooks --- .../source/materials/materialDefinition.cpp | 25 +++++++++++ Engine/source/materials/materialDefinition.h | 1 + Engine/source/ts/tsRenderState.h | 41 +++++++++++++++++-- 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/Engine/source/materials/materialDefinition.cpp b/Engine/source/materials/materialDefinition.cpp index deba2ff0d..dbb668603 100644 --- a/Engine/source/materials/materialDefinition.cpp +++ b/Engine/source/materials/materialDefinition.cpp @@ -485,6 +485,8 @@ void Material::initPersistFields() addProtectedField("customShaderFeature", TypeRealString, NULL, &protectedSetCustomShaderFeature, &defaultProtectedGetFn, "Do not modify, for internal use.", AbstractClassRep::FIELD_HideInInspectors); + addProtectedField("CustomShaderFeatureUniforms", TypeRealString, NULL, &protectedSetCustomShaderFeatureUniforms, &defaultProtectedGetFn, + "Do not modify, for internal use.", AbstractClassRep::FIELD_HideInInspectors); Parent::initPersistFields(); } @@ -516,6 +518,29 @@ bool Material::protectedSetCustomShaderFeature(void *object, const char *index, return false; } +bool Material::protectedSetCustomShaderFeatureUniforms(void *object, const char *index, const char *data) +{ + 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 }; + U32 id = 0; + dSscanf(index, "%s_%i", featureName, id); + + String uniformName = data; + + bool tmp = true; + } + + return false; +} + bool Material::onAdd() { if (Parent::onAdd() == false) diff --git a/Engine/source/materials/materialDefinition.h b/Engine/source/materials/materialDefinition.h index b6bdba054..3b993cb0a 100644 --- a/Engine/source/materials/materialDefinition.h +++ b/Engine/source/materials/materialDefinition.h @@ -386,6 +386,7 @@ public: virtual bool writeField( StringTableEntry fieldname, const char *value ); static bool protectedSetCustomShaderFeature(void *object, const char *index, const char *data); + static bool protectedSetCustomShaderFeatureUniforms(void *object, const char *index, const char *data); // // ConsoleObject interface diff --git a/Engine/source/ts/tsRenderState.h b/Engine/source/ts/tsRenderState.h index fcb765185..224d081ba 100644 --- a/Engine/source/ts/tsRenderState.h +++ b/Engine/source/ts/tsRenderState.h @@ -37,6 +37,41 @@ class Frustum; class LightQuery; class TSShape; +struct CustomShaderBindingData +{ + enum UniformType + { + Float = 0, + Float2, + Float3, + Float4, + Texture2D, + Texture3D, + Cubemap, + Matrix2x2, + Matrix2x3, + Matrix2x4, + Matrix3x2, + Matrix3x3, + Matrix3x4, + Matrix4x2, + Matrix4x3, + Matrix4x4 + }; + + String targetedUniformName; + + //ShaderConstHandles shaderConstHandle; + + UniformType type; + + void* data; //for numeric data + + //Image stuff + GFXTexHandle texture; + GFXSamplerStateDesc samplerState; +}; + /// A simple class for passing render state through the pre-render pipeline. /// /// @section TSRenderState_intro Introduction @@ -115,10 +150,10 @@ protected: /// Count of matrices in the mNodeTransforms list U32 mNodeTransformCount; + //Custom Shader data + Vector mCustomShaderData; + public: - - - TSRenderState(); TSRenderState( const TSRenderState &state );