core: preserve fixture times in generic snapshots

This commit is contained in:
OpenAI Codex
2026-09-10 22:15:44 +08:00
parent 379c9ed0e4
commit 6d1f3e051c
3 changed files with 7 additions and 2 deletions

View File

@@ -90,8 +90,9 @@ ParticleFieldAdapterResult ParticleFieldDataAdapter::decode(const ParticleFieldD
}
ParticleFieldAdapterResult ParticleFieldDataAdapter::decode(const ParticleFieldDescriptor& d, const std::vector<char>& bytes, uint64_t generation) {
if (!d.generation || !generation || d.generation != generation || d.layout != "interleaved-uv" || d.encoding != "float32-le" ||
(d.stride && d.stride != 2 * sizeof(float)) || !std::isfinite(d.noData))
if (d.layout != "interleaved-uv" || d.encoding != "float32-le")
return reject(ParticleFieldAdapterError::UnsupportedFormat, "legacy v1 only supports interleaved-uv float32-le");
if (!d.generation || !generation || d.generation != generation || (d.stride && d.stride != 2 * sizeof(float)) || !std::isfinite(d.noData))
return reject(ParticleFieldAdapterError::InvalidDescriptor, "legacy v1 descriptor is invalid");
ParticleFieldDescriptor normalized = d;
normalized.vector = ParticleFieldPlaneDescriptor{.byteLength = d.byteLength, .encoding = d.encoding, .layout = d.layout, .noData = d.noData};

View File

@@ -158,6 +158,7 @@ ParticleFieldSnapshot OfflineFixtureParticleAdapter::load(const std::string& fix
descriptor.fieldType = member(metadata, "fieldType").GetString();
descriptor.displayDomain = member(metadata, "displayDomain").GetString();
descriptor.generation = generation;
descriptor.validTime = member(metadata, "timeIndex").GetUint64() + 1;
descriptor.width = grid["width"].GetUint();
descriptor.height = grid["height"].GetUint();
descriptor.west = bounds["west"].GetDouble();

View File

@@ -289,6 +289,9 @@ TEST(Source, ParticleFieldDataAdapterAcceptsNeutralDescriptor) {
ASSERT_TRUE(result);
ASSERT_TRUE(result.snapshot);
EXPECT_EQ(result.snapshot->fieldID, descriptor.fieldID);
EXPECT_EQ(result.snapshot->vectorSemantics, particle::VectorSemantics::Velocity);
EXPECT_TRUE(result.snapshot->hasVector());
EXPECT_FALSE(result.snapshot->hasScalar());
EXPECT_EQ(result.error, particle::ParticleFieldAdapterError::None);
}