diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 1574c2422..ef126c770 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -1019,10 +1019,16 @@ void LLModel::setVolumeFaceData( face.resizeVertices(num_verts); face.resizeIndices(num_indices); - LLVector4a::memcpyNonAliased16((F32*) face.mPositions, (F32*) pos.get(), num_verts*4*sizeof(F32)); + if(pos.getSkip() == sizeof(LLVector4a)) + LLVector4a::memcpyNonAliased16((F32*) face.mPositions, (F32*) pos.get(), num_verts*4*sizeof(F32)); + else + for(U32 i=0;imV[3] = index; + //Still using getF32ptr() because if the array is strided then theres no guarantee vertices will aligned, which LLVector4a requires + vertices[i].set(position.getF32ptr()); //This assignment and the one below are oddly sensitive. Suspect something's off around here. + vertices[i].mV[3] = index; } for (S32 i = num_vertices; i < mGeomCount; i++) { - *(LLVector4*)&vertices[i]=*(LLVector4*)&(vertices[num_vertices-1]); + memcpy(vertices[i].mV,vertices[num_vertices-1].mV,sizeof(LLVector4)); } //mVertexBuffer->setBuffer(0);