internal/graphicscommand: reduce the usages of the graphicsDriver function

This commit is contained in:
Hajime Hoshi 2022-03-19 23:03:34 +09:00
parent 839e442412
commit 7c2300b352
2 changed files with 23 additions and 23 deletions

View File

@ -35,7 +35,7 @@ import (
type command interface { type command interface {
fmt.Stringer fmt.Stringer
Exec(indexOffset int) error Exec(indexOffset int, graphicsDriver graphicsdriver.Graphics) error
} }
type size struct { type size struct {
@ -214,15 +214,15 @@ func (q *commandQueue) Enqueue(command command) {
} }
// Flush flushes the command queue. // Flush flushes the command queue.
func (q *commandQueue) Flush() (err error) { func (q *commandQueue) Flush(graphicsDriver graphicsdriver.Graphics) (err error) {
runOnRenderingThread(func() { runOnRenderingThread(func() {
err = q.flush() err = q.flush(graphicsDriver)
}) })
return return
} }
// flush must be called the main thread. // flush must be called the main thread.
func (q *commandQueue) flush() error { func (q *commandQueue) flush(graphicsDriver graphicsdriver.Graphics) error {
if len(q.commands) == 0 { if len(q.commands) == 0 {
return nil return nil
} }
@ -231,7 +231,7 @@ func (q *commandQueue) flush() error {
vs := q.vertices vs := q.vertices
debug.Logf("Graphics commands:\n") debug.Logf("Graphics commands:\n")
if graphicsDriver().HasHighPrecisionFloat() { if graphicsDriver.HasHighPrecisionFloat() {
n := q.nvertices / graphics.VertexFloatNum n := q.nvertices / graphics.VertexFloatNum
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
s := q.srcSizes[i] s := q.srcSizes[i]
@ -282,7 +282,7 @@ func (q *commandQueue) flush() error {
} }
} }
graphicsDriver().Begin() graphicsDriver.Begin()
var present bool var present bool
cs := q.commands cs := q.commands
for len(cs) > 0 { for len(cs) > 0 {
@ -306,13 +306,13 @@ func (q *commandQueue) flush() error {
nc++ nc++
} }
if 0 < ne { if 0 < ne {
graphicsDriver().SetVertices(vs[:nv], es[:ne]) graphicsDriver.SetVertices(vs[:nv], es[:ne])
es = es[ne:] es = es[ne:]
vs = vs[nv:] vs = vs[nv:]
} }
indexOffset := 0 indexOffset := 0
for _, c := range cs[:nc] { for _, c := range cs[:nc] {
if err := c.Exec(indexOffset); err != nil { if err := c.Exec(indexOffset, graphicsDriver); err != nil {
return err return err
} }
debug.Logf(" %s\n", c) debug.Logf(" %s\n", c)
@ -325,7 +325,7 @@ func (q *commandQueue) flush() error {
} }
cs = cs[nc:] cs = cs[nc:]
} }
graphicsDriver().End(present) graphicsDriver.End(present)
// Release the commands explicitly (#1803). // Release the commands explicitly (#1803).
// Apparently, the part of a slice between len and cap-1 still holds references. // Apparently, the part of a slice between len and cap-1 still holds references.
@ -346,7 +346,7 @@ func (q *commandQueue) flush() error {
// FlushCommands flushes the command queue. // FlushCommands flushes the command queue.
func FlushCommands() error { func FlushCommands() error {
return theCommandQueue.Flush() return theCommandQueue.Flush(graphicsDriver())
} }
// drawTrianglesCommand represents a drawing command to draw an image on another image. // drawTrianglesCommand represents a drawing command to draw an image on another image.
@ -453,7 +453,7 @@ func (c *drawTrianglesCommand) String() string {
} }
// Exec executes the drawTrianglesCommand. // Exec executes the drawTrianglesCommand.
func (c *drawTrianglesCommand) Exec(indexOffset int) error { func (c *drawTrianglesCommand) Exec(indexOffset int, graphicsDriver graphicsdriver.Graphics) error {
// TODO: Is it ok not to bind any framebuffer here? // TODO: Is it ok not to bind any framebuffer here?
if c.nindices == 0 { if c.nindices == 0 {
return nil return nil
@ -474,7 +474,7 @@ func (c *drawTrianglesCommand) Exec(indexOffset int) error {
imgs[0] = c.srcs[0].image.ID() imgs[0] = c.srcs[0].image.ID()
} }
return graphicsDriver().DrawTriangles(c.dst.image.ID(), imgs, c.offsets, shaderID, c.nindices, indexOffset, c.mode, c.color, c.filter, c.address, c.dstRegion, c.srcRegion, c.uniforms, c.evenOdd) return graphicsDriver.DrawTriangles(c.dst.image.ID(), imgs, c.offsets, shaderID, c.nindices, indexOffset, c.mode, c.color, c.filter, c.address, c.dstRegion, c.srcRegion, c.uniforms, c.evenOdd)
} }
func (c *drawTrianglesCommand) numVertices() int { func (c *drawTrianglesCommand) numVertices() int {
@ -583,7 +583,7 @@ func (c *replacePixelsCommand) String() string {
} }
// Exec executes the replacePixelsCommand. // Exec executes the replacePixelsCommand.
func (c *replacePixelsCommand) Exec(indexOffset int) error { func (c *replacePixelsCommand) Exec(indexOffset int, graphicsDriver graphicsdriver.Graphics) error {
c.dst.image.ReplacePixels(c.args) c.dst.image.ReplacePixels(c.args)
return nil return nil
} }
@ -594,7 +594,7 @@ type pixelsCommand struct {
} }
// Exec executes a pixelsCommand. // Exec executes a pixelsCommand.
func (c *pixelsCommand) Exec(indexOffset int) error { func (c *pixelsCommand) Exec(indexOffset int, graphicsDriver graphicsdriver.Graphics) error {
if err := c.img.image.ReadPixels(c.result); err != nil { if err := c.img.image.ReadPixels(c.result); err != nil {
return err return err
} }
@ -615,7 +615,7 @@ func (c *disposeImageCommand) String() string {
} }
// Exec executes the disposeImageCommand. // Exec executes the disposeImageCommand.
func (c *disposeImageCommand) Exec(indexOffset int) error { func (c *disposeImageCommand) Exec(indexOffset int, graphicsDriver graphicsdriver.Graphics) error {
c.target.image.Dispose() c.target.image.Dispose()
return nil return nil
} }
@ -630,7 +630,7 @@ func (c *disposeShaderCommand) String() string {
} }
// Exec executes the disposeShaderCommand. // Exec executes the disposeShaderCommand.
func (c *disposeShaderCommand) Exec(indexOffset int) error { func (c *disposeShaderCommand) Exec(indexOffset int, graphicsDriver graphicsdriver.Graphics) error {
c.target.shader.Dispose() c.target.shader.Dispose()
return nil return nil
} }
@ -647,8 +647,8 @@ func (c *newImageCommand) String() string {
} }
// Exec executes a newImageCommand. // Exec executes a newImageCommand.
func (c *newImageCommand) Exec(indexOffset int) error { func (c *newImageCommand) Exec(indexOffset int, graphicsDriver graphicsdriver.Graphics) error {
i, err := graphicsDriver().NewImage(c.width, c.height) i, err := graphicsDriver.NewImage(c.width, c.height)
if err != nil { if err != nil {
return err return err
} }
@ -668,9 +668,9 @@ func (c *newScreenFramebufferImageCommand) String() string {
} }
// Exec executes a newScreenFramebufferImageCommand. // Exec executes a newScreenFramebufferImageCommand.
func (c *newScreenFramebufferImageCommand) Exec(indexOffset int) error { func (c *newScreenFramebufferImageCommand) Exec(indexOffset int, graphicsDriver graphicsdriver.Graphics) error {
var err error var err error
c.result.image, err = graphicsDriver().NewScreenFramebufferImage(c.width, c.height) c.result.image, err = graphicsDriver.NewScreenFramebufferImage(c.width, c.height)
return err return err
} }
@ -685,9 +685,9 @@ func (c *newShaderCommand) String() string {
} }
// Exec executes a newShaderCommand. // Exec executes a newShaderCommand.
func (c *newShaderCommand) Exec(indexOffset int) error { func (c *newShaderCommand) Exec(indexOffset int, graphicsDriver graphicsdriver.Graphics) error {
var err error var err error
c.result.shader, err = graphicsDriver().NewShader(c.ir) c.result.shader, err = graphicsDriver.NewShader(c.ir)
return err return err
} }

View File

@ -174,7 +174,7 @@ func (i *Image) ReadPixels(buf []byte) error {
result: buf, result: buf,
} }
theCommandQueue.Enqueue(c) theCommandQueue.Enqueue(c)
if err := theCommandQueue.Flush(); err != nil { if err := theCommandQueue.Flush(graphicsDriver()); err != nil {
return err return err
} }
return nil return nil