You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.9 KiB
91 lines
2.9 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//============================================================================= |
|
|
|
#ifndef IMORPHINTERNAL_H |
|
#define IMORPHINTERNAL_H |
|
|
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "materialsystem/imorph.h" |
|
#include "shaderapi/shareddefs.h" |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Forward declarations |
|
//----------------------------------------------------------------------------- |
|
class ITextureInternal; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Render context for morphs |
|
//----------------------------------------------------------------------------- |
|
abstract_class IMorphMgrRenderContext |
|
{ |
|
public: |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// |
|
// Morph data class |
|
// |
|
//----------------------------------------------------------------------------- |
|
abstract_class IMorphInternal : public IMorph |
|
{ |
|
public: |
|
virtual void Init( MorphFormat_t format, const char *pDebugName ) = 0; |
|
virtual void Bind( IMorphMgrRenderContext *pRenderContext ) = 0; |
|
virtual MorphFormat_t GetMorphFormat() const = 0; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Morph manager class |
|
//----------------------------------------------------------------------------- |
|
abstract_class IMorphMgr |
|
{ |
|
public: |
|
// Allocate,free scratch textures + materials |
|
virtual bool ShouldAllocateScratchTextures() = 0; |
|
virtual void AllocateScratchTextures() = 0; |
|
virtual void FreeScratchTextures() = 0; |
|
virtual void AllocateMaterials() = 0; |
|
virtual void FreeMaterials() = 0; |
|
|
|
// Returns the morph accumulator scratch texture |
|
virtual ITextureInternal *MorphAccumulator() = 0; |
|
virtual ITextureInternal *MorphWeights() = 0; |
|
|
|
// Class factory |
|
virtual IMorphInternal *CreateMorph() = 0; |
|
virtual void DestroyMorph( IMorphInternal *pMorphData ) = 0; |
|
|
|
// Max morphs between Begin/End |
|
virtual int MaxHWMorphBatchCount() const = 0; |
|
|
|
// Begin, end morph accumulation phase |
|
virtual void BeginMorphAccumulation( IMorphMgrRenderContext *pRenderContext ) = 0; |
|
virtual void EndMorphAccumulation( IMorphMgrRenderContext *pRenderContext ) = 0; |
|
|
|
// Accumulate a morph |
|
virtual void AccumulateMorph( IMorphMgrRenderContext *pRenderContext, IMorph* pMorph, int nMorphCount, const MorphWeight_t* pWeights ) = 0; |
|
|
|
// Advances frame count (for debugging) |
|
virtual void AdvanceFrame() = 0; |
|
|
|
// Returns the location of a particular vertex in the morph accumulator |
|
virtual bool GetMorphAccumulatorTexCoord( IMorphMgrRenderContext *pRenderContext, Vector2D *pTexCoord, IMorph *pMorph, int nVertex ) = 0; |
|
|
|
// Allocate, free morph mgr render context data. |
|
virtual IMorphMgrRenderContext *AllocateRenderContext() = 0; |
|
virtual void FreeRenderContext( IMorphMgrRenderContext *pRenderContext ) = 0; |
|
}; |
|
|
|
extern IMorphMgr *g_pMorphMgr; |
|
|
|
#endif // IMORPHINTERNAL_H
|
|
|