aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/module/forcefield/src/ForceFieldAssetPreviewImpl.cpp
diff options
context:
space:
mode:
authorgit perforce import user <a@b>2016-10-25 12:29:14 -0600
committerSheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees>2016-10-25 18:56:37 -0500
commit3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch)
treefa6485c169e50d7415a651bf838f5bcd0fd3bfbd /APEX_1.4/module/forcefield/src/ForceFieldAssetPreviewImpl.cpp
downloadphysx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz
physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip
Initial commit:
PhysX 3.4.0 Update @ 21294896 APEX 1.4.0 Update @ 21275617 [CL 21300167]
Diffstat (limited to 'APEX_1.4/module/forcefield/src/ForceFieldAssetPreviewImpl.cpp')
-rw-r--r--APEX_1.4/module/forcefield/src/ForceFieldAssetPreviewImpl.cpp328
1 files changed, 328 insertions, 0 deletions
diff --git a/APEX_1.4/module/forcefield/src/ForceFieldAssetPreviewImpl.cpp b/APEX_1.4/module/forcefield/src/ForceFieldAssetPreviewImpl.cpp
new file mode 100644
index 00000000..fca99815
--- /dev/null
+++ b/APEX_1.4/module/forcefield/src/ForceFieldAssetPreviewImpl.cpp
@@ -0,0 +1,328 @@
+/*
+ * Copyright (c) 2008-2015, NVIDIA CORPORATION. All rights reserved.
+ *
+ * NVIDIA CORPORATION and its licensors retain all intellectual property
+ * and proprietary rights in and to this software, related documentation
+ * and any modifications thereto. Any use, reproduction, disclosure or
+ * distribution of this software and related documentation without an express
+ * license agreement from NVIDIA CORPORATION is strictly prohibited.
+ */
+
+
+#include "ApexDefs.h"
+#include "ForceFieldPreview.h"
+#include "ForceFieldAssetPreviewImpl.h"
+#include "ModulePerfScope.h"
+#include "ApexUsingNamespace.h"
+#include "PxProfiler.h"
+
+namespace nvidia
+{
+namespace forcefield
+{
+
+using namespace APEX_FORCEFIELD;
+
+#ifndef WITHOUT_DEBUG_VISUALIZE
+
+static const ForceFieldAssetPreviewImpl::point2 iconFrame[] =
+{
+ { -0.50f, -0.50f}, { +0.50f, -0.50f}, { +0.50f, +0.50f}, { -0.50f, 0.50f}, { -0.50f, -0.50f}
+};
+
+static const ForceFieldAssetPreviewImpl::point2 iconBombCircle[] =
+{
+ { +0.35000f, +0.00000f}, { +0.33807f, +0.09059f}, { +0.30311f, +0.17500f}, { +0.24749f, +0.24749f}, { +0.17500f, +0.30311f},
+ { +0.09059f, +0.33807f}, { +0.00000f, +0.35000f}, { -0.09059f, +0.33807f}, { -0.17500f, +0.30311f}, { -0.24749f, +0.24749f},
+ { -0.30311f, +0.17500f}, { -0.33807f, +0.09059f}, { -0.35000f, +0.00000f}, { -0.33807f, -0.09059f}, { -0.30311f, -0.17500f},
+ { -0.24749f, -0.24749f}, { -0.17500f, -0.30311f}, { -0.09059f, -0.33807f}, { +0.00000f, -0.35000f}, { +0.09059f, -0.33807f},
+ { +0.17500f, -0.30311f}, { +0.24749f, -0.24749f}, { +0.30311f, -0.17500f}, { +0.33807f, -0.09059f}, { +0.35000f, +0.00000f}
+};
+
+static const ForceFieldAssetPreviewImpl::point2 iconFuse[] =
+{
+ { +0.00000f, +0.35000f}, { +0.00000f, +0.36500f}, { +0.00500f, +0.38000f}, { +0.02500f, +0.41000f}, { +0.05000f, +0.41500f}
+};
+static const ForceFieldAssetPreviewImpl::point2 iconSpark1[] =
+{
+ { +0.0500f, +0.4300f}, { +0.0500f, +0.4550f}
+};
+static const ForceFieldAssetPreviewImpl::point2 iconSpark2[] =
+{
+ { +0.0650f, +0.4150f}, { +0.0900f, +0.4150f}
+};
+static const ForceFieldAssetPreviewImpl::point2 iconSpark3[] =
+{
+ { +0.0500f, +0.4000f}, { +0.0500f, +0.3700f}
+};
+static const ForceFieldAssetPreviewImpl::point2 iconSpark4[] =
+{
+ { +0.0350f, +0.4300f}, { +0.0200f, +0.4400f}
+};
+static const ForceFieldAssetPreviewImpl::point2 iconSpark5[] =
+{
+ { +0.0600f, +0.4300f}, { +0.0750f, +0.4450f}
+};
+static const ForceFieldAssetPreviewImpl::point2 iconSpark6[] =
+{
+ { +0.0600f, +0.4000f}, { +0.0750f, +0.3850f}
+};
+static const ForceFieldAssetPreviewImpl::point2 iconSpark7[] =
+{
+ { +0.0350f, +0.4000f}, { +0.0200f, +0.3850f}
+};
+
+#endif
+
+void ForceFieldAssetPreviewImpl::drawMultilinePoint2(const point2* pts, uint32_t numPoints, uint32_t color)
+{
+ uint32_t i;
+ PxVec3 p1, p2;
+
+ PX_ASSERT(numPoints > 1);
+ RENDER_DEBUG_IFACE(mApexRenderDebug)->pushRenderState();
+
+ for (i = 0; i < numPoints - 1; i++)
+ {
+ p1.x = -pts->x;
+ p1.y = 0.0f;
+ p1.z = pts->y;
+ pts++;
+ p2.x = -pts->x;
+ p2.y = 0.0f;
+ p2.z = pts->y;
+
+ RENDER_DEBUG_IFACE(mApexRenderDebug)->setCurrentColor(color);
+
+ if (mDrawWithCylinder)
+ {
+ //draw with cylinders - makes it look BOLD.
+ RENDER_DEBUG_IFACE(mApexRenderDebug)->addToCurrentState(RENDER_DEBUG::DebugRenderState::SolidShaded);
+ RENDER_DEBUG_IFACE(mApexRenderDebug)->debugCylinder(p1, p2, .01f);
+ RENDER_DEBUG_IFACE(mApexRenderDebug)->removeFromCurrentState(RENDER_DEBUG::DebugRenderState::SolidShaded);
+ }
+ else
+ {
+ RENDER_DEBUG_IFACE(mApexRenderDebug)->debugLine(p1, p2);
+ }
+ }
+ RENDER_DEBUG_IFACE(mApexRenderDebug)->popRenderState();
+}
+
+void ForceFieldAssetPreviewImpl::drawIcon(void)
+{
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
+ PX_PROFILE_ZONE("ForceFieldDrawIcon", GetInternalApexSDK()->getContextId());
+#ifndef WITHOUT_DEBUG_VISUALIZE
+ using RENDER_DEBUG::DebugColors;
+ drawMultilinePoint2(iconFrame, ARRAY_SIZE(iconFrame), RENDER_DEBUG_IFACE(mApexRenderDebug)->getDebugColor(DebugColors::White));
+ drawMultilinePoint2(iconBombCircle, ARRAY_SIZE(iconBombCircle), RENDER_DEBUG_IFACE(mApexRenderDebug)->getDebugColor(DebugColors::Black));
+ drawMultilinePoint2(iconFuse, ARRAY_SIZE(iconFuse), RENDER_DEBUG_IFACE(mApexRenderDebug)->getDebugColor(DebugColors::Black));
+ drawMultilinePoint2(iconSpark1, ARRAY_SIZE(iconSpark1), RENDER_DEBUG_IFACE(mApexRenderDebug)->getDebugColor(DebugColors::Red));
+ drawMultilinePoint2(iconSpark2, ARRAY_SIZE(iconSpark2), RENDER_DEBUG_IFACE(mApexRenderDebug)->getDebugColor(DebugColors::Red));
+ drawMultilinePoint2(iconSpark3, ARRAY_SIZE(iconSpark3), RENDER_DEBUG_IFACE(mApexRenderDebug)->getDebugColor(DebugColors::Red));
+ drawMultilinePoint2(iconSpark4, ARRAY_SIZE(iconSpark4), RENDER_DEBUG_IFACE(mApexRenderDebug)->getDebugColor(DebugColors::Red));
+ drawMultilinePoint2(iconSpark5, ARRAY_SIZE(iconSpark5), RENDER_DEBUG_IFACE(mApexRenderDebug)->getDebugColor(DebugColors::Red));
+ drawMultilinePoint2(iconSpark6, ARRAY_SIZE(iconSpark6), RENDER_DEBUG_IFACE(mApexRenderDebug)->getDebugColor(DebugColors::Red));
+ drawMultilinePoint2(iconSpark7, ARRAY_SIZE(iconSpark7), RENDER_DEBUG_IFACE(mApexRenderDebug)->getDebugColor(DebugColors::Red));
+#endif
+}
+
+void ForceFieldAssetPreviewImpl::drawForceFieldPreviewIcon(void)
+{
+#ifndef WITHOUT_DEBUG_VISUALIZE
+ if (!mApexRenderDebug)
+ {
+ return;
+ }
+
+ //asset preview init
+ if (mDrawGroupIconScaled == 0)
+ {
+ mDrawGroupIconScaled = (uint32_t)RENDER_DEBUG_IFACE(mApexRenderDebug)->beginDrawGroup(PxMat44(PxIdentity));
+ drawIcon();
+ RENDER_DEBUG_IFACE(mApexRenderDebug)->endDrawGroup();
+ }
+
+ toggleDrawPreview();
+ setDrawGroupsPoseScaled();
+#endif
+}
+
+void ForceFieldAssetPreviewImpl::setDrawGroupsPoseScaled()
+{
+ PxMat44 scaledPose; // scaling pose for the preview rendering items that need to be scaled
+ PxMat44 scaleMatrix;
+
+ //set scale
+ {
+ scaledPose = mPose;
+ scaleMatrix = PxMat44(PxVec4(mIconScale, 0.0f, 0.0f, 0.0f),
+ PxVec4(0.0f, mIconScale, 0.0f, 0.0f),
+ PxVec4(0.0f, 0.0f, mIconScale, 0.0f),
+ PxVec4(0.0f, 0.0f, 0.0f, 1.0f));
+ //scaledPose.t.y = 2.0f; - what it was supposed to do?
+ scaledPose = scaledPose * scaleMatrix;
+ }
+
+ RENDER_DEBUG_IFACE(mApexRenderDebug)->setDrawGroupPose((int32_t)mDrawGroupIconScaled, scaledPose);
+}
+
+
+void ForceFieldAssetPreviewImpl::toggleDrawPreview()
+{
+ if (mPreviewDetail & FORCEFIELD_DRAW_ICON)
+ {
+ RENDER_DEBUG_IFACE(mApexRenderDebug)->setDrawGroupVisible((int32_t)mDrawGroupIconScaled, true);
+ }
+ else
+ {
+ RENDER_DEBUG_IFACE(mApexRenderDebug)->setDrawGroupVisible((int32_t)mDrawGroupIconScaled, false);
+ }
+}
+
+
+void ForceFieldAssetPreviewImpl::setDetailLevel(uint32_t detail)
+{
+ if(detail != mPreviewDetail)
+ {
+ mPreviewDetail = detail;
+ toggleDrawPreview();
+ }
+};
+
+
+void ForceFieldAssetPreviewImpl::setIconScale(float scale)
+{
+ mIconScale = scale;
+ drawForceFieldPreview();
+};
+
+
+void ForceFieldAssetPreviewImpl::setPose(PxMat44 pose)
+{
+ WRITE_ZONE();
+ mPose = pose;
+ drawForceFieldPreview();
+};
+
+
+void ForceFieldAssetPreviewImpl::drawForceFieldBoundaries(void)
+{
+}
+
+void ForceFieldAssetPreviewImpl::drawForceFieldWithCylinder()
+{
+}
+
+void ForceFieldAssetPreviewImpl::drawForceFieldPreview(void)
+{
+ PX_PROFILE_ZONE("ForceFieldDrawForceFieldPreview", GetInternalApexSDK()->getContextId());
+ mDrawWithCylinder = true;
+
+ if(mPreviewDetail & FORCEFIELD_DRAW_ICON)
+ {
+ drawForceFieldPreviewIcon();
+ }
+
+ if(mPreviewDetail & FORCEFIELD_DRAW_BOUNDARIES)
+ {
+ drawForceFieldBoundaries();
+ }
+
+ if(mPreviewDetail & FORCEFIELD_DRAW_WITH_CYLINDERS)
+ {
+ drawForceFieldWithCylinder();
+ }
+}
+
+ForceFieldAssetPreviewImpl::~ForceFieldAssetPreviewImpl(void)
+{
+}
+
+void ForceFieldAssetPreviewImpl::setPose(const PxMat44& pose)
+{
+ WRITE_ZONE();
+ mPose = pose;
+ setDrawGroupsPoseScaled();
+}
+
+const PxMat44 ForceFieldAssetPreviewImpl::getPose() const
+{
+ READ_ZONE();
+ return mPose;
+}
+
+// from RenderDataProvider
+void ForceFieldAssetPreviewImpl::lockRenderResources(void)
+{
+ ApexRenderable::renderDataLock();
+}
+
+void ForceFieldAssetPreviewImpl::unlockRenderResources(void)
+{
+ ApexRenderable::renderDataUnLock();
+}
+
+void ForceFieldAssetPreviewImpl::updateRenderResources(bool /*rewriteBuffers*/, void* /*userRenderData*/)
+{
+ if (mApexRenderDebug)
+ {
+ mApexRenderDebug->updateRenderResources();
+ }
+}
+
+// from Renderable.h
+void ForceFieldAssetPreviewImpl::dispatchRenderResources(UserRenderer& renderer)
+{
+ if (mApexRenderDebug)
+ {
+ mApexRenderDebug->dispatchRenderResources(renderer);
+ }
+}
+
+PxBounds3 ForceFieldAssetPreviewImpl::getBounds(void) const
+{
+ if (mApexRenderDebug)
+ {
+ return mApexRenderDebug->getBounds();
+ }
+ else
+ {
+ PxBounds3 b;
+ b.setEmpty();
+ return b;
+ }
+}
+
+void ForceFieldAssetPreviewImpl::destroy(void)
+{
+ delete this;
+}
+
+void ForceFieldAssetPreviewImpl::release(void)
+{
+ if (mInRelease)
+ {
+ return;
+ }
+ mAsset->releaseForceFieldPreview(*this);
+}
+
+ForceFieldAssetPreviewImpl::ForceFieldAssetPreviewImpl(const ForceFieldPreviewDesc& PreviewDesc, ApexSDK* myApexSDK, ForceFieldAssetImpl* myForceFieldAsset, AssetPreviewScene* previewScene) :
+ mPose(PreviewDesc.mPose),
+ mApexSDK(myApexSDK),
+ mAsset(myForceFieldAsset),
+ mPreviewScene(previewScene),
+ mDrawGroupIconScaled(0),
+ mDrawGroupCylinder(0),
+ mPreviewDetail(PreviewDesc.mPreviewDetail),
+ mIconScale(1.0f),
+ mApexRenderDebug(0)
+{
+ drawForceFieldPreview();
+};
+
+}
+} // end namespace nvidia
+