aboutsummaryrefslogtreecommitdiff
path: root/vrayPlug/plugin/shaveVrayInstanceI.cpp
diff options
context:
space:
mode:
authorBen Marsh <[email protected]>2019-10-22 09:07:59 -0400
committerBen Marsh <[email protected]>2019-10-22 09:07:59 -0400
commitbd0027e737c6512397f841c22786274ed74b927f (patch)
treef7ffbdb8f3741bb7f24635616cc189cba5cb865c /vrayPlug/plugin/shaveVrayInstanceI.cpp
downloadshave-and-a-haircut-bd0027e737c6512397f841c22786274ed74b927f.tar.xz
shave-and-a-haircut-bd0027e737c6512397f841c22786274ed74b927f.zip
Adding Shave-and-a-Haircut 9.6
Diffstat (limited to 'vrayPlug/plugin/shaveVrayInstanceI.cpp')
-rw-r--r--vrayPlug/plugin/shaveVrayInstanceI.cpp162
1 files changed, 162 insertions, 0 deletions
diff --git a/vrayPlug/plugin/shaveVrayInstanceI.cpp b/vrayPlug/plugin/shaveVrayInstanceI.cpp
new file mode 100644
index 0000000..bc85015
--- /dev/null
+++ b/vrayPlug/plugin/shaveVrayInstanceI.cpp
@@ -0,0 +1,162 @@
+// Shave and a Haircut
+// (c) 2019 Epic Games
+// US Patent 6720962
+
+/**********************************************************************
+ *<
+ FILE: shaveVrayInstanceI.cpp
+
+ DESCRIPTION: VRay instnace for instanced hair
+
+ CREATED BY: Vladimir Dubovoy <[email protected]>
+
+ HISTORY: created 12-05-2010
+
+ *>
+ **********************************************************************/
+
+#include "shaveVrayInstanceI.h"
+#include "shaveVrayMovingTriVoxelPrim.h"
+#include "shaveVrayStaticTriVoxelPrim.h"
+
+
+
+shaveVrayInstanceI::shaveVrayInstanceI(
+ shaveVrayPlugin *vplugin,
+ VR::MaterialInterface *mtl, VR::BSDFInterface *bsdf, int renderID,
+ VR::VolumetricInterface *volume, VR::LightList *lightList,
+#if defined(VRAY30)
+ const VR::TraceTransform &baseTM,
+#elif defined(VRAY40)
+ const VR::Transform &baseTM,
+#endif
+ int objectID,
+ const tchar *userAttributes, int primaryVisibility)
+ :
+#if defined(VRAY30)
+ VR::BaseMeshInstance(vplugin, vplugin, mtl, bsdf, renderID, volume, lightList, baseTM, objectID, userAttributes, primaryVisibility),
+#elif defined(VRAY40)
+ VR::BaseInstance(vplugin, mtl, bsdf, renderID, volume, lightList, baseTM, objectID, userAttributes, primaryVisibility),
+#endif
+ shaveVrayInstanceBase(vplugin)
+{
+ _hair() = NULL;
+ _stackid() = plugin->GetStackIndex();
+ _numFacesPerInst() = plugin->GetNumFacesPerInst();
+ _numUVSets() = plugin->GetNumUVSets();
+
+
+ //shaveVrayVectorListParam* uvsParam = vplugin->GetUVparam();
+ VR::VRayPluginParameter *uvsParam=plugin->paramList->getParam("uvs");
+ if(uvsParam)
+ {
+ _uvs() = uvsParam->getVectorList(0);
+
+ //int nuvs = uvsParam->getCount(0);
+ //_uvs() = VR::VectorList(nuvs);
+ //for(int i = 0; i < nuvs; i++)
+ //{
+ // VR::Vector v = uvsParam->operator[](i);
+ // _uvs()[i] = v;
+ //}
+ }
+}
+
+
+void shaveVrayInstanceI::compileGeometry(
+ VR::VRayRenderer *vray,
+#if defined(VRAY30)
+ VR::TraceTransform *tm,
+#elif defined(VRAY40)
+ const VR::Transform *tm,
+#endif
+ double *times, int tmCount)
+{
+ LOGMSG("SHAVE", "shaveVrayInstanceI::compileGeometry");
+ LOGMSGI("SHAVE", "id",stackid());
+
+ loadHair();
+
+ if(!hair())
+ return;
+
+#if defined(VRAY30)
+ BaseMeshInstance::compileGeometry(vray, tm, times, tmCount);
+#elif defined(VRAY40)
+ BaseInstance::compileGeometry(vray, tm, times, tmCount);
+#endif
+
+ int num_voxels = hair()->GetNumVoxels();
+ VR::RayServerInterface *rayserver = vray->getRayServer();
+ int rendID = rayserver->getNewRenderIDArray(num_voxels);
+
+ const VR::VRaySequenceData& sdata = vray->getSequenceData();
+ bool blurOn = sdata.params.moblur.on != 0;
+ //tm is not animated
+ if ( !blurOn )
+ {
+ for(int i = 0; i < num_voxels; i++)
+ {
+ IHairVoxel* voxel = hair()->GetVoxel(i);
+ if(voxel)
+ {
+ shaveVrayStaticTriVoxelPrim* vox_prim = new shaveVrayStaticTriVoxelPrim(voxel,vray,this);
+
+
+ if(rayserver->storeStaticPrimitive(vox_prim, NULL, rendID+i ))
+ _voxprims().push_back(vox_prim);
+ else
+ {
+ delete vox_prim;
+ LOGMSG("SHAVE", "shaveVrayInstanceI failed to store voxel prmitive on rayserver");
+
+ }
+ }
+ }
+ }
+ else
+ {
+ for(int i = 0; i < num_voxels; i++)
+ {
+ IHairVoxel* voxel = hair()->GetVoxel(i);
+ if(voxel)
+ {
+ shaveVrayMovingTriVoxelPrim* vox_prim = new shaveVrayMovingTriVoxelPrim(voxel,vray,this);
+
+
+ if(rayserver->storeMovingPrimitive(vox_prim, NULL, rendID+i))
+ _voxprims().push_back(vox_prim);
+ else
+ {
+ delete vox_prim;
+ LOGMSG("SHAVE", "shaveVrayInstanceI failed to store voxel prmitive on rayserver");
+
+ }
+ }
+ }
+ }
+ LOGMSG("SHAVE", "shaveVrayInstanceI::compileGeometry - OK");
+}
+
+void shaveVrayInstanceI::clearGeometry(VR::VRayRenderer *vray)
+{
+ LOGMSG("SHAVE", "shaveVrayInstanceI::clearGeometry");
+
+ shaveVrayInstanceBase::freeMem();
+#if defined(VRAY30)
+ BaseMeshInstance::clearGeometry(vray);
+#elif defined(VRAY40)
+ BaseInstance::clearGeometry(vray);
+#endif
+
+ //if(stack)
+ //{
+ // delete stack;
+ // stack = NULL;
+ //}
+ LOGMSG("SHAVE", "shaveVrayInstanceI::clearGeometry - OK");
+}
+
+
+
+