summaryrefslogtreecommitdiff
path: root/Runtime/GfxDevice/d3d11/StreamOutSkinnedMesh.h
blob: 7d952322303982a05cb453e70c470f4492c1893b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#ifndef __STREAMOUTSKINNEDMESH_H__
#define __STREAMOUTSKINNEDMESH_H__

#include "External/DirectX/builds/dx11include/d3d11.h"
#include "Runtime/GfxDevice/GPUSkinningInfo.h"
class VBO;
class Matrix4x4f;
class ThreadedStreamBuffer;
class GfxDeviceD3D11;

// MemExport mesh skinning data.
class StreamOutSkinningInfo : public GPUSkinningInfo
{
	friend class GfxDeviceD3D11;
private:
	ID3D11Buffer* m_SourceVBO;
	ID3D11Buffer* m_SourceSkin;
	ID3D11Buffer* m_SourceBones;

	//! Stores the bone count from the previous call to UpdateSourceBones. Used to select the most suitable shader version.
	int m_BoneCount;

	// Private constructor and destructor , called from GfxDeviceD3D11
	StreamOutSkinningInfo() : GPUSkinningInfo(), m_SourceVBO(NULL), m_SourceSkin(NULL), m_SourceBones(NULL) {}
	virtual ~StreamOutSkinningInfo();


	// Actual implementation methods, called from GfxDeviceD3D11

	void UpdateSourceData(const void *vertData, const BoneInfluence *skinData, bool dirty);
	void UpdateSourceBones(const int boneCount, const Matrix4x4f* cachedPose);
	void SkinMesh(bool last);

public:

	//! Clean up created shaders
	static void CleanUp();

};


#endif