mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-02-02 22:14:29 +01:00
graphics: Reduce calls of ui.GLContext()
This commit is contained in:
parent
89fe69d564
commit
375d71e085
@ -79,27 +79,27 @@ func (c *graphicsContext) needsRestoring(context *opengl.Context) (bool, error)
|
|||||||
imageM.Lock()
|
imageM.Lock()
|
||||||
defer imageM.Unlock()
|
defer imageM.Unlock()
|
||||||
// FlushCommands is required because c.offscreen.impl might not have an actual texture.
|
// FlushCommands is required because c.offscreen.impl might not have an actual texture.
|
||||||
if err := graphics.FlushCommands(ui.GLContext()); err != nil {
|
if err := graphics.FlushCommands(context); err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
return c.offscreen.impl.isInvalidated(context), nil
|
return c.offscreen.impl.isInvalidated(context), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *graphicsContext) initializeIfNeeded() error {
|
func (c *graphicsContext) initializeIfNeeded(context *opengl.Context) error {
|
||||||
// glViewport must be called at every frame on iOS
|
// glViewport must be called at every frame on iOS
|
||||||
ui.GLContext().ResetViewportSize()
|
context.ResetViewportSize()
|
||||||
if !c.initialized {
|
if !c.initialized {
|
||||||
if err := graphics.Initialize(ui.GLContext()); err != nil {
|
if err := graphics.Initialize(context); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
c.initialized = true
|
c.initialized = true
|
||||||
}
|
}
|
||||||
r, err := c.needsRestoring(ui.GLContext())
|
r, err := c.needsRestoring(context)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if r {
|
if r {
|
||||||
if err := c.restore(); err != nil {
|
if err := c.restore(context); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -119,21 +119,21 @@ func drawWithFittingScale(dst *Image, src *Image) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *graphicsContext) drawToDefaultRenderTarget() error {
|
func (c *graphicsContext) drawToDefaultRenderTarget(context *opengl.Context) error {
|
||||||
if err := c.screen.Clear(); err != nil {
|
if err := c.screen.Clear(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := drawWithFittingScale(c.screen, c.offscreen2); err != nil {
|
if err := drawWithFittingScale(c.screen, c.offscreen2); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.flush(); err != nil {
|
if err := c.flush(context); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *graphicsContext) UpdateAndDraw() error {
|
func (c *graphicsContext) UpdateAndDraw() error {
|
||||||
if err := c.initializeIfNeeded(); err != nil {
|
if err := c.initializeIfNeeded(ui.GLContext()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.offscreen.Clear(); err != nil {
|
if err := c.offscreen.Clear(); err != nil {
|
||||||
@ -151,7 +151,7 @@ func (c *graphicsContext) UpdateAndDraw() error {
|
|||||||
if err := drawWithFittingScale(c.offscreen2, c.offscreen); err != nil {
|
if err := drawWithFittingScale(c.offscreen2, c.offscreen); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.drawToDefaultRenderTarget(); err != nil {
|
if err := c.drawToDefaultRenderTarget(ui.GLContext()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := theImages.savePixels(ui.GLContext()); err != nil {
|
if err := theImages.savePixels(ui.GLContext()); err != nil {
|
||||||
@ -161,35 +161,35 @@ func (c *graphicsContext) UpdateAndDraw() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *graphicsContext) Draw() error {
|
func (c *graphicsContext) Draw() error {
|
||||||
if err := c.initializeIfNeeded(); err != nil {
|
if err := c.initializeIfNeeded(ui.GLContext()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.drawToDefaultRenderTarget(); err != nil {
|
if err := c.drawToDefaultRenderTarget(ui.GLContext()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *graphicsContext) flush() error {
|
func (c *graphicsContext) flush(context *opengl.Context) error {
|
||||||
// TODO: imageM is necessary to call graphics functions. Move this to graphics package.
|
// TODO: imageM is necessary to call graphics functions. Move this to graphics package.
|
||||||
imageM.Lock()
|
imageM.Lock()
|
||||||
defer imageM.Unlock()
|
defer imageM.Unlock()
|
||||||
if err := graphics.FlushCommands(ui.GLContext()); err != nil {
|
if err := graphics.FlushCommands(context); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// Call glFlush to prevent black flicking (especially on Android (#226) and iOS).
|
// Call glFlush to prevent black flicking (especially on Android (#226) and iOS).
|
||||||
ui.GLContext().Flush()
|
context.Flush()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *graphicsContext) restore() error {
|
func (c *graphicsContext) restore(context *opengl.Context) error {
|
||||||
imageM.Lock()
|
imageM.Lock()
|
||||||
defer imageM.Unlock()
|
defer imageM.Unlock()
|
||||||
ui.GLContext().Resume()
|
context.Resume()
|
||||||
if err := graphics.Initialize(ui.GLContext()); err != nil {
|
if err := graphics.Initialize(context); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := theImages.restorePixels(ui.GLContext()); err != nil {
|
if err := theImages.restorePixels(context); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user