mirror of
				https://github.com/hajimehoshi/ebiten.git
				synced 2025-11-01 04:02:48 +08:00 
			
		
		
		
	internal/graphicscommand: refactoring: remove unnecessary restrictions for indices
Updates #2460
This commit is contained in:
		| @@ -67,7 +67,6 @@ type commandQueue struct { | |||||||
| 	indices  []uint16 | 	indices  []uint16 | ||||||
|  |  | ||||||
| 	tmpNumVertexFloats int | 	tmpNumVertexFloats int | ||||||
| 	tmpNumIndices      int |  | ||||||
|  |  | ||||||
| 	drawTrianglesCommandPool drawTrianglesCommandPool | 	drawTrianglesCommandPool drawTrianglesCommandPool | ||||||
|  |  | ||||||
| @@ -86,20 +85,15 @@ func (q *commandQueue) appendIndices(indices []uint16, offset uint16) { | |||||||
| } | } | ||||||
|  |  | ||||||
| // mustUseDifferentVertexBuffer reports whether a different vertex buffer must be used. | // mustUseDifferentVertexBuffer reports whether a different vertex buffer must be used. | ||||||
| func mustUseDifferentVertexBuffer(nextNumVertexFloats, nextNumIndices int) bool { | func mustUseDifferentVertexBuffer(nextNumVertexFloats int) bool { | ||||||
| 	return nextNumVertexFloats > graphics.IndicesCount*graphics.VertexFloatCount || nextNumIndices > graphics.IndicesCount | 	return nextNumVertexFloats > graphics.IndicesCount*graphics.VertexFloatCount | ||||||
| } | } | ||||||
|  |  | ||||||
| // EnqueueDrawTrianglesCommand enqueues a drawing-image command. | // EnqueueDrawTrianglesCommand enqueues a drawing-image command. | ||||||
| func (q *commandQueue) EnqueueDrawTrianglesCommand(dst *Image, srcs [graphics.ShaderImageCount]*Image, offsets [graphics.ShaderImageCount - 1][2]float32, vertices []float32, indices []uint16, blend graphicsdriver.Blend, dstRegion, srcRegion graphicsdriver.Region, shader *Shader, uniforms []uint32, evenOdd bool) { | func (q *commandQueue) EnqueueDrawTrianglesCommand(dst *Image, srcs [graphics.ShaderImageCount]*Image, offsets [graphics.ShaderImageCount - 1][2]float32, vertices []float32, indices []uint16, blend graphicsdriver.Blend, dstRegion, srcRegion graphicsdriver.Region, shader *Shader, uniforms []uint32, evenOdd bool) { | ||||||
| 	if len(indices) > graphics.IndicesCount { |  | ||||||
| 		panic(fmt.Sprintf("graphicscommand: len(indices) must be <= graphics.IndicesCount but not at EnqueueDrawTrianglesCommand: len(indices): %d, graphics.IndicesCount: %d", len(indices), graphics.IndicesCount)) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	split := false | 	split := false | ||||||
| 	if mustUseDifferentVertexBuffer(q.tmpNumVertexFloats+len(vertices), q.tmpNumIndices+len(indices)) { | 	if mustUseDifferentVertexBuffer(q.tmpNumVertexFloats + len(vertices)) { | ||||||
| 		q.tmpNumVertexFloats = 0 | 		q.tmpNumVertexFloats = 0 | ||||||
| 		q.tmpNumIndices = 0 |  | ||||||
| 		split = true | 		split = true | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -108,7 +102,6 @@ func (q *commandQueue) EnqueueDrawTrianglesCommand(dst *Image, srcs [graphics.Sh | |||||||
| 	q.vertices = append(q.vertices, vertices...) | 	q.vertices = append(q.vertices, vertices...) | ||||||
| 	q.appendIndices(indices, uint16(q.tmpNumVertexFloats/graphics.VertexFloatCount)) | 	q.appendIndices(indices, uint16(q.tmpNumVertexFloats/graphics.VertexFloatCount)) | ||||||
| 	q.tmpNumVertexFloats += len(vertices) | 	q.tmpNumVertexFloats += len(vertices) | ||||||
| 	q.tmpNumIndices += len(indices) |  | ||||||
|  |  | ||||||
| 	// prependPreservedUniforms not only prepends values to the given slice but also creates a new slice. | 	// prependPreservedUniforms not only prepends values to the given slice but also creates a new slice. | ||||||
| 	// Allocating a new slice is necessary to make EnqueueDrawTrianglesCommand safe so far. | 	// Allocating a new slice is necessary to make EnqueueDrawTrianglesCommand safe so far. | ||||||
| @@ -210,7 +203,6 @@ func (q *commandQueue) flush(graphicsDriver graphicsdriver.Graphics, endFrame bo | |||||||
| 		q.vertices = q.vertices[:0] | 		q.vertices = q.vertices[:0] | ||||||
| 		q.indices = q.indices[:0] | 		q.indices = q.indices[:0] | ||||||
| 		q.tmpNumVertexFloats = 0 | 		q.tmpNumVertexFloats = 0 | ||||||
| 		q.tmpNumIndices = 0 |  | ||||||
| 	}() | 	}() | ||||||
|  |  | ||||||
| 	cs := q.commands | 	cs := q.commands | ||||||
| @@ -220,10 +212,7 @@ func (q *commandQueue) flush(graphicsDriver graphicsdriver.Graphics, endFrame bo | |||||||
| 		nc := 0 | 		nc := 0 | ||||||
| 		for _, c := range cs { | 		for _, c := range cs { | ||||||
| 			if dtc, ok := c.(*drawTrianglesCommand); ok { | 			if dtc, ok := c.(*drawTrianglesCommand); ok { | ||||||
| 				if dtc.numIndices() > graphics.IndicesCount { | 				if nc > 0 && mustUseDifferentVertexBuffer(nv+dtc.numVertices()) { | ||||||
| 					panic(fmt.Sprintf("graphicscommand: dtc.NumIndices() must be <= graphics.IndicesCount but not at Flush: dtc.NumIndices(): %d, graphics.IndicesCount: %d", dtc.numIndices(), graphics.IndicesCount)) |  | ||||||
| 				} |  | ||||||
| 				if nc > 0 && mustUseDifferentVertexBuffer(nv+dtc.numVertices(), ne+dtc.numIndices()) { |  | ||||||
| 					break | 					break | ||||||
| 				} | 				} | ||||||
| 				nv += dtc.numVertices() | 				nv += dtc.numVertices() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Hajime Hoshi
					Hajime Hoshi