@@ -32,10 +32,6 @@ abstract class TDDrawBase {
3232 protected useNBT = false ;
3333 protected loadedVertexLayout : LoadedVertexLayout | null = null ;
3434 protected inputLayout : GfxInputLayout | null = null ;
35- protected vertexBuffer : GfxBuffer | null = null ;
36- protected indexBuffer : GfxBuffer | null = null ;
37- protected vertexBufferDescriptors : GfxVertexBufferDescriptor [ ] ;
38- protected indexBufferDescriptor : GfxIndexBufferDescriptor ;
3935
4036 // Global information
4137 protected currentVertex : number ;
@@ -51,9 +47,6 @@ abstract class TDDrawBase {
5147 for ( let i = GX . Attr . POS ; i <= GX . Attr . TEX7 ; i ++ ) {
5248 this . vcd [ i ] = { type : GX . AttrType . NONE } ;
5349 }
54-
55- this . vertexBufferDescriptors = [ { buffer : null ! } ] ;
56- this . indexBufferDescriptor = { buffer : null ! } ;
5750 }
5851
5952 public setVtxDesc ( attr : GX . Attr , enabled : boolean ) : void {
@@ -163,10 +156,9 @@ abstract class TDDrawBase {
163156}
164157
165158export class TDDraw extends TDDrawBase {
166- private recreateVertexBuffer : boolean = true ;
167- private recreateIndexBuffer : boolean = true ;
168-
169159 private startIndex : number ;
160+ private vertexBufferDescriptor : GfxVertexBufferDescriptor | null = null ;
161+ private indexBufferDescriptor : GfxIndexBufferDescriptor | null = null ;
170162
171163 constructor ( name : string = '' ) {
172164 super ( name ) ;
@@ -180,7 +172,6 @@ export class TDDraw extends TDDrawBase {
180172 const newByteSizeAligned = align ( newByteSize , this . vertexData . byteLength ) ;
181173 const newBuffer = ( this . vertexData . buffer as ArrayBuffer ) . transfer ( newByteSizeAligned ) ;
182174 this . vertexData = new DataView ( newBuffer ) ;
183- this . recreateVertexBuffer = true ;
184175 }
185176 }
186177
@@ -190,7 +181,6 @@ export class TDDraw extends TDDrawBase {
190181 const newSizeAligned = align ( newSize , this . indexData . length ) ;
191182 const newBuffer = ( this . indexData . buffer as ArrayBuffer ) . transfer ( newSizeAligned * 2 ) ;
192183 this . indexData = new Uint16Array ( newBuffer ) ;
193- this . recreateIndexBuffer = true ;
194184 }
195185 }
196186
@@ -204,30 +194,20 @@ export class TDDraw extends TDDrawBase {
204194 this . currentVertex = - 1 ;
205195 this . currentIndex = 0 ;
206196 this . startIndex = 0 ;
207- }
208197
209- private flushDeviceObjects ( device : GfxDevice ) : void {
210- if ( this . recreateVertexBuffer ) {
211- if ( this . vertexBuffer !== null )
212- device . destroyBuffer ( this . vertexBuffer ) ;
213- this . vertexBuffer = device . createBuffer ( this . vertexData . byteLength , GfxBufferUsage . Vertex , GfxBufferFrequencyHint . Dynamic ) ;
214- device . setResourceName ( this . vertexBuffer , `TDDraw ${ this . name } ` ) ;
215- this . vertexBufferDescriptors [ 0 ] . buffer = this . vertexBuffer ;
216- this . recreateVertexBuffer = false ;
217- }
198+ this . vertexBufferDescriptor = null ;
199+ this . indexBufferDescriptor = null ;
200+ }
218201
219- if ( this . recreateIndexBuffer ) {
220- if ( this . indexBuffer !== null )
221- device . destroyBuffer ( this . indexBuffer ) ;
222- this . indexBuffer = device . createBuffer ( this . indexData . byteLength , GfxBufferUsage . Index , GfxBufferFrequencyHint . Dynamic ) ;
223- device . setResourceName ( this . indexBuffer , `TDDraw ${ this . name } (IB)` ) ;
224- this . indexBufferDescriptor . buffer = this . indexBuffer ;
225- this . recreateIndexBuffer = false ;
226- }
202+ private flushDeviceObjects ( cache : GfxRenderCache ) : void {
203+ if ( this . vertexBufferDescriptor === null )
204+ this . vertexBufferDescriptor = cache . dynamicBufferCache . allocateSize ( GfxBufferUsage . Vertex , this . vertexData . byteLength ) ;
205+ if ( this . indexBufferDescriptor === null )
206+ this . indexBufferDescriptor = cache . dynamicBufferCache . allocateSize ( GfxBufferUsage . Index , this . indexData . byteLength ) ;
227207 }
228208
229209 public setOnRenderInst ( renderInst : GfxRenderInst ) : void {
230- renderInst . setVertexInput ( this . inputLayout , this . vertexBufferDescriptors , this . indexBufferDescriptor ) ;
210+ renderInst . setVertexInput ( this . inputLayout , [ this . vertexBufferDescriptor ] , this . indexBufferDescriptor ) ;
231211 renderInst . setDrawCount ( this . currentIndex - this . startIndex , this . startIndex ) ;
232212 }
233213
@@ -236,18 +216,18 @@ export class TDDraw extends TDDrawBase {
236216 }
237217
238218 public makeRenderInst ( renderInstManager : GfxRenderInstManager ) : GfxRenderInst {
239- this . flushDeviceObjects ( renderInstManager . gfxRenderCache . device ) ;
219+ this . flushDeviceObjects ( renderInstManager . gfxRenderCache ) ;
240220 const renderInst = renderInstManager . newRenderInst ( ) ;
241221 this . setOnRenderInst ( renderInst ) ;
242222 this . startIndex = this . currentIndex ;
243223 return renderInst ;
244224 }
245225
246226 public endDraw ( renderInstManager : GfxRenderInstManager ) : void {
247- const device = renderInstManager . gfxRenderCache . device ;
248- this . flushDeviceObjects ( device ) ;
249- device . uploadBufferData ( this . vertexBuffer ! , 0 , new Uint8Array ( this . vertexData . buffer ) ) ;
250- device . uploadBufferData ( this . indexBuffer ! , 0 , new Uint8Array ( this . indexData . buffer ) ) ;
227+ const cache = renderInstManager . gfxRenderCache , device = cache . device ;
228+ this . flushDeviceObjects ( renderInstManager . gfxRenderCache ) ;
229+ device . uploadBufferData ( this . vertexBufferDescriptor ! . buffer , 0 , new Uint8Array ( this . vertexData . buffer ) ) ;
230+ device . uploadBufferData ( this . indexBufferDescriptor ! . buffer , 0 , new Uint8Array ( this . indexData . buffer ) ) ;
251231 }
252232
253233 public endDrawAndMakeRenderInst ( renderInstManager : GfxRenderInstManager ) : GfxRenderInst {
@@ -256,23 +236,17 @@ export class TDDraw extends TDDrawBase {
256236 }
257237
258238 public destroy ( device : GfxDevice ) : void {
259- if ( this . indexBuffer !== null ) {
260- device . destroyBuffer ( this . indexBuffer ) ;
261- this . indexBuffer = null ;
262- this . recreateIndexBuffer = true ;
263- }
264-
265- if ( this . vertexBuffer !== null ) {
266- device . destroyBuffer ( this . vertexBuffer ) ;
267- this . vertexBuffer = null ;
268- this . recreateVertexBuffer = true ;
269- }
270239 }
271240}
272241
273242// Static Draw helper for places where we might want to make TDDraw into a buffer
274243// that does not change very much.
275244export class TSDraw extends TDDrawBase {
245+ private vertexBuffer : GfxBuffer | null = null ;
246+ private indexBuffer : GfxBuffer | null = null ;
247+ private vertexBufferDescriptors : GfxVertexBufferDescriptor [ ] = [ ] ;
248+ private indexBufferDescriptor : GfxIndexBufferDescriptor ;
249+
276250 constructor ( name : string = '' ) {
277251 super ( name ) ;
278252 this . vertexData = new DataView ( new ArrayBuffer ( 0x400 ) ) ;
@@ -310,10 +284,10 @@ export class TSDraw extends TDDrawBase {
310284 const device = cache . device ;
311285 this . vertexBuffer = device . createBuffer ( this . vertexData . byteLength , GfxBufferUsage . Vertex , GfxBufferFrequencyHint . Static ) ;
312286 device . setResourceName ( this . vertexBuffer , `TSDraw ${ this . name } ` ) ;
313- this . vertexBufferDescriptors [ 0 ] . buffer = this . vertexBuffer ;
287+ this . vertexBufferDescriptors [ 0 ] = { buffer : this . vertexBuffer } ;
314288 this . indexBuffer = device . createBuffer ( this . indexData . byteLength , GfxBufferUsage . Index , GfxBufferFrequencyHint . Static ) ;
315289 device . setResourceName ( this . indexBuffer , `TSDraw ${ this . name } (IB)` ) ;
316- this . indexBufferDescriptor . buffer = this . indexBuffer ;
290+ this . indexBufferDescriptor = { buffer : this . indexBuffer } ;
317291 }
318292
319293 public setOnRenderInst ( renderInst : GfxRenderInst ) : void {
0 commit comments