Showing the changes to libraries/script-engine/src/ScriptValueUtils.cpp (1 of 4 files). Show all
Unified · Split
| @@ -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 | ||
| 43 | bool isListOfStrings(const ScriptValue& arg) { | 38 | bool 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 | ||
| 128 | ScriptValue qVector3DToScriptValue(ScriptEngine* engine, const QVector3D& qVector3D) { | 119 | ScriptValue 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 | ||
| 137 | bool qVector3DFromScriptValue(const ScriptValue& object, QVector3D& qVector3D) { | 124 | bool 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 | ||
| 194 | ScriptValue vec3ToScriptValue(ScriptEngine* engine, const glm::vec3& vec3) { | 182 | ScriptValue 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 | ||
| 219 | ScriptValue vec3ColorToScriptValue(ScriptEngine* engine, const glm::vec3& vec3) { | 208 | ScriptValue 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 conversions | 233 | // V8TODO: add similar checks to rest of the conversions |
| 234 | #ifndef CONVERSIONS_OPTIMIZED_FOR_V8 | ||
| 245 | bool vec3FromScriptValue(const ScriptValue& object, glm::vec3& vec3) { | 235 | bool 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 | ||
| 305 | ScriptValue u8vec3ToScriptValue(ScriptEngine* engine, const glm::u8vec3& vec3) { | 296 | ScriptValue 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 | |||
| 470 | ScriptValue qVectorVec3ToScriptValue(ScriptEngine* engine, const QVector<glm::vec3>& vector) { | 461 | ScriptValue 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 | ||
| 795 | ScriptValue pickRayToScriptValue(ScriptEngine* engine, const PickRay& pickRay) { | 782 | ScriptValue 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 | ||