graphics: Add VertexFlaotNum

This commit is contained in:
Hajime Hoshi 2018-11-06 02:34:52 +09:00
parent 580cd5cc71
commit c9f49efd41
3 changed files with 13 additions and 9 deletions

View File

@ -23,23 +23,22 @@ type verticesBackend struct {
head int head int
} }
const VertexFloatNum = 10
func (v *verticesBackend) slice(n int) []float32 { func (v *verticesBackend) slice(n int) []float32 {
const ( const num = 1024
num = 1024
vertexFloatNum = 10
)
if n > num { if n > num {
panic("not reached") panic("not reached")
} }
need := n * vertexFloatNum need := n * VertexFloatNum
if v.head+need > len(v.backend) { if v.head+need > len(v.backend) {
v.backend = nil v.backend = nil
v.head = 0 v.head = 0
} }
if v.backend == nil { if v.backend == nil {
v.backend = make([]float32, vertexFloatNum*num) v.backend = make([]float32, VertexFloatNum*num)
} }
s := v.backend[v.head : v.head+need] s := v.backend[v.head : v.head+need]
@ -75,6 +74,8 @@ func QuadVertices(width, height int, sx0, sy0, sx1, sy1 int, a, b, c, d, tx, ty
func quadVerticesImpl(x, y, u0, v0, u1, v1, a, b, c, d, tx, ty, cr, cg, cb, ca float32) []float32 { func quadVerticesImpl(x, y, u0, v0, u1, v1, a, b, c, d, tx, ty, cr, cg, cb, ca float32) []float32 {
// Specifying a range explicitly here is redundant but this helps optimization // Specifying a range explicitly here is redundant but this helps optimization
// to eliminate boundry checks. // to eliminate boundry checks.
//
// 4*VertexFloatNum is better than 40, but in GopherJS, optimization might not work.
vs := theVerticesBackend.slice(4)[0:40] vs := theVerticesBackend.slice(4)[0:40]
ax, by, cx, dy := a*x, b*y, c*x, d*y ax, by, cx, dy := a*x, b*y, c*x, d*y

View File

@ -126,7 +126,7 @@ func (q *commandQueue) EnqueueDrawImageCommand(dst, src *Image, vertices []float
q.appendVertices(vertices) q.appendVertices(vertices)
q.appendIndices(indices, uint16(q.nextIndex)) q.appendIndices(indices, uint16(q.nextIndex))
q.nextIndex += len(vertices) / opengl.ArrayBufferLayoutFloatNum() q.nextIndex += len(vertices) / graphics.VertexFloatNum
q.tmpNumIndices += len(indices) q.tmpNumIndices += len(indices)
q.doEnqueueDrawImageCommand(dst, src, len(vertices), len(indices), color, mode, filter, split) q.doEnqueueDrawImageCommand(dst, src, len(vertices), len(indices), color, mode, filter, split)

View File

@ -101,8 +101,11 @@ func initializeArrayBuferLayout() {
} }
} }
func ArrayBufferLayoutFloatNum() int { func init() {
return theArrayBufferLayout.totalBytes() / float.SizeInBytes() vertexFloatNum := theArrayBufferLayout.totalBytes() / float.SizeInBytes()
if graphics.VertexFloatNum != vertexFloatNum {
panic(fmt.Sprintf("vertex float num must be %d but %d", graphics.VertexFloatNum, vertexFloatNum))
}
} }
// openGLState is a state for // openGLState is a state for