From 34bae57460392cfe07480ec603457dc23b9b8d1c Mon Sep 17 00:00:00 2001 From: Michael Pollind Date: Sat, 4 Sep 2021 08:54:08 -0700 Subject: [PATCH 1/3] chore: add index resource and test cases --- .../assets/mesh/IndexResourceTest.java | 93 +++++++++++++++++++ .../assets/mesh/resource/IndexResource.java | 14 +-- .../engine/rendering/opengl/OpenGLMesh.java | 4 +- 3 files changed, 97 insertions(+), 14 deletions(-) create mode 100644 engine-tests/src/test/java/org/terasology/engine/rendering/assets/mesh/IndexResourceTest.java diff --git a/engine-tests/src/test/java/org/terasology/engine/rendering/assets/mesh/IndexResourceTest.java b/engine-tests/src/test/java/org/terasology/engine/rendering/assets/mesh/IndexResourceTest.java new file mode 100644 index 00000000000..eed1ccc05e0 --- /dev/null +++ b/engine-tests/src/test/java/org/terasology/engine/rendering/assets/mesh/IndexResourceTest.java @@ -0,0 +1,93 @@ +// Copyright 2021 The Terasology Foundation +// SPDX-License-Identifier: Apache-2.0 + +package org.terasology.engine.rendering.assets.mesh; + +import org.junit.jupiter.api.Test; +import org.terasology.engine.rendering.assets.mesh.resource.IndexResource; + +import java.nio.ByteBuffer; +import java.util.function.Consumer; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class IndexResourceTest { + @Test + public void testPutIndexResource() { + IndexResource in = new IndexResource(); + in.put(10); + in.put(11); + in.put(15); + + assertEquals(3, in.indices()); + in.writeBuffer(new Consumer() { + @Override + public void accept(ByteBuffer buffer) { + assertEquals(3 * Integer.BYTES, buffer.limit()); + + assertEquals(10, buffer.getInt(0)); + assertEquals(11, buffer.getInt(1 * Integer.BYTES)); + assertEquals(15, buffer.getInt(2 * Integer.BYTES)); + } + }); + } + + @Test + public void testRewind() { + IndexResource in = new IndexResource(); + in.put(10); + in.put(11); + in.put(15); + + assertEquals(3, in.indices()); + in.writeBuffer(buffer -> { + assertEquals(3 * Integer.BYTES, buffer.limit()); + + assertEquals(10, buffer.getInt(0)); + assertEquals(11, buffer.getInt(1 * Integer.BYTES)); + assertEquals(15, buffer.getInt(2 * Integer.BYTES)); + }); + + in.rewind(); + in.put(20); + assertEquals(3, in.indices()); + in.writeBuffer(buffer -> { + assertEquals(3 * Integer.BYTES, buffer.limit()); + + assertEquals(20, buffer.getInt(0)); + assertEquals(11, buffer.getInt(1 * Integer.BYTES)); + assertEquals(15, buffer.getInt(2 * Integer.BYTES)); + }); + + } + + @Test + public void testAllocate() { + + IndexResource in = new IndexResource(); + in.allocateElements(20); // re-allocate to 20 indices + + in.put(100); + in.put(14); + in.put(10); + + assertEquals(20, in.indices()); + in.writeBuffer(buffer -> { + assertEquals(20 * Integer.BYTES, buffer.limit()); + + assertEquals(100, buffer.getInt(0)); + assertEquals(14, buffer.getInt(1 * Integer.BYTES)); + assertEquals(10, buffer.getInt(2 * Integer.BYTES)); + }); + + in.allocateElements(4); // re-allocate to 4 indices + assertEquals(4, in.indices()); + in.writeBuffer(buffer -> { + assertEquals(4 * Integer.BYTES, buffer.limit()); + + assertEquals(100, buffer.getInt(0)); + assertEquals(14, buffer.getInt(1 * Integer.BYTES)); + assertEquals(10, buffer.getInt(2 * Integer.BYTES)); + }); + } +} diff --git a/engine/src/main/java/org/terasology/engine/rendering/assets/mesh/resource/IndexResource.java b/engine/src/main/java/org/terasology/engine/rendering/assets/mesh/resource/IndexResource.java index 375a91ec714..bb03f8da782 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/assets/mesh/resource/IndexResource.java +++ b/engine/src/main/java/org/terasology/engine/rendering/assets/mesh/resource/IndexResource.java @@ -13,7 +13,6 @@ */ public class IndexResource extends BufferedResource { public static final Logger logger = LoggerFactory.getLogger(IndexResource.class); - private int inIndices = 0; private int posIndex = 0; public IndexResource() { @@ -21,13 +20,12 @@ public IndexResource() { } public int indices() { - return inIndices; + return this.inSize / Integer.BYTES; } public void copy(IndexResource resource) { copyBuffer(resource); this.inSize = resource.inSize; - this.inIndices = resource.indices(); } public void reserveElements(int elements) { @@ -36,16 +34,12 @@ public void reserveElements(int elements) { public void rewind() { posIndex = 0; - inIndices = 0; } public void put(int value) { ensureCapacity((posIndex + 1) * Integer.BYTES); buffer.putInt(posIndex * Integer.BYTES, value); posIndex++; - if (posIndex > inIndices) { - inIndices = posIndex; - } } public void putAll(int value, int... values) { @@ -77,10 +71,6 @@ public void put(int index, int value) { @Override public boolean isEmpty() { - return inIndices == 0; + return this.inSize == 0; } - - - - } diff --git a/engine/src/main/java/org/terasology/engine/rendering/opengl/OpenGLMesh.java b/engine/src/main/java/org/terasology/engine/rendering/opengl/OpenGLMesh.java index 8266cd466e6..0a52d1f7e67 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/opengl/OpenGLMesh.java +++ b/engine/src/main/java/org/terasology/engine/rendering/opengl/OpenGLMesh.java @@ -31,7 +31,7 @@ public class OpenGLMesh extends Mesh implements OpenGLMeshBase { private DrawingMode drawMode; private AllocationType allocationType; - private VertexAttributeBinding positions; + private VertexAttributeBinding positions; private VBOContext state = null; @@ -79,7 +79,7 @@ public void render() { if (!isDisposed()) { updateState(state); GL30.glBindVertexArray(disposalAction.vao); - if(this.indexCount == 0) { + if (this.indexCount == 0) { GL30.glDrawArrays(drawMode.glCall, 0, positions.elements()); } else { GL30.glDrawElements(drawMode.glCall, this.indexCount, GL_UNSIGNED_INT, 0); From 090b1ed60d59a018177f713e9abb9b497e9815a5 Mon Sep 17 00:00:00 2001 From: Michael Pollind Date: Sat, 4 Sep 2021 10:14:53 -0700 Subject: [PATCH 2/3] update buffer --- .../rendering/assets/mesh/IndexResourceTest.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/engine-tests/src/test/java/org/terasology/engine/rendering/assets/mesh/IndexResourceTest.java b/engine-tests/src/test/java/org/terasology/engine/rendering/assets/mesh/IndexResourceTest.java index eed1ccc05e0..d1003b8325c 100644 --- a/engine-tests/src/test/java/org/terasology/engine/rendering/assets/mesh/IndexResourceTest.java +++ b/engine-tests/src/test/java/org/terasology/engine/rendering/assets/mesh/IndexResourceTest.java @@ -20,15 +20,12 @@ public void testPutIndexResource() { in.put(15); assertEquals(3, in.indices()); - in.writeBuffer(new Consumer() { - @Override - public void accept(ByteBuffer buffer) { - assertEquals(3 * Integer.BYTES, buffer.limit()); - - assertEquals(10, buffer.getInt(0)); - assertEquals(11, buffer.getInt(1 * Integer.BYTES)); - assertEquals(15, buffer.getInt(2 * Integer.BYTES)); - } + in.writeBuffer(buffer -> { + assertEquals(3 * Integer.BYTES, buffer.limit()); + + assertEquals(10, buffer.getInt(0)); + assertEquals(11, buffer.getInt(1 * Integer.BYTES)); + assertEquals(15, buffer.getInt(2 * Integer.BYTES)); }); } From f8861b4ccbd981f667ec97b1c92e87645da1049a Mon Sep 17 00:00:00 2001 From: Michael Pollind Date: Sat, 4 Sep 2021 14:37:25 -0700 Subject: [PATCH 3/3] chore: remove imports unused --- .../engine/rendering/assets/mesh/IndexResourceTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/engine-tests/src/test/java/org/terasology/engine/rendering/assets/mesh/IndexResourceTest.java b/engine-tests/src/test/java/org/terasology/engine/rendering/assets/mesh/IndexResourceTest.java index d1003b8325c..4c8b3d8a517 100644 --- a/engine-tests/src/test/java/org/terasology/engine/rendering/assets/mesh/IndexResourceTest.java +++ b/engine-tests/src/test/java/org/terasology/engine/rendering/assets/mesh/IndexResourceTest.java @@ -6,9 +6,6 @@ import org.junit.jupiter.api.Test; import org.terasology.engine.rendering.assets.mesh.resource.IndexResource; -import java.nio.ByteBuffer; -import java.util.function.Consumer; - import static org.junit.jupiter.api.Assertions.assertEquals; public class IndexResourceTest {