|
|
//====== Copyright � 1996-2007, Valve Corporation, All rights reserved. =======
//
// Purpose:
//
//=============================================================================
#ifndef MDLLIB_H
#define MDLLIB_H
#ifdef _WIN32
#pragma once
#endif
#include "tier1/utlbuffer.h"
#include "appframework/IAppSystem.h"
//
// Forward interface declarations
//
abstract_class IMdlLib;
abstract_class IMdlStripInfo;
//-----------------------------------------------------------------------------
// Purpose: Interface to accessing model data operations
//-----------------------------------------------------------------------------
namespace MdlLib {
struct MdlVertex { float position[3]; float normal[3]; float texcoord[2]; };
struct MdlMesh { unsigned long checksum; CUtlVector< unsigned int > ib; CUtlVector< MdlVertex > vb; };
};
abstract_class IMdlLib : public IAppSystem { //
// Stripping routines
//
public:
//
// StripModelBuffers
// The main function that strips the model buffers
// mdlBuffer - mdl buffer, updated, no size change
// vvdBuffer - vvd buffer, updated, size reduced
// vtxBuffer - vtx buffer, updated, size reduced
// ppStripInfo - if nonzero on return will be filled with the stripping info
//
virtual bool StripModelBuffers( CUtlBuffer &mdlBuffer, CUtlBuffer &vvdBuffer, CUtlBuffer &vtxBuffer, IMdlStripInfo **ppStripInfo ) = 0;
//
// CreateNewStripInfo
// Creates an empty strip info or resets an existing strip info so that it can be reused.
//
virtual bool CreateNewStripInfo( IMdlStripInfo **ppStripInfo ) = 0;
//
// ParseMdlMesh
// The main function that parses the mesh buffers
// mdlBuffer - mdl buffer
// vvdBuffer - vvd buffer
// vtxBuffer - vtx buffer
// mesh - on return will be filled with the mesh info
//
virtual bool ParseMdlMesh( CUtlBuffer &mdlBuffer, CUtlBuffer &vvdBuffer, CUtlBuffer &vtxBuffer, MdlLib::MdlMesh &mesh ) = 0;
//
// PrepareModelForPs3
// The main function that strips the model buffers
// mdlBuffer - mdl buffer, updated, size possibly increased
// vvdBuffer - vvd buffer, updated, size possibly increased
// vtxBuffer - vtx buffer, updated, size possibly increased
// ppStripInfo - if nonzero on return will be filled with the stripping info
//
virtual bool PrepareModelForPs3( CUtlBuffer &mdlBuffer, CUtlBuffer &vvdBuffer, CUtlBuffer &vtxBuffer, IMdlStripInfo **ppStripInfo ) = 0;
};
abstract_class IMdlStripInfo { //
// Serialization
//
public: // Save the strip info to the buffer (appends to the end)
virtual bool Serialize( CUtlBuffer &bufStorage ) const = 0;
// Load the strip info from the buffer (reads from the current position as much as needed)
virtual bool UnSerialize( CUtlBuffer &bufData ) = 0;
//
// Stripping info state
//
public: // Returns the checksums that the stripping info was generated for:
// plChecksumOriginal if non-NULL will hold the checksum of the original model submitted for stripping
// plChecksumStripped if non-NULL will hold the resulting checksum of the stripped model
virtual bool GetCheckSum( long *plChecksumOriginal, long *plChecksumStripped ) const = 0;
//
// Stripping
//
public: //
// StripHardwareVertsBuffer
// The main function that strips the vhv buffer
// vhvBuffer - vhv buffer, updated, size reduced
//
virtual bool StripHardwareVertsBuffer( CUtlBuffer &vhvBuffer ) = 0;
//
// StripModelBuffer
// The main function that strips the mdl buffer
// mdlBuffer - mdl buffer, updated
//
virtual bool StripModelBuffer( CUtlBuffer &mdlBuffer ) = 0; //
// StripVertexDataBuffer
// The main function that strips the vvd buffer
// vvdBuffer - vvd buffer, updated, size reduced
//
virtual bool StripVertexDataBuffer( CUtlBuffer &vvdBuffer ) = 0; //
// StripOptimizedModelBuffer
// The main function that strips the vtx buffer
// vtxBuffer - vtx buffer, updated, size reduced
//
virtual bool StripOptimizedModelBuffer( CUtlBuffer &vtxBuffer ) = 0;
//
// Release the object with "delete this"
//
public: virtual void DeleteThis() = 0; };
#endif // MDLLIB_H
|