65 lines
1.6 KiB
Go
65 lines
1.6 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(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
|
||
|
}
|
||
|
|
||
|
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
|
||
|
}
|