aboutsummaryrefslogtreecommitdiff
path: root/vrayPlug/plugin/shaveVrayInstanceBase.h
blob: a90b37491fb3ce64bb19cbbaa0acd377c00495c0 (plain) (blame)
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#ifndef _HAIR_VRAY_INSTANCE_base_H_
#define _HAIR_VRAY_INSTANCE_base_H_

// Shave and a Haircut
// (c) 2019 Epic Games
// US Patent 6720962

/**********************************************************************
 *<
	FILE:			shaveVrayInstanceBase.h  

	DESCRIPTION:	VRay base class for regular and insted hair VRay instance classes

	CREATED BY:		Vladimir Dubovoy <[email protected]>

	HISTORY:		created  11-05-2010 

 *>
 **********************************************************************/

//std
#include <vector>
// V-Ray headers
#include "vraybase.h"
#include "vraymayageom.h"
#include "vrayplugins.h"
#include "geometryclasses.h"
//own headers
#include "hairAPIvrayutil.h"
#include "shaveVrayPlugin.h"
#include "shaveVrayVoxelPrimBase.h"

//hair stack
//we need 2 stacks for instanced and regular hair, 
//so it goes to shaveVrayInstance members 
extern IHairStack* stack; 

class shaveVrayInstanceBase /*: public VR::BaseMeshInstance*/ {
public:
	shaveVrayPlugin *plugin;

	//static IHairStack* stack;

	//shaveVrayPlugin *plugin;

	//shaveVrayInstanceBase(
	//	shaveVrayPlugin *vplugin , 
	//	VR::MaterialInterface *mtl, VR::BSDFInterface *bsdf, int renderID, 
	//	VR::VolumetricInterface *volume, VR::LightList *lightList, const VR::TraceTransform &baseTM, int objectID, 
	//	const tchar *userAttributes, int primaryVisibility)
	//	:
	//	plugin(vplugin),
	//	VR::BaseMeshInstance(vplugin, vplugin, mtl, bsdf, 
	//						 renderID, volume, lightList, 
	//						 baseTM, objectID, userAttributes, 
	//						 primaryVisibility) 
	//{
	//	_hair() = NULL;
	//	_stackid() = plugin->GetStackIndex();
	//}
	shaveVrayInstanceBase(shaveVrayPlugin *plug){plugin = plug;}
	virtual ~shaveVrayInstanceBase() {}

	void loadHair();
	void freeMem();

	int GetNumFacesPerInst() const {return numFacesPerInst();}
	int GetNumUVSets() const {return numUVSets();}
	const VR::Vector& GetUV(int i) const {return uv(i);}

	virtual bool GetSquirrel() const = 0;

protected:
	//const member access
	inline const std::vector<shaveVrayVoxelPrimBase*>& voxprims() const {return m_voxprims;}
	inline shaveVrayVoxelPrimBase*  voxprim(unsigned int i) const {return m_voxprims[i];}
	inline int  stackid()		  const {return m_stackid;}
	inline int  numFacesPerInst() const {return m_numFacesPerInst;}
	inline int  numUVSets()		  const {return m_numUVSets;}
	inline const VR::VectorList& uvs()const {return m_uvs;}
	inline const VR::Vector& uv(int i)const {return m_uvs[i];}
	inline IHairNode* hair() const {return m_hair;}

	//member access
	inline std::vector<shaveVrayVoxelPrimBase*>& _voxprims() {return m_voxprims;}
	inline shaveVrayVoxelPrimBase*&  _voxprim(unsigned int i){return m_voxprims[i];}
	inline int&  _stackid()			{return m_stackid;}
	inline int&  _numFacesPerInst() {return m_numFacesPerInst;}
	inline int&  _numUVSets()		{return m_numUVSets;}
	inline VR::VectorList& _uvs()       {return m_uvs;}
	inline IHairNode*& _hair()  {return m_hair;}

private:
	//moving or static primiteves
	std::vector<shaveVrayVoxelPrimBase*> m_voxprims;

	int	 m_stackid;
	int  m_numFacesPerInst;
	int  m_numUVSets;
	VR::VectorList m_uvs;
	IHairNode* m_hair;
};


#endif	//end of_HAIR_VRAY_INSTANCE_base_H_