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
34#include "ScriptValueIterator.h"34#include "ScriptValueIterator.h"
35#include "ScriptEngineLogging.h"35#include "ScriptEngineLogging.h"
36 36
37#define CONVERSIONS_OPTIMIZED_FOR_V8
38
39#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
40#include "v8/FastScriptValueUtils.h"
41#endif
42
37bool isListOfStrings(const ScriptValue& arg) {43bool isListOfStrings(const ScriptValue& arg) {
38 if (!arg.isArray()) {44 if (!arg.isArray()) {
39 return false;45 return false;
@@ -59,7 +65,11 @@ void registerMetaTypes(ScriptEngine* engine) { · 19 unmodified lines
59 scriptRegisterMetaType<QVector3D, qVector3DToScriptValue, qVector3DFromScriptValue>(engine);65 scriptRegisterMetaType<QVector3D, qVector3DToScriptValue, qVector3DFromScriptValue>(engine);
60 66
61 scriptRegisterMetaType<glm::vec2, vec2ToScriptValue, vec2FromScriptValue>(engine);67 scriptRegisterMetaType<glm::vec2, vec2ToScriptValue, vec2FromScriptValue>(engine);
68#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
69 scriptRegisterMetaType<glm::vec3, vec3ToScriptValueFast, vec3FromScriptValueFast>(engine);
70#else
62 scriptRegisterMetaType<glm::vec3, vec3ToScriptValue, vec3FromScriptValue>(engine);71 scriptRegisterMetaType<glm::vec3, vec3ToScriptValue, vec3FromScriptValue>(engine);
72#endif
63 scriptRegisterMetaType<glm::u8vec3, u8vec3ToScriptValue, u8vec3FromScriptValue>(engine);73 scriptRegisterMetaType<glm::u8vec3, u8vec3ToScriptValue, u8vec3FromScriptValue>(engine);
64 scriptRegisterMetaType<glm::vec4, vec4toScriptValue, vec4FromScriptValue>(engine);74 scriptRegisterMetaType<glm::vec4, vec4toScriptValue, vec4FromScriptValue>(engine);
65 scriptRegisterMetaType<glm::quat, quatToScriptValue, quatFromScriptValue>(engine);75 scriptRegisterMetaType<glm::quat, quatToScriptValue, quatFromScriptValue>(engine);
@@ -117,7 +127,11 @@ bool qVector2DFromScriptValue(const ScriptValue& object, QVector2D& qVector2D) { · 51 unmodified lines
117 127
118ScriptValue qVector3DToScriptValue(ScriptEngine* engine, const QVector3D& qVector3D) {128ScriptValue qVector3DToScriptValue(ScriptEngine* engine, const QVector3D& qVector3D) {
119 glm::vec3 vec3(qVector3D.x(), qVector3D.y(), qVector3D.z());129 glm::vec3 vec3(qVector3D.x(), qVector3D.y(), qVector3D.z());
130#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
131 return vec3ToScriptValueFast(engine, vec3);
132#else
120 return vec3ToScriptValue(engine, vec3);133 return vec3ToScriptValue(engine, vec3);
134#endif
121}135}
122 136
123bool qVector3DFromScriptValue(const ScriptValue& object, QVector3D& qVector3D) {137bool qVector3DFromScriptValue(const ScriptValue& object, QVector3D& qVector3D) {
@@ -456,7 +470,11 @@ ScriptValue qVectorVec3ColorToScriptValue(ScriptEngine* engine, const QVector<gl · 332 unmodified lines
456ScriptValue qVectorVec3ToScriptValue(ScriptEngine* engine, const QVector<glm::vec3>& vector) {470ScriptValue qVectorVec3ToScriptValue(ScriptEngine* engine, const QVector<glm::vec3>& vector) {
457 ScriptValue array = engine->newArray();471 ScriptValue array = engine->newArray();
458 for (int i = 0; i < vector.size(); i++) {472 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
459 array.setProperty(i, vec3ToScriptValue(engine, vector.at(i)));476 array.setProperty(i, vec3ToScriptValue(engine, vector.at(i)));
477#endif
460 }478 }
461 return array;479 return array;
462}480}
@@ -776,9 +794,17 @@ bool qURLFromScriptValue(const ScriptValue& object, QUrl& url) { · 313 unmodified lines
776 794
777ScriptValue pickRayToScriptValue(ScriptEngine* engine, const PickRay& pickRay) {795ScriptValue pickRayToScriptValue(ScriptEngine* engine, const PickRay& pickRay) {
778 ScriptValue obj = engine->newObject();796 ScriptValue obj = engine->newObject();
797#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
798 ScriptValue origin = vec3ToScriptValueFast(engine, pickRay.origin);
799#else
779 ScriptValue origin = vec3ToScriptValue(engine, pickRay.origin);800 ScriptValue origin = vec3ToScriptValue(engine, pickRay.origin);
801#endif
780 obj.setProperty("origin", origin);802 obj.setProperty("origin", origin);
803#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
804 ScriptValue direction = vec3ToScriptValueFast(engine, pickRay.direction);
805#else
781 ScriptValue direction = vec3ToScriptValue(engine, pickRay.direction);806 ScriptValue direction = vec3ToScriptValue(engine, pickRay.direction);
807#endif
782 obj.setProperty("direction", direction);808 obj.setProperty("direction", direction);
783 return obj;809 return obj;
784}810}
@@ -824,9 +850,15 @@ ScriptValue collisionToScriptValue(ScriptEngine* engine, const Collision& collis · 39 unmodified lines
824 obj.setProperty("type", collision.type);850 obj.setProperty("type", collision.type);
825 obj.setProperty("idA", quuidToScriptValue(engine, collision.idA));851 obj.setProperty("idA", quuidToScriptValue(engine, collision.idA));
826 obj.setProperty("idB", quuidToScriptValue(engine, collision.idB));852 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
827 obj.setProperty("penetration", vec3ToScriptValue(engine, collision.penetration));858 obj.setProperty("penetration", vec3ToScriptValue(engine, collision.penetration));
828 obj.setProperty("contactPoint", vec3ToScriptValue(engine, collision.contactPoint));859 obj.setProperty("contactPoint", vec3ToScriptValue(engine, collision.contactPoint));
829 obj.setProperty("velocityChange", vec3ToScriptValue(engine, collision.velocityChange));860 obj.setProperty("velocityChange", vec3ToScriptValue(engine, collision.velocityChange));
861#endif
830 return obj;862 return obj;
831}863}
832 864