package main import ( rl "github.com/gen2brain/raylib-go/raylib" "log" ) type RaylibBuffer struct { Data []rl.Color Image *rl.Image Texture rl.Texture2D Width uint Height uint } func NewRaylibBuffer(width uint, height uint) *RaylibBuffer { log.Printf("Creating new raylib framebuffer using texture + image") //rl.NewTexture2D(1, Width, Height, 0, ) rlimage := rl.GenImageColor(int(width), int(height), rl.Black) rl.ImageFormat(rlimage, rl.UncompressedR8g8b8a8) log.Printf("Generated baseline image: %v", rlimage) rltexture := rl.LoadTextureFromImage(rlimage) log.Printf("Generated texture from image") data := rl.LoadImageColors(rlimage) log.Printf("Generated pixel data from image") return &RaylibBuffer{ Data: data, Image: rlimage, Texture: rltexture, Width: width, Height: height, } } func (fb *RaylibBuffer) Dims() (uint, uint) { return fb.Width, fb.Height } // Sure hope this gets inlined... func (fb *RaylibBuffer) Set(x uint, y uint, r byte, g byte, b byte) { // if x >= fb.Width || y >= fb.Height { // return // } // fb.Data[x+y*fb.Width].R = r // fb.Data[x+y*fb.Width].G = g // fb.Data[x+y*fb.Width].B = b c := &fb.Data[x+y*fb.Width] c.R = r c.G = g c.B = b } func (fb *RaylibBuffer) Get(x uint, y uint) (byte, byte, byte) { if x >= fb.Width || y >= fb.Height { return 0, 0, 0 } return fb.Data[x+y*fb.Width].R, fb.Data[x+y*fb.Width].G, fb.Data[x+y*fb.Width].B } func (fb *RaylibBuffer) GetUv(u float32, v float32) (byte, byte, byte) { x := uint(float32(fb.Width)*u) & (fb.Width - 1) y := uint(float32(fb.Height)*(1-v)) & (fb.Height - 1) c := &fb.Data[x+y*fb.Width] return c.R, c.G, c.B // fb.Data[x+y*fb.Width].R, // fb.Data[x+y*fb.Width].G, // fb.Data[x+y*fb.Width].B }