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.
 
 
 
 
 
 

61 lines
1.6 KiB

#include "spine-model.h"
SpineModel::SpineModel() {
SpineModel::data = new std::vector<uint32_t>(6, 0);
}
SpineModel::~SpineModel() {
delete SpineModel::data;
SpineModel::data = nullptr;
}
void SpineModel::addSlotMesh(SlotMesh& mesh, bool needMerge) {
bool canMerge = false;
auto count = data->size();
if (needMerge && count > 0) {
if (data->at(count - 2) == mesh.blendMode && data->at(count - 1) == mesh.textureID) {
canMerge = true;
data->at(count-4) += mesh.vCount;
data->at(count-3) += mesh.iCount;
}
}
if (!canMerge) {
data->resize(count + 6);
data->at(count) = (uint32_t)mesh.vBuf;
data->at(count + 1) = (uint32_t)mesh.iBuf;
data->at(count + 2) = mesh.vCount;
data->at(count + 3) = mesh.iCount;
data->at(count + 4) = mesh.blendMode;
data->at(count + 5) = mesh.textureID;
}
auto indexCount = mesh.iCount;
uint16_t* iiPtr = mesh.iBuf;
for (uint16_t i = 0; i < indexCount; i++) {
iiPtr[i] += vCount;
}
auto vertexCount = mesh.vCount;
float* floatPtr = (float*)mesh.vBuf;
int floatStride = this->byteStride / 4;
for (int i = 0; i < vertexCount; i++) {
floatPtr[floatStride * i + 2] = 0;
}
vCount += vertexCount;
iCount += indexCount;
}
void SpineModel::clearMeshes() {
data->resize(0);
vCount = 0;
iCount = 0;
}
std::vector<uint32_t>* SpineModel::getData() {
return data;
}
void SpineModel::setBufferPtr(uint8_t* vp, uint16_t* ip) {
vPtr = (uint32_t)vp;
iPtr = (uint32_t)ip;
}