Skip to content

Instantly share code, notes, and snippets.

@telecoda
Created August 2, 2017 12:43
Show Gist options
  • Select an option

  • Save telecoda/31d6852b457c241236ad4ae0e97eb1df to your computer and use it in GitHub Desktop.

Select an option

Save telecoda/31d6852b457c241236ad4ae0e97eb1df to your computer and use it in GitHub Desktop.
8 bit pixel example with Ebiten
package main
import (
"fmt"
"image"
"image/color"
"image/draw"
"log"
"github.com/fogleman/gg"
"github.com/hajimehoshi/ebiten"
"github.com/hajimehoshi/ebiten/ebitenutil"
)
const (
screenWidth = 128
screenHeight = 128
)
var (
drawImage *image.RGBA
gc *gg.Context
)
func update(screen *ebiten.Image) error {
if ebiten.IsRunningSlowly() {
return nil
}
screen.ReplacePixels(drawImage.Pix)
ebitenutil.DebugPrint(screen, fmt.Sprintf("FPS: %f", ebiten.CurrentFPS()))
return nil
}
func main() {
drawImage = image.NewRGBA(image.Rect(0, 0, screenWidth, screenHeight))
rect := image.Rect(0, 0, screenWidth, screenHeight)
// 2 colour palette (black/red)
palette := color.Palette{
color.RGBA{0, 0, 0, 0},
color.RGBA{255, 0, 0, 255},
}
paletteImage := image.NewPaletted(rect, palette)
gc = gg.NewContextForImage(drawImage)
gc.SetRGB(0, 0, 0)
gc.SetRGBA(1, 0, 0, 1)
gc.SetLineWidth(1)
gc.DrawLine(20, 20, 80, 60)
gc.Stroke()
// draw onto palette
draw.Draw(paletteImage, rect, gc.Image(), rect.Bounds().Min, draw.Over)
// draw back again
draw.Draw(drawImage, rect, paletteImage, rect.Bounds().Min, draw.Over)
scale := float64(800 / screenWidth)
if err := ebiten.Run(update, screenWidth, screenHeight, scale, "EightBit (Ebiten Demo)"); err != nil {
log.Fatal(err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment