3dtrial/renderer1/raybuffer.go

61 lines
1.5 KiB
Go
Raw Permalink Normal View History

package main
import (
rl "github.com/gen2brain/raylib-go/raylib"
2024-07-31 05:02:05 +00:00
"log"
)
type RaylibBuffer struct {
2024-07-31 05:02:05 +00:00
Data []rl.Color
Image *rl.Image
Texture rl.Texture2D
Width uint
Height uint
}
func NewRaylibBuffer(width uint, height uint) *RaylibBuffer {
2024-07-31 05:02:05 +00:00
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{
2024-07-31 05:02:05 +00:00
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
}