monogame: Implement drawing screens

Updates #1078
This commit is contained in:
Hajime Hoshi 2020-04-06 01:51:02 +09:00
parent 7dd9150b86
commit 7f64043ba5
4 changed files with 48 additions and 8 deletions

View File

@ -69,6 +69,7 @@ func (g *Graphics) NewImage(width, height int) (driver.Image, error) {
func (g *Graphics) NewScreenFramebufferImage(width, height int) (driver.Image, error) { func (g *Graphics) NewScreenFramebufferImage(width, height int) (driver.Image, error) {
return &Image{ return &Image{
v: &screen{game: g.game},
g: g, g: g,
width: width, width: width,
height: height, height: height,
@ -108,3 +109,23 @@ func (g *Graphics) MaxImageSize() int {
// TODO: Implement this // TODO: Implement this
return 4096 return 4096
} }
type screen struct {
game *monogame.Game
}
func (s *screen) SetAsDestination() {
s.game.ResetDestination()
}
func (s *screen) SetAsSource() {
panic("monogame: SetAsSource on screen is forbidden")
}
func (s *screen) ReplacePixels(args []*driver.ReplacePixelsArgs) {
panic("monogame: ReplacePixels on screen is forbidden")
}
func (s *screen) Dispose() {
// Do nothing?
}

View File

@ -18,11 +18,17 @@ package monogame
import ( import (
"github.com/hajimehoshi/ebiten/internal/driver" "github.com/hajimehoshi/ebiten/internal/driver"
"github.com/hajimehoshi/ebiten/internal/monogame"
) )
type RenderTarget2D interface {
SetAsDestination()
SetAsSource()
ReplacePixels(args []*driver.ReplacePixelsArgs)
Dispose()
}
type Image struct { type Image struct {
v *monogame.RenderTarget2D v RenderTarget2D
g *Graphics g *Graphics
width int width int
height int height int

View File

@ -110,6 +110,10 @@ func (g *Game) Draw(indexLen int, indexOffset int, mode driver.CompositeMode, co
g.binding.Call("Draw", indexLen, indexOffset) g.binding.Call("Draw", indexLen, indexOffset)
} }
func (g *Game) ResetDestination() {
g.binding.Set("Dst", nil)
}
type RenderTarget2D struct { type RenderTarget2D struct {
v js.Value v js.Value
binding js.Value binding js.Value

View File

@ -23,7 +23,8 @@ import (
) )
type UI struct { type UI struct {
game *monogame.Game game *monogame.Game
context driver.UIContext
} }
var theUI = &UI{} var theUI = &UI{}
@ -32,12 +33,14 @@ func Get() *UI {
return theUI return theUI
} }
func (*UI) Run(context driver.UIContext) error { func (u *UI) Run(context driver.UIContext) error {
g := monogame.NewGame(context) g := monogame.NewGame(context)
defer g.Dispose() defer g.Dispose()
theUI.game = g u.game = g
theUI.Graphics().(*graphics.Graphics).SetGame(g) u.context = context
u.Graphics().(*graphics.Graphics).SetGame(g)
u.updateSize()
g.Run() g.Run()
return nil return nil
} }
@ -56,10 +59,16 @@ func (*UI) IsFocused() bool {
func (*UI) ScreenSizeInFullscreen() (int, int) { func (*UI) ScreenSizeInFullscreen() (int, int) {
// TODO: Implement this // TODO: Implement this
return 0, 0 return 640, 480
} }
func (*UI) ResetForFrame() { func (u *UI) ResetForFrame() {
u.updateSize()
}
func (u *UI) updateSize() {
// TODO: Implement this
u.context.Layout(640, 480)
} }
func (*UI) CursorMode() driver.CursorMode { func (*UI) CursorMode() driver.CursorMode {