diff --git a/.gitignore b/.gitignore index 96431a961..ac9299c20 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ local.properties .buildpath # Other +.DS_Store mcmodsrepo src/*/generatedPackageInfos/ */src/*/generatedPackageInfos/ diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index ff4e92c48..fc9aab75d 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,7 +1,8 @@ +import java.util.Properties + plugins { - id("java-gradle-plugin") - kotlin("jvm") version "1.9.23" `kotlin-dsl` + idea } repositories { @@ -17,6 +18,11 @@ repositories { maven("https://maven.parchmentmc.org") } +idea.module { + isDownloadJavadoc = true + isDownloadSources = true +} + gradlePlugin { plugins { create("platformPlugin") { @@ -30,7 +36,12 @@ gradlePlugin { } } +val properties by lazy { + Properties().apply { + load(rootDir.parentFile.resolve("gradle.properties").inputStream()) + } +} + dependencies { - // FIXME: This should not hard-code the Loom version. - implementation("dev.architectury.loom:dev.architectury.loom.gradle.plugin:1.7.+") + implementation("dev.architectury.loom:dev.architectury.loom.gradle.plugin:${properties["arch_loom_version"]}") } diff --git a/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt b/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt index eeff691a4..8eda2f418 100644 --- a/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt +++ b/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectPlugin.kt @@ -51,9 +51,6 @@ class SubprojectPlugin: Plugin { private fun setupLoom(project: Project) { val loom = project.the() loom.silentMojangMappingsLicense() - - //fixme is this still needed? -// loom.mixin.defaultRefmapName = "flywheel.refmap.json" } private fun setupJava(project: Project) { diff --git a/common/src/api/java/dev/engine_room/flywheel/api/model/Model.java b/common/src/api/java/dev/engine_room/flywheel/api/model/Model.java index 9ad458193..e3d42fdd5 100644 --- a/common/src/api/java/dev/engine_room/flywheel/api/model/Model.java +++ b/common/src/api/java/dev/engine_room/flywheel/api/model/Model.java @@ -2,12 +2,10 @@ import java.util.List; -import dev.engine_room.flywheel.api.instance.InstanceType; - -import dev.engine_room.flywheel.api.instance.InstancerProvider; - import org.joml.Vector4fc; +import dev.engine_room.flywheel.api.instance.InstanceType; +import dev.engine_room.flywheel.api.instance.InstancerProvider; import dev.engine_room.flywheel.api.material.Material; public interface Model { diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/SimpleQuadMesh.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/SimpleQuadMesh.java index 92e1e9372..e7ff25a5b 100644 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/SimpleQuadMesh.java +++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/SimpleQuadMesh.java @@ -6,25 +6,21 @@ import dev.engine_room.flywheel.api.vertex.MutableVertexList; import dev.engine_room.flywheel.api.vertex.VertexList; -import dev.engine_room.flywheel.lib.memory.MemoryBlock; public final class SimpleQuadMesh implements QuadMesh { private final VertexList vertexList; - // Unused but we need to hold on to a reference so the cleaner doesn't nuke us. - private final MemoryBlock data; private final Vector4f boundingSphere; @Nullable private final String descriptor; - public SimpleQuadMesh(VertexList vertexList, MemoryBlock data, @Nullable String descriptor) { + public SimpleQuadMesh(VertexList vertexList, @Nullable String descriptor) { this.vertexList = vertexList; - this.data = data; boundingSphere = ModelUtil.computeBoundingSphere(vertexList); this.descriptor = descriptor; } - public SimpleQuadMesh(VertexList vertexList, MemoryBlock data) { - this(vertexList, data, null); + public SimpleQuadMesh(VertexList vertexList) { + this(vertexList, null); } @Override diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshHelper.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshHelper.java index 47040050f..c0191fc4c 100644 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshHelper.java +++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshHelper.java @@ -41,7 +41,8 @@ public static SimpleQuadMesh blockVerticesToMesh(MeshData data, @Nullable String vertexView.ptr(dstPtr); vertexView.vertexCount(vertexCount); + vertexView.nativeMemoryOwner(dst); - return new SimpleQuadMesh(vertexView, dst, meshDescriptor); + return new SimpleQuadMesh(vertexView, meshDescriptor); } } diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/part/ModelPartConverter.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/part/ModelPartConverter.java index 9c229a8d8..63560d857 100644 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/part/ModelPartConverter.java +++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/part/ModelPartConverter.java @@ -37,7 +37,7 @@ public static Mesh convert(ModelPart modelPart, @Nullable PoseStack poseStack, @ VertexView vertexView = new PosTexNormalVertexView(); vertexView.load(data); - return new SimpleQuadMesh(vertexView, data, "source=ModelPartConverter"); + return new SimpleQuadMesh(vertexView, "source=ModelPartConverter"); } public static Mesh convert(ModelLayerLocation layer, @Nullable TextureAtlasSprite sprite, String... childPath) { diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/vertex/AbstractVertexView.java b/common/src/lib/java/dev/engine_room/flywheel/lib/vertex/AbstractVertexView.java index b6752ee17..7a7b506f3 100644 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/vertex/AbstractVertexView.java +++ b/common/src/lib/java/dev/engine_room/flywheel/lib/vertex/AbstractVertexView.java @@ -1,8 +1,12 @@ package dev.engine_room.flywheel.lib.vertex; +import org.jetbrains.annotations.Nullable; + public abstract class AbstractVertexView implements VertexView { protected long ptr; protected int vertexCount; + @Nullable + private Object nativeMemoryOwner; @Override public long ptr() { @@ -23,4 +27,15 @@ public int vertexCount() { public void vertexCount(int vertexCount) { this.vertexCount = vertexCount; } + + @Override + @Nullable + public final Object nativeMemoryOwner() { + return nativeMemoryOwner; + } + + @Override + public final void nativeMemoryOwner(@Nullable Object owner) { + nativeMemoryOwner = owner; + } } diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/vertex/VertexView.java b/common/src/lib/java/dev/engine_room/flywheel/lib/vertex/VertexView.java index 1336153cd..4c60462a2 100644 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/vertex/VertexView.java +++ b/common/src/lib/java/dev/engine_room/flywheel/lib/vertex/VertexView.java @@ -1,5 +1,6 @@ package dev.engine_room.flywheel.lib.vertex; +import org.jetbrains.annotations.Nullable; import org.lwjgl.system.MemoryUtil; import dev.engine_room.flywheel.api.vertex.MutableVertexList; @@ -14,6 +15,17 @@ public interface VertexView extends MutableVertexList { long stride(); + @Nullable + Object nativeMemoryOwner(); + + /** + * The memory referenced by this vertex view's pointer may be owned by another object, such that the memory is + * automatically freed when the other object becomes phantom reachable or is garbage collected. Use this method to + * ensure this vertex view retains a strong reference to the memory owner so this vertex view's pointer remains + * valid even when no other references to the memory owner are retained. + */ + void nativeMemoryOwner(@Nullable Object owner); + default void load(MemoryBlock data) { long bytes = data.size(); long stride = stride(); @@ -24,6 +36,7 @@ default void load(MemoryBlock data) { ptr(data.ptr()); vertexCount(vertexCount); + nativeMemoryOwner(data); } @Override diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index 911424e38..0e6bc0621 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -60,6 +60,14 @@ defaultPackageInfos { sources(api, lib, backend, main) } +loom { + mixin { + useLegacyMixinAp = true + add(main, "flywheel.refmap.json") + add(backend, "backend-flywheel.refmap.json") + } +} + dependencies { modImplementation("net.fabricmc:fabric-loader:${property("fabric_loader_version")}") modApi("net.fabricmc.fabric-api:fabric-api:${property("fabric_api_version")}") diff --git a/forge/build.gradle.kts b/forge/build.gradle.kts index ccd4aec73..3ee25ef3c 100644 --- a/forge/build.gradle.kts +++ b/forge/build.gradle.kts @@ -61,6 +61,18 @@ defaultPackageInfos { } loom { + mixin { + useLegacyMixinAp = true + add(main, "flywheel.refmap.json") + add(backend, "backend-flywheel.refmap.json") + } + + forge { + mixinConfig("flywheel.backend.mixins.json") + mixinConfig("flywheel.impl.mixins.json") + mixinConfig("flywheel.impl.sodium.mixins.json") + } + runs { configureEach { property("forge.logging.markers", "") diff --git a/gradle.properties b/gradle.properties index ef84f6a53..336e9a4a6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,8 +19,8 @@ neoforge_version_range = [21.0.167,) # General build dependency versions java_version = 21 -# FIXME: This doesn't do anything. -# arch_loom_version = 1.6-SNAPSHOT +arch_loom_version=1.7.412 +cursegradle_version = 1.4.0 parchment_version = 2024.07.07 # Minecraft build dependency versions diff --git a/settings.gradle.kts b/settings.gradle.kts index 97288b494..7d82f8b8b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -11,12 +11,6 @@ pluginManagement { maven("https://repo.spongepowered.org/repository/maven-public") maven("https://maven.parchmentmc.org") } - - // FIXME: This doesn't do anything. The actual version is always the one defined in buildSrc/build.gradle.kts. -// plugins { -// val arch_loom_version: String by settings -// id("dev.architectury.loom") version arch_loom_version -// } } rootProject.name = "Flywheel"