mirror of
https://github.com/Armored-Dragon/overte.git
synced 2025-03-11 16:13:16 +01:00
Add qByteArray to script value conversion
This commit is contained in:
parent
634dc64f8f
commit
ef4c99b027
3 changed files with 50 additions and 0 deletions
|
@ -79,6 +79,7 @@ void registerMetaTypes(ScriptEngine* engine) {
|
|||
scriptRegisterMetaType<QUrl, qURLToScriptValue, qURLFromScriptValue>(engine);
|
||||
scriptRegisterMetaType<QColor, qColorToScriptValue, qColorFromScriptValue>(engine);
|
||||
scriptRegisterMetaType<QTimer*, qTimerToScriptValue, qTimerFromScriptValue>(engine, "QTimer*");
|
||||
scriptRegisterMetaType<QByteArray, qBytearrayToScriptValue, qBytearrayFromScriptValue>(engine, "QByteArray");
|
||||
|
||||
scriptRegisterMetaType<PickRay, pickRayToScriptValue, pickRayFromScriptValue>(engine);
|
||||
scriptRegisterMetaType<Collision, collisionToScriptValue, collisionFromScriptValue>(engine);
|
||||
|
|
|
@ -19,6 +19,48 @@
|
|||
|
||||
#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
|
||||
|
||||
ScriptValue qBytearrayToScriptValue(ScriptEngine* engine, const QByteArray &qByteArray) {
|
||||
auto engineV8 = dynamic_cast<ScriptEngineV8*>(engine);
|
||||
Q_ASSERT(engineV8);
|
||||
auto isolate = engineV8->getIsolate();
|
||||
v8::Locker locker(isolate);
|
||||
v8::Isolate::Scope isolateScope(isolate);
|
||||
v8::HandleScope handleScope(isolate);
|
||||
auto context = engineV8->getContext();
|
||||
v8::Context::Scope contextScope(context);
|
||||
v8::Local<v8::ArrayBuffer> arrayBuffer = v8::ArrayBuffer::New(isolate, qByteArray.size());
|
||||
memcpy(arrayBuffer->GetBackingStore()->Data(), qByteArray.data(), qByteArray.size());
|
||||
v8::Local<v8::Value> arrayBufferValue = v8::Local<v8::Value>::Cast(arrayBuffer);
|
||||
|
||||
return {new ScriptValueV8Wrapper(engineV8, V8ScriptValue(engineV8, arrayBufferValue))};
|
||||
}
|
||||
|
||||
bool qBytearrayFromScriptValue(const ScriptValue& object, QByteArray &qByteArray) {
|
||||
ScriptValueV8Wrapper *proxy = ScriptValueV8Wrapper::unwrap(object);
|
||||
if (!proxy) {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto engineV8 = proxy->getV8Engine();
|
||||
|
||||
auto isolate = engineV8->getIsolate();
|
||||
v8::Locker locker(isolate);
|
||||
v8::Isolate::Scope isolateScope(isolate);
|
||||
v8::HandleScope handleScope(isolate);
|
||||
auto context = engineV8->getContext();
|
||||
v8::Context::Scope contextScope(context);
|
||||
V8ScriptValue v8ScriptValue = proxy->toV8Value();
|
||||
|
||||
v8::Local<v8::Value> v8Value = v8ScriptValue.get();
|
||||
if(!v8Value->IsArrayBuffer()) {
|
||||
return false;
|
||||
}
|
||||
v8::Local<v8::ArrayBuffer> arrayBuffer;
|
||||
qByteArray.resize(arrayBuffer->ByteLength());
|
||||
memcpy(qByteArray.data(), arrayBuffer->Data(), arrayBuffer->ByteLength());
|
||||
return true;
|
||||
}
|
||||
|
||||
ScriptValue vec3ToScriptValue(ScriptEngine* engine, const glm::vec3& vec3) {
|
||||
ScriptValue value = engine->newObject();
|
||||
|
||||
|
@ -98,6 +140,9 @@ ScriptValue vec3ToScriptValue(ScriptEngine* engine, const glm::vec3& vec3) {
|
|||
|
||||
bool vec3FromScriptValue(const ScriptValue& object, glm::vec3& vec3) {
|
||||
ScriptValueV8Wrapper *proxy = ScriptValueV8Wrapper::unwrap(object);
|
||||
if (!proxy) {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto engineV8 = proxy->getV8Engine();
|
||||
|
||||
|
|
|
@ -24,6 +24,10 @@
|
|||
#define CONVERSIONS_OPTIMIZED_FOR_V8
|
||||
|
||||
#ifdef CONVERSIONS_OPTIMIZED_FOR_V8
|
||||
ScriptValue qBytearrayToScriptValue(ScriptEngine* engine, const QByteArray &qByteArray);
|
||||
|
||||
bool qBytearrayFromScriptValue(const ScriptValue& object, QByteArray &qByteArray);
|
||||
|
||||
ScriptValue vec3ToScriptValue(ScriptEngine* engine, const glm::vec3& vec3);
|
||||
|
||||
bool vec3FromScriptValue(const ScriptValue& object, glm::vec3& vec3);
|
||||
|
|
Loading…
Reference in a new issue