61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
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(Width, 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,
|
|
}
|
|
}
|
|
|
|
// 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
|
|
}
|
|
|
|
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)
|
|
return fb.Data[x+y*fb.Width].R,
|
|
fb.Data[x+y*fb.Width].G,
|
|
fb.Data[x+y*fb.Width].B
|
|
}
|