Skip to content

Commit c5e02f2

Browse files
committed
make it so test mdl saving func doesnt break everything
1 parent 9d684f2 commit c5e02f2

File tree

6 files changed

+51
-23
lines changed

6 files changed

+51
-23
lines changed

include/io/MdlIO.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace MDL {
2222
uint16_t NormalCount { 0 };
2323
uint16_t ColorCount { 0 };
2424
uint16_t TexCoordCount { 0 };
25-
uint8_t Padding2 { 0 }[8];
25+
uint8_t Padding2[8] { 0, 0, 0, 0, 0, 0, 0, 0 };
2626
uint16_t TextureCount { 0 };
2727
uint16_t Padding3 { 0 };
2828
uint16_t SamplerCount { 0 };
@@ -40,14 +40,14 @@ namespace MDL {
4040
uint32_t NormalsOffset { 0 };
4141
uint32_t ColorsOffset { 0 };
4242
uint32_t TexCoordsOffset { 0 };
43-
uint8_t Padding5 { 0 }[8];
43+
uint8_t Padding5[8] { 0, 0, 0, 0, 0, 0, 0, 0 };
4444
uint32_t TextureOffsetArray { 0 };
4545
uint32_t Padding6 { 0 };
4646
uint32_t MaterialOffset { 0 };
4747
uint32_t SamplerOffset { 0 };
4848
uint32_t ShapeOffset { 0 };
4949
uint32_t DrawElementOffset { 0 };
50-
uint8_t Padding7 { 0 }[8];
50+
uint8_t Padding7[8] { 0, 0, 0, 0, 0, 0, 0, 0 };
5151
};
5252
#pragma pack(pop)
5353

include/io/Util.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,4 @@ struct Readable {
8686
};
8787

8888
float InterpolateHermite(float factor, float timeA, float valueA, float outTangent, float timeB, float valueB, float inTangent);
89-
float MixTrack(LTrackCommon& track, float time, uint32_t& previousKey, uint32_t& nextKey);
89+
float MixTrack(LTrackCommon& track, float time, uint32_t& previousKey, uint32_t& nextKey, bool adjustSlope = false);

src/DOM/RoomDOMNode.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -801,7 +801,7 @@ void LRoomDOMNode::RenderHierarchyUI(std::shared_ptr<LDOMNodeBase> self, LEditor
801801

802802
int indexCount = 0;
803803
for(auto p : primitives){
804-
BIN::Primitive primitive;
804+
Primitive primitive;
805805
primitive.Opcode = (p.Type == triangle_stripper::TRIANGLE_STRIP ? GXPrimitiveType::TriangleStrip : GXPrimitiveType::Triangles);
806806
for(int i = 0; i < p.Indices.size(); i++){
807807
primitive.Vertices.push_back(vertices[p.Indices[i]]);

src/io/BinIO.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ namespace BIN {
560560
case GXPrimitiveType::Triangles: {
561561
int8_t prevMtx = -1;
562562
for(PrimitiveVertex vtxIdx : primitiveVertices){
563-
Vertex vtx = {{0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}};
563+
Vertex vtx = {-1, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}};
564564

565565
vtx.Position = mPositions[vtxIdx.Position];
566566
vtx.Normal = mNormals[vtxIdx.Normal];
@@ -573,9 +573,9 @@ namespace BIN {
573573
break;
574574
case GXPrimitiveType::TriangleStrip: {
575575
for (std::size_t v = 2; v < primitiveVertices.size(); v++){
576-
Vertex vtx1 = {{0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}},
577-
vtx2 = {{0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}},
578-
vtx3 = {{0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}};
576+
Vertex vtx1 = {-1, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}},
577+
vtx2 = {-1, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}},
578+
vtx3 = {-1, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}};
579579

580580
vtx1.Position = mPositions[primitiveVertices[v-2].Position];
581581
vtx1.Normal = mNormals[primitiveVertices[v-2].Normal];
@@ -601,7 +601,7 @@ namespace BIN {
601601
break;
602602
case GXPrimitiveType::TriangleFan:{
603603
for(std::size_t v = 0; v < 3; v++){
604-
Vertex vtx = {{0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}};
604+
Vertex vtx = {-1, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}};
605605

606606
vtx.Position = mPositions[primitiveVertices[v].Position];
607607
vtx.Normal = mNormals[primitiveVertices[v].Normal];
@@ -612,9 +612,9 @@ namespace BIN {
612612
}
613613

614614
for (std::size_t v = 2; v < primitiveVertices.size(); v++){
615-
Vertex vtx1 = {{0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}},
616-
vtx2 = {{0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}},
617-
vtx3 = {{0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}};
615+
Vertex vtx1 = {-1, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}},
616+
vtx2 = {-1, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}},
617+
vtx3 = {-1, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}};
618618

619619
if(primitiveVertices[v].Position == primitiveVertices[v-1].Position ||
620620
primitiveVertices[v-1].Position == primitiveVertices[0].Position ||
@@ -1139,7 +1139,7 @@ namespace BIN {
11391139
stripify.Strip(&primitives);
11401140

11411141
for(auto p : primitives){
1142-
BIN::Primitive primitive;
1142+
Primitive primitive;
11431143
primitive.Opcode = (p.Type == triangle_stripper::TRIANGLE_STRIP ? GXPrimitiveType::TriangleStrip : GXPrimitiveType::Triangles);
11441144
for(int i = 0; i < p.Indices.size(); i++){
11451145
primitive.Vertices.push_back(vertices[p.Indices[i]]);
@@ -1240,7 +1240,7 @@ namespace BIN {
12401240

12411241
int indexCount = 0;
12421242
for(auto p : primitives){
1243-
BIN::Primitive primitive;
1243+
Primitive primitive;
12441244
primitive.Opcode = (p.Type == triangle_stripper::TRIANGLE_STRIP ? GXPrimitiveType::TriangleStrip : GXPrimitiveType::Triangles);
12451245
for(int i = 0; i < p.Indices.size(); i++){
12461246
primitive.Vertices.push_back(vertices[p.Indices[i]]);

src/io/MdlIO.cpp

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -385,11 +385,11 @@ namespace MDL {
385385

386386
template<class T>
387387
uint32_t WriteSection(bStream::CStream* stream, std::map<int, T>& items, std::size_t itemSize){
388-
offset = stream->tell()
388+
uint32_t offset = stream->tell();
389389
for (auto [index, item] : items)
390390
{
391391
stream->seek(offset + (index * itemSize));
392-
item.Write(stream);
392+
item.Save(stream);
393393
}
394394
return offset;
395395
};
@@ -510,13 +510,33 @@ namespace MDL {
510510
}
511511

512512
//positions
513+
for(int i = 0; i < newPositions.size(); i++){
514+
stream->writeFloat(newPositions[i].x);
515+
stream->writeFloat(newPositions[i].y);
516+
stream->writeFloat(newPositions[i].z);
517+
}
513518

514519
// normals
520+
for(int i = 0; i < newNormals.size(); i++){
521+
stream->writeFloat(newNormals[i].x);
522+
stream->writeFloat(newNormals[i].y);
523+
stream->writeFloat(newNormals[i].z);
524+
}
515525

516526
// colors
527+
for(int i = 0; i < newColors.size(); i++){
528+
stream->writeUInt8(newColors[i].r * 255);
529+
stream->writeUInt8(newColors[i].g * 255);
530+
stream->writeUInt8(newColors[i].b * 255);
531+
stream->writeUInt8(newColors[i].a * 255);
532+
}
517533

518534
// texcoords
519-
535+
for(int i = 0; i < newTexCoords.size(); i++){
536+
stream->writeFloat(newTexCoords[i].x);
537+
stream->writeFloat(newTexCoords[i].y);
538+
}
539+
520540
mHeader.SceneGraphOffset = WriteSection<SceneGraphNode>(stream, mGraphNodes, 0x10);
521541

522542
mHeader.InverseMatrixOffset = stream->tell();
@@ -548,6 +568,8 @@ namespace MDL {
548568
stream->writeUInt8(mWeights[m].Weights.size());
549569
}
550570

571+
stream->alignTo(32);
572+
551573
}
552574

553575
void Model::Load(bStream::CStream* stream){
@@ -766,8 +788,8 @@ namespace MDL {
766788
}
767789

768790
for(PrimitiveVertex vtxIndices : triangulated){
769-
Vertex vtx = {{0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}};
770-
791+
Vertex vtx = {-1, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {1,1,1,1}, {-1, -1, -1, -1}, {0, 0, 0, 0}, {0,0}, {0,0}};
792+
vtx.Matrix = vtxIndices.Matrix;
771793
if(vtxIndices.Matrix >= LGenUtility::SwapEndian<uint16_t>(mHeader.JointCount)){
772794
uint16_t weightIdx = vtxIndices.Matrix - LGenUtility::SwapEndian<uint16_t>(mHeader.JointCount);
773795
Weight& weight = mWeights[weightIdx];

src/io/Util.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,23 @@ float InterpolateHermite(float factor, float timeA, float valueA, float outTange
1919
return result.x + result.y + result.z + result.w;
2020
}
2121

22-
float MixTrack(LTrackCommon& track, float time, uint32_t& previousKey, uint32_t& nextKey){
22+
float MixTrack(LTrackCommon& track, float time, uint32_t& previousKey, uint32_t& nextKey, bool adjustSlope){
2323
if(track.mKeys.size() == 1) track.mFrames[track.mKeys[0]];
2424
if(nextKey < track.mKeys.size()){
25+
float slopeOut = track.mFrames[track.mKeys[previousKey]].outslope;
26+
float slopeIn = track.mFrames[track.mKeys[nextKey]].inslope;
27+
if(adjustSlope){
28+
slopeOut = slopeOut * (track.mKeys[nextKey] - track.mKeys[previousKey]);
29+
slopeIn = slopeIn * (track.mKeys[nextKey] - track.mKeys[previousKey]);
30+
}
2531
float v = InterpolateHermite(
2632
(time - track.mFrames[track.mKeys[previousKey]].frame) / (track.mFrames[track.mKeys[nextKey]].frame - track.mFrames[track.mKeys[previousKey]].frame),
2733
track.mFrames[track.mKeys[previousKey]].frame,
2834
track.mFrames[track.mKeys[previousKey]].value,
29-
track.mFrames[track.mKeys[previousKey]].outslope,
35+
slopeOut,
3036
track.mFrames[track.mKeys[nextKey]].frame,
3137
track.mFrames[track.mKeys[nextKey]].value,
32-
track.mFrames[track.mKeys[nextKey]].inslope
38+
slopeIn
3339
);
3440

3541
if(time >= track.mFrames[track.mKeys[nextKey]].frame){

0 commit comments

Comments
 (0)