Skip to content

Commit c952201

Browse files
committed
Fix index buffer reallocation bug
1 parent 85a3734 commit c952201

1 file changed

Lines changed: 62 additions & 32 deletions

File tree

  • src/main/java/net/vulkanmod/render

src/main/java/net/vulkanmod/render/VBO.java

Lines changed: 62 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class VBO {
2424
private int vertexCount;
2525

2626
public VBO(boolean useGpuMem) {
27-
this.memoryType = useGpuMem ? MemoryTypes.GPU_MEM : MemoryTypes.HOST_MEM;
27+
this.memoryType = useGpuMem ? MemoryTypes.GPU_MEM : MemoryTypes.HOST_MEM;
2828
}
2929

3030
public void upload(MeshData meshData) {
@@ -53,41 +53,10 @@ private void uploadVertexBuffer(MeshData.DrawState parameters, ByteBuffer data)
5353

5454
public void uploadIndexBuffer(ByteBuffer data) {
5555
if (data == null) {
56-
57-
AutoIndexBuffer autoIndexBuffer;
58-
switch (this.mode) {
59-
case TRIANGLE_FAN -> {
60-
autoIndexBuffer = Renderer.getDrawer().getTriangleFanIndexBuffer();
61-
this.indexCount = AutoIndexBuffer.DrawType.getTriangleStripIndexCount(this.vertexCount);
62-
}
63-
case TRIANGLE_STRIP, LINE_STRIP -> {
64-
autoIndexBuffer = Renderer.getDrawer().getTriangleStripIndexBuffer();
65-
this.indexCount = AutoIndexBuffer.DrawType.getTriangleStripIndexCount(this.vertexCount);
66-
}
67-
case QUADS -> {
68-
autoIndexBuffer = Renderer.getDrawer().getQuadsIndexBuffer();
69-
}
70-
case LINES -> {
71-
autoIndexBuffer = Renderer.getDrawer().getLinesIndexBuffer();
72-
}
73-
case DEBUG_LINE_STRIP -> {
74-
autoIndexBuffer = Renderer.getDrawer().getDebugLineStripIndexBuffer();
75-
}
76-
case TRIANGLES, DEBUG_LINES -> {
77-
autoIndexBuffer = null;
78-
}
79-
default -> throw new IllegalStateException("Unexpected draw mode: %s".formatted(this.mode));
80-
}
81-
8256
if (this.indexBuffer != null && !this.autoIndexed) {
8357
this.indexBuffer.scheduleFree();
8458
}
8559

86-
if (autoIndexBuffer != null) {
87-
autoIndexBuffer.checkCapacity(this.vertexCount);
88-
this.indexBuffer = autoIndexBuffer.getIndexBuffer();
89-
}
90-
9160
this.autoIndexed = true;
9261
}
9362
else {
@@ -100,6 +69,40 @@ public void uploadIndexBuffer(ByteBuffer data) {
10069
}
10170
}
10271

72+
private IndexBuffer getAutoIndexBuffer() {
73+
AutoIndexBuffer autoIndexBuffer;
74+
switch (this.mode) {
75+
case TRIANGLE_FAN -> {
76+
autoIndexBuffer = Renderer.getDrawer().getTriangleFanIndexBuffer();
77+
this.indexCount = AutoIndexBuffer.DrawType.getTriangleStripIndexCount(this.vertexCount);
78+
}
79+
case TRIANGLE_STRIP -> {
80+
autoIndexBuffer = Renderer.getDrawer().getTriangleStripIndexBuffer();
81+
this.indexCount = AutoIndexBuffer.DrawType.getTriangleStripIndexCount(this.vertexCount);
82+
}
83+
case QUADS -> {
84+
autoIndexBuffer = Renderer.getDrawer().getQuadsIndexBuffer();
85+
}
86+
case LINES -> {
87+
autoIndexBuffer = Renderer.getDrawer().getLinesIndexBuffer();
88+
}
89+
case DEBUG_LINE_STRIP -> {
90+
autoIndexBuffer = Renderer.getDrawer().getDebugLineStripIndexBuffer();
91+
}
92+
case TRIANGLES, DEBUG_LINES -> {
93+
autoIndexBuffer = null;
94+
}
95+
default -> throw new IllegalStateException("Unexpected draw mode: %s".formatted(this.mode));
96+
}
97+
98+
if (autoIndexBuffer != null) {
99+
autoIndexBuffer.checkCapacity(this.vertexCount);
100+
return autoIndexBuffer.getIndexBuffer();
101+
}
102+
103+
return null;
104+
}
105+
103106
public void bind(GraphicsPipeline pipeline) {
104107
Renderer renderer = Renderer.getInstance();
105108
renderer.bindGraphicsPipeline(pipeline);
@@ -113,6 +116,10 @@ public void draw() {
113116
Pipeline pipeline = renderer.getBoundPipeline();
114117
renderer.uploadAndBindUBOs(pipeline);
115118

119+
if (this.autoIndexed) {
120+
this.indexBuffer = getAutoIndexBuffer();
121+
}
122+
116123
if (this.indexBuffer != null) {
117124
Renderer.getDrawer().drawIndexed(this.vertexBuffer, this.indexBuffer, this.indexCount);
118125
}
@@ -138,4 +145,27 @@ public void close() {
138145
this.indexCount = 0;
139146
}
140147

148+
public VertexBuffer getVertexBuffer() {
149+
return vertexBuffer;
150+
}
151+
152+
public int getVertexCount() {
153+
return vertexCount;
154+
}
155+
156+
public int getIndexCount() {
157+
return indexCount;
158+
}
159+
160+
public boolean isAutoIndexed() {
161+
return autoIndexed;
162+
}
163+
164+
public VertexFormat.Mode getMode() {
165+
return mode;
166+
}
167+
168+
public IndexBuffer getIndexBuffer() {
169+
return indexBuffer;
170+
}
141171
}

0 commit comments

Comments
 (0)