mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2024-11-10 12:34:11 +01:00
Allow VertexViews to hold a memory owner
- Remove MemoryBlock parameter from SimpleQuadMesh constructors
This commit is contained in:
parent
1a8ed8db28
commit
14ca1d3286
@ -2,12 +2,10 @@ package dev.engine_room.flywheel.api.model;
|
||||
|
||||
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 {
|
||||
|
@ -6,25 +6,21 @@ import org.joml.Vector4fc;
|
||||
|
||||
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
|
||||
|
@ -41,7 +41,8 @@ final class MeshHelper {
|
||||
|
||||
vertexView.ptr(dstPtr);
|
||||
vertexView.vertexCount(vertexCount);
|
||||
vertexView.nativeMemoryOwner(dst);
|
||||
|
||||
return new SimpleQuadMesh(vertexView, dst, meshDescriptor);
|
||||
return new SimpleQuadMesh(vertexView, meshDescriptor);
|
||||
}
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ public final class ModelPartConverter {
|
||||
|
||||
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) {
|
||||
|
@ -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 abstract class AbstractVertexView implements VertexView {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -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 @@ public interface VertexView extends MutableVertexList {
|
||||
|
||||
ptr(data.ptr());
|
||||
vertexCount(vertexCount);
|
||||
nativeMemoryOwner(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
Reference in New Issue
Block a user