#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