fix: close STEP-085 V4 renderer efficiency
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
This commit is contained in:
@@ -409,14 +409,19 @@ TEST(Source, RasterArrayV4RendererStateMaterializesBindingsAndMixWithoutTouching
|
||||
const auto& color = *source.impl().v4RendererState.color;
|
||||
EXPECT_FLOAT_EQ(particles.sampleState.mix, 0.5f);
|
||||
EXPECT_FLOAT_EQ(color.sampleState.mix, 0.5f);
|
||||
EXPECT_EQ(particles.t0.vector, (std::vector<float>{1, 5, 2, 6, 3, 7, 4, 8}));
|
||||
EXPECT_EQ(particles.t0.valid, (std::vector<uint8_t>{1, 1, 1, 1}));
|
||||
EXPECT_EQ(color.t0.scalar, (std::vector<float>{1, 2, 3, 4}));
|
||||
ASSERT_TRUE(particles.t0);
|
||||
ASSERT_TRUE(color.t0);
|
||||
EXPECT_EQ(particles.t0->vector, (std::vector<float>{1, 5, 2, 6, 3, 7, 4, 8}));
|
||||
EXPECT_EQ(particles.t0->valid, (std::vector<uint8_t>{1, 1, 1, 1}));
|
||||
EXPECT_EQ(color.t0->scalar, (std::vector<float>{1, 2, 3, 4}));
|
||||
const auto particleIdentity = particles.contentIdentity;
|
||||
const auto retainedParticleT0 = particles.t0;
|
||||
ASSERT_TRUE(source.setRequestedForecastTime(Base + Hour / 4));
|
||||
ASSERT_TRUE(source.impl().v4RendererState.particle);
|
||||
EXPECT_EQ(source.impl().v4RendererState.particle->contentIdentity, particleIdentity);
|
||||
EXPECT_FLOAT_EQ(source.impl().v4RendererState.particle->sampleState.mix, 0.25f);
|
||||
ASSERT_TRUE(retainedParticleT0);
|
||||
EXPECT_EQ(retainedParticleT0->vector, (std::vector<float>{1, 5, 2, 6, 3, 7, 4, 8}));
|
||||
EXPECT_FALSE(source.impl().field);
|
||||
EXPECT_FALSE(source.impl().nextField);
|
||||
EXPECT_FALSE(source.impl().timeline);
|
||||
@@ -457,15 +462,21 @@ TEST(Source, RasterArrayV4MaterializerUsesExplicitLittleEndianScaleOffsetAndStab
|
||||
projection.sampleState = {Base + Hour / 2, 0.5f};
|
||||
projection.t0Frame = t0;
|
||||
projection.t1Frame = t1;
|
||||
const auto materialized = particle::materializeColorProjection(projection);
|
||||
auto materialized = particle::materializeColorProjection(projection);
|
||||
ASSERT_TRUE(materialized);
|
||||
EXPECT_EQ(materialized->t0.scalar, (std::vector<float>{4.0f, -3.0f, 7.5f, 9.0f}));
|
||||
EXPECT_EQ(materialized->t0.valid, (std::vector<uint8_t>{1, 0, 1, 1}));
|
||||
EXPECT_EQ(materialized->t0.generation, 17u);
|
||||
EXPECT_EQ(materialized->t0.dataVersion, 23u);
|
||||
EXPECT_EQ(materialized->t0.fieldSha256, "plane-t0");
|
||||
EXPECT_EQ(materialized->t1.generation, 18u);
|
||||
EXPECT_EQ(materialized->t1.dataVersion, 24u);
|
||||
ASSERT_TRUE(materialized->t0);
|
||||
ASSERT_TRUE(materialized->t1);
|
||||
EXPECT_EQ(materialized->t0->scalar, (std::vector<float>{4.0f, -3.0f, 7.5f, 9.0f}));
|
||||
EXPECT_EQ(materialized->t0->valid, (std::vector<uint8_t>{1, 0, 1, 1}));
|
||||
EXPECT_EQ(materialized->t0->generation, 17u);
|
||||
EXPECT_EQ(materialized->t0->dataVersion, 23u);
|
||||
EXPECT_EQ(materialized->t0->fieldSha256, "plane-t0");
|
||||
EXPECT_EQ(materialized->t1->generation, 18u);
|
||||
EXPECT_EQ(materialized->t1->dataVersion, 24u);
|
||||
const auto retainedT0 = materialized->t0;
|
||||
materialized.reset();
|
||||
ASSERT_TRUE(retainedT0);
|
||||
EXPECT_EQ(retainedT0->scalar, (std::vector<float>{4.0f, -3.0f, 7.5f, 9.0f}));
|
||||
}
|
||||
|
||||
TEST(Source, RasterArrayV4MaterializerDecodesDirectionToUInt16LittleEndian) {
|
||||
@@ -512,14 +523,15 @@ TEST(Source, RasterArrayV4MaterializerDecodesDirectionToUInt16LittleEndian) {
|
||||
projection.t1Frame = t1;
|
||||
const auto materialized = particle::materializeParticleProjection(projection);
|
||||
ASSERT_TRUE(materialized);
|
||||
ASSERT_EQ(materialized->t0.vector.size(), 8u);
|
||||
EXPECT_NEAR(materialized->t0.vector[0], 0.0f, 1e-5f);
|
||||
EXPECT_NEAR(materialized->t0.vector[1], 1.0f, 1e-5f);
|
||||
EXPECT_NEAR(materialized->t0.vector[2], 1.0f, 1e-5f);
|
||||
EXPECT_NEAR(materialized->t0.vector[3], 0.0f, 1e-5f);
|
||||
EXPECT_NEAR(materialized->t0.vector[4], 0.0f, 1e-5f);
|
||||
EXPECT_NEAR(materialized->t0.vector[5], -1.0f, 1e-5f);
|
||||
EXPECT_NEAR(materialized->t0.vector[6], -1.0f, 1e-5f);
|
||||
EXPECT_NEAR(materialized->t0.vector[7], 0.0f, 1e-5f);
|
||||
EXPECT_EQ(materialized->t0.vectorSemantics, particle::VectorSemantics::Direction);
|
||||
ASSERT_TRUE(materialized->t0);
|
||||
ASSERT_EQ(materialized->t0->vector.size(), 8u);
|
||||
EXPECT_NEAR(materialized->t0->vector[0], 0.0f, 1e-5f);
|
||||
EXPECT_NEAR(materialized->t0->vector[1], 1.0f, 1e-5f);
|
||||
EXPECT_NEAR(materialized->t0->vector[2], 1.0f, 1e-5f);
|
||||
EXPECT_NEAR(materialized->t0->vector[3], 0.0f, 1e-5f);
|
||||
EXPECT_NEAR(materialized->t0->vector[4], 0.0f, 1e-5f);
|
||||
EXPECT_NEAR(materialized->t0->vector[5], -1.0f, 1e-5f);
|
||||
EXPECT_NEAR(materialized->t0->vector[6], -1.0f, 1e-5f);
|
||||
EXPECT_NEAR(materialized->t0->vector[7], 0.0f, 1e-5f);
|
||||
EXPECT_EQ(materialized->t0->vectorSemantics, particle::VectorSemantics::Direction);
|
||||
}
|
||||
|
||||
@@ -884,6 +884,29 @@ TEST(Source, RasterArrayTimelineCadenceUsesOneSharedDeterministicDeadline) {
|
||||
EXPECT_TRUE(timeline.cadenceDue(start));
|
||||
}
|
||||
|
||||
TEST(Source, RasterArrayV4RendererCadenceGatesVisualSimulationWithoutForecastPlayback) {
|
||||
style::RasterArrayRendererCadence cadence;
|
||||
const auto start = std::chrono::steady_clock::time_point{} + std::chrono::seconds(1);
|
||||
cadence.setTargetFps(style::RasterArrayTargetFps::Fps30);
|
||||
EXPECT_TRUE(cadence.cadenceDue(start));
|
||||
EXPECT_TRUE(cadence.consumeIfDue(start));
|
||||
EXPECT_FALSE(cadence.consumeIfDue(start));
|
||||
EXPECT_FALSE(cadence.cadenceDue(start + std::chrono::milliseconds(33)));
|
||||
EXPECT_TRUE(cadence.cadenceDue(start + std::chrono::milliseconds(34)));
|
||||
EXPECT_TRUE(cadence.consumeIfDue(start + std::chrono::milliseconds(34)));
|
||||
const auto revisionAt30 = cadence.revision();
|
||||
|
||||
cadence.setTargetFps(style::RasterArrayTargetFps::Fps60);
|
||||
EXPECT_TRUE(cadence.consumeIfDue(start + std::chrono::milliseconds(34)));
|
||||
EXPECT_FALSE(cadence.consumeIfDue(start + std::chrono::milliseconds(50)));
|
||||
EXPECT_TRUE(cadence.consumeIfDue(start + std::chrono::milliseconds(51)));
|
||||
EXPECT_GT(cadence.revision(), revisionAt30);
|
||||
|
||||
cadence.setTargetFps(style::RasterArrayTargetFps::Auto);
|
||||
EXPECT_TRUE(cadence.consumeIfDue(start + std::chrono::milliseconds(51)));
|
||||
EXPECT_TRUE(cadence.consumeIfDue(start + std::chrono::milliseconds(51)));
|
||||
}
|
||||
|
||||
TEST(Source, RasterArrayRuntimeFieldWindowAdvancesWithoutReplacingTheSource) {
|
||||
SourceTest test;
|
||||
const auto eastMetadata = fixtureBytes("uniform-east", "metadata.json");
|
||||
|
||||
Reference in New Issue
Block a user