@@ -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