protected override void ReadInternal(Reader reader) { vectors = new CompressedVector3[length]; for (int i = 0; i < vectors.Length; i++) { vectors[i] = new CompressedVector3(reader); } }
protected override void ReadInternal(Reader reader) { //MapLoader.Loader.print("Triangles: " + Pointer.Current(reader) + " - " + string.Format("{0:X4}", length) + " - " + string.Format("{0:X4}", num_vertices)); // For DS: https://github.com/scurest/apicula // http://problemkaputt.de/gbatek.htm#ds3dvideo check under Geometry Commands // For N64: http://www.shootersforever.com/forums_message_boards/viewtopic.php?t=6920 // Or RSP commands sheet // maybe this can help https://github.com/ricrpi/mupen64plus-video-gles2rice/blob/master/src/RSP_Parser.cpp // 8 bytes per command, 1st byte is RSP byte if (Settings.s.platform == Settings.Platform._3DS) { triangles = new Triangle[length]; for (int i = 0; i < length; i++) { /*if (i % 2 == 0) { * triangles[i].v2 = reader.ReadUInt16(); * triangles[i].v1 = reader.ReadUInt16(); * triangles[i].v3 = reader.ReadUInt16(); * } else {*/ triangles[i].v1 = reader.ReadUInt16(); triangles[i].v2 = reader.ReadUInt16(); triangles[i].v3 = reader.ReadUInt16(); //} } uvs = new Vector2[num_vertices]; for (int i = 0; i < num_vertices; i++) { uvs[i] = new Vector2(reader.ReadSingle(), reader.ReadSingle()); } verts = new CompressedVector3[num_vertices]; colors = new CompressedVector3[num_vertices]; for (int i = 0; i < num_vertices; i++) { verts[i] = new CompressedVector3(reader); } for (int i = 0; i < num_vertices; i++) { colors[i] = new CompressedVector3(reader); } } else { if (Settings.s.platform == Settings.Platform.N64) { data = reader.ReadBytes(length); using (MemoryStream str = new MemoryStream(data)) { using (Reader dataReader = new Reader(str, Settings.s.IsLittleEndian)) { rspCommands = new RSPCommand[length / 8]; for (int i = 0; i < rspCommands.Length; i++) { rspCommands[i] = new RSPCommand(dataReader); } } } } else if (Settings.s.platform == Settings.Platform.DS) { if (Settings.s.game == Settings.Game.RRR) { data = reader.ReadBytes(compressedLength); data = DS3D.GeometryParser.Decompress(data); //data = DS3D.GeometryParser.ReadCompressed(reader); } else { data = reader.ReadBytes(length); } ds3dCommands = DS3D.GeometryParser.ReadCommands(data); } } }