27 #ifndef _ShaderExHardwareSkinning_
28 #define _ShaderExHardwareSkinning_
32 #ifdef RTSHADER_SYSTEM_BUILD_EXT_SHADERS
42 #define HS_MAX_WEIGHT_COUNT 4
48 class HardwareSkinningFactory;
67 isValid(true), maxBoneCount(0), maxWeightCount(0), skinningType(
ST_LINEAR), correctAntipodalityHandling(false), scalingShearingSupport(false)
74 bool correctAntipodalityHandling;
75 bool scalingShearingSupport;
86 virtual const String& getType()
const;
91 virtual int getExecutionOrder()
const;
96 virtual void copyFrom(
const SubRenderState& rhs);
108 void setHardwareSkinningParam(
ushort boneCount,
ushort weightCount,
SkinningType skinningType =
ST_LINEAR,
bool correctAntipodalityHandling =
false,
bool scalingShearingSupport =
false);
132 bool hasCorrectAntipodalityHandling();
138 bool hasScalingShearingSupport();
143 virtual bool preAddToRenderState(
const RenderState* renderState, Pass* srcPass, Pass* dstPass);
148 void _setCreator(
const HardwareSkinningFactory* pCreator) { mCreator = pCreator; }
157 virtual bool resolveParameters(ProgramSet* programSet);
162 virtual bool resolveDependencies(ProgramSet* programSet);
167 virtual bool addFunctionInvocations(ProgramSet* programSet);
169 SharedPtr<LinearSkinning> mLinear;
170 SharedPtr<DualQuaternionSkinning> mDualQuat;
171 SharedPtr<HardwareSkinningTechnique> mActiveTechnique;
174 const HardwareSkinningFactory* mCreator;
184 class _OgreRTSSExport HardwareSkinningFactory :
public SubRenderStateFactory,
185 public Singleton<HardwareSkinningFactory>
188 HardwareSkinningFactory();
193 virtual const String& getType()
const;
198 virtual SubRenderState* createInstance(ScriptCompiler* compiler, PropertyAbstractNode* prop, Pass* pass, SGScriptTranslator* translator);
203 virtual void writeInstance(MaterialSerializer* ser, SubRenderState* subRenderState, Pass* srcPass, Pass* dstPass);
242 void prepareEntityForSkinning(
const Entity* pEntity,
SkinningType skinningType =
ST_LINEAR,
bool correctAntidpodalityHandling =
false,
bool shearScale =
false);
254 ushort getMaxCalculableBoneCount()
const {
255 return mMaxCalculableBoneCount; }
260 void setMaxCalculableBoneCount(
ushort count) {
261 mMaxCalculableBoneCount = count; }
280 static HardwareSkinningFactory& getSingleton(
void);
299 static HardwareSkinningFactory* getSingletonPtr(
void);
312 bool extractSkeletonData(
const Entity* pEntity,
unsigned int subEntityIndex,
325 bool imprintSkeletonData(
const MaterialPtr& pMaterial,
bool isValid,
326 ushort boneCount,
ushort weightCount,
SkinningType skinningType,
bool correctAntidpodalityHandling,
bool scalingShearingSupport);
333 virtual SubRenderState* createInstanceImpl();
336 MaterialPtr mCustomShadowCasterMaterialsLinear[HS_MAX_WEIGHT_COUNT];
337 MaterialPtr mCustomShadowCasterMaterialsDualQuaternion[HS_MAX_WEIGHT_COUNT];
340 MaterialPtr mCustomShadowReceiverMaterialsLinear[HS_MAX_WEIGHT_COUNT];
341 MaterialPtr mCustomShadowReceiverMaterialsDualQuaternion[HS_MAX_WEIGHT_COUNT];
345 ushort mMaxCalculableBoneCount;
SharedPtr< Material > MaterialPtr
std::ostream & operator<<(std::ostream &o, const TRect< T > &r)