Skip to content

Instantly share code, notes, and snippets.

@akiross
Created November 1, 2018 14:17
Show Gist options
  • Save akiross/6f70509db355707d291f82ca64c1e4a0 to your computer and use it in GitHub Desktop.
Save akiross/6f70509db355707d291f82ca64c1e4a0 to your computer and use it in GitHub Desktop.
sdl surface as drawable image
type Surface sdl.Surface
func (s *Surface) ColorModel() color.Model {
switch s.Format.Format {
case sdl.PIXELFORMAT_ARGB8888, sdl.PIXELFORMAT_ABGR8888:
return color.RGBAModel
case sdl.PIXELFORMAT_RGB888:
return color.RGBAModel
default:
panic("Not implemented yet")
}
}
func (s *Surface) Bounds() image.Rectangle {
return image.Rect(0, 0, int(s.W), int(s.H))
}
func (s *Surface) At(x, y int) color.Color {
pix := (*sdl.Surface)(s).Pixels()
i := int32(y)*s.Pitch + int32(x)*int32(s.Format.BytesPerPixel)
switch s.Format.Format {
/*
case sdl.PIXELFORMAT_ARGB8888:
return color.RGBA{pix[i+3], pix[i], pix[i+1], pix[i+2]}
case sdl.PIXELFORMAT_ABGR8888:
return color.RGBA{pix[i], pix[i+3], pix[i+2], pix[i+1]}
*/
case sdl.PIXELFORMAT_RGB888:
return color.RGBA{pix[i], pix[i+1], pix[i+2], 0xff}
default:
panic("Not implemented yet")
}
}
func (s *Surface) Set(x, y int, c color.Color) {
pix := (*sdl.Surface)(s).Pixels()
i := int32(y)*s.Pitch + int32(x)*int32(s.Format.BytesPerPixel)
switch s.Format.Format {
case sdl.PIXELFORMAT_ARGB8888:
col := s.ColorModel().Convert(c).(color.RGBA)
pix[i+0] = col.R
pix[i+1] = col.G
pix[i+2] = col.B
pix[i+3] = col.A
case sdl.PIXELFORMAT_ABGR8888:
col := s.ColorModel().Convert(c).(color.RGBA)
pix[i+3] = col.R
pix[i+2] = col.G
pix[i+1] = col.B
pix[i+0] = col.A
case sdl.PIXELFORMAT_RGB24, sdl.PIXELFORMAT_RGB888:
col := s.ColorModel().Convert(c).(color.RGBA)
pix[i+0] = col.B
pix[i+1] = col.G
pix[i+2] = col.R
case sdl.PIXELFORMAT_BGR24, sdl.PIXELFORMAT_BGR888:
col := s.ColorModel().Convert(c).(color.RGBA)
pix[i+2] = col.R
pix[i+1] = col.G
pix[i+0] = col.B
default:
panic("Unknown pixel format!")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment