graphics: Move command flushing to ebiten package

This commit is contained in:
Hajime Hoshi 2016-06-11 21:50:13 +09:00
parent dfd4bc89ed
commit b59206b777
3 changed files with 15 additions and 8 deletions

View File

@ -84,6 +84,19 @@ func (c *graphicsContext) Update() error {
if err := c.defaultRenderTarget.DrawImage(c.screen, options); err != nil { if err := c.defaultRenderTarget.DrawImage(c.screen, options); err != nil {
return err return err
} }
if err := c.flush(); err != nil {
return err
}
return nil
}
func (c *graphicsContext) flush() error {
// TODO: imageM is necessary to call graphics functions. Move this to graphics package.
imageM.Lock()
defer imageM.Unlock()
if err := graphics.FlushCommands(ui.GLContext()); err != nil {
return err
}
// Call glFlush to prevent black flicking (especially on Android (#226)). // Call glFlush to prevent black flicking (especially on Android (#226)).
ui.GLContext().Flush() ui.GLContext().Flush()
return nil return nil

View File

@ -261,7 +261,7 @@ func (i *imageImpl) DrawImage(image *Image, options *DrawImageOptions) error {
geom := &options.GeoM geom := &options.GeoM
colorm := &options.ColorM colorm := &options.ColorM
mode := opengl.CompositeMode(options.CompositeMode) mode := opengl.CompositeMode(options.CompositeMode)
if err := i.framebuffer.DrawTexture(ui.GLContext(), image.impl.texture, vertices[:16*n], geom, colorm, mode); err != nil { if err := i.framebuffer.DrawTexture(image.impl.texture, vertices[:16*n], geom, colorm, mode); err != nil {
return err return err
} }
return nil return nil

View File

@ -105,7 +105,7 @@ func (f *Framebuffer) Fill(clr color.Color) error {
return nil return nil
} }
func (f *Framebuffer) DrawTexture(context *opengl.Context, t *Texture, vertices []int16, geo, clr Matrix, mode opengl.CompositeMode) error { func (f *Framebuffer) DrawTexture(t *Texture, vertices []int16, geo, clr Matrix, mode opengl.CompositeMode) error {
c := &drawImageCommand{ c := &drawImageCommand{
dst: f, dst: f,
src: t, src: t,
@ -115,12 +115,6 @@ func (f *Framebuffer) DrawTexture(context *opengl.Context, t *Texture, vertices
mode: mode, mode: mode,
} }
theCommandQueue.Enqueue(c) theCommandQueue.Enqueue(c)
// TODO: Can we move this to graphicscontext.go (again)?
if f.native == opengl.ZeroFramebuffer {
if err := FlushCommands(context); err != nil {
return err
}
}
return nil return nil
} }