source-engine/materialsystem/imorphinternal.h

92 lines
2.9 KiB
C
Raw Permalink Normal View History

2020-04-22 16:56:21 +00:00
//========= 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