From 9a5bd0cac8b3edb49aa6b56970ed1d6497d34e93 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sun, 18 Feb 2024 14:05:24 -0600 Subject: [PATCH] Revert "Apply directly to the engine!" This reverts commit f3a88c25d5e8b9c295e8a4fcbd08c952bf2a60c0. --- .../api/backend/DirectInstancerProvider.java | 30 ------------------- .../jozufozu/flywheel/api/backend/Engine.java | 21 ++++++++++++- .../api/instance/InstancerProvider.java | 16 ---------- .../api/visual/VisualFrameContext.java | 2 ++ .../api/visual/VisualTickContext.java | 3 ++ .../visualization/VisualizationContext.java | 3 ++ .../visualization/InstancerProviderImpl.java | 6 ---- .../VisualizationContextImpl.java | 2 +- 8 files changed, 29 insertions(+), 54 deletions(-) delete mode 100644 src/main/java/com/jozufozu/flywheel/api/backend/DirectInstancerProvider.java diff --git a/src/main/java/com/jozufozu/flywheel/api/backend/DirectInstancerProvider.java b/src/main/java/com/jozufozu/flywheel/api/backend/DirectInstancerProvider.java deleted file mode 100644 index 1d8271e23..000000000 --- a/src/main/java/com/jozufozu/flywheel/api/backend/DirectInstancerProvider.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.jozufozu.flywheel.api.backend; - -import org.jetbrains.annotations.ApiStatus; - -import com.jozufozu.flywheel.api.BackendImplemented; -import com.jozufozu.flywheel.api.context.Context; -import com.jozufozu.flywheel.api.event.RenderStage; -import com.jozufozu.flywheel.api.instance.Instance; -import com.jozufozu.flywheel.api.instance.InstanceType; -import com.jozufozu.flywheel.api.instance.Instancer; -import com.jozufozu.flywheel.api.instance.InstancerProvider; -import com.jozufozu.flywheel.api.model.Model; - -@BackendImplemented -@ApiStatus.Experimental -public interface DirectInstancerProvider { - /** - * Get an instancer for the given instance type, model, and render stage. - * - *

Calling this method twice with the same arguments will return the same instancer.

- * - *

If you are writing a visual you should probably be using - * {@link InstancerProvider#instancer(InstanceType, Model)}, which will decide the {@code RenderStage} - * based on what type of visual is getting the instancer as well as hide the Context.

- * - * @return An instancer for the given instance type, model, and render stage. - * @see InstancerProvider - */ - Instancer instancer(InstanceType type, Context context, Model model, RenderStage stage); -} diff --git a/src/main/java/com/jozufozu/flywheel/api/backend/Engine.java b/src/main/java/com/jozufozu/flywheel/api/backend/Engine.java index 598881b90..c43c21688 100644 --- a/src/main/java/com/jozufozu/flywheel/api/backend/Engine.java +++ b/src/main/java/com/jozufozu/flywheel/api/backend/Engine.java @@ -3,9 +3,14 @@ package com.jozufozu.flywheel.api.backend; import java.util.List; import com.jozufozu.flywheel.api.BackendImplemented; +import com.jozufozu.flywheel.api.context.Context; import com.jozufozu.flywheel.api.event.RenderContext; import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; +import com.jozufozu.flywheel.api.instance.InstanceType; +import com.jozufozu.flywheel.api.instance.Instancer; +import com.jozufozu.flywheel.api.instance.InstancerProvider; +import com.jozufozu.flywheel.api.model.Model; import com.jozufozu.flywheel.api.task.Plan; import com.jozufozu.flywheel.api.task.TaskExecutor; @@ -14,7 +19,21 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; @BackendImplemented -public interface Engine extends DirectInstancerProvider { +public interface Engine { + /** + * Get an instancer for the given instance type, model, and render stage. + * + *

Calling this method twice with the same arguments will return the same instancer.

+ * + *

If you are writing a visual you should probably be using + * {@link InstancerProvider#instancer(InstanceType, Model)}, which will decide the {@code RenderStage} + * based on what type of visual is getting the instancer.

+ * + * @return An instancer for the given instance type, model, and render stage. + * @see InstancerProvider + */ + Instancer instancer(InstanceType type, Context context, Model model, RenderStage stage); + /** * Create a plan that will be executed every frame. * @return A new plan. diff --git a/src/main/java/com/jozufozu/flywheel/api/instance/InstancerProvider.java b/src/main/java/com/jozufozu/flywheel/api/instance/InstancerProvider.java index 74c975028..cc3cbcc9a 100644 --- a/src/main/java/com/jozufozu/flywheel/api/instance/InstancerProvider.java +++ b/src/main/java/com/jozufozu/flywheel/api/instance/InstancerProvider.java @@ -1,8 +1,5 @@ package com.jozufozu.flywheel.api.instance; -import org.jetbrains.annotations.ApiStatus; - -import com.jozufozu.flywheel.api.backend.DirectInstancerProvider; import com.jozufozu.flywheel.api.model.Model; public interface InstancerProvider { @@ -14,17 +11,4 @@ public interface InstancerProvider { * @return An instancer for the given instance type rendering the given model. */ Instancer instancer(InstanceType type, Model model); - - /** - * Get the {@link DirectInstancerProvider} this provider is built on top of. - * - *

The direct provider allows for explicit control over the - * {@link com.jozufozu.flywheel.api.context.Context Context} and - * {@link com.jozufozu.flywheel.api.event.RenderStage RenderStage}. - * Generally this is a safe operation, though compatibility issues basically guaranteed - * if you mess with the Context and nest visuals.

- * @return A DirectInstancerProvider. - */ - @ApiStatus.Experimental - DirectInstancerProvider _directProvider(); } diff --git a/src/main/java/com/jozufozu/flywheel/api/visual/VisualFrameContext.java b/src/main/java/com/jozufozu/flywheel/api/visual/VisualFrameContext.java index d2f4795d3..84e5dff56 100644 --- a/src/main/java/com/jozufozu/flywheel/api/visual/VisualFrameContext.java +++ b/src/main/java/com/jozufozu/flywheel/api/visual/VisualFrameContext.java @@ -1,9 +1,11 @@ package com.jozufozu.flywheel.api.visual; +import org.jetbrains.annotations.ApiStatus; import org.joml.FrustumIntersection; import net.minecraft.client.Camera; +@ApiStatus.NonExtendable public interface VisualFrameContext { Camera camera(); diff --git a/src/main/java/com/jozufozu/flywheel/api/visual/VisualTickContext.java b/src/main/java/com/jozufozu/flywheel/api/visual/VisualTickContext.java index a234c87a3..b74294d23 100644 --- a/src/main/java/com/jozufozu/flywheel/api/visual/VisualTickContext.java +++ b/src/main/java/com/jozufozu/flywheel/api/visual/VisualTickContext.java @@ -1,5 +1,8 @@ package com.jozufozu.flywheel.api.visual; +import org.jetbrains.annotations.ApiStatus; + +@ApiStatus.NonExtendable public interface VisualTickContext { // TODO: remove? } diff --git a/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationContext.java b/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationContext.java index f8c116359..b03b7609a 100644 --- a/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationContext.java +++ b/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationContext.java @@ -1,5 +1,7 @@ package com.jozufozu.flywheel.api.visualization; +import org.jetbrains.annotations.ApiStatus; + import com.jozufozu.flywheel.api.instance.InstancerProvider; import net.minecraft.core.Vec3i; @@ -7,6 +9,7 @@ import net.minecraft.core.Vec3i; /** * A context object passed on visual creation. */ +@ApiStatus.NonExtendable public interface VisualizationContext { /** * @return The {@link InstancerProvider} that the visual can use to get instancers to render models. diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/InstancerProviderImpl.java b/src/main/java/com/jozufozu/flywheel/impl/visualization/InstancerProviderImpl.java index 8ff117ad6..c354427a1 100644 --- a/src/main/java/com/jozufozu/flywheel/impl/visualization/InstancerProviderImpl.java +++ b/src/main/java/com/jozufozu/flywheel/impl/visualization/InstancerProviderImpl.java @@ -2,7 +2,6 @@ package com.jozufozu.flywheel.impl.visualization; import java.util.function.Supplier; -import com.jozufozu.flywheel.api.backend.DirectInstancerProvider; import com.jozufozu.flywheel.api.backend.Engine; import com.jozufozu.flywheel.api.event.RenderStage; import com.jozufozu.flywheel.api.instance.Instance; @@ -20,11 +19,6 @@ public record InstancerProviderImpl(Engine engine, return engine.instancer(type, Contexts.DEFAULT, model, renderStage); } - @Override - public DirectInstancerProvider _directProvider() { - return engine; - } - @Override public VisualizationContext get() { return new VisualizationContextImpl(this, engine.renderOrigin()); diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationContextImpl.java b/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationContextImpl.java index db750e34a..eaf888a82 100644 --- a/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationContextImpl.java +++ b/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationContextImpl.java @@ -12,6 +12,6 @@ import net.minecraft.core.Vec3i; * @param renderOrigin The origin of the renderer as a world position. * All models render as if this position is (0, 0, 0). */ -public record VisualizationContextImpl(InstancerProviderImpl instancerProvider, +public record VisualizationContextImpl(InstancerProvider instancerProvider, Vec3i renderOrigin) implements VisualizationContext { }