123
This commit is contained in:
82
CryAnimation/CryCharRenderElement.h
Normal file
82
CryAnimation/CryCharRenderElement.h
Normal file
@@ -0,0 +1,82 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Crytek Character Animation source code
|
||||
//
|
||||
// History:
|
||||
// Created by Sergiy Migdalskiy
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef _CRY_CHAR_RENDER_ELEMENT_HDR_
|
||||
#define _CRY_CHAR_RENDER_ELEMENT_HDR_
|
||||
|
||||
|
||||
// buffer incarnation: the buffer with the last rendered frame
|
||||
// NOTE: this structure doesn't manage the leaf buffer; it's just a container
|
||||
// THe leaf buffer must be destructed manually through the methods of this class,
|
||||
// the destructor won't do that for you
|
||||
class CryCharRenderElement
|
||||
{
|
||||
public:
|
||||
// creates an empty element, without the leaf buffer attached
|
||||
CryCharRenderElement ();
|
||||
~CryCharRenderElement ();
|
||||
|
||||
// returns true if the leaf buffer can be deleted immediately
|
||||
bool canDestruct();
|
||||
|
||||
// detaches the leaf buffer from this object (forgets it)
|
||||
void detach();
|
||||
|
||||
// deletes the current buffer, cleans up the object; can only be called when canDelete() == true
|
||||
void destruct ();
|
||||
|
||||
// creates the buffer with the given number of vertices and vertex format
|
||||
// can only be called for a clean (without initialized leaf buffer) object
|
||||
//void create (int nVertCount, int nVertFormat, const char* szSource, unsigned numMaterials, bool bOnlyVideoBuffer = true);
|
||||
|
||||
// creates the buffer with the given number of vertices and vertex format
|
||||
// can only be called for a clean (without initialized leaf buffer) object
|
||||
// initializes the system buffer with the data from the array
|
||||
void create (int nVertCount, const struct_VERTEX_FORMAT_P3F_COL4UB_TEX2F* pSource, const char* szSource, unsigned numMaterials, bool bOnlyVideoBuffer = true);
|
||||
|
||||
// recreates videobuffer
|
||||
void recreate();
|
||||
|
||||
// returns the number of vertices allocated in the current buffer, if any is allocated
|
||||
unsigned numVertices()const;
|
||||
|
||||
// returns the number of materials in the leaf buffer
|
||||
unsigned numMaterials()const;
|
||||
|
||||
// sets the number of used materials in the leaf buffer, initializes the materials (creates ocleaves for them)
|
||||
void resizeMaterials (unsigned numMaterials, IShader* pShader);
|
||||
|
||||
CLeafBuffer* getLeafBuffer() {return m_pLeafBuffer;}
|
||||
|
||||
int getVertexFormat() {return m_pLeafBuffer->m_nVertexFormat;}
|
||||
|
||||
void update(bool bLock, bool bCopyToVideoBuffer);
|
||||
|
||||
void lock (bool bCopyToVideoBuffer) {update (true, bCopyToVideoBuffer);}
|
||||
void unlock (bool bCopyToVideoBuffer) {update (false, bCopyToVideoBuffer);}
|
||||
|
||||
void render (CCObject* pObj);
|
||||
|
||||
void assignMaterial (unsigned nMaterial, IShader* pShader, int nTextureId, int nFirstIndex, int numIndices, int nFirstVertex, int numVertices);
|
||||
void updateIndices (const unsigned short* pIndices, unsigned numIndices);
|
||||
protected:
|
||||
|
||||
// the leaf buffer for rendering the decals
|
||||
CLeafBuffer* m_pLeafBuffer;
|
||||
|
||||
// this is the frame at which this leaf buffer was last rendered;
|
||||
// if it's the current frame, it cannot be deleted now.
|
||||
int m_nLeafBufferLastRenderFrame;
|
||||
|
||||
// this is the number of vertices/indices allocated in the current leaf buffer
|
||||
// these are kept here becaue CLeafBuffer doesn't have any normal interface to retrieve them
|
||||
unsigned m_numVertBufVertices;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user