mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 19:52:26 +02:00
More work on animation loading.
This commit is contained in:
parent
a2dc58f7f9
commit
38c0e99cbe
7 changed files with 131 additions and 4 deletions
|
@ -28,6 +28,7 @@ link_hifi_library(audio ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
link_hifi_library(avatars ${TARGET_NAME} "${ROOT_DIR}")
|
link_hifi_library(avatars ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
link_hifi_library(octree ${TARGET_NAME} "${ROOT_DIR}")
|
link_hifi_library(octree ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
link_hifi_library(voxels ${TARGET_NAME} "${ROOT_DIR}")
|
link_hifi_library(voxels ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
|
link_hifi_library(fbx ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
link_hifi_library(particles ${TARGET_NAME} "${ROOT_DIR}")
|
link_hifi_library(particles ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
link_hifi_library(metavoxels ${TARGET_NAME} "${ROOT_DIR}")
|
link_hifi_library(metavoxels ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
link_hifi_library(networking ${TARGET_NAME} "${ROOT_DIR}")
|
link_hifi_library(networking ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
|
@ -51,4 +52,4 @@ IF (WIN32)
|
||||||
target_link_libraries(${TARGET_NAME} Winmm Ws2_32)
|
target_link_libraries(${TARGET_NAME} Winmm Ws2_32)
|
||||||
ENDIF(WIN32)
|
ENDIF(WIN32)
|
||||||
|
|
||||||
target_link_libraries(${TARGET_NAME} Qt5::Network Qt5::Widgets Qt5::Script "${GNUTLS_LIBRARY}")
|
target_link_libraries(${TARGET_NAME} Qt5::Network Qt5::Widgets Qt5::Script "${GNUTLS_LIBRARY}")
|
||||||
|
|
|
@ -23,6 +23,7 @@ include_glm(${TARGET_NAME} "${ROOT_DIR}")
|
||||||
include(${MACRO_DIR}/LinkHifiLibrary.cmake)
|
include(${MACRO_DIR}/LinkHifiLibrary.cmake)
|
||||||
link_hifi_library(shared ${TARGET_NAME} "${ROOT_DIR}")
|
link_hifi_library(shared ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
link_hifi_library(octree ${TARGET_NAME} "${ROOT_DIR}")
|
link_hifi_library(octree ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
|
link_hifi_library(fbx ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
link_hifi_library(networking ${TARGET_NAME} "${ROOT_DIR}")
|
link_hifi_library(networking ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
|
|
||||||
# link ZLIB and GnuTLS
|
# link ZLIB and GnuTLS
|
||||||
|
@ -35,4 +36,4 @@ if (WIN32)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
include_directories(SYSTEM "${ZLIB_INCLUDE_DIRS}" "${GNUTLS_INCLUDE_DIR}")
|
include_directories(SYSTEM "${ZLIB_INCLUDE_DIRS}" "${GNUTLS_INCLUDE_DIR}")
|
||||||
target_link_libraries(${TARGET_NAME} "${ZLIB_LIBRARIES}" Qt5::Widgets "${GNUTLS_LIBRARY}")
|
target_link_libraries(${TARGET_NAME} "${ZLIB_LIBRARIES}" Qt5::Widgets "${GNUTLS_LIBRARY}")
|
||||||
|
|
|
@ -24,6 +24,7 @@ include(${MACRO_DIR}/LinkHifiLibrary.cmake)
|
||||||
link_hifi_library(shared ${TARGET_NAME} "${ROOT_DIR}")
|
link_hifi_library(shared ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
link_hifi_library(octree ${TARGET_NAME} "${ROOT_DIR}")
|
link_hifi_library(octree ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
link_hifi_library(voxels ${TARGET_NAME} "${ROOT_DIR}")
|
link_hifi_library(voxels ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
|
link_hifi_library(fbx ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
link_hifi_library(particles ${TARGET_NAME} "${ROOT_DIR}")
|
link_hifi_library(particles ${TARGET_NAME} "${ROOT_DIR}")
|
||||||
|
|
||||||
# link ZLIB
|
# link ZLIB
|
||||||
|
@ -36,4 +37,4 @@ if (WIN32)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
include_directories(SYSTEM "${ZLIB_INCLUDE_DIRS}" "${GNUTLS_INCLUDE_DIR}")
|
include_directories(SYSTEM "${ZLIB_INCLUDE_DIRS}" "${GNUTLS_INCLUDE_DIR}")
|
||||||
target_link_libraries(${TARGET_NAME} "${ZLIB_LIBRARIES}" "${GNUTLS_LIBRARY}" Qt5::Widgets)
|
target_link_libraries(${TARGET_NAME} "${ZLIB_LIBRARIES}" "${GNUTLS_LIBRARY}" Qt5::Widgets)
|
||||||
|
|
65
libraries/script-engine/src/AnimationCache.cpp
Normal file
65
libraries/script-engine/src/AnimationCache.cpp
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
//
|
||||||
|
// AnimationCache.cpp
|
||||||
|
// libraries/script-engine/src/
|
||||||
|
//
|
||||||
|
// Created by Andrzej Kapolka on 4/14/14.
|
||||||
|
// Copyright (c) 2014 High Fidelity, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <QRunnable>
|
||||||
|
#include <QThreadPool>
|
||||||
|
|
||||||
|
#include "AnimationCache.h"
|
||||||
|
|
||||||
|
QSharedPointer<Animation> AnimationCache::getAnimation(const QUrl& url) {
|
||||||
|
return getResource(url).staticCast<Animation>();
|
||||||
|
}
|
||||||
|
|
||||||
|
QSharedPointer<Resource> AnimationCache::createResource(const QUrl& url, const QSharedPointer<Resource>& fallback,
|
||||||
|
bool delayLoad, const void* extra) {
|
||||||
|
return QSharedPointer<Resource>(new Animation(url), &Resource::allReferencesCleared);
|
||||||
|
}
|
||||||
|
|
||||||
|
Animation::Animation(const QUrl& url) :
|
||||||
|
Resource(url) {
|
||||||
|
}
|
||||||
|
|
||||||
|
class AnimationReader : public QRunnable {
|
||||||
|
public:
|
||||||
|
|
||||||
|
AnimationReader(const QWeakPointer<Resource>& animation, QNetworkReply* reply);
|
||||||
|
|
||||||
|
virtual void run();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
QWeakPointer<Resource> _animation;
|
||||||
|
QNetworkReply* _reply;
|
||||||
|
};
|
||||||
|
|
||||||
|
AnimationReader::AnimationReader(const QWeakPointer<Resource>& animation, QNetworkReply* reply) :
|
||||||
|
_animation(animation),
|
||||||
|
_reply(reply) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void AnimationReader::run() {
|
||||||
|
QSharedPointer<Resource> animation = _animation.toStrongRef();
|
||||||
|
if (!animation.isNull()) {
|
||||||
|
QMetaObject::invokeMethod(animation.data(), "setGeometry",
|
||||||
|
Q_ARG(const FBXGeometry&, readFBX(_reply->readAll(), QVariantHash())));
|
||||||
|
}
|
||||||
|
_reply->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Animation::setGeometry(const FBXGeometry& geometry) {
|
||||||
|
_geometry = geometry;
|
||||||
|
finishedLoading(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Animation::downloadFinished(QNetworkReply* reply) {
|
||||||
|
// send the reader off to the thread pool
|
||||||
|
QThreadPool::globalInstance()->start(new AnimationReader(_self, reply));
|
||||||
|
}
|
56
libraries/script-engine/src/AnimationCache.h
Normal file
56
libraries/script-engine/src/AnimationCache.h
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
//
|
||||||
|
// AnimationCache.h
|
||||||
|
// libraries/script-engine/src/
|
||||||
|
//
|
||||||
|
// Created by Andrzej Kapolka on 4/14/14.
|
||||||
|
// Copyright (c) 2014 High Fidelity, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef hifi_AnimationCache_h
|
||||||
|
#define hifi_AnimationCache_h
|
||||||
|
|
||||||
|
#include <ResourceCache.h>
|
||||||
|
|
||||||
|
#include <FBXReader.h>
|
||||||
|
|
||||||
|
class Animation;
|
||||||
|
|
||||||
|
/// Scriptable interface for FBX animation loading.
|
||||||
|
class AnimationCache : public ResourceCache {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
QSharedPointer<Animation> getAnimation(const QUrl& url);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
virtual QSharedPointer<Resource> createResource(const QUrl& url,
|
||||||
|
const QSharedPointer<Resource>& fallback, bool delayLoad, const void* extra);
|
||||||
|
};
|
||||||
|
|
||||||
|
/// An animation loaded from the network.
|
||||||
|
class Animation : public Resource {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Animation(const QUrl& url);
|
||||||
|
|
||||||
|
const FBXGeometry& getGeometry() const { return _geometry; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
Q_INVOKABLE void setGeometry(const FBXGeometry& geometry);
|
||||||
|
|
||||||
|
virtual void downloadFinished(QNetworkReply* reply);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
FBXGeometry _geometry;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // hifi_AnimationCache_h
|
|
@ -204,7 +204,8 @@ void ScriptEngine::init() {
|
||||||
registerGlobalObject("Quat", &_quatLibrary);
|
registerGlobalObject("Quat", &_quatLibrary);
|
||||||
registerGlobalObject("Vec3", &_vec3Library);
|
registerGlobalObject("Vec3", &_vec3Library);
|
||||||
registerGlobalObject("Uuid", &_uuidLibrary);
|
registerGlobalObject("Uuid", &_uuidLibrary);
|
||||||
|
registerGlobalObject("AnimationCache", &_animationCache);
|
||||||
|
|
||||||
registerGlobalObject("Voxels", &_voxelsScriptingInterface);
|
registerGlobalObject("Voxels", &_voxelsScriptingInterface);
|
||||||
|
|
||||||
QScriptValue treeScaleValue = _engine.newVariant(QVariant(TREE_SCALE));
|
QScriptValue treeScaleValue = _engine.newVariant(QVariant(TREE_SCALE));
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include <AvatarData.h>
|
#include <AvatarData.h>
|
||||||
|
|
||||||
|
#include "AnimationCache.h"
|
||||||
#include "AbstractControllerScriptingInterface.h"
|
#include "AbstractControllerScriptingInterface.h"
|
||||||
#include "Quat.h"
|
#include "Quat.h"
|
||||||
#include "ScriptUUID.h"
|
#include "ScriptUUID.h"
|
||||||
|
@ -125,6 +126,7 @@ private:
|
||||||
Quat _quatLibrary;
|
Quat _quatLibrary;
|
||||||
Vec3 _vec3Library;
|
Vec3 _vec3Library;
|
||||||
ScriptUUID _uuidLibrary;
|
ScriptUUID _uuidLibrary;
|
||||||
|
AnimationCache _animationCache;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_ScriptEngine_h
|
#endif // hifi_ScriptEngine_h
|
||||||
|
|
Loading…
Reference in a new issue