You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.6 KiB
127 lines
3.6 KiB
#include "spine-wasm.h"
|
|
#include <map>
|
|
#include "AtlasAttachmentLoaderExtension.h"
|
|
#include "spine-mesh-data.h"
|
|
#include "util-function.h"
|
|
#include "wasmSpineExtension.h"
|
|
|
|
std::map<std::string, SkeletonData*> skeletonDataMap{};
|
|
|
|
uint32_t SpineWasmUtil::s_listenerID = 0;
|
|
EventType SpineWasmUtil::s_currentType = EventType_Event;
|
|
TrackEntry* SpineWasmUtil::s_currentEntry = nullptr;
|
|
Event* SpineWasmUtil::s_currentEvent = nullptr;
|
|
uint8_t* SpineWasmUtil::s_mem = nullptr;
|
|
uint32_t SpineWasmUtil::s_memSize = 0;
|
|
|
|
void SpineWasmUtil::spineWasmInit() {
|
|
LogUtil::Initialize();
|
|
spine::SpineExtension* tension = new WasmSpineExtension();
|
|
spine::SpineExtension::setInstance(tension);
|
|
|
|
SpineMeshData::initMeshMemory();
|
|
|
|
//LogUtil::PrintToJs("spineWasmInit");
|
|
}
|
|
|
|
void SpineWasmUtil::spineWasmDestroy() {
|
|
auto* extension = spine::SpineExtension::getInstance();
|
|
delete extension;
|
|
freeStoreMemory();
|
|
SpineMeshData::releaseMeshMemory();
|
|
LogUtil::ReleaseBuffer();
|
|
}
|
|
|
|
SkeletonData* SpineWasmUtil::querySpineSkeletonDataByUUID(const std::string& uuid) {
|
|
auto iter = skeletonDataMap.find(uuid);
|
|
if (iter == skeletonDataMap.end()) {
|
|
return nullptr;
|
|
}
|
|
SkeletonData* ptrVal = iter->second;
|
|
return ptrVal;
|
|
}
|
|
|
|
SkeletonData* SpineWasmUtil::createSpineSkeletonDataWithJson(const std::string& jsonStr, const std::string& altasStr) {
|
|
auto* atlas = new Atlas(altasStr.c_str(), altasStr.size(), "", nullptr, false);
|
|
if (!atlas) {
|
|
return nullptr;
|
|
}
|
|
AttachmentLoader* attachmentLoader = new AtlasAttachmentLoaderExtension(atlas);
|
|
spine::SkeletonJson json(attachmentLoader);
|
|
json.setScale(1.0F);
|
|
SkeletonData* skeletonData = json.readSkeletonData(jsonStr.c_str());
|
|
|
|
return skeletonData;
|
|
}
|
|
|
|
SkeletonData* SpineWasmUtil::createSpineSkeletonDataWithBinary(uint32_t byteSize, const std::string& altasStr) {
|
|
auto* atlas = new Atlas(altasStr.c_str(), altasStr.size(), "", nullptr, false);
|
|
if (!atlas) {
|
|
return nullptr;
|
|
}
|
|
AttachmentLoader* attachmentLoader = new AtlasAttachmentLoaderExtension(atlas);
|
|
spine::SkeletonBinary binary(attachmentLoader);
|
|
binary.setScale(1.0F);
|
|
SkeletonData* skeletonData = binary.readSkeletonData(s_mem, byteSize);
|
|
return skeletonData;
|
|
}
|
|
|
|
void SpineWasmUtil::registerSpineSkeletonDataWithUUID(SkeletonData* data, const std::string& uuid) {
|
|
auto iter = skeletonDataMap.find(uuid);
|
|
if (iter == skeletonDataMap.end()) {
|
|
skeletonDataMap[uuid] = data;
|
|
}
|
|
}
|
|
|
|
void SpineWasmUtil::destroySpineSkeletonDataWithUUID(const std::string& uuid) {
|
|
auto iter = skeletonDataMap.find(uuid);
|
|
if (iter != skeletonDataMap.end()) {
|
|
auto* data = skeletonDataMap[uuid];
|
|
delete data;
|
|
skeletonDataMap.erase(iter);
|
|
}
|
|
}
|
|
|
|
void SpineWasmUtil::destroySpineSkeleton(Skeleton* skeleton) {
|
|
if (skeleton) {
|
|
delete skeleton;
|
|
}
|
|
}
|
|
|
|
uint32_t SpineWasmUtil::queryStoreMemory(uint32_t size) {
|
|
if (s_mem) {
|
|
if (s_memSize < size) {
|
|
delete[] s_mem;
|
|
s_mem = new uint8_t[size];
|
|
s_memSize = size;
|
|
}
|
|
} else {
|
|
s_mem = new uint8_t[size];
|
|
s_memSize = size;
|
|
}
|
|
return (uint32_t)s_mem;
|
|
}
|
|
|
|
void SpineWasmUtil::freeStoreMemory() {
|
|
if (s_mem) {
|
|
delete[] s_mem;
|
|
s_mem = nullptr;
|
|
}
|
|
s_memSize = 0;
|
|
}
|
|
|
|
uint32_t SpineWasmUtil::getCurrentListenerID() {
|
|
return s_listenerID;
|
|
}
|
|
|
|
EventType SpineWasmUtil::getCurrentEventType() {
|
|
return s_currentType;
|
|
}
|
|
|
|
TrackEntry* SpineWasmUtil::getCurrentTrackEntry() {
|
|
return s_currentEntry;
|
|
}
|
|
|
|
Event* SpineWasmUtil::getCurrentEvent() {
|
|
return s_currentEvent;
|
|
} |