History

vec3ToScriptValue optimizations

ksuprynowicz committed 3 years ago

Commit 8b9cd841 parent 43939294 files · +77 −47Browse files

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

Unified · Split

libraries/script-engine/src/ScriptValueUtils.cpp+4−31
@@ -33,12 +33,7 @@ · 32 unmodified lines
33#include "ScriptEngineCast.h"33#include "ScriptEngineCast.h"
34#include "ScriptValueIterator.h"34#include "ScriptValueIterator.h"
35#include "ScriptEngineLogging.h"35#include "ScriptEngineLogging.h"
36
37#define CONVERSIONS_OPTIMIZED_FOR_V8
38
39#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
40#include "v8/FastScriptValueUtils.h"36#include "v8/FastScriptValueUtils.h"
41#endif
42 37
43bool isListOfStrings(const ScriptValue& arg) {38bool isListOfStrings(const ScriptValue& arg) {
44 if (!arg.isArray()) {39 if (!arg.isArray()) {
@@ -65,11 +60,7 @@ void registerMetaTypes(ScriptEngine* engine) { · 20 unmodified lines
65 scriptRegisterMetaType<QVector3D, qVector3DToScriptValue, qVector3DFromScriptValue>(engine);60 scriptRegisterMetaType<QVector3D, qVector3DToScriptValue, qVector3DFromScriptValue>(engine);
66 61
67 scriptRegisterMetaType<glm::vec2, vec2ToScriptValue, vec2FromScriptValue>(engine);62 scriptRegisterMetaType<glm::vec2, vec2ToScriptValue, vec2FromScriptValue>(engine);
68#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
69 scriptRegisterMetaType<glm::vec3, vec3ToScriptValueFast, vec3FromScriptValueFast>(engine);
70#else
71 scriptRegisterMetaType<glm::vec3, vec3ToScriptValue, vec3FromScriptValue>(engine);63 scriptRegisterMetaType<glm::vec3, vec3ToScriptValue, vec3FromScriptValue>(engine);
72#endif
73 scriptRegisterMetaType<glm::u8vec3, u8vec3ToScriptValue, u8vec3FromScriptValue>(engine);64 scriptRegisterMetaType<glm::u8vec3, u8vec3ToScriptValue, u8vec3FromScriptValue>(engine);
74 scriptRegisterMetaType<glm::vec4, vec4toScriptValue, vec4FromScriptValue>(engine);65 scriptRegisterMetaType<glm::vec4, vec4toScriptValue, vec4FromScriptValue>(engine);
75 scriptRegisterMetaType<glm::quat, quatToScriptValue, quatFromScriptValue>(engine);66 scriptRegisterMetaType<glm::quat, quatToScriptValue, quatFromScriptValue>(engine);
@@ -127,11 +118,7 @@ bool qVector2DFromScriptValue(const ScriptValue& object, QVector2D& qVector2D) { · 51 unmodified lines
127 118
128ScriptValue qVector3DToScriptValue(ScriptEngine* engine, const QVector3D& qVector3D) {119ScriptValue qVector3DToScriptValue(ScriptEngine* engine, const QVector3D& qVector3D) {
129 glm::vec3 vec3(qVector3D.x(), qVector3D.y(), qVector3D.z());120 glm::vec3 vec3(qVector3D.x(), qVector3D.y(), qVector3D.z());
130#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
131 return vec3ToScriptValueFast(engine, vec3);
132#else
133 return vec3ToScriptValue(engine, vec3);121 return vec3ToScriptValue(engine, vec3);
134#endif
135}122}
136 123
137bool qVector3DFromScriptValue(const ScriptValue& object, QVector3D& qVector3D) {124bool qVector3DFromScriptValue(const ScriptValue& object, QVector3D& qVector3D) {
@@ -191,6 +178,7 @@ bool vec2FromScriptValue(const ScriptValue& object, glm::vec2& vec2) { · 53 unmodified lines
191 return true;178 return true;
192}179}
193 180
181#ifndef CONVERSIONS_OPTIMIZED_FOR_V8
194ScriptValue vec3ToScriptValue(ScriptEngine* engine, const glm::vec3& vec3) {182ScriptValue vec3ToScriptValue(ScriptEngine* engine, const glm::vec3& vec3) {
195 auto prototype = engine->globalObject().property("__hifi_vec3__");183 auto prototype = engine->globalObject().property("__hifi_vec3__");
196 if (!prototype.hasProperty("defined") || !prototype.property("defined").toBool()) {184 if (!prototype.hasProperty("defined") || !prototype.property("defined").toBool()) {
@@ -215,6 +203,7 @@ ScriptValue vec3ToScriptValue(ScriptEngine* engine, const glm::vec3& vec3) { · 18 unmodified lines
215 value.setPrototype(prototype);203 value.setPrototype(prototype);
216 return value;204 return value;
217}205}
206#endif
218 207
219ScriptValue vec3ColorToScriptValue(ScriptEngine* engine, const glm::vec3& vec3) {208ScriptValue vec3ColorToScriptValue(ScriptEngine* engine, const glm::vec3& vec3) {
220 auto prototype = engine->globalObject().property("__hifi_vec3_color__");209 auto prototype = engine->globalObject().property("__hifi_vec3_color__");
@@ -242,6 +231,7 @@ ScriptValue vec3ColorToScriptValue(ScriptEngine* engine, const glm::vec3& vec3) · 21 unmodified lines
242}231}
243 232
244// V8TODO: add similar checks to rest of the conversions233// V8TODO: add similar checks to rest of the conversions
234#ifndef CONVERSIONS_OPTIMIZED_FOR_V8
245bool vec3FromScriptValue(const ScriptValue& object, glm::vec3& vec3) {235bool vec3FromScriptValue(const ScriptValue& object, glm::vec3& vec3) {
246 if (object.isNumber()) {236 if (object.isNumber()) {
247 vec3 = glm::vec3(object.toVariant().toFloat());237 vec3 = glm::vec3(object.toVariant().toFloat());
@@ -301,6 +291,7 @@ bool vec3FromScriptValue(const ScriptValue& object, glm::vec3& vec3) { · 53 unmodified lines
301 }291 }
302 return true;292 return true;
303}293}
294#endif
304 295
305ScriptValue u8vec3ToScriptValue(ScriptEngine* engine, const glm::u8vec3& vec3) {296ScriptValue u8vec3ToScriptValue(ScriptEngine* engine, const glm::u8vec3& vec3) {
306 auto prototype = engine->globalObject().property("__hifi_u8vec3__");297 auto prototype = engine->globalObject().property("__hifi_u8vec3__");
@@ -470,11 +461,7 @@ ScriptValue qVectorVec3ColorToScriptValue(ScriptEngine* engine, const QVector<gl · 163 unmodified lines
470ScriptValue qVectorVec3ToScriptValue(ScriptEngine* engine, const QVector<glm::vec3>& vector) {461ScriptValue qVectorVec3ToScriptValue(ScriptEngine* engine, const QVector<glm::vec3>& vector) {
471 ScriptValue array = engine->newArray();462 ScriptValue array = engine->newArray();
472 for (int i = 0; i < vector.size(); i++) {463 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
476 array.setProperty(i, vec3ToScriptValue(engine, vector.at(i)));464 array.setProperty(i, vec3ToScriptValue(engine, vector.at(i)));
477#endif
478 }465 }
479 return array;466 return array;
480}467}
@@ -794,17 +781,9 @@ bool qURLFromScriptValue(const ScriptValue& object, QUrl& url) { · 313 unmodified lines
794 781
795ScriptValue pickRayToScriptValue(ScriptEngine* engine, const PickRay& pickRay) {782ScriptValue pickRayToScriptValue(ScriptEngine* engine, const PickRay& pickRay) {
796 ScriptValue obj = engine->newObject();783 ScriptValue obj = engine->newObject();
797#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
798 ScriptValue origin = vec3ToScriptValueFast(engine, pickRay.origin);
799#else
800 ScriptValue origin = vec3ToScriptValue(engine, pickRay.origin);784 ScriptValue origin = vec3ToScriptValue(engine, pickRay.origin);
801#endif
802 obj.setProperty("origin", origin);785 obj.setProperty("origin", origin);
803#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
804 ScriptValue direction = vec3ToScriptValueFast(engine, pickRay.direction);
805#else
806 ScriptValue direction = vec3ToScriptValue(engine, pickRay.direction);786 ScriptValue direction = vec3ToScriptValue(engine, pickRay.direction);
807#endif
808 obj.setProperty("direction", direction);787 obj.setProperty("direction", direction);
809 return obj;788 return obj;
810}789}
@@ -850,15 +829,9 @@ ScriptValue collisionToScriptValue(ScriptEngine* engine, const Collision& collis · 39 unmodified lines
850 obj.setProperty("type", collision.type);829 obj.setProperty("type", collision.type);
851 obj.setProperty("idA", quuidToScriptValue(engine, collision.idA));830 obj.setProperty("idA", quuidToScriptValue(engine, collision.idA));
852 obj.setProperty("idB", quuidToScriptValue(engine, collision.idB));831 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
858 obj.setProperty("penetration", vec3ToScriptValue(engine, collision.penetration));832 obj.setProperty("penetration", vec3ToScriptValue(engine, collision.penetration));
859 obj.setProperty("contactPoint", vec3ToScriptValue(engine, collision.contactPoint));833 obj.setProperty("contactPoint", vec3ToScriptValue(engine, collision.contactPoint));
860 obj.setProperty("velocityChange", vec3ToScriptValue(engine, collision.velocityChange));834 obj.setProperty("velocityChange", vec3ToScriptValue(engine, collision.velocityChange));
861#endif
862 return obj;835 return obj;
863}836}
864 837