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
|
#ifndef HAIR_API_VRAY_UTIL_H
#define HAIR_API_VRAY_UTIL_H
// Shave and a Haircut
// (c) 2019 Epic Games
// US Patent 6720962
#include "vray3_compat.h"
#include "hairAPI.h"
// Utility methods to get a Vector/ShadeVec/Color/ShadeCol from the Hair types
#define DECLARE_GETTER1_TRESULT(Type, Thing, TArg1, TResult)\
static void Get##Thing(const Type& obj, TArg1 arg1, TResult &result) {\
float x, y, z;\
obj.Get##Thing(arg1, x, y, z);\
result.set(x, y, z);\
}\
static void Get##Thing(const Type *obj, TArg1 arg1, TResult &result) {\
vassert(obj);\
Get##Thing(*obj, arg1, result);\
}
#define DECLARE_GETTER2_TRESULT(Type, Thing, TArg1, TArg2, TResult)\
static void Get##Thing(const Type& obj, TArg1 arg1, TArg2 arg2, TResult &result) {\
float x, y, z;\
obj.Get##Thing(arg1, arg2, x, y, z);\
result.set(x, y, z);\
}\
static void Get##Thing(const Type *obj, TArg1 arg1, TArg2 arg2, TResult &result) {\
vassert(obj);\
Get##Thing(*obj, arg1, arg2, result);\
}
#if defined(VRAY30)
#define DECLARE_GETTER1_Vector(Type, Thing, TArg1)\
DECLARE_GETTER1_TRESULT(Type, Thing, TArg1, VUtils::Vector)
#define DECLARE_GETTER2_Vector(Type, Thing, TArg1, TArg2)\
DECLARE_GETTER2_TRESULT(Type, Thing, TArg1, TArg2, VUtils::Vector)
#define DECLARE_GETTER1_Color(Type, Thing, TArg1)\
DECLARE_GETTER1_TRESULT(Type, Thing, TArg1, VUtils::Color)
#define DECLARE_GETTER2_Color(Type, Thing, TArg1, TArg2)\
DECLARE_GETTER2_TRESULT(Type, Thing, TArg1, TArg2, VUtils::Color)
#elif defined(VRAY40)
#define DECLARE_GETTER1_Vector(Type, Thing, TArg1)\
DECLARE_GETTER1_TRESULT(Type, Thing, TArg1, VUtils::Vector)\
DECLARE_GETTER1_TRESULT(Type, Thing, TArg1, VUtils::simd::Vector3f)
#define DECLARE_GETTER2_Vector(Type, Thing, TArg1, TArg2)\
DECLARE_GETTER2_TRESULT(Type, Thing, TArg1, TArg2, VUtils::Vector)\
DECLARE_GETTER2_TRESULT(Type, Thing, TArg1, TArg2, VUtils::simd::Vector3f)
#define DECLARE_GETTER1_Color(Type, Thing, TArg1)\
DECLARE_GETTER1_TRESULT(Type, Thing, TArg1, VUtils::Color)\
DECLARE_GETTER1_TRESULT(Type, Thing, TArg1, VUtils::simd::Color3f)
#define DECLARE_GETTER2_Color(Type, Thing, TArg1, TArg2)\
DECLARE_GETTER2_TRESULT(Type, Thing, TArg1, TArg2, VUtils::Color)\
DECLARE_GETTER2_TRESULT(Type, Thing, TArg1, TArg2, VUtils::simd::Color3f)
#endif
DECLARE_GETTER1_Vector(IHairVoxel, Vert, int)
DECLARE_GETTER1_Vector(IHairVoxel, Velocity, int)
DECLARE_GETTER1_Color(IHairVoxel, RootColor, int)
DECLARE_GETTER1_Color(IHairVoxel, TipColor, int)
DECLARE_GETTER2_Color(IHairVoxel, VertColor, int, int)
DECLARE_GETTER2_Color(IHairVoxel, Color, int, float)
DECLARE_GETTER1_Vector(IHairVoxel, SurfNormal, int)
DECLARE_GETTER1_Vector(HairType, Vert, int)
DECLARE_GETTER1_Vector(HairType, UV, int)
DECLARE_GETTER1_Vector(HairType, Velocity, int)
DECLARE_GETTER1_Color(HairType, RootColor, int)
DECLARE_GETTER1_Color(HairType, TipColor, int)
DECLARE_GETTER2_Color(HairType, VertColor, int, int)
DECLARE_GETTER2_Color(HairType, Color, int, float)
DECLARE_GETTER1_Vector(HairType, SurfNormal, int)
#undef DECLARE_GETTER1_TRESULT
#undef DECLARE_GETTER2_TRESULT
#undef DECLARE_GETTER1_Vector
#undef DECLARE_GETTER2_Vector
#undef DECLARE_GETTER1_Color
#undef DECLARE_GETTER2_Color
#endif //HAIR_API_VRAY_UTIL_H
|