Torque3D Documentation / _generateds / customFeatureHLSL.h

customFeatureHLSL.h

Engine/source/shaderGen/HLSL/customFeatureHLSL.h

More...

Classes:

Detailed Description

  1
  2#ifndef _SHADERGEN_HLSL_SHADERFEATUREHLSL_H_
  3#include "shaderGen/HLSL/shaderFeatureHLSL.h"
  4#endif
  5#ifndef _LANG_ELEMENT_H_
  6#include "shaderGen/langElement.h"
  7#endif
  8#ifndef _GFXDEVICE_H_
  9#include "gfx/gfxDevice.h"
 10#endif
 11#ifndef _FEATUREMGR_H_
 12#include "shaderGen/featureMgr.h"
 13#endif
 14#ifndef _MATERIALFEATURETYPES_H_
 15#include "materials/materialFeatureTypes.h"
 16#endif
 17#ifndef _MATERIALFEATUREDATA_H_
 18#include "materials/materialFeatureData.h"
 19#endif
 20
 21#ifndef CUSTOMSHADERFEATURE_H
 22#include "shaderGen/customShaderFeature.h"
 23#endif
 24
 25class CustomShaderFeatureData;
 26
 27class CustomFeatureHLSL : public ShaderFeatureHLSL
 28{
 29   friend class CustomShaderFeatureData;
 30
 31   struct VarHolder
 32   {
 33      String varName;
 34      String type;
 35      String defaultValue;
 36      S32 elementId;
 37      bool uniform;
 38      bool sampler;
 39      bool texture;
 40      bool texCoord;
 41      U32 constNum;
 42      U32 arraySize;
 43      String structName;
 44      ConstantSortPosition constSortPos;
 45
 46      VarHolder() :
 47         varName(""),
 48         type(""),
 49         defaultValue(""),
 50         elementId(-1),
 51         uniform(false),
 52         sampler(false),
 53         texture(false),
 54         texCoord(false),
 55         constNum(0),
 56         arraySize(0),
 57         structName(""),
 58         constSortPos(cspUninit)
 59      {
 60      }
 61
 62      VarHolder(String _varName, String _type, String _defaultValue) :
 63         elementId(-1), uniform(false), sampler(false), texture(false), texCoord(false), constNum(0), arraySize(0), structName(""), constSortPos(cspUninit)
 64      {
 65         varName = _varName;
 66         type = _type;
 67         defaultValue = _defaultValue;
 68      }
 69   };
 70
 71   Vector<VarHolder> mVars;
 72
 73   Vector<VarHolder> mConnectorVars;
 74
 75   enum outputState
 76   {
 77      NoOutput,
 78      VertexOutput,
 79      PixelOutput
 80   };
 81
 82   outputState mOutputState;
 83
 84public:
 85   CustomShaderFeatureData* mOwner;
 86
 87   Vector<ShaderComponent*> mComponentList;
 88   MaterialFeatureData mFeatureData;
 89
 90protected:
 91   MultiLine* meta;
 92
 93public:
 94
 95   //****************************************************************************
 96   // Accu Texture
 97   //****************************************************************************
 98   virtual void processVert(Vector<ShaderComponent*>& componentList,
 99      const MaterialFeatureData& fd);
100
101   virtual void processPix(Vector<ShaderComponent*>& componentList,
102      const MaterialFeatureData& fd);
103
104   virtual Material::BlendOp getBlendOp() { return Material::LerpAlpha; }
105
106   virtual Resources getResources(const MaterialFeatureData& fd)
107   {
108      Resources res;
109      res.numTex = 1;
110      res.numTexReg = 1;
111      return res;
112   }
113
114   virtual void setTexData(Material::StageData& stageDat,
115      const MaterialFeatureData& fd,
116      RenderPassData& passData,
117      U32& texIndex);
118
119   virtual String getName()
120   {
121      return mOwner->getName();
122   }
123
124   bool hasFeature(String name);
125
126   void addUniform(String name, String type, String defaultValue, U32 arraySize = 0);
127   void addVariable(String name, String type, String defaultValue);
128   void addSampler(String name, String type, U32 arraySize = 0);
129   void addTexture(String name, String type, String samplerState, U32 arraySize);
130   void addConnector(String name, String type, String elementName);
131   void addVertTexCoord(String name);
132   void writeLine(String format, S32 argc, ConsoleValueRef* argv);
133};
134