Skip to content

Instantly share code, notes, and snippets.

@Zyko0
Created February 15, 2023 18:13
Show Gist options
  • Save Zyko0/16ff408f4e0dce2488597afa651f9ac1 to your computer and use it in GitHub Desktop.
Save Zyko0/16ff408f4e0dce2488597afa651f9ac1 to your computer and use it in GitHub Desktop.
ebiten: Region size changing
package main
import (
"image/color"
"log"
"math/rand"
"github.com/hajimehoshi/ebiten/v2"
)
var (
w, h = 512, 512
s *ebiten.Shader
brush = ebiten.NewImage(w, h)
tex = ebiten.NewImage(w, h)
offscreen = ebiten.NewImage(w, h)
)
func init() {
var err error
s, err = ebiten.NewShader([]byte(`
package main
func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
v := imageSrc0UnsafeAt(texCoord)
_, size := imageSrcRegionOnTexture()
// size = normalize(size) // Note: this shows the same behaviour
if v.g == 0. {
return vec4(size.x, size.y, size.y, 1)
}
return v
}`))
if err != nil {
log.Fatal(err)
}
brush.Fill(color.White)
tex.Fill(color.White)
}
type Game struct {
drawticks uint64
}
func (g *Game) Update() error {
return nil
}
func (g *Game) Draw(screen *ebiten.Image) {
g.drawticks++
if g.drawticks%120 == 0 {
opts := &ebiten.DrawImageOptions{}
opts.GeoM.Scale(1./16, 1./16)
opts.GeoM.Translate(
rand.Float64()*float64(w),
rand.Float64()*float64(h),
)
opts.ColorScale.ScaleWithColor(color.RGBA{255, 0, 255, 255})
tex.DrawImage(brush, opts)
}
// Fill offscreen
screen.DrawRectShader(w, h, s, &ebiten.DrawRectShaderOptions{
Images: [4]*ebiten.Image{
tex,
},
})
}
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {
return w, h
}
func main() {
ebiten.SetFullscreen(false)
ebiten.SetWindowSize(w, h)
if err := ebiten.RunGame(&Game{}); err != nil {
log.Fatal(err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment