History

Optimization of conversion of vec3 to/from script value

ksuprynowicz committed 3 years ago

Commit e114d861 parent b0e030a5 files · +249 −2Browse files

Showing the changes to libraries/script-engine/src/ScriptValueUtils.cpp (1 of 5 files). Show all

Unified · Split

libraries/script-engine/src/ScriptValueUtils.cpp+32−0
@@ -34,6 +34,12 @@ · 33 unmodified lines
3434 #include "ScriptValueIterator.h"
3535 #include "ScriptEngineLogging.h"
3636
37+#define CONVERSIONS_OPTIMIZED_FOR_V8
38+
39+#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
40+#include "v8/FastScriptValueUtils.h"
41+#endif
42+
3743 bool isListOfStrings(const ScriptValue& arg) {
3844 if (!arg.isArray()) {
3945 return false;
@@ -59,7 +65,11 @@ void registerMetaTypes(ScriptEngine* engine) { · 19 unmodified lines
5965 scriptRegisterMetaType<QVector3D, qVector3DToScriptValue, qVector3DFromScriptValue>(engine);
6066
6167 scriptRegisterMetaType<glm::vec2, vec2ToScriptValue, vec2FromScriptValue>(engine);
68+#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
69+ scriptRegisterMetaType<glm::vec3, vec3ToScriptValueFast, vec3FromScriptValueFast>(engine);
70+#else
6271 scriptRegisterMetaType<glm::vec3, vec3ToScriptValue, vec3FromScriptValue>(engine);
72+#endif
6373 scriptRegisterMetaType<glm::u8vec3, u8vec3ToScriptValue, u8vec3FromScriptValue>(engine);
6474 scriptRegisterMetaType<glm::vec4, vec4toScriptValue, vec4FromScriptValue>(engine);
6575 scriptRegisterMetaType<glm::quat, quatToScriptValue, quatFromScriptValue>(engine);
@@ -117,7 +127,11 @@ bool qVector2DFromScriptValue(const ScriptValue& object, QVector2D& qVector2D) { · 51 unmodified lines
117127
118128 ScriptValue qVector3DToScriptValue(ScriptEngine* engine, const QVector3D& qVector3D) {
119129 glm::vec3 vec3(qVector3D.x(), qVector3D.y(), qVector3D.z());
130+#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
131+ return vec3ToScriptValueFast(engine, vec3);
132+#else
120133 return vec3ToScriptValue(engine, vec3);
134+#endif
121135 }
122136
123137 bool qVector3DFromScriptValue(const ScriptValue& object, QVector3D& qVector3D) {
@@ -456,7 +470,11 @@ ScriptValue qVectorVec3ColorToScriptValue(ScriptEngine* engine, const QVector<gl · 332 unmodified lines
456470 ScriptValue qVectorVec3ToScriptValue(ScriptEngine* engine, const QVector<glm::vec3>& vector) {
457471 ScriptValue array = engine->newArray();
458472 for (int i = 0; i < vector.size(); i++) {
473+#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
474+ array.setProperty(i, vec3ToScriptValueFast(engine, vector.at(i)));
475+#else
459476 array.setProperty(i, vec3ToScriptValue(engine, vector.at(i)));
477+#endif
460478 }
461479 return array;
462480 }
@@ -776,9 +794,17 @@ bool qURLFromScriptValue(const ScriptValue& object, QUrl& url) { · 313 unmodified lines
776794
777795 ScriptValue pickRayToScriptValue(ScriptEngine* engine, const PickRay& pickRay) {
778796 ScriptValue obj = engine->newObject();
797+#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
798+ ScriptValue origin = vec3ToScriptValueFast(engine, pickRay.origin);
799+#else
779800 ScriptValue origin = vec3ToScriptValue(engine, pickRay.origin);
801+#endif
780802 obj.setProperty("origin", origin);
803+#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
804+ ScriptValue direction = vec3ToScriptValueFast(engine, pickRay.direction);
805+#else
781806 ScriptValue direction = vec3ToScriptValue(engine, pickRay.direction);
807+#endif
782808 obj.setProperty("direction", direction);
783809 return obj;
784810 }
@@ -824,9 +850,15 @@ ScriptValue collisionToScriptValue(ScriptEngine* engine, const Collision& collis · 39 unmodified lines
824850 obj.setProperty("type", collision.type);
825851 obj.setProperty("idA", quuidToScriptValue(engine, collision.idA));
826852 obj.setProperty("idB", quuidToScriptValue(engine, collision.idB));
853+#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
854+ obj.setProperty("penetration", vec3ToScriptValueFast(engine, collision.penetration));
855+ obj.setProperty("contactPoint", vec3ToScriptValueFast(engine, collision.contactPoint));
856+ obj.setProperty("velocityChange", vec3ToScriptValueFast(engine, collision.velocityChange));
857+#else
827858 obj.setProperty("penetration", vec3ToScriptValue(engine, collision.penetration));
828859 obj.setProperty("contactPoint", vec3ToScriptValue(engine, collision.contactPoint));
829860 obj.setProperty("velocityChange", vec3ToScriptValue(engine, collision.velocityChange));
861+#endif
830862 return obj;
831863 }
832864