Ver Fonte

requirements for windDeformation unified featuer

marauder2k7 há 5 meses atrás
pai
commit
050d704e77

+ 90 - 0
Engine/source/shaderGen/langElement.cpp

@@ -30,6 +30,69 @@
 //**************************************************************************
 Vector<LangElement*> LangElement::elementList( __FILE__, __LINE__ );
 
+const char* LangElement::constTypeToString(GFXShaderConstType constType)
+{
+   // Determine shader language based on GFXAdapterAPI
+   if (GFX->getAdapterType() == OpenGL)
+   {
+      switch (constType)
+      {
+      case GFXSCT_Float:       return "float"; break;
+      case GFXSCT_Float2:      return "vec2"; break;
+      case GFXSCT_Float3:      return "vec3"; break;
+      case GFXSCT_Float4:      return "vec4"; break;
+      case GFXSCT_Float2x2:    return "mat2"; break;
+      case GFXSCT_Float3x3:    return "mat3"; break;
+      case GFXSCT_Float3x4:    return "mat3x4"; break;
+      case GFXSCT_Float4x3:    return "mat4x3"; break;
+      case GFXSCT_Float4x4:    return "mat4"; break;
+      case GFXSCT_Int:         return "int"; break;
+      case GFXSCT_Int2:        return "ivec2"; break;
+      case GFXSCT_Int3:        return "ivec3"; break;
+      case GFXSCT_Int4:        return "ivec4"; break;
+      case GFXSCT_UInt:        return "uint"; break;
+      case GFXSCT_UInt2:       return "uvec2"; break;
+      case GFXSCT_UInt3:       return "uvec3"; break;
+      case GFXSCT_UInt4:       return "uvec4"; break;
+      case GFXSCT_Bool:        return "bool"; break;
+      case GFXSCT_Bool2:       return "bvec2"; break;
+      case GFXSCT_Bool3:       return "bvec3"; break;
+      case GFXSCT_Bool4:       return "bvec4"; break;
+      default:                 return "unknown"; break;
+      }
+   }
+   else // Assume DirectX/HLSL
+   {
+      switch (constType)
+      {
+      case GFXSCT_Float:       return "float"; break;
+      case GFXSCT_Float2:      return "float2"; break;
+      case GFXSCT_Float3:      return "float3"; break;
+      case GFXSCT_Float4:      return "float4"; break;
+      case GFXSCT_Float2x2:    return "float2x2"; break;
+      case GFXSCT_Float3x3:    return "float3x3"; break;
+      case GFXSCT_Float3x4:    return "float3x4"; break;
+      case GFXSCT_Float4x3:    return "float4x3"; break;
+      case GFXSCT_Float4x4:    return "float4x4"; break;
+      case GFXSCT_Int:         return "int"; break;
+      case GFXSCT_Int2:        return "int2"; break;
+      case GFXSCT_Int3:        return "int3"; break;
+      case GFXSCT_Int4:        return "int4"; break;
+      case GFXSCT_UInt:        return "uint"; break;
+      case GFXSCT_UInt2:       return "uint2"; break;
+      case GFXSCT_UInt3:       return "uint3"; break;
+      case GFXSCT_UInt4:       return "uint4"; break;
+      case GFXSCT_Bool:        return "bool"; break;
+      case GFXSCT_Bool2:       return "bool2"; break;
+      case GFXSCT_Bool3:       return "bool3"; break;
+      case GFXSCT_Bool4:       return "bool4"; break;
+      default:                 return "unknown"; break;
+      }
+   }
+
+   return "";
+}
+
 //--------------------------------------------------------------------------
 // Constructor
 //--------------------------------------------------------------------------
@@ -121,6 +184,25 @@ Var::Var( const char *inName, const char *inType )
    setType( inType );
 }
 
+Var::Var(const char* name, GFXShaderConstType type)
+{
+   structName[0] = '\0';
+   connectName[0] = '\0';
+   uniform = false;
+   vertData = false;
+   connector = false;
+   sampler = false;
+   texCoordNum = 0;
+   constSortPos = cspUninit;
+   constNum = 0;
+   arraySize = 1;
+   texture = false;
+   rank = 0;
+
+   setName(name);
+   setType(type);
+}
+
 void Var::setUniform(const String& constType, const String& constName, ConstantSortPosition sortPos)
 { 
    uniform = true;
@@ -156,6 +238,14 @@ void Var::setType(const char *newType )
    type[ sizeof( type ) - 1 ] = '\0';
 }
 
+void Var::setType(GFXShaderConstType constType)
+{
+   const char* typeStr = "unknown"; // Default unknown type
+   typeStr = constTypeToString(constType);
+   // Copy the string into type[]
+   dStrcpy((char*)type, typeStr, sizeof(type));
+   type[sizeof(type) - 1] = '\0';
+}
 //--------------------------------------------------------------------------
 // print
 //--------------------------------------------------------------------------

+ 7 - 1
Engine/source/shaderGen/langElement.h

@@ -30,6 +30,10 @@
 #include "core/stream/stream.h"
 #endif
 
+#ifndef _GFXENUMS_H_
+#include "gfx/gfxEnums.h"
+#endif
+
 #define WRITESTR( a ){ stream.write( dStrlen(a), a ); }
 
 
@@ -55,7 +59,7 @@ struct LangElement
    static void deleteElements();
       
    U8    name[32];
-   
+   static const char* constTypeToString(GFXShaderConstType constType);
    LangElement();
    virtual ~LangElement() {};
    virtual void print( Stream &stream ){};
@@ -131,10 +135,12 @@ struct Var : public LangElement
    // Default
    Var();   
    Var( const char *name, const char *type );   
+   Var( const char *name, GFXShaderConstType type );
    
    void setStructName(const char *newName );
    void setConnectName(const char *newName );
    void setType(const char *newType );
+   void setType(GFXShaderConstType constType);
   
    void print( Stream &stream ) override;
 

+ 16 - 0
Engine/source/shaderGen/shaderOp.cpp

@@ -179,3 +179,19 @@ void GenOp::print( Stream &stream )
       mElemList[i]->print( stream );
    }
 }
+
+CastOp::CastOp(Var* in1, GFXShaderConstType type) : Parent(in1, NULL)
+{
+   mInput[0] = in1;
+   mConstType = constTypeToString(type);
+}
+
+void CastOp::print(Stream& stream)
+{
+   Var* var = dynamic_cast<Var*>(mInput[0]);
+
+   WRITESTR(mConstType);
+   WRITESTR("( ");
+   mInput[0]->print(stream);
+   WRITESTR(" )");
+}

+ 10 - 2
Engine/source/shaderGen/shaderOp.h

@@ -59,7 +59,6 @@ public:
    ShaderOp( LangElement *in1, LangElement *in2 );
 };
 
-//----------------------------------------------------------------------------
 /*!
    DecOp - Declaration Operation - Used when declaring a variable in a shader
    feature.  It will automatically print the type of the variable and then
@@ -82,7 +81,6 @@ public:
    float foo = 8.0 * 5.0;
    @endcode
 */
-//----------------------------------------------------------------------------
 class DecOp : public ShaderOp
 {
    typedef ShaderOp Parent;
@@ -163,4 +161,14 @@ public:
 
 };
 
+class CastOp : public ShaderOp
+{
+   typedef ShaderOp Parent;
+   const char* mConstType;
+public:
+   CastOp(Var* in1, GFXShaderConstType type);
+   void print(Stream& stream) override;
+};
+
+
 #endif // _SHADEROP_H_