UwU před 2 měsíci
rodič
revize
a398bb63ea
1 změnil soubory, kde provedl 12 přidání a 3 odebrání
  1. 12 3
      src/WallpaperEngine/Render/Objects/CImage.cpp

+ 12 - 3
src/WallpaperEngine/Render/Objects/CImage.cpp

@@ -433,13 +433,22 @@ bool CImage::loadPuppetMesh (const glm::vec2& size) {
 
 	constexpr size_t markerSize = 9;
 	constexpr size_t meshHeaderSize = sizeof (uint32_t) * 2;
-	constexpr size_t vertexStride = 80;
 	constexpr size_t positionOffset = 0;
-	constexpr size_t uvOffset = 72;
 
 	const std::string puppetVersion
 	    = data.size () >= markerSize ? std::string (data.data (), strlen ("MDLV0021")) : "";
-	if (puppetVersion != "MDLV0021" && puppetVersion != "MDLV0023") {
+
+	// MDLV0013 vertices only carry a single blend index/weight pair (no second bone slot),
+	// so they're 28 bytes shorter than the MDLV0021/0023 layout and the UV pair sits earlier
+	size_t vertexStride;
+	size_t uvOffset;
+	if (puppetVersion == "MDLV0013") {
+	    vertexStride = 52;
+	    uvOffset = 44;
+	} else if (puppetVersion == "MDLV0021" || puppetVersion == "MDLV0023") {
+	    vertexStride = 80;
+	    uvOffset = 72;
+	} else {
 	    sLog.error ("Unsupported puppet model header ", puppetVersion, " in ", *this->getImage ().model->puppet);
 	    return false;
 	}